定义在 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` 整合为运行时引擎。