apisix源码分析-配置文件(2)

apisix源码分析-配置文件(2)

启动后会读取配置文件

apisix/core/profile.lua

配置文件放在 apisix_home/conf 下。

在执行读取配置文件会使用一个 os.getenv(“APISIX_PROFILE“) 来决定读取哪个配置文件

比如设置了 APISIX_PROFILE = dev

读取的配置文件为 apisix_home/conf/-dev

配置文件会读取 yaml 文件后,转换成 lua 里的 table 对象,通过 scheme 来校验。

scheme

core/scheme.lua

所有的传入的参数验证都会通过 scheme 来进行校验:

  • 读取配置文件校验
  • admin api 写入 etcd 的配置校验。
  • 插件配置校验。

这里用到了 jsonscheme 的 lua 库对参数进行校验,在 scheme_def.lua 中能够找到所有 apisix 的配置验证模版。插件的验证模版在每个插件中。

scheme 是一个非常棒的设计,用约定的方式定义了输入的数据,对数据数据做 scheme 的校验.保证输入输出的正确性.

主配置文件的生成

apisix 的 nginx.conf 配置是由 cli/ngx_tpl.lua 生成的,tpl 文件和上面读取到的 conf 中得到的配置文件做变量替换后得到具体的 nginx.conf 文件.

以下是和 http 有关的阶段配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
	 upstream apisix_backend {
server 0.0.0.1;

balancer_by_lua_block {
apisix.http_balancer_phase()
}

keepalive 320;
keepalive_requests 1000;
keepalive_timeout 60s;
}


init_by_lua_block {
require "resty.core"
apisix = require("apisix")

local dns_resolver = { "127.0.0.11", }
local args = {
dns_resolver = dns_resolver,
}
apisix.http_init(args)
}

init_worker_by_lua_block {
apisix.http_init_worker()
}

exit_worker_by_lua_block {
apisix.http_exit_worker()
}
server {
ssl_certificate_by_lua_block {
apisix.http_ssl_phase()
}
access_by_lua_block {
apisix.http_access_phase()
}

proxy_pass $upstream_scheme://apisix_backend$upstream_uri;

mirror /proxy_mirror;

header_filter_by_lua_block {
apisix.http_header_filter_phase()
}

body_filter_by_lua_block {
apisix.http_body_filter_phase()
}

log_by_lua_block {
apisix.http_log_phase()
}

}
}

apisix源码分析-配置文件(2)

https://beixiu.net/apisix-source-2/

作者

张巍

发布于

2023-08-17

更新于

2023-08-17

许可协议

评论