Nginx 启动时 Master 进程负责解析配置、合并结构、初始化资源并创建 Worker 进程,自身不处理请求;其核心流程为“解析→验证→分发→监管”,确保 Worker 获得一致安全的运行环境。

Nginx 启动时,Master 进程负责读取、解析配置文件,并据此初始化资源、创建 Worker 进程,但它本身不处理网络请求。整个流程围绕“解析→验证→分发→监管”展开,核心目标是为 Worker 提供一致、安全、可执行的运行环境。
配置加载与语法解析
Master 进程启动后,首先调用 ngx_conf_parse() 逐行读取配置文件(默认 nginx.conf),按上下文(如 http、server、location)构建内存中的配置树。它不直接执行指令,而是将每条指令映射到预注册的处理函数(如 ngx_http_core_server()),由这些函数校验参数合法性、合并继承关系(如 location 继承 server 的 root)、并填充对应模块的配置结构体(如 ngx_http_core_srv_conf_t)。
若遇到语法错误(如缺少分号、括号不匹配)或语义错误(如 listen 端口已被占用、ssl_certificate 文件不存在),Master 会立即报错退出,不进入后续阶段。
配置合并与结构固化
配置解析完成后,Master 执行配置合并:主配置块(main context)的设置向下覆盖,server 块继承 main,location 块再继承其父 server。例如,root 指令在 http 块中定义后,未显式重写的 server 或 location 将沿用该值。
此时所有模块的配置结构体已完成初始化和合并,形成一份只读的“运行时配置快照”。该快照被复制到每个即将 fork 的 Worker 进程地址空间中,确保各 Worker 行为一致。
资源初始化与 Worker 创建
Master 在 fork Worker 前,预先完成以下工作:
- 打开监听套接字(如 0.0.0.0:80),设置 SO_REUSEPORT(若启用)或通过 accept_mutex 协调竞争
- 初始化共享内存区(shared memory zones),如 limit_req、ssl_session_cache 所需的内存段
- 加载 SSL 证书和私钥(仅 Master 加载一次,Worker 通过 copy-on-write 共享或重新加载)
- 根据 worker_processes 指令确定进程数量,调用 fork() 创建对应数目的 Worker 子进程
每个 Worker 进程获得相同的配置快照和已准备好的监听 socket,但独立运行事件循环,互不阻塞。
Master 的持续监管职责
Worker 启动后,Master 并不退出,而是转入事件循环,监听以下信号并响应:
- SIGHUP:重新加载配置——重新执行上述解析→合并→初始化流程,平滑启动新 Worker,逐步关停旧 Worker(graceful shutdown)
- SIGUSR2:热升级二进制文件——先 fork 新 Master,再由新 Master 启动新 Worker,旧 Master 继续管理旧 Worker 直至其自然退出
- SIGTERM/SIGINT:快速停止——向所有 Worker 发送 SIGTERM,等待其退出后自身退出
- SIGQUIT:优雅停止——向 Worker 发送 SIGQUIT,允许其处理完当前连接再退出
Master 不参与请求处理、日志写入或超时管理,仅作为配置中枢与生命周期控制器存在。






























