HTTP框架定义了3个级别的配置:main,srv,loc,分别表示直接出现在http{},server{},location{}块内的配置项。
1.当遇到http{}配置块时,HTTP框架会调用所有HTTP模块的可能实现的create_main_conf,create_srv_conf,create_loa_conf方法生成存储main级别的配置参数的结构体;
2.当遇到server{}配置块时,HTTP框架会调用所有HTTP模块的可能实现的create_srv_conf,create_loa_conf方法生成存储srv级别的配置参数的结构体;
3.当遇到location{}配置块时,HTTP框架会调用所有HTTP模块的可能实现的create_loc_conf方法生成存储loc级别的配置参数的结构体;
每个进程中都有一个唯一的ngx_cycle_t核心结构体,它有一个成员conf_ctx 维护着所有模块的结构体,其类型是void****。conf_ctx意义为首先指向一个成员皆为指针的数组,其中每个成员指针又指向另一个成员皆为指针的数组,第2个子数组中成员指针才会指向各模块生成的配置结构体。
当Nginx检测到http{}这个关键配置项时,HTTP配置模型就启动了,这时会首先建立1个ngx_http_conf_ctx_t结构
这时候HTTP框架会为所有的HTTP模块建立3个数组,分别存放所有HTTP模块的create_main_conf,create_srv_conf,create_loa_conf方法返回的地址指针。