nginx -s reload 可实现平滑重启,新 worker 按新配置处理新连接,旧 worker 继续服务完已有连接再退出;执行前必须用 nginx -t 验证语法,否则可能导致服务中断。

用 nginx -s reload 就能实现平滑重启,不中断业务。它不会杀掉正在处理请求的 worker 进程,而是让新进程按新配置接新连接,旧进程继续服务完已有连接再退出。
检查配置是否合法
重启前必须验证配置语法,否则 reload 会失败甚至导致服务异常:
- 运行
nginx -t(默认检测/usr/local/nginx/conf/nginx.conf) - 若配置文件在别处,加
-c参数指定路径,例如:nginx -t -c /etc/nginx/nginx.conf - 看到 syntax is ok 和 test is successful 才表示通过
触发平滑重启
确认配置无误后,执行以下任一方式均可触发平滑 reload:
-
nginx -s reload—— 最常用,Nginx 自带命令,自动定位主进程并发送 SIGHUP -
systemctl reload nginx—— 适用于 systemd 管理的系统(如 CentOS 7+/Ubuntu 16.04+) -
kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)—— 手动发信号,需确保 PID 文件路径正确
验证是否生效
reload 后建议快速确认效果:
- 查看进程:运行
ps aux | grep nginx,应同时存在 master 进程和多个 worker 进程(可能有新旧 worker 共存短暂时间) - 查日志:
tail -f /usr/local/nginx/logs/error.log,无 reload 相关报错即正常 - 测配置:访问一个刚改过的 location 或 upstream,确认行为已按新配置响应
常见误区提醒
几个容易出问题的操作点:
- 别用
service nginx restart或nginx -s stop && nginx—— 这是硬重启,会断连 - 修改了
pid文件路径(如在 nginx.conf 中设pid /run/nginx.pid;),就别硬套默认路径 - reload 失败时,Nginx 不会自动回退,旧配置仍运行;但新配置未加载,需人工排查
nginx -t报错











