译序:Nginx 不是为 Windows 而写。Nginx 是用在软件的工作环境中的。但软件开发环境一般都是 Windows,有时调试的需要也要装 Nginx,但 Nginx 并没给 Windows 提供服务支持。如何把 Nginx 创建为 Windows 的一个服务呢?百度一下,搜索结果的前几页基本都是同一篇文章,只是网址不同作者不同。根本分不清谁是原创,谁是转载。我想,如果先写那篇文章的人搞错了一点事情(但不能是影响使用的错误),那么这点错误的观点会被第二个,第三个...一直复制错下去。喟叹国内某些程序员们做事不够严谨哈。相对来说,印度程序员做事就相当较真了,如果读者有兴趣的话,可以去看一下印度人写的博客。比如安装 JDK,他们会先给你介绍 JDK 和 JRE 的区别,然后才介绍下载安装。中国软件为什么不如印度软件发达,程序员们做事不够严谨,许是其中一个重要的原因吧。——扯远了,反正看着那么多雷同的文章,我没有觉得它们有多么高的参考价值。索性去看老外的了。当然,老外写的也未必就是对的。但冲着他们的那份严谨,我看到了一种敬业的精神。敬业者的文章值得每一位读者仔细品读。
把 Nginx 创建为 Windows 的一个服务,比较流行的一个做法就是用微软提供的 instsrv/servany。本文没有使用这种做法,并说明理由。
引言
Nginx 是一个 web 服务器。它类似于 Lighttpd,作为轻量级的 web server,可以替代重量级的 Apache/IIS。Nginx 专为性能优化而开发,是一个快速且能经受高负载考验的 web server。它来自于 Linux 世界但同样可以运行在 Windows 上面(由本地语言构建)。唯一的问题就是它不支持 Windows Services。
注
尽管 Nginx 以快速和提供高性能而具有很大的声誉,但并非是在 Windows 平台上。访问官方网址 ,你会发现,对于 Windows 平台的支持被认为是测试版,根据 Nginx 的实现来看它并不提供(和 Linux 平台)相同的性能水平。
也许你都没有意识到,WordPress 就是一个 Nginx 的用户,使用它提供大量的静态内容服务,并负载平衡请求到其他服务器。如果你想了解更多关于 Nginx 的内容请看本文底部的链接。
Nginx 对比 Windows 服务
Nginx 是绿色免安装的。这里我不去介绍它的管理配置,官方已经提供了一个很棒的 wiki,上面有丰富的服务器相关信息(参考文后链接)。可以使用默认的配置,它会使用 Nginx 目录下的 html 文件夹服务于端口 80。
只需简单地执行 nginx.exe 即可启动 Nginx。但你想要停止它的时候问题来了,你需要执行以下命令:
nginx.exe -s stop
虽然这很简单,但是如果它能够像 apache 或 IIS 那样作为一个服务工作的话会更漂亮。那样的话,我们就可以设置机器启动时 Nginx 自动启动,还可以方便地启动、停止或者重启服务,设置恢复选项、依赖的服务,等等。
为什么不使用 instsrv/servany、FireDaemon 或者其他办法呢
已经有介绍如何通过 FireDaemon 使用 Nginx,但它有一个很重要的问题。Nginx 启动以后,它会创建一个次级进程。所以会有两个 nginx.exe 在运行。对于这个官方可能有一个很合理的理由,但你最好到 Nginx 论坛去问为什么:-)
通过 instsrv/srvany(微软官方创建服务的方法) 或者 FireDaemon 的方式(来创建 Nginx 为服务),只是启动进程,当你想要停止它时,将关闭这个进程。但这些方式都无法关闭多余的那个 nginx.exe 进程。所以每次你停止/启动/重启服务都会产生一个多余的 nginx.exe 进程。不怎么好!
把 Nginx 创建为 Windows 的一个服务(一个较好的做法)
多亏了一个叫做 "" 的小项目,我们有了一个办法来恰当地启动和停止 Nginx。首先从 下载最新的 exe 程序(Misterdai 写本文时最新的是 "winsw-1.8-bin.exe"。译者已经上传了一个 winsw-1.8-bin.exe 到 CSDN 资源,下载地址:)。
得到该程序后,将其放在 Nginx 安装目录下,并重命名为 myapp.exe。
然后是告诉 WinSw 我们想要它做什么。这将使用一个 XML 配置文件,我们将在文件中指出 Nginx 需要一个 shutdown 命令。
(在 Nginx 安装目录下)新建一个名为 myapp.xml 的文件,编辑其内容如下:
nginx nginx nginx c:\nginx\nginx.exe c:\nginx\ roll -p c:\nginx -p c:\nginx -s stop
很明显,你应该稍微更改文件,这取决于你自己的文件路径。对于有更多技术需求的朋友,你也可以在该文件中设置 Nginx 依赖的服务。
最后,我们要安装服务了。只需要简单地执行以下语句,你将在你的服务列表里找到 "Nginx" 服务:
c:\nginx\myapp.exe installc:\nginx\myapp.exe start
就这些!
结束语
根据我的经验,到目前为止这种做法的效果很完美。你得到了 Windows 服务的支持,而且在服务重启时没有遗留孤立的 "nginx.exe"。两全其美。
如果 Nginx 自己可以做到这样的话会更好,但 Nginx 的作者当下正在专注于其他更重要的开发。我敢肯定还有其他人有足够的编程知识来贡献这块所需的代码,所以,如果你是这样的一个人,请尽力来帮助大家。