ngx_http_module_t

打印 上一主题 下一主题

主题 1001|帖子 1001|积分 3003

定义在

src\http\ngx_http_config.h 

  1. typedef struct {
  2.     ngx_int_t   (*preconfiguration)(ngx_conf_t *cf);
  3.     ngx_int_t   (*postconfiguration)(ngx_conf_t *cf);
  4.     void       *(*create_main_conf)(ngx_conf_t *cf);
  5.     char       *(*init_main_conf)(ngx_conf_t *cf, void *conf);
  6.     void       *(*create_srv_conf)(ngx_conf_t *cf);
  7.     char       *(*merge_srv_conf)(ngx_conf_t *cf, void *prev, void *conf);
  8.     void       *(*create_loc_conf)(ngx_conf_t *cf);
  9.     char       *(*merge_loc_conf)(ngx_conf_t *cf, void *prev, void *conf);
  10. } 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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

郭卫东

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表