ngx_http_core_main_conf_t

定义在 src\http\ngx_http_core_module.h

复制代码
typedef struct {
    ngx_array_t                servers;         /* ngx_http_core_srv_conf_t */

    ngx_http_phase_engine_t    phase_engine;

    ngx_hash_t                 headers_in_hash;

    ngx_hash_t                 variables_hash;

    ngx_array_t                variables;         /* ngx_http_variable_t */
    ngx_array_t                prefix_variables;  /* ngx_http_variable_t */
    ngx_uint_t                 ncaptures;

    ngx_uint_t                 server_names_hash_max_size;
    ngx_uint_t                 server_names_hash_bucket_size;

    ngx_uint_t                 variables_hash_max_size;
    ngx_uint_t                 variables_hash_bucket_size;

    ngx_hash_keys_arrays_t    *variables_keys;

    ngx_array_t               *ports;

    ngx_http_phase_t           phases[NGX_HTTP_LOG_PHASE + 1];
} ngx_http_core_main_conf_t;

**`ngx_http_core_main_conf_t` 结构体是 Nginx HTTP 核心模块的主配置结构体,负责存储全局配置信息和运行时数据。**


**1. `servers`(虚拟主机列表)**

  • **类型**:`ngx_array_t`(元素类型为 `ngx_http_core_srv_conf_t`)

  • **作用**:存储所有 `server{}` 块的配置。

  • **逻辑**:每个 `server{}` 块对应一个虚拟主机配置(`ngx_http_core_srv_conf_t`),通过动态数组管理。

  • **意义**:Nginx 根据请求的 `Host` 头或 IP 地址,从 `servers` 中匹配目标虚拟主机。


**2. `phase_engine`(阶段引擎)**

  • **类型**:`ngx_http_phase_engine_t`

  • **作用**:管理请求处理的阶段引擎。

  • **逻辑**:包含各阶段的处理函数链表(如 `NGX_HTTP_CONTENT_PHASE`),在请求处理时按阶段依次调用。

  • **意义**:实现 Nginx 的多阶段处理流程(如重写、访问控制、内容生成),模块可注册自己的处理函数到特定阶段。


**3. `headers_in_hash`(请求头哈希表)**

  • **类型**:`ngx_hash_t`

  • **作用**:快速查找 HTTP 请求头。

  • **逻辑**:将常用请求头(如 `Host`、`User-Agent`)的名称哈希化,加速请求头解析。

  • **意义**:优化请求头的查找效率,减少字符串比较开销。


**4. `variables_hash`(变量哈希表)**

  • **类型**:`ngx_hash_t`

  • **作用**:存储所有 Nginx 变量(如 `uri\`、\`args`)。

  • **逻辑**:变量名通过哈希表快速定位,值在运行时动态解析。

  • **意义**:支持高效变量访问,用于配置中的条件判断和动态内容生成。


**5. `variables` 和 `prefix_variables`(变量列表)**

  • **类型**:`ngx_array_t`(元素类型为 `ngx_http_variable_t`)

  • **作用**:

  • `variables`:存储所有显式定义的变量(如 `set $var "value"`)。

  • `prefix_variables`:存储前缀变量(如 `arg_\`、\`cookie_`),根据前缀动态生成值。

  • **逻辑**:变量在配置解析时注册到这两个数组中。

  • **意义**:支持变量的动态管理和快速访问。


**6. `ncaptures`(正则捕获组数量)**

  • **类型**:`ngx_uint_t`

  • **作用**:记录正则表达式匹配时的最大捕获组数量。

  • **逻辑**:在解析 `location` 或 `if` 块中的正则表达式时,更新此值。

  • **意义**:确保捕获组索引(如 `$1`、`2`)的合法性,避免越界访问。


**7. `server_names_hash_*`(虚拟主机哈希参数)**

  • **字段**:

  • `server_names_hash_max_size`:哈希表最大容量。

  • `server_names_hash_bucket_size`:哈希表桶大小。

  • **作用**:优化虚拟主机名的查找效率。

  • **逻辑**:根据 `server_name` 配置生成哈希表,参数由 `server_names_hash_*` 指令设置。

  • **意义**:加速基于 `Host` 头的虚拟主机匹配。


**8. `variables_hash_*`(变量哈希参数)**

  • **字段**:

  • `variables_hash_max_size`:变量哈希表最大容量。

  • `variables_hash_bucket_size`:变量哈希表桶大小。

  • **作用**:优化变量查找的哈希表性能。

  • **逻辑**:参数由 `variables_hash_*` 指令配置,影响哈希表的冲突率和内存占用。

  • **意义**:平衡内存使用和变量访问速度。


**9. `variables_keys`(变量键数组)**

  • **类型**:`ngx_hash_keys_arrays_t*`

  • **作用**:辅助构建变量哈希表的键数组。

  • **逻辑**:在配置解析阶段收集所有变量名,生成哈希键列表。

  • **意义**:确保变量哈希表的高效构建和冲突管理。


**10. `ports`(监听端口列表)**

  • **类型**:`ngx_array_t*`

  • **作用**:存储所有监听的端口和地址(如 `listen 80`)。

  • **逻辑**:每个元素为 `ngx_http_conf_port_t`,包含端口、地址和对应的 `server{}` 配置。

  • **意义**:优化请求路由,快速匹配监听套接字。


**11. `phases`(处理阶段数组)**

  • **类型**:`ngx_http_phase_t[NGX_HTTP_LOG_PHASE + 1]`

  • **作用**:存储每个处理阶段的配置。

  • **逻辑**:数组索引为阶段类型(如 `NGX_HTTP_CONTENT_PHASE`),每个元素包含该阶段的处理函数链。

  • **意义**:在配置解析时收集各模块的处理函数,最终由 `phase_engine` 整合为运行时引擎。

相关推荐
tingting011915 小时前
k8s 1.30 安装ingress-nginx
nginx·容器·kubernetes
残花月伴15 小时前
linux详细安装/配置(mysql/nginx/tomcat)
linux·mysql·nginx
Cloud_.19 小时前
用Nginx实现负载均衡与高可用架构(整合Keepalived)
nginx·架构·负载均衡·keepalived
Shi_haoliu20 小时前
各种网址整理-vue,前端,linux,ai前端开发,各种开发能用到的网址和一些有用的博客
linux·前端·javascript·vue.js·nginx·前端框架·pdf
LYX36931 天前
nginx https配置
运维·nginx
java搬砖工-苤-初心不变1 天前
关于 Nginx 配置中 proxy_set_header Host $host 的作用及其对 HTTP 请求头影响的详细说明,结合示例展示设置前后的差异
网络·nginx·http
裁二尺秋风1 天前
Nginx — Nginx处理Web请求机制解析
前端·nginx
Kendra9192 天前
Keepalive+LVS+Nginx+NFS高可用架构
nginx·架构·lvs
开发小能手-roy2 天前
Ubuntu 系统中安装 Nginx
数据库·nginx·ubuntu