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 进程:
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 端口已被占用,两种处理方案:

  1. 任务管理器结束对应 PID 的占用进程;
  2. 修改 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

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

⚠️ 禁止操作

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


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

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

powershell 复制代码
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:服务卡死无响应

powershell 复制代码
# 强制清理进程
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 微软老旧官方工具,配置繁琐 老旧方案,现已淘汰不推荐