验证nginx平滑重载成功需三维度交叉确认:一看worker进程是否更新(新旧共存后旧进程退出、master pid不变),二查error.log是否有“reloading configuration”且无错误日志,三测真实请求不中断(长连接不断、压测零错误)并验证新配置实际生效。

验证 Nginx 平滑重载是否成功,不能只看终端没报错,必须从进程状态、日志行为、真实请求响应三个维度交叉确认。
看 worker 进程是否更新
reload 的本质是新 worker 启动、旧 worker 逐步退出。执行后立即检查:
- 运行 ps aux | grep 'nginx: worker',应看到新旧 worker 短暂共存(例如旧的 4 个 + 新的 4 个)
- 新 worker 的 START 时间应接近你执行 reload 的时刻;旧 worker 启动时间明显更早
- 等待 10–30 秒后再次执行该命令,旧 worker 应已消失,仅剩新 worker
- 主进程(master)PID 必须保持不变,用 cat /run/nginx.pid 前后对比可确认
查 error.log 是否记录关键动作
Nginx 主进程会在 error.log 中留下 reload 的“痕迹”,这是最直接的证据:
- 执行 tail -n 5 /var/log/nginx/error.log
- 正常 reload 会看到类似:reloading configuration 或 reopening logs
- 不应出现 emerg、alert 或 failed to start 等错误级日志
- 若配置有误,error.log 会明确提示语法位置(如 "invalid number of arguments in 'listen' directive")
用 curl 测试连接不中断
真正体现“平滑”的是正在传输的请求不受影响:
- 在 reload 前发起一个长连接请求:curl -H "Connection: keep-alive" http://localhost/ --max-time 30 -N
- 在另一终端立刻执行 sudo nginx -s reload
- 观察第一个 curl 是否完整返回 HTTP 200 和响应体,而非 "Connection reset" 或超时
- 更严谨可用 wrk 持续压测(如 wrk -t4 -c1000 -d120s http://localhost/),reload 期间错误率应为 0
确认新配置已实际生效
reload 成功 ≠ 配置按预期工作,还需验证行为变更:
- 若新增了 add_header X-Config-Version "v2",用 curl -I http://localhost/ 查看响应头是否出现该字段
- 若修改了 rewrite 或 server_name,用 curl -H "Host: test.example.com" http://127.0.0.1 验证路由是否命中
- 若调整了限流规则(如 limit_req zone=api burst=5),需在 reload 后快速发 6 次同 IP 请求,第 6 次应返回 503











