当你使用如下命令手动启动 Nginx:

nginx -c /etc/nginx.conf

这意味着你没有通过系统服务(如 service nginx start)启动,而是直接调用 nginx 二进制文件并指定配置文件。此时,停止服务不能简单地用 service nginx stop(因为系统服务可能根本没启动),而应通过 Nginx 的进程控制机制来优雅停止。


✅ 正确停止方式:使用 nginx -s stopquit

但注意:必须指定相同的配置文件路径(如果配置中指定了 pid 文件位置)或者确保能读取到正确的 PID。

方法一:使用 nginx -s quit(推荐,优雅退出)

nginx -c /etc/nginx.conf -s quit

-s quit:发送 QUIT 信号,Nginx 会等当前请求处理完再关闭(优雅停止)。

方法二:强制停止

nginx -c /etc/nginx.conf -s stop

-s stop:立即终止(类似 kill -TERM),不等待请求完成。


⚠️ 前提条件:Nginx 必须在配置中定义了 pid 路径

/etc/nginx.conf 中,通常会有这样一行:

pid /var/run/nginx.pid;

Nginx 启动时会把主进程 PID 写入该文件,-s 信号命令依赖这个文件来找到主进程。

✅ 如果你的 /etc/nginx.conf 没有 pid 指令,建议加上,例如:

user  nginx;
worker_processes  1;
pid        /var/run/nginx.pid;   # ← 确保有这行
...

然后重启 Nginx 生效。


🔍 如果不知道 PID 或 nginx -s 失败,可手动 kill

  1. 查找 Nginx 主进程 PID

    ps aux | grep nginx
    

    输出示例:

    root      1234  0.0  0.1 123456  1234 ?        Ss   10:00   0:00 nginx: master process nginx -c /etc/nginx.conf
    nginx     1235  0.0  0.2 123456  2345 ?        S    10:00   0:00 nginx: worker process
    

    主进程是 master process,PID 是 1234

  2. 优雅停止(推荐)

    sudo kill -QUIT 1234
    
  3. 强制停止

    sudo kill -TERM 1234
    # 或
    sudo kill -9 1234   # 仅在无响应时使用
    

📝 总结

场景 命令
正常启动(带-c)且配置含 pid nginx -c /etc/nginx.conf -s quit
配置无pid-s 失败 手动ps + kill -QUIT <PID>
强制终止 kill -9 <master_PID>

💡 建议:始终在 nginx.conf 中显式设置 pid 路径,便于管理。