nginx -s reload 是信号驱动的平滑重载机制:主进程先校验新配置语法,通过后加载新配置并 fork 新 worker 进程,旧 worker 停止 accept 新连接但继续处理已有请求,直至自然退出。

nginx -s reload 是 Nginx 提供的平滑重载配置命令,它不会中断正在处理的请求,新连接会使用更新后的配置,老连接继续用旧配置直到自然结束。
reload 的工作原理
Nginx 主进程收到 reload 信号后,会做以下几件事:
- 校验新配置文件语法是否正确(
nginx -t的逻辑) - 若通过,则 fork 出新的 worker 进程,加载并运行新配置
- 旧的 worker 进程不再接受新连接,但继续处理已建立的连接和未完成的请求
- 当旧 worker 进程处理完所有请求后,自动退出
执行 reload 的标准步骤
为确保安全可靠,建议按顺序操作:
- 先运行
nginx -t检查配置语法和路径有效性 - 确认无误后,执行
nginx -s reload(需有权限向主进程发信号) - 检查日志(如
/var/log/nginx/error.log)确认 reload 成功,无 warning 或 error - 可选:用
ps aux | grep nginx观察 worker 进程是否已更新(PID 变化、启动时间刷新)
常见问题与注意事项
虽然 reload 设计为“不中断”,但实际中仍需注意:
- 如果配置中修改了监听地址、端口或 SSL 证书路径,且旧配置的监听资源被释放失败,可能导致部分连接异常
- 某些模块(如第三方动态模块)不完全支持热重载,可能需要重启
- reload 失败时,Nginx 会保持旧配置运行,但主进程可能记录错误,务必查看 error.log
- 不要直接 kill 或 kill -9 worker 进程,这会强制中断连接;reload 是唯一推荐的配置更新方式
配合 systemd 使用 reload
在现代 Linux 发行版中,更推荐用 systemd 管理:
-
sudo systemctl reload nginx—— 等价于nginx -s reload,且能自动检查配置 -
sudo systemctl daemon-reload仅在修改了 nginx.service 文件后才需要,和 reload 配置无关 - 可通过
systemctl status nginx查看最近 reload 是否成功











