DevOps2026年8月3日· 约 10 分钟

Windows 使用 NSSM 将 Nginx 注册系统服务部署运维手册

#服务管理#系统服务#Nginx部署
Twitter 微博

Windows 使用 NSSM 将 Nginx 注册系统服务部署运维手册

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. 核心作用#

  1. 将普通 exe 可执行程序注册为 Windows 原生系统服务;
  2. 全程托管进程生命周期,实时监控进程存活状态;
  3. 配置程序异常崩溃自动重启、开机自动启动;
  4. 完美兼容系统自带 services.msc 图形化界面管理启停。

2. 运行原理#

  1. NSSM 自身作为系统服务载体启动;
  2. NSSM 按照配置拉起指定 nginx.exe,持续监控主进程;
  3. 正常停止:下发优雅关闭指令平稳终止 Nginx;
  4. 程序意外闪退/崩溃:按照预设策略自动重启。

3. 优缺点#

优点

  1. 绿色单文件,零依赖,开箱即用;
  2. 同时支持图形界面 + 命令行两种管控方式;
  3. 自带进程保活、故障自动重启策略;
  4. 优雅终止进程,不会暴力强制杀死进程。

缺点

  1. 仅支持 Windows 平台,Linux / MacOS 无法使用;
  2. 仅负责进程托管,无法解决程序自身端口占用、配置错误、代码死锁等业务问题。

三、部署前置准备#

  1. 解压 NSSM,64 位系统使用 win64/nssm.exe
  2. 关闭本机所有正在运行的 Nginx 进程:
taskkill /f /im nginx.exe

四、关键前置:修改 Nginx 配置适配 NSSM#

Windows 原生 Nginx 默认开启后台守护模式,会导致 NSSM 识别异常,服务长时间卡在 START_PENDING 启动中。

编辑 conf/nginx.conf,文件最顶部新增两行配置#

# 适配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:

E:
cd E:\swtools\nginx-1.24.0
nginx.exe -t

输出 test is successful 代表配置合法可用。

端口占用风险排查#

netstat -ano | findstr ":8099"

当前环境 8099 端口已被占用,两种处理方案:

  1. 任务管理器结束对应 PID 的占用进程;
  2. 修改 Nginx 配置内 listen 8099; 更换为未占用端口(如 8199)。

五、NSSM 安装注册 Nginx 系统服务#

1. 进入 NSSM 目录(管理员终端)#

cd E:\swtools\push-server\nssm-2.24\win64

2. 执行安装命令唤起配置窗口#

.\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 命令行管控#

# 启动服务
.\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#

  1. Win + R 输入 services.msc 回车打开服务管理器;
  2. 在列表找到 Nginx 服务,右键:启动 / 停止 / 重新启动;
  3. 右键【属性】→ 启动类型设置为 自动,实现开机自动启动。

⚠️ 禁止操作#

禁止在任务管理器强行结束 nginx.exe 进程,会导致 Windows 服务状态错乱,优先使用正规方式启停。


七、Nginx 配置热重载(无需重启系统服务)#

修改反向代理、跨域、限流等业务配置后,热加载生效,不中断现有用户连接:

cd E:\swtools\nginx-1.24.0
# 第一步校验配置语法
nginx.exe -t
# 第二步热重载配置
nginx.exe -s reload

八、常见异常排查方案#

问题1:服务一直卡在 START_PENDING#

  1. 确认 nginx.conf 头部已添加 daemon off; master_process off;
  2. 强制清理残留进程:taskkill /f /im nginx.exe
  3. 执行停止服务后重新启动。

问题2:服务启动直接失败#

  1. 查看 Nginx 原生日志:E:\swtools\nginx-1.24.0\logs\error.log,定位端口占用、配置语法错误;
  2. Windows 事件查看器 → Windows日志-系统,查看 NSSM 服务层面报错。

问题3:服务卡死无响应#

# 强制清理进程
taskkill /f /im nginx.exe
# 重置服务状态重启
.\nssm.exe stop Nginx
.\nssm.exe start Nginx

九、运维规范总结#

  1. 统一使用 services.msc 或 NSSM 命令启停,禁止手动双击打开 nginx.exe;
  2. 修改配置上线前必须执行 nginx.exe -t 校验语法;
  3. 依托 NSSM Recovery 策略实现程序异常自动保活;
  4. 故障排查优先查看 Nginx 业务日志,其次查看 Windows 系统事件日志;
  5. 更换 Nginx 安装路径后,执行 nssm edit Nginx 修改对应路径配置即可。

十、同类托管工具对比#

工具 特点 适用场景
NSSM 可视化配置、上手简单、免费开源 线上服务器、日常开发环境首选
WinSW XML 文件配置托管 自动化批量脚本部署场景
srvany.exe 微软老旧官方工具,配置繁琐 老旧方案,现已淘汰不推荐

原文链接:https://www.cnblogs.com/SheepDog/p/22174518

评论

© 2026 松岛川树