Nginx 启停重载需通过 master 进程控制 worker:启动前用 nginx -t 验证配置,推荐 nginx -s 信号或 systemctl 操作;停止分 quit(优雅)和 stop(强制);重载用 nginx -s reload 实现平滑更新。

启动、停止和重载 Nginx 本质是通过 nginx 主进程(master process) 控制工作进程(worker processes)的行为。直接用 kill 或 systemctl 操作需谨慎,推荐优先使用 nginx -s 信号指令或 systemctl(若已配置 systemd 单元),避免残留进程或配置未生效。
启动 Nginx:检查配置后运行
启动前务必验证配置语法是否正确,否则 Nginx 可能静默失败:
-
检查配置:
nginx -t(显示配置文件路径与语法结果) -
指定配置文件启动(如非默认路径):
nginx -c /etc/nginx/nginx.conf -
后台启动(默认行为):
nginx(等价于nginx -c /etc/nginx/nginx.conf) -
前台调试模式启动(便于查看错误日志):
nginx -g "daemon off;"
注意:若端口被占用(如 80/443 已被其他服务监听),启动会失败,nginx -t 不会报错,需结合 netstat -tuln | grep :80 排查。
停止 Nginx:优雅关闭 vs 强制终止
Nginx 提供两种停止方式,区别在于是否等待请求完成:
-
优雅停止(推荐):
nginx -s quit向 master 进程发送QUIT信号,master 等待所有 worker 处理完当前请求后退出,不接受新连接。 -
快速停止(立即终止):
nginx -s stop发送TERM信号,master 立即终止自身及所有 worker,正在处理的请求可能中断。 -
强制杀死全部 nginx 进程(慎用):
pkill nginx或killall nginx绕过 master 控制,易导致 pid 文件残留、日志不完整等问题。
执行后可用 ps aux | grep nginx 确认进程是否清空;若仍存在,检查 pid 文件位置(通常在 /var/run/nginx.pid)并手动清理后再启动。
重载配置:平滑更新不中断服务
修改配置后无需停机,用重载实现零停机更新:
-
标准重载流程:
nginx -t && nginx -s reload先验证配置,成功后再发HUP信号给 master;master 会启动新 worker,逐步关闭旧 worker。 - reload 实际行为: • 新 worker 使用新配置监听端口; • 旧 worker 继续处理已有连接,完成后自动退出; • 若新配置有误,reload 失败,旧 worker 保持运行。
-
常见失败原因:端口冲突、SSL 证书路径错误、include 的子配置缺失、语法错误漏检(如注释符号写成
#但位于非行首)。
配合 systemd 管理(主流 Linux 发行版)
若系统启用 systemd(如 CentOS 7+/Ubuntu 16.04+),建议统一使用 systemctl:
-
启动服务:
systemctl start nginx -
停止服务:
systemctl stop nginx -
重载配置:
systemctl reload nginx(等价于nginx -s reload) -
查看状态:
systemctl status nginx(含运行时间、主进程 PID、最近日志片段) -
开机自启:
systemctl enable nginx
systemd 会自动读取 /usr/lib/systemd/system/nginx.service 中定义的 ExecStartPre(含 nginx -t),因此 systemctl reload 更安全可靠。










