nginx master进程启动时负责全局协调与worker生命周期管理,依次完成环境初始化、配置加载、进程通信准备及worker派生。

Nginx 的 Master 进程在启动时并不直接处理请求,而是负责全局协调、资源管理与 Worker 进程生命周期控制。它的初始化发生在 main() 函数调用 ngx_master_process_cycle() 之前和过程中,是一系列关键准备工作的集合,核心目标是为多进程模型打下可靠基础。
基础环境与运行上下文初始化
Master 进程启动前,Nginx 已完成一系列底层准备,这些虽由 main() 触发,但属于 Master 正式履职的前提:
- 解析命令行参数(如
-c、-p、-t),设置全局开关标志 - 初始化日志系统(
ngx_log_init),确保后续所有输出可追溯 - 缓存当前时间(
ngx_time_init),供日志、HTTP 头部等使用 - 创建初始内存池(
ngx_create_pool),用于暂存配置解析等中间数据 - 保存原始命令行参数到全局变量(
ngx_save_argv),便于热升级时复用 - 读取并校验配置文件路径,初始化
ngx_cycle_t结构体——这是整个 Nginx 运行时的核心上下文
配置加载与模块初始化
Master 进程会驱动完整的配置解析流程,为所有模块建立运行基础:
- 调用
ngx_init_cycle():重新构建完整的 cycle 上下文,包括新内存池、模块配置容器、监听地址数组等 - 遍历所有已编译模块(
ngx_modules),为其分配唯一 index,并调用各模块的create_main_conf和init_main_conf回调 - 解析
events、http等顶层块,生成监听 socket 列表(cycle->listening),但此时 socket 尚未真正 bind/listen - 完成配置合并(main → http → server → location 层级),确保每个模块拿到最终生效的配置项
进程结构与通信机制准备
Master 需要具备管理多个 Worker 的能力,因此必须提前建立进程间协作基础设施:
- 初始化进程数组
ngx_processes,为每个潜在 Worker 预留槽位 - 为每个 Worker 进程创建一对 Unix domain socket(channel),用于异步通信(如 reload、quit 指令)
- 注册信号处理器(
ngx_init_signals),重点捕获SIGCHLD(子进程退出)、SIGHUP(重载配置)、SIGUSR2(平滑升级)等 - 创建 PID 文件(
ngx_create_pidfile),记录自身进程 ID,供外部管理工具识别
Worker 进程派生与状态同步
Master 初始化的最后一步,是启动并协调实际工作的 Worker 子进程:
- 根据
worker_processes配置值,循环调用ngx_spawn_process创建指定数量的子进程 - 每个子进程继承父进程的部分资源(如已打开的监听 socket),但执行独立入口函数
ngx_worker_process_cycle - 每创建一个 Worker,Master 立即通过 channel 向所有已有 Worker 广播
NGX_CMD_OPEN_CHANNEL,同步新进程 PID、slot 和通信 fd - 进入主循环(
for(;;)),挂起等待信号(sigsuspend),响应外部指令并维护 Worker 健康状态(如崩溃后自动拉起)











