Nginx 主进程收到 SIGHUP 信号后,先校验配置语法与资源权限,通过则 fork 新 Worker 加载新配置并 accept 新连接,旧 Worker 处理完已有连接后优雅退出,全程不中断服务、不丢请求。

在 Nginx 中,向主进程发送 SIGHUP 信号是实现配置热重载(即“无中断 reload”)的标准方式。它会触发 Nginx 主进程重新读取配置文件、启动新的工作进程,并平滑地关闭旧工作进程,整个过程不中断正在处理的请求。
确认 Nginx 主进程 PID
Nginx 主进程(master process)的 PID 通常保存在 /var/run/nginx.pid 文件中(路径可能因安装方式或配置而异,比如编译安装时可能在 /usr/local/nginx/logs/nginx.pid)。可通过以下命令查看:
cat /var/run/nginx.pid- 或使用
ps aux | grep "nginx: master"手动查找 PID
发送 SIGHUP 信号
使用 kill 命令向主进程 PID 发送 HUP 信号:
kill -HUP $(cat /var/run/nginx.pid)- 等价写法:
kill -s HUP或kill -1
注意:必须对主进程(而非 worker 进程)发送信号;若使用 systemd 管理,推荐用更安全的方式(见下一条)。
推荐方式:使用 nginx -s reload(封装版)
这是最常用且安全的做法,Nginx 自带的控制命令会自动定位主进程并发送 SIGHUP:
-
nginx -s reload—— 要求配置语法正确,否则会失败 - 执行前建议先检查配置:
nginx -t(验证语法 + 加载配置) - 如果 Nginx 不在
$PATH中,需指定完整路径,如/usr/sbin/nginx -s reload
systemd 环境下的正确 reload
若系统使用 systemd(主流发行版默认),应优先使用服务管理命令:
-
sudo systemctl reload nginx—— 安全、兼容性强,自动处理 PID 和权限 -
sudo systemctl restart nginx是重启(有短暂中断),不是 reload,请勿混淆
该命令底层仍调用 nginx -s reload 或直接发信号,但由 systemd 统一管控生命周期和日志。
不复杂但容易忽略:确保配置文件修改后执行 nginx -t 再 reload,避免因语法错误导致服务不可用。











