把 Nginx 创建为 Windows 服务

Nginx 介绍

Nginx 是一个 web 服务器。它类似于 Lighttpd,作为轻量级的 web server,可以替代重量级的 Apache/IIS。Nginx 专为性能优化而开发,是一个快速且能经受高负载考验的 web server。它来自于 Linux 世界但同样可以运行在 Windows 上面(由本地语言构建)。唯一的问题就是它不支持 Windows Services。
尽管 Nginx 以快速和提供高性能而具有很大的声誉,但并非是在 Windows 平台上。访问 官方网址,你会发现,对于 Windows 平台的支持被认为是测试版,根据 Nginx 的实现来看它并不提供(和 Linux 平台)相同的性能水平。

Nginx 运行模式

Nginx 在windows 下是绿色免安装的。官方已经提供了一个很棒的 wiki,上面有丰富的服务器相关信息。可以使用默认的配置,它使用 Nginx 目录下的 html 文件夹服务于端口 80。只需简单地执行 nginx.exe 即可启动 Nginx。但你想要停止它的时候问题来了,你需要执行以下命令:

1
nginx.exe -s stop

虽然这很简单,但是如果它能够像 apache 或 IIS 那样作为一个服务工作的话会更好。那样的话,我们就可以设置机器启动时 Nginx 自动启动,还可以方便地启动、停止或者重启服务,设置恢复选项、依赖的服务,等等,不受用户登陆的影响。

winsw 介绍

winsw 是一个开源的小工具,它可以将 Windows 上的任何一个程序注册为服务,如果不需要,也可以方便的卸载服务。GitHub 项目地址为 winsw

下载 winsw

首先要下载 winsw。它是一个单个的可执行文件,我们到Github release页面就可以下载 winsw 了。一般来说当然是下载最新的。winsw 可以运行在 .NET2 和 .NET4 两个版本上,当然如果使用 Win10 等比较新的系统,最好下载更新版本的 .NET。下载完之后最好把文件改成一个比较短小好记的名字,例如 winsw-nginx.exe 这样的,方便后面输入命令。

配置文件

需要编写一个和程序同名的 XML 文件作为 winsw 的配置文件。文件大体上长这样,这是官网的例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
<configuration>

<!-- ID of the service. It should be unique accross the Windows system-->
<id>myapp</id>
<!-- Display name of the service -->
<name>MyApp Service (powered by WinSW)</name>
<!-- Service description -->
<description>This service is a service cratead from a minimal configuration</description>

<!-- Path to the executable, which should be started -->
<executable>%BASE%\myExecutable.exe</executable>

</configuration>

很明显,你应该稍微更改文件,这取决于你自己的文件路径。比如我的配置:

1
2
3
4
5
6
7
8
<configuration>

<id>Nginx</id>
<name>Nginx Service</name>
<description>Nginx service is a web service</description>
<executable>E:\nginx-1.10.3\nginx.exe</executable>

</configuration>

对于有更多技术需求的朋友,你也可以在该文件中设置 Nginx 依赖的服务。

安装为服务

最后,我们要安装服务了。只需要简单地执行以下语句,你将在你的服务列表里找到 "Nginx" 服务:

1
E:\nginx-1.10.3\winsw-nginx.exe install

运行成功后会在当前目录下生成几个以 winsw-nginx 开头的日志文件。
如果不再需要这个服务,使用 winsw uninstall即可卸载服务。当然还有诸如 startstop 这样的命令启动和关闭服务。

以上! 按照这种方法可以把任何 exe 程序做成 Windows 服务!可自行探索相关用法!