前言
上一篇文章介绍了event模块的配置结构体的初始化以及模块中的一些初始化函数,比如init_process函数。这些工作都是在服务器启动之前必须完成的。
在介绍event模块的配置结构体初始化时,我们知道event模块的解析是从
events{
}
“events”关键字开始的。也就是说与event模块相关的所有配置项都必须在配置文件的events块中。
本篇博文将开始介绍http模块的初始化操作。相对event模块来说,http模块要复杂的多。无论是从功能,数量还是模块的配置结构体在conf_ctx中的组织上看,都相当复杂。
这篇博文开始遵循之前一篇对event模块的分析方式对http模块展开分析。为了直观分析,我们在最开始先给出HTTP模块在conf_ctx中的组织形式,当然,这种情况下给出的组织形式还是比较粗糙的,后面我们会跟踪http部分配置文件的解析代码,进一步细化这个配置模块的组织形式。
http模块配置结构体组织架构
这个sector我们结合配置文件的形式看一下配置文件中各种形式的http{}块对应的模块配置结构体的组织形式:
http{
....
server{
.....
location {
.....
}
}
}
如上的http配置模式应该是最普遍使用的形式了。很多其他配置形式都是往这个形式上添加server{}块或者location块变成的。
我们下面看一下针对这个http配置块形式的http配置结构体的组织形式:
如上图所示conf_ctx指向的是核心模块创建的配置结构体数组。注意我们这里不关心顺序,因为http模块对应的核心数组创建的配置结构体不一定是在conf_ctx的第二个位置。
从这个图中我们可以直观地看到,对应每一个http块,server块,location块都会创建一个
ngx_http_conf_ctx_t
的结构体。这个结构体具有如下形式:
typedef