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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/35431.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ELK(Elasticsearch、Logstash、Kbana)安装及Spring应用

Elasticsearch安装及Spring应用 一、引言二、基本概念1.索引(Index)2.类型(Type)3.文档(Document)4.分片(Shard)5.副本(Replica) 二、ELK搭建1.创建挂载的文件…

Redis,从数据结构到集群的知识总结

Redis基础部分 2. 数据结构 redis底层使用C语言实现,这里主要分析底层数据结构 2.1 动态字符串(SDS) 由于C底层的字符串数组一旦遇到’\0’就会认为这个字符串数组已经结束,意味着无法存储二进制数据(如图片、音频等)&#xff…

【redis】Jedis 操作 Redis 基础指令(下)

列表操作 lpush/rpush 和 lpop/rpop 将一个或者多个元素从左/右侧放入(头/尾插)到 list 中 依次头插 从 list 左/右侧取出元素(即头/尾删) public static void test1(Jedis jedis) { jedis.flushAll(); long n jedis.lpush(…

基于消失点标定前视相机外参

1. 消失点 艺术家&工程师在纸上表现立体图时,常用一种透视法,这种方法源于人们的视觉经验:近大远小,且平行的直线都消失于无穷远处同一个点。就像我们观察两条平行的铁轨时会觉得他们相交于远处的一点,我们把这个点称为消失点。 图1 铁轨组成的消失点 2. 在标定中的应…

TypeScript接口 interface 高级用法完全解析

TypeScript接口 interface 高级用法完全解析 mindmaproot(TypeScript接口高级应用)基础强化可选属性只读属性函数类型高级类型索引签名继承与合并泛型约束设计模式策略模式工厂模式适配器模式工程实践声明合并类型守卫装饰器集成一、接口核心机制深度解析 1.1 类型兼容性原理 …

Vue3 Pinia $subscribe localStorage的用法 Store的组合式写法

Vue3 Pinia $subscribe 可以用来监视Stroe数据的变化 localStorage的用法 localStorage中只能存字符串,所有对象要选转成json字符串 定义store时,从localStorage中读取数据talkList可能是字符串也可能是空数组 Store的组合式写法 直接使用reactiv…

新版AndroidStudio / IDEA上传项目到Gitee

目录 1.Gitee创建仓库 2.填写仓库的信息 3.创建成功后复制仓库的地址 4.检查AndroidStudio是否配置Git 5.点击测试 6.之后Create Git Repository 7.添加到本地仓库 8.提交项目 9.添加上传仓库的地址 10.上传成功 11.去Gitee上刷新检查 1.Gitee创建仓库 2.填写仓库的…

用 Vue 3.5 TypeScript 重新开发3年前甘特图的核心组件

回顾 3年前曾经用 Vue 2.0 开发了一个甘特图组件,如今3年过去了,计划使用Vue 3.5 TypeScript 把组件重新开发,有机会的话再开发一个React版本。 关于之前的组件以前文章 Vue 2.0 甘特图组件 下面录屏是是 用 Vue 3.5 TypeScript 开发的目前…

C语言【数据结构】:时间复杂度和空间复杂度.详解

引言 详细介绍什么是时间复杂度和空间复杂度。 前言:为什么要学习时间复杂度和空间复杂度 算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时…

Matlab 基于专家pid控制的时滞系统

1、内容简介 Matlab 185-基于专家pid控制的时滞系统 可以交流、咨询、答疑 2、内容说明 略 在处理时滞系统(Time Delay Systems)时,使用传统的PID控制可能会面临挑战,因为时滞会导致系统的不稳定或性能下降。专家PID控制通过结…

MyBatis源码分析のSql执行流程

文章目录 前言一、准备工作1.1、newExecutor 二、执行Sql2.1、getMappedStatement2.2、query 三、Cache装饰器的执行时机四、补充总结 前言 本篇主要介绍MyBatis解析配置文件完成后,执行sql的相关逻辑: public class Main {public static void main(Str…

【MySQL】数据库基础

目录 一、什么是数据库1.1 为什么要有数据库1.2 数据库的本质是什么1.3 在Linux下看一下数据库 二、主流数据库三、基本使用3.1 连接服务器3.2 服务器,数据库,表关系 四、MySQL架构五、SQL分类六、存储引擎6.1 存储引擎是什么6.2 查看存储引擎6.3 存储引…

算是解决可以访问github但无法clone的问题

本文的前提是使用了**且可以正常访问github 查看代理的端口 将其配置到git 首先查看git配置 git config --list然后添加配置,我这边使用的是Hiddfy默认的端口是12334,如果是clash应该是7890 git config --global http.proxy 127.0.0.1:12334其他 删除…

SpringBoot第三站:配置嵌入式服务器使用外置的Servlet容器

目录 1. 配置嵌入式服务器 1.1 如何定制和修改Servlet容器的相关配置 1.server.port8080 2. server.context-path/tx 3. server.tomcat.uri-encodingUTF-8 1.2 注册Servlet三大组件【Servlet,Filter,Listener】 1. servlet 2. filter 3. 监听器…

AdaLoRA 参数 配置:CAUSAL_LM“ 表示因果语言模型任务

AdaLoRA 参数 配置:CAUSAL_LM" 表示因果语言模型任务 config = AdaLoraConfig( init_r=16, # 增加 LoRA 矩阵的初始秩 lora_alpha=32, target_modules=[“q_proj”, “v_proj”], lora_dropout=0.1, bias=“none”, task_type=“CAUSAL_LM” ) 整体功能概述 AdaLoraCon…

IP 协议

文章目录 IP 协议概述数据包格式首部校验和实例分析实例一 分片抓包分析参考 本文为笔者学习以太网对网上资料归纳整理所做的笔记,文末均附有参考链接,如侵权,请联系删除。 IP 协议 概述 IP 协议是 TCP/IP 协议簇中的核心协议,也…

日常开发记录-radioGroup组件

日常开发记录-radioGroup组件 1.前提2.问题&#xff1a;无限循环调用3.解释Vue 事件传播机制分析与无限循环原因解释4.解决 1.前提 在上一章的&#xff0c;我们实现了radio组件。从这进入了解 新增个radioGroup组件呢。 <template><divclass"q-radio-group&quo…

API调用comfyui工作流,做一个自己的app,chatgpt给我写的前端,一键创建自己的卡通形象,附源码

前言 工具介绍 首先 comfyui你是少不了的&#xff0c;这个是工作流的后端支持&#xff0c;用这个去调试工作流和生成API可调用文件 前端我们就用很流行的gradio吧&#xff0c;什么你一时半会没有学gradio的计划&#xff0c;没事&#xff0c;笔者也没系统学过&#xff0c;我干…

【网络】数据流(Data Workflow)Routes(路由)、Controllers(控制器)、Models(模型) 和 Middleware(中间件)

在图片中&#xff0c;数据流&#xff08;Data Workflow&#xff09;描述了应用程序中数据的流动过程&#xff0c;涉及 Routes&#xff08;路由&#xff09;、Controllers&#xff08;控制器&#xff09;、Models&#xff08;模型&#xff09; 和 Middleware&#xff08;中间件&…

【通义千问】蓝耘智算 | 智启未来:蓝耘MaaS×通义QwQ-32B引领AI开发生产力

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能&#xff08;AI&#xff09;通过算法模拟人类智能&#xff0c;利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络&#xff08;如ChatGPT&…