文章目录
当 Nginx 检测到 http{…} 这个关键配置项时, HTTP 配置模型就启动了,这时会首先建立一个 ngx_http_conf_ctx_t 结构。以下是 ngx_http_conf_ctx_t 的定义
typedef struce{
/*指针数组,数组中的每个元素指向所有 HTTP 模块 create_main_conf 方法所产生的结构体*/
void **main_conf
/*指针数组,数组中的每个元素指向所有 HTTP 模块 create_srv_conf 方法所产生的结构体*/
void **srv_conf
/*指针数组,数组中的每个元素指向所有 HTTP 模块 create_loc_conf 方法所产生的结构体*/
void **loc_conf
} ngx_http_conf_ctx_t;
这时, HTTP 框架会为所有的 HTTP 模块建立 3 个数组,分别存放所有 HTTP 模块的 create_main_conf, create_srv_conf, create_loc_conf
方法返回的地址指针。当然,如果 HTTP 模块对于配置项不感兴趣,它没有实现 create_main_conf, create_srv_conf, create_loc_conf
等方法,那么数组中相应位置存储的指针是 NULL
。ngx_http_conf_ctx_t 的3个成员 create_main_conf, create_srv_conf, create_loc_conf
分别指向这三个数组。
这样,在 http{…} 块中就通过 1个 ngx_http_conf_ctx_t 结构保存了所有 HTTP 模块的配置数据结构的入口。以后遇到任何 server{…} 块 或者 location{…} 时,也会建立 ngx_http_conf_ctx_t 结构,生成同样的数组来保存所有 HTTP 模块通过 create_main_conf, create_srv_conf, create_loc_conf
等方法返回的指针地址。ngx_http_conf_ctx_t 是了解 http 配置块的基础。
参考
- 《深入理解Nginx》