当前位置: 首页 > news >正文

ngx_http_module_t

定义在

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

相关文章:

  • Java调用Oss JDk删除指定目录下的所有文件
  • 【最大异或和——可持久化Trie】
  • 设计模式-桥接模式
  • C语言文件管理详解(上)
  • 下拉菜单+DoTween插件
  • 基于ssm图文印务交互系统小程序(源码+lw+部署文档+讲解),源码可白嫖!
  • Docker 使用指南
  • Django Rest Framework 创建纯净版Django项目部署DRF
  • 每日一题——二叉树的三种中序遍历方法
  • C语言基础要素(017):退出条件循环:do-while
  • Qt 实现波浪填充的圆形进度显示
  • 谈谈 undefined 和 null
  • SAP(第四周)
  • NebulaGraph3.3.0部署与配置
  • 基于运动电商虚拟数据的商业洞察与分析
  • 【Mac】安装 Parallels Desktop、Windows、Rocky Linux
  • Windows 图形显示驱动开发-WDDM 3.0功能- 硬件翻转队列(一)
  • 【Json—RPC框架】:宏定义不受命名空间限制,续行符的错误使用造成的bug
  • 计算机组成原理试题六
  • 正则表达式:贪婪匹配与非贪婪匹配
  • 图集|俄罗斯举行纪念苏联伟大卫国战争胜利80周年阅兵式
  • 中国词学研究会原会长、华东师大教授马兴荣逝世,享年101岁
  • 视频丨雄姿英发!中国仪仗队步入莫斯科红场
  • 习近平出席俄罗斯总统举行的欢迎仪式
  • “20后”比“60后”更容易遭遇极端气候事件
  • 深入贯彻中央八项规定精神学习教育中央第六指导组指导督导中国工商银行见面会召开