nginx的master进程是平滑重启的核心控制者,它不重启自身,而是通过信号协同、socket复用和生命周期管理,实现新旧worker并存切换:校验配置后fork新worker并发送quit信号使旧worker停止accept但继续处理已有请求,共享监听socket保障连接不中断。

Nginx 的 Master 进程是平滑重启得以实现的核心控制者,它不靠“重启自己”,而是通过信号协同、进程生命周期管理和 socket 资源复用,让服务始终在线。
Master 进程校验并加载新配置
收到 SIGHUP(如 nginx -s reload)后,Master 不会终止自身,而是:
- 重新读取
nginx.conf及所有include的配置文件 - 执行完整语法和语义检查(端口是否被占用、证书路径是否存在、用户权限是否足够等)
- 若任一环节失败,直接报错退出 reload 流程,旧 Worker 继续运行,服务不受影响
Master 协调新旧 Worker 并存与切换
校验通过后,Master 启动新 Worker,并控制旧 Worker 逐步退出:
- fork 出一批新 Worker 进程,使用新配置初始化,但不立即接管全部流量
- 向旧 Worker 发送
QUIT信号,使其进入优雅退出状态:停止 accept 新连接,但继续处理已建立的请求(含长连接、上传中、响应未发完等) - 新旧 Worker 共享监听 socket(通过
SO_REUSEPORT或内核级句柄继承),客户端新建连接自然落到新 Worker,已有连接仍由旧 Worker 完成
Master 管理进程状态与异常兜底
整个过程 Master 始终保有全局控制权:
- 新 Worker 启动失败时,Master 不杀旧 Worker,仅记录 error.log 中的错误,保障服务连续
- 旧 Worker 退出后,Master 将其从内部进程表移除;新 Worker PID 全部刷新,但 Master 自身 PID 保持不变
- 可配置
worker_shutdown_timeout 10s;设定最大等待时间,超时后强制关闭残留连接,避免无限挂起
验证 Master 是否完成调度的关键指标
-
ps aux | grep nginx显示 master + 多个 worker,且无孤立进程 -
ps -eo pid,comm,lstart | grep nginx中新 worker 启动时间接近 reload 时间点 -
nginx -T输出确认新配置已生效,curl -I验证业务逻辑变更即时响应 -
tail -f /var/log/nginx/error.log出现reloading configuration和后续exiting日志,无bind() failed类报错
本质上,Master 的作用不是“重启”,而是“调度”——它把一次配置变更,转化为可控的进程替换和连接过渡。只要配置正确、系统支持 socket 复用、权限和路径无误,这个机制就天然可靠。











