Windows 使用 NSSM 将 Nginx 注册系统服务部署运维手册
一、前言
场景痛点
Windows 原生直接双击运行 Nginx 会弹出 CMD 黑窗口,关闭窗口程序直接终止,无法后台常驻、开机自启、崩溃自动重启;Windows 原生系统服务无法直接托管普通控制台 EXE 程序。
NSSM(Non-Sucking Service Manager):轻量免费开源工具,可把任意 exe 程序封装为标准 Windows 系统服务,支持 Nginx、Redis、Java Jar、Node.js 等控制台程序托管。
环境信息
- 操作系统:Windows10 / Windows11 / Windows Server
- Nginx 版本:nginx-1.24.0
- Nginx 路径:
E:\swtools\nginx-1.24.0 - NSSM 路径:
E:\swtools\push-server\nssm-2.24\win64
二、NSSM 基础介绍
1. 核心作用
- 将普通 exe 可执行程序注册为 Windows 原生系统服务;
- 全程托管进程生命周期,实时监控进程存活状态;
- 配置程序异常崩溃自动重启、开机自动启动;
- 完美兼容系统自带
services.msc图形化界面管理启停。
2. 运行原理
- NSSM 自身作为系统服务载体启动;
- NSSM 按照配置拉起指定
nginx.exe,持续监控主进程; - 正常停止:下发优雅关闭指令平稳终止 Nginx;
- 程序意外闪退/崩溃:按照预设策略自动重启。
3. 优缺点
优点
- 绿色单文件,零依赖,开箱即用;
- 同时支持图形界面 + 命令行两种管控方式;
- 自带进程保活、故障自动重启策略;
- 优雅终止进程,不会暴力强制杀死进程。
缺点
- 仅支持 Windows 平台,Linux / MacOS 无法使用;
- 仅负责进程托管,无法解决程序自身端口占用、配置错误、代码死锁等业务问题。
三、部署前置准备
- 解压 NSSM,64 位系统使用
win64/nssm.exe; - 关闭本机所有正在运行的 Nginx 进程:
powershell
taskkill /f /im nginx.exe
四、关键前置:修改 Nginx 配置适配 NSSM
Windows 原生 Nginx 默认开启后台守护模式,会导致 NSSM 识别异常,服务长时间卡在 START_PENDING 启动中。
编辑 conf/nginx.conf,文件最顶部新增两行配置
nginx
# 适配NSSM托管,前台单进程运行,解决服务启动卡住问题
daemon off;
master_process off;
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
# 下方原有业务配置无需改动
配置语法校验(必执行)
以管理员身份打开 PowerShell / CMD:
powershell
E:
cd E:\swtools\nginx-1.24.0
nginx.exe -t
输出 test is successful 代表配置合法可用。
端口占用风险排查
powershell
netstat -ano | findstr ":8099"
当前环境 8099 端口已被占用,两种处理方案:
- 任务管理器结束对应 PID 的占用进程;
- 修改 Nginx 配置内
listen 8099;更换为未占用端口(如 8199)。
五、NSSM 安装注册 Nginx 系统服务
1. 进入 NSSM 目录(管理员终端)
powershell
cd E:\swtools\push-server\nssm-2.24\win64
2. 执行安装命令唤起配置窗口
powershell
.\nssm.exe install Nginx
1)Application 标签页核心配置
- Path:
E:\swtools\nginx-1.24.0\nginx.exe - Startup directory:
E:\swtools\nginx-1.24.0 - Arguments:无需填写启动参数
2)Recovery 故障重启最优配置
| 故障次数 | 执行动作 | 重启间隔 |
|---|---|---|
| 第一次失败 | 重新启动服务 | 3s |
| 第二次失败 | 重新启动服务 | 3s |
| 后续失败 | 重新启动服务 | 3s |
作用:Nginx 异常闪退、崩溃后自动重新拉起,保证服务常驻。
3)Log on 运行身份
保持默认「本地系统账户」,权限足够监听端口、读写本地文件,无需修改。
4)Details 标签(可选)
自定义服务在 services.msc 中的显示名称、备注描述,方便识别。
3. 保存注册
点击窗口右下角 Edit service,完成服务注册,此时系统服务列表新增 Nginx 服务。
六、日常启停两种操作方式
方式一:NSSM 命令行管控
powershell
# 启动服务
.\nssm.exe start Nginx
# 停止服务
.\nssm.exe stop Nginx
# 查看当前服务运行状态
.\nssm.exe status Nginx
# 重启服务
.\nssm.exe stop Nginx
timeout /t 3 /nobreak
.\nssm.exe start Nginx
# 彻底卸载Nginx服务(谨慎执行)
.\nssm.exe remove Nginx
方式二:系统图形界面 services.msc
Win + R输入services.msc回车打开服务管理器;- 在列表找到
Nginx服务,右键:启动 / 停止 / 重新启动; - 右键【属性】→ 启动类型设置为 自动,实现开机自动启动。
⚠️ 禁止操作
禁止在任务管理器强行结束 nginx.exe 进程,会导致 Windows 服务状态错乱,优先使用正规方式启停。
七、Nginx 配置热重载(无需重启系统服务)
修改反向代理、跨域、限流等业务配置后,热加载生效,不中断现有用户连接:
powershell
cd E:\swtools\nginx-1.24.0
# 第一步校验配置语法
nginx.exe -t
# 第二步热重载配置
nginx.exe -s reload
八、常见异常排查方案
问题1:服务一直卡在 START_PENDING
- 确认
nginx.conf头部已添加daemon off; master_process off;; - 强制清理残留进程:
taskkill /f /im nginx.exe; - 执行停止服务后重新启动。
问题2:服务启动直接失败
- 查看 Nginx 原生日志:
E:\swtools\nginx-1.24.0\logs\error.log,定位端口占用、配置语法错误; - Windows 事件查看器 → Windows日志-系统,查看 NSSM 服务层面报错。
问题3:服务卡死无响应
powershell
# 强制清理进程
taskkill /f /im nginx.exe
# 重置服务状态重启
.\nssm.exe stop Nginx
.\nssm.exe start Nginx
九、运维规范总结
- 统一使用
services.msc或 NSSM 命令启停,禁止手动双击打开 nginx.exe; - 修改配置上线前必须执行
nginx.exe -t校验语法; - 依托 NSSM Recovery 策略实现程序异常自动保活;
- 故障排查优先查看 Nginx 业务日志,其次查看 Windows 系统事件日志;
- 更换 Nginx 安装路径后,执行
nssm edit Nginx修改对应路径配置即可。
十、同类托管工具对比
| 工具 | 特点 | 适用场景 |
|---|---|---|
| NSSM | 可视化配置、上手简单、免费开源 | 线上服务器、日常开发环境首选 |
| WinSW | XML 文件配置托管 | 自动化批量脚本部署场景 |
| srvany.exe | 微软老旧官方工具,配置繁琐 | 老旧方案,现已淘汰不推荐 |