nginx -s reload 可平滑重载配置:主进程先校验语法(等效 nginx -t),通过后 fork 新 worker 加载新配置,旧 worker 停止 accept 新连接但继续处理已有请求,直至自然退出,全程不中断服务。

直接用 nginx -s reload 就能平滑重启,不中断正在处理的请求。核心在于主进程校验配置、启动新 worker、旧 worker 自然退出,整个过程对用户无感。
确认配置文件语法正确
执行 reload 前必须验证配置,否则会失败且旧配置继续运行:
- 运行
nginx -t(默认检查/usr/local/nginx/conf/nginx.conf) - 若配置路径非默认,加
-c参数,例如:nginx -t -c /etc/nginx/nginx.conf - 输出含 syntax is ok 和 test is successful 才表示通过
确保主进程 PID 文件可读
nginx -s reload 需要找到主进程 ID,依赖 pid 文件:
- 默认路径是
/usr/local/nginx/logs/nginx.pid - 如自定义了位置(比如
pid /var/run/nginx.pid;),需确保该路径存在且 Nginx 主进程有写权限 - 若 pid 文件丢失或路径错误,命令会报错:
nginx: [error] open() "/path/to/nginx.pid" failed
执行 reload 并观察行为
语法和路径都 OK 后,运行命令即可触发平滑重载:
- 输入
nginx -s reload(路径非标准时补全,如/usr/local/nginx/sbin/nginx -s reload) - 主进程会立即校验配置(等效于隐式执行
nginx -t) - 校验通过后,fork 新 worker 进程加载新配置;旧 worker 不再 accept 新连接,但继续服务已有请求
- 可通过
ps aux | grep nginx观察新旧 worker 共存一段时间,随后旧进程逐步退出
验证是否生效
reload 完成不代表配置一定按预期工作,建议快速验证:
- 访问一个受新配置影响的接口(如新增的 server_name 或改过的 rewrite 规则)
- 查看 Nginx 错误日志:
tail -f /usr/local/nginx/logs/error.log,确认无 reload 相关报错 - 检查 access 日志里新请求是否已走新规则(比如 User-Agent 过滤、header 添加等)











