nginx配置解析

前篇—数据结构在内存中的映像。

http块内的配置解析,内存配置结构。“加载-发现-解析”。

所有模块配置解析都是由ngx_conf_parse()发起的,先调用ngx_read_token()读取一个配置项,然后调用ngx_conf_handler()来解析配置项。在http模块中,如遇到http指令,调用ngx_http_block()来解析整个http模块的配置。调用ngx_conf_parse()解析指令,配置环境根据ngx_http_block()函数调用的回调函数的结果进行转换。

在http{}对应的ngx_http_core_module的main配置ngx_http_core_main_conf_t中有一个servers存储了http()块下的所有的server结构,主要便于后续merge。


图片来自:http://blog.csdn.net/kai_ding/article/details/40294585

1、http模块的每个层级配置都有一个ngx_http_conf_ctx_t;

2、http块下的server块的ngx_http_conf_ctx_t结构存储在http块对应的ngx_http_conf_ctx_t的main_conf的ngx_http_core模块的ngx_http_core_main_conf_t的servers字段中;

3、每个server的ngx_http_conf_ctx_t内创建srv_conf和loc_conf数组,以解析server{}内的配置,但不需要main_conf数组,main_conf直接指向父配置块的main_conf。


nginx配置指令的创建类似迭代创建ngx_http_conf_ctx_t结构。

1、每个模块的指令按照其作用域不同采用不同的数据结构;作用域为main的指令组织成数据结构ngx_http_..._main_conf_t,作用域为main|srv的指令被组织成数据结构ngx_http_..._srv_conf_ctx_t,作用域为main|srv|conf的指令被组织成数据结构ngx_http_..._conf_ctx_t;

2、对于每个块内的指令解析,如果该指令属于ngx_http_..._main_conf_t,将创建的该结构体存储在ngx_http_conf_ctx_t的main_conf[index]中;如果该指令属于ngx_http_..._srv_conf_ctx_t,那么将创建的该结构体存储在代表该配置块的ngx_http_conf_ctx_t的srv_conf[index]中。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值