如何将 Nginx 服务配置为 Windows 系统服务?

310 阅读3分钟

在《如何在 CentOS 系统中安装和配置 nginx 服务?》一文中,介绍的是在 CentOS 安装配置 nginx 服务的方法。但如果你的开发工作主要还是在 Windows 系统中进行,而你又希望使用 nginx 服务器作为你的系统 Web 服务,有没有什么好的办法将如何将 Nginx 服务配置为 Windows 系统服务呢?

答案是肯定的,我们可以借助一些工具,将 nginx 服务器配置成为 Windows 的系统服务。本文所介绍的一种方法就是使用 winSW 这款命令行工具,将置 Nginx 服务配置为 Windows 系统服务。

下载 winSW 和 Nginx

winSW 的下载地址为:github.com/winsw/winsw…,而 nginx 的下载地址则为:nginx.org/en/download…

配置 winSW

首先,分别解压 nginx 服务器的压缩包和 winSW 的压缩包,将解压后包含的 nginx1.x.x 文件夹修改为 nginx,并将解压后的 winSW.exe 文件重命名为 nginx-service.exe。并将整个 nginx 文件夹拷贝到 C 盘的根目录。

接着在 nginx 目录中创建一个名为 nginx-service.xml 配置文件。注意这个 .xml 的文件名要与重命名后的 winSW.exe 可执行文件名保持一致。nginx-service.xml 配置文件的内容如下:

<service>
  <id>nginx</id>
  <name>nginx</name>
  <description>nginx</description>
  <executable>c:\nginx\nginx.exe</executable>
  <logpath>c:\nginx\logs</logpath>
  <logmode>roll</logmode>
  <depend></depend>
  <startargument>-p</startargument>
  <startargument>c:\nginx</startargument>
  <stopexecutable>c:\nginx\nginx.exe</stopexecutable>
  <stopargument>-p</stopargument>
  <stopargument>c:\nginx</stopargument>
  <stopargument>-s</stopargument>
  <stopargument>stop</stopargument>
</service>

到目前为止,基本完成了 winSW 的配置工作了。但我们的目的是为了将 nginx 服务器作为 Windows 系统的系统服务使用,我们就需要将 nginx 和 winSW 的命令也作为系统命令使用。所以我们还需要将 nginx 文件夹的路径配置到 Windows 系统的 path 环境变量中。如下图:

nginx-1.png

使用 winSW

这样一来,我们就可以在任何 Windwos 的命令行工具中使用 nginx 和 nginx-service (winSW的)命令进行操作了。nginx 的基础命令在《如何在 CentOS 系统中安装和配置 nginx 服务?》中我已经介绍过了,这里就不再重复介绍。

nginx-service 的所有命令如下:

install     install the service to Windows Service Controller
uninstall   uninstall the service
start       start the service (must be installed before)
stop        stop the service
stopwait    stop the service and wait until it's actually stopped
restart     restart the service
restart!    self-restart (can be called from child processes)
status      check the current status of the service
test        check if the service can be started and then stopped
testwait    starts the service and waits until a key is pressed then stops the service
version     print the version info
help        print the help info (aliases: -h,--help,-?,/?)

将 Nginx 服务配置为 Windows 系统服务

在完成前面的配置工作后,在只需要打开一个 cmd 命令行工具,执行以下命令:

nginx-service install

执行完安装命令后,在 window 的系统服务中就应该可以开到 nginx 服务了,如下图:

nginx-2.png

此刻,我们已经成功的将 nginx 配置为了 Windows的系统服务了。只用右键点击,选择启动服务即可。当然,也可以选择使用命令行的方式启动 nginx 服务。

nginx-service start

如果成功启动,会出现以下提示。如图:

nginx-3.png

如果无法启动 nginx 服务,有可能是之前已经启动了 nginx 进程,使用 windows 的“任务管理器”弹窗的“进程”标签查看是否已经打开了 nginx 进程,如下图:

nginx-4.png

先结束这些进程,然后再到服务管理器里去启动 nginx 服务即可。

另外,还有一种情况导致 nginx 无法启动,就是 80 端口被别的进程占用了,我可以使用以下命令查看 80 端口的使用情况:

netstat -ano | grep 80

我们可以看到 80 端口的使用情况,如图:

nginx-5.png

可以看到,是 pid 为 4 的进程占用的 80 端口,再使用 tasklist 命令查找 pid 为 4 的进程:

tasklist|findstr "4"

执行命令后,可以看到 pid 为 4 的进程是 system 进程。

nginx-6.png

当然,这里只是告诉大家怎么查找,一般应该都是 IIS 占用的 80 端口,我们修改 IIS 的站点的端口绑定,使用其它端口后,就应该可以正常启动 nginx 服务了。