在 Windows 上开发 Django、Vue 或其他 Web 项目时,Nginx 往往是我们最常用的反向代理服务器。然而,不同于 Linux 系统上顺手的 systemctl 命令,Windows 上的 Nginx 管理总是让新手感到困惑:到底是用命
|
在 Windows 上开发 Django、Vue 或其他 Web 项目时,Nginx 往往是我们最常用的反向代理服务器。然而,不同于 Linux 系统上顺手的 systemctl 命令,Windows 上的 Nginx 管理总是让新手感到困惑:到底是用命令行?还是注册成服务?为什么我点了停止,进程还在后台“僵尸”般存在? 今天,我们就来彻底解决 Windows 上 Nginx 的启动与停止问题,并附赠一个“进程强杀”脚本。 一、 为什么 Windows 上的 Nginx 容易“关不掉”首先要理解 Nginx 的多进程模型。
当你在 Linux 上执行 nginx -s stop 时,主进程会向所有子进程发送退出信号,优雅地关闭。但在 Windows 上,如果你直接在“服务”里点击停止,或者主进程异常崩溃,Worker 进程可能会变成孤儿进程,继续占用 80/443 端口,导致你下次启动时提示 bind() to 0.0.0.0:80 failed (10048: Unknown error)。 二、 推荐方案:命令行直接控制(最稳妥)对于开发环境,强烈不建议直接去“计算机管理”里点停止。最可靠的方式是使用 Nginx 自带的命令行指令。 1. 启动 Nginx打开 CMD 或 PowerShell,进入 Nginx 目录:
2. 停止 Nginx(两种模式)Nginx 提供了两种停止方式,务必分清: 快速停止(强制):类似于 kill -9,直接断掉所有连接。
优雅停止(推荐):类似于 kill -15,等待 Worker 处理完当前请求再退出。
注意:在 Windows 服务模式下,有时 quit 命令不生效,这时只能用 stop。 3. 重载配置修改 nginx.conf 后,不需要重启,直接重载:
4. 检查配置是否正确在启动或重启前,务必先测试配置文件语法:
如果显示 nginx: configuration file ... test is successful,则可以放心启动。 三、 进阶方案:注册为 Windows 服务(开机自启)如果你希望 Nginx 像 MySQL 一样开机自启,可以将其注册为服务。但千万不要直接用 sc.exe 命令硬注册,推荐使用 NSSM (Non-Sucking Service Manager) 工具,它能更好地管理进程树。 使用 NSSM 注册步骤: 1.下载 NSSM 2.管理员身份运行 CMD,执行安装:
3.在弹出的 GUI 界面中设置:
4.点击“Install service”。 5.在“服务”列表中找到 Nginx,右键启动。 重要提示:关于 worker_processes 如果你注册为服务并使用了 worker_processes auto;,在停止服务时极易出现进程残留。 解决方案:在开发机上,建议将配置改为 worker_processes 1;。虽然牺牲了多核性能,但在本地开发环境下几乎无感知,却能极大减少进程管理的麻烦。 四、 急救方案:当进程“杀不死”时怎么办?当你遇到以下情况:
这时候就需要强制清理所有 Nginx 进程。 方法 1:手动操作打开任务管理器 -> 详细信息。 找到所有 nginx.exe(包括 master 和 worker)。 右键 -> 结束任务树。 方法 2:一键脚本(推荐)为了避免每次都手动查找,我写了一个批处理脚本,以管理员身份运行即可一键清理所有后台 Nginx 进程。 创建 clean_nginx.bat 文件,复制以下代码:
使用方法:
五、 总结
|
2023-01-09
2022-08-10
2022-08-26
2024-03-27
2022-08-26