把Nginx装成Windows服务,这事儿比你想的简单多了
我前两天帮同事折腾服务器,他盯着命令行窗口一脸懵:“这黑框框一关,Nginx不就歇菜了吗?”
说实话,我第一次用Nginx的时候也这反应。在Linux上习惯了systemctl,到了Windows这儿,总不能一直开着个CMD窗口吧?那也太不专业了。
这玩意儿到底有啥用?
说白了,就是把Nginx变成一个随系统启动、能在后台默默运行的服务。你不用每次开机都手动去点那个启动脚本,系统重启了它自己就起来了——这才是正经服务器的样子嘛。
很多人觉得在Windows上搞服务配置特别麻烦,其实真不是。我折腾了这么些年,发现最靠谱的方法就两种,而且十分钟内绝对搞定。
方法一:用Windows自带的SC命令(最原生)

这个办法吧,有点“硬核”,但一旦配置好了,稳得一批。
首先,你得找到Nginx的安装目录。我习惯放D:\nginx,你放哪儿都行,记住路径就好。
然后,以管理员身份打开命令提示符(这点很重要!不然权限不够)。
接下来这行命令,你照着敲就行:
sc create Nginx binPath= "D:\nginx\nginx.exe" start= auto
敲黑板了——等号后面必须有个空格,这是Windows的奇葩规定,没这空格绝对报错。
执行完,你会看到“[SC] CreateService SUCCESS”这么一行字。成了!
这时候你打开服务管理器(Win+R,输入services.msc),就能看到一个名叫“Nginx”的服务躺在那里了。
不过先别急着启动——这里有个坑我得提醒你。直接用SC创建的服务,默认是用LocalSystem账户运行的。这个账户权限太高,有时候反而会出问题(比如某些目录访问不了)。
我建议你这么改:
- 在服务管理器里找到Nginx服务,右键属性
- 切到“登录”选项卡
- 选“此账户”,然后点“浏览”
- 输入“NETWORK SERVICE”(注意大小写),确定
- 密码留空就行
这样配置之后,Nginx就用网络服务账户运行了,既安全又稳定。
方法二:用WinSW(我的首选推荐)
如果你觉得SC命令太geek,那我强烈推荐WinSW。这工具本质上是个小包装器,能把任何exe包装成Windows服务。
真绝了,这玩意儿用起来简单到不像话。
先去GitHub上搜“WinSW”,下载最新版。你会得到两个文件:一个exe(主程序),一个xml(配置文件)。
把这两个文件扔到你的Nginx目录里,然后给exe改个名,比如改成nginx-service.exe。
接着编辑那个xml文件,用记事本打开就行。关键配置就这几行:
<service>
<id>nginx</id>
<name>Nginx</name>
<description>高性能HTTP和反向代理服务器</description>
<executable>D:\nginx\nginx.exe</executable>
<logpath>D:\nginx\logs</logpath>
<logmode>rotate</logmode>
</service>
保存之后,管理员身份打开CMD,cd到Nginx目录,执行:
nginx-service install
看到“Service 'nginx' was installed successfully”就妥了。
WinSW的好处在于,它自带日志轮转、服务恢复(服务挂了自动重启)这些高级功能——这些你用SC命令得折腾半天。
那些你可能遇到的幺蛾子
我遇到过最奇葩的情况是,服务创建成功了,但死活启动不了。检查了一圈,发现是配置文件里有个中文路径没加引号。Windows对路径中的空格和特殊字符特别敏感,这种细节真能卡你半天。
还有一次,服务能启动,但就是监听不了80端口。一查,好家伙,Skype占着80端口不放(这玩意儿默认会抢80端口,你说气不气人)。要么改Skype设置,要么给Nginx换个端口。
如果你在日志里看到“bind() to 0.0.0.0:80 failed”这种错误,八成就是端口被占了。用netstat -ano | findstr :80查一下谁在捣乱。
几个实用小技巧
-
测试配置别用服务:改完nginx.conf之后,先直接在命令行里跑
nginx -t测试语法,没问题了再重启服务。不然配置有误,服务起不来,你还得去事件查看器里翻日志。 -
日志是个好东西:WinSW会把服务自己的日志写在
nginx-service.out.log和nginx-service.err.log里。服务启动有问题,先看这里。 -
卸载服务别留尾巴:用SC创建的就
sc delete Nginx,用WinSW的就nginx-service uninstall。删完之后,最好重启一下,确保清理干净了。
写在最后
其实吧,把Nginx装成Windows服务这事儿,真没那么多玄学。选对方法,注意细节,一次配置能用好几年。
我个人的建议是,如果你是偶尔用用,SC命令足够了。但要是正经做服务器用,WinSW更省心——它那些额外的管理功能,关键时刻能救急。
对了,最后说句大实话:长期跑Web服务,还是上Linux吧。Windows下的Nginx更多是用来本地开发测试,或者一些不得不用的场景。
但话说回来,既然现在就得在Windows上跑,那就把它跑利索了。至少别让那个黑框框一直挂在任务栏上,看着多业余啊。
行了,该说的都说完了。去配置你的服务吧,遇到问题评论区见——我通常半夜回消息,比客服靠谱多了。

还没有评论,来说两句吧...