直接向 nginx master 进程发送 kill -hup 信号可实现配置热加载,不中断已有 tcp 连接;需通过 pid 文件或 ps 命令准确定位 master 进程,执行后新 worker 加载新配置处理新连接,旧 worker 继续服务已有连接,可通过进程状态、错误日志和连通性三方面验证。

直接向 Nginx 主进程(master process)发送 kill -HUP 信号,就能触发配置热加载,整个过程不中断任何已有 TCP 连接,客户端完全无感知。
确认并获取 Master 进程 PID
只有 master 进程能响应 HUP 信号,worker 进程忽略该信号。必须确保拿到的是 master 的 PID,不是任意 nginx 进程。
- 最常用方式:读取 PID 文件,如
cat /var/run/nginx.pid(路径可能为/usr/local/nginx/logs/nginx.pid,依安装方式而定) - 辅助验证方式:执行
ps aux | grep "nginx: master",确认输出中带 master process 字样且 UID 通常为 root - 注意权限:若 nginx 由非 root 用户启动(如普通用户测试环境),需以相同用户身份执行 kill,否则会被拒绝
发送 HUP 信号并理解其行为
执行后,master 不退出、不重建监听套接字,而是启动新 worker 并协调新旧进程共存。
- 标准命令:
kill -HUP $(cat /var/run/nginx.pid) - 等效写法:
kill -1 $(cat /var/run/nginx.pid) - 新 worker 启动后立即用新配置处理新连接(如新请求、新 keep-alive 连接)
- 旧 worker 继续服务已建立的连接(含长轮询、大文件上传、空闲 keep-alive),直到自然关闭或超时退出
快速验证热加载是否成功
三方面交叉检查,比单看日志更可靠:
-
进程状态:运行
ps aux | grep nginx,应看到 master PID 不变,同时出现一批新 PID 的 worker 进程(旧 worker 会逐渐消失) -
错误日志:查看
/var/log/nginx/error.log,成功时有reloading configuration记录;若报错(如语法错误、证书不可读),master 不会启动新 worker,且保留旧配置继续运行 -
连接连通性:用
ss -tn state established | grep :80或持续curl -v http://your-site/测试,已建立连接不断开,新请求按新配置生效(例如改了return 200 "new";应立刻返回新内容)
注意事项与避坑点
看似简单,但几个细节出错就会导致“假重载”或意外中断:
- 不要对 worker 进程发 HUP —— 它只对 master 有效,误操作可能让某个 worker 异常退出,影响局部流量
- 务必先执行
nginx -t校验配置语法,避免 reload 失败却不自知 - 若使用 systemd 管理,优先用
systemctl reload nginx,它自动校验、处理 PID 路径、兼容不同安装布局 - 修改
worker_processes、keepalive_timeout等参数时,新值仅对新连接生效,旧连接维持原有设置不变











