在 Windows 上部署 Nginx,很多人的习惯是每次开机手动双击nginx.exe启动,或者写个批处理丢到启动项里。这种方式不够优雅,机器重启后还容易忘记启动,导致服务中断。
有没有更好的方式?有——用WinSW把 Nginx 注册成 Windows 系统服务,开机自动启动,和 IIS、SQL Server 一样丝滑。
什么是 WinSW?
WinSW(Windows Service Wrapper)是一个开源工具,可以把任意可执行程序包装成 Windows 服务。只需要一个.exe+ 一个.xml配置文件,几条命令搞定。
GitHub 地址:https://github.com/winsw/winsw/releaseshttps://github.com/winsw/winsw/releases
准备工作
1. 下载 WinSW
进入 GitHub Releases 页面,滚动下去下载v2.x 稳定版(推荐 v2.12.0),选择
WinSW-x64.exe。
2. 重命名并放置文件
将下载的WinSW-x64.exe重命名为nginx-service.exe,放到 Nginx 根目录下,与nginx.exe平级:
D:\nginx-1.28.0\ ├── nginx.exe ├── nginx-service.exe ← WinSW,改名后放这里 ├── logs\ └── conf\
文件名前缀必须和后面的 xml 配置文件一致,WinSW 会自动匹配同名的 xml 文件。
创建配置文件
在同目录下新建nginx-service.xml,内容如下:
<service> <id>nginx</id> <name>Nginx</name> <description>Nginx HTTP Server</description> <executable>D:\nginx-1.28.0\nginx.exe</executable> <logpath>D:\nginx-1.28.0\logs</logpath> <logmode>roll</logmode> <startmode>Automatic</startmode> <stopexecutable>D:\nginx-1.28.0\nginx.exe</stopexecutable> <stoparguments>-s stop</stoparguments> </service>配置说明:
| 字段 | 说明 |
|---|---|
id | 服务唯一标识,用于命令行操作 |
name | 服务显示名称,在服务管理器中可见 |
executable | Nginx 可执行文件完整路径 |
logpath | WinSW 日志输出目录 |
logmode | roll表示日志滚动,避免文件过大 |
startmode | Automatic表示开机自动启动 |
stopexecutable | 停止服务时执行的程序 |
stoparguments | 停止参数,-s stop是 Nginx 的优雅停止命令 |
此时目录结构变为:
D:\nginx-1.28.0\ ├── nginx.exe ├── nginx-service.exe ├── nginx-service.xml ← 新增 ├── logs\ └── conf\
注册并启动服务
以管理员身份打开 CMD,执行以下命令:
cd D:\nginx-1.28.0 # 注册服务 nginx-service.exe install # 启动服务 net start nginx注册成功后会看到类似输出:
2026-07-14 20:15:51,397 INFO - Installing the service with id 'nginx'
验证服务状态
按Win + R输入services.msc,打开服务管理器,找到Nginx服务,状态为「正在运行」即表示成功。
常用管理命令
# 启动 net start nginx # 停止 net stop nginx # 卸载服务 nginx-service.exe uninstall总结
整个流程只需三步:
下载 WinSW,改名为
nginx-service.exe放入 Nginx 目录同目录创建
nginx-service.xml配置文件管理员 CMD 执行
install+net start nginx
从此 Nginx 和系统服务一样,开机自启、后台运行,再也不用手动维护了。
如果你的服务器上还有其他需要注册为 Windows 服务的程序(比如自己写的 .NET 应用、Redis、MinIO),WinSW 同样适用,换个名字和路径配置即可。