ngx_http_module_t

发布于:2025-03-19 ⋅ 阅读:(13) ⋅ 点赞:(0)

定义在

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 模块能够灵活地参与配置解析、初始化和请求处理的全过程,实现高度可扩展的架构。


网站公告

今日签到

点亮在社区的每一天
去签到