Nginx在内存中的数据结构, 还只是部分, 后续完善
Nginx配置文件解析匹配过程:
匹配解析过程是分层次的, 先比较配置项名字, 在比较模块类型(这些选项不在配置文件中, 而是在module的配置中和block解析函数中硬编码)是否相同; 再解析配置的指令是否存在,和模块类型类是,也是硬编码的.
ngx_conf_handler:
1. 首先判断名称是否相同:(len + name);
2. 判断模块类型是否相同(ngx_modules[i]->type和ngx_conf_s->module_type): 在解析某模块时会在ngx_conf_s->module_type赋相应的值如:
nginx_init_cycle: NGX_CORE_MODULE
ngx_http_block: NGX_HTTP_MODULE
ngx_events_block: NGX_EVENT_MODULE
ngx_mail_block: NGX_MAIL_MODULE
3. 最后判断command(ngx_modules[i]->commands->type)中是否配置了这个module相应的指令:
ngx_init_cycle: conf.cmd_type = NGX_MAIN_CONF
ngx_events_block: cf->cmd_type = NGX_EVENT_CONF
ngx_http_block: cf->cmd_type = NGX_HTTP_MAIN_CONF
ngx_http_core_server: cf->cmd_type = NGX_HTTP_SRV_CONF
ngx_http_core_location: cf->cmd_type = NGX_HTTP_LOC_CONF
ngx_http_core_limit_except: cf->cmd_type = NGX_HTTP_LMT_CONF
ngx_http_upstream: cf->cmd_type = NGX_HTTP_UPS_CONF
ngx_mail_block: cf->cmd_type = NGX_MAIL_MAIN_CONF
ngx_mail_core_server: cf->cmd_type = NGX_MAIL_SRV_CONF