一、前言
场景痛点
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 进程:
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 端口已被占用,两种处理方案:
- 任务管理器结束对应 pid 的占用进程;
- 修改 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
win + r输入services.msc回车打开服务管理器;- 在列表找到
nginx服务,右键:启动 / 停止 / 重新启动; - 右键【属性】→ 启动类型设置为 自动,实现开机自动启动。
⚠️ 禁止操作
禁止在任务管理器强行结束 nginx.exe 进程,会导致 windows 服务状态错乱,优先使用正规方式启停。
七、nginx 配置热重载(无需重启系统服务)
修改反向代理、跨域、限流等业务配置后,热加载生效,不中断现有用户连接:
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:服务卡死无响应
# 强制清理进程 | |
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 | 微软老旧官方工具,配置繁琐 | 老旧方案,现已淘汰不推荐 |
到此这篇关于windows 使用 nssm 将 nginx 注册系统服务部署运维手册(最新推荐)的文章就介绍到这了,更多相关nginx 注册系统服务部署内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论