定义在
src\http\ngx_http_config.h
- typedef struct {
- ngx_int_t (*preconfiguration)(ngx_conf_t *cf);
- ngx_int_t (*postconfiguration)(ngx_conf_t *cf);
- void *(*create_main_conf)(ngx_conf_t *cf);
- char *(*init_main_conf)(ngx_conf_t *cf, void *conf);
- void *(*create_srv_conf)(ngx_conf_t *cf);
- char *(*merge_srv_conf)(ngx_conf_t *cf, void *prev, void *conf);
- void *(*create_loc_conf)(ngx_conf_t *cf);
- char *(*merge_loc_conf)(ngx_conf_t *cf, void *prev, void *conf);
- } ngx_http_module_t;
复制代码 ngx_http_module_t 是 Nginx HTTP 模块的核心布局体,用于定义模块在设置解析和初始化阶段的行为。
它包含一系列函数指针,每个函数对应模块在不同阶段的处理逻辑。以下是对该布局体及其字段的详细解释:
1. preconfiguration
作用:在解析设置文件之前调用。
功能:用于模块的早期初始化,例如注册变量、添加自定义指令或预处理设置。
参数:ngx_conf_t *cf 是设置解析上下文。
返回值:NGX_OK(成功)或 NGX_ERROR(失败)。
示例:注册 HTTP 方法、添加自定义变量。
2. postconfiguration
作用:在解析设置文件之后调用。
功能:用于设置解析完成后的收尾工作,例如注册处理钩子、合并设置或优化数据布局。
参数:ngx_conf_t *cf 是设置解析上下文。
返回值:NGX_OK 或 NGX_ERROR。
示例:设置请求处理阶段的回调函数(如 ngx_http_handler_pt)。
3. create_main_conf
作用:创建 HTTP 主设置块(对应 http{} 块)的设置布局。
功能:分配内存并初始化主设置布局体(通常包含全局设置)。
参数:ngx_conf_t *cf 是设置解析上下文。
返回值:指向新分配的设置布局指针(如 ngx_http_core_main_conf_t)。
示例:创建存储全局署理设置或缓存设置的布局。
4. init_main_conf
作用:初始化主设置块(http{})的设置。
功能:设置默认值、验证设置合法性或执行依赖检查。
参数:
ngx_conf_t *cf:设置上下文。
void *conf:由 create_main_conf 创建的设置布局。
返回值:NULL(成功)或错误信息字符串(失败)。
示例:检查监听端口是否冲突,或设置默认超时时间。
5. create_srv_conf
作用:创建虚拟主机设置块(对应 server{} 块)的设置布局。
功能:为每个 server{} 块分配内存并初始化设置布局。
参数:ngx_conf_t *cf 是设置解析上下文。
返回值:指向新分配的 server{} 设置布局指针。
示例:创建存储虚拟主机域名、SSL 证书等信息的布局。
6. merge_srv_conf
作用:合并父级(主设置)和子级(当前 server{})的设置。
功能:将父级设置(prev)与子级设置(conf)合并,处理继承关系。
参数:
ngx_conf_t *cf:设置上下文。
void *prev:父级设置(主设置)。
void *conf:当前 server{} 设置。
返回值:NULL(成功)或错误信息字符串(失败)。
示例:继承主设置中的超时设置,除非 server{} 显式覆盖。
7. create_loc_conf
作用:创建位置设置块(对应 location{} 块)的设置布局。
功能:为每个 location{} 块分配内存并初始化设置布局。
参数:ngx_conf_t *cf 是设置解析上下文。
返回值:指向新分配的 location{} 设置布局指针。
示例:创建存储 URI 匹配规则或署理设置的布局。
8. merge_loc_conf
作用:合并父级(外层 location{} 或 server{})和子级(当前 location{})的设置。
功能:处理设置继承,确保嵌套的 location{} 块正确覆盖父级设置。
参数:
ngx_conf_t *cf:设置上下文。
void *prev:父级设置(外层 location{} 或 server{})。
void *conf:当前 location{} 设置。
返回值:NULL(成功)或错误信息字符串(失败)。
示例:合并父级的署理缓冲设置,除非当前 location{} 显式修改。
调用流程
1. 设置解析前:调用 preconfiguration。
2. 解析设置:遍历 http{}、server{}、location{} 块,按需调用 create_main_conf、create_srv_conf、create_loc_conf。
3. 合并设置:在嵌套设置中调用 merge_srv_conf 和 merge_loc_conf。
4. 初始化主设置:调用 init_main_conf。
5. 设置解析后:调用 postconfiguration。
关键点
设置继承:通过 merge 函数实现父级到子级的设置转达。
生命周期:设置布局的内存由 Nginx 管理,通过 ngx_pcalloc 分配。
错误处理:merge 函数返回错误信息字符串时,Nginx 会终止启动并输堕落误。
通过 ngx_http_module_t,Nginx 模块能够机动地参与设置解析、初始化和请求处理的全过程,实现高度可扩展的架构。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |