启动后会读取配置文件
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() }
} }
|