---
url: /article/l4ovczl4/index.md
---
## 前言

由于开发需要，我这台小米笔记本的性能和配置已经不够用了，索性上了台式主机。笔记本用来打开 IDEA 用够了，开发会用到的服务都在台式机上跑。

但年关将近，笔记本是可以轻松带回去，台式主机却不好拿，虽然我的主机体积不大，但重量还是不轻，非必要我是不会拎着到处跑。

所以就需要能够远程访问到我这台主机，这样一来主机自动开机、内网穿透就是必须的了。好在内网穿透服务很早就购买了，只是用的比较少，向日葵开机插座也已经下单，万事具备。不过内网穿透的允许映射的端口数量有限，那就只能通过 Nginx 来转发端口了，因此想到了在 Windows 上将 Nginx 注册为服务，并设置开机自启。

## 1. 下载并安装 Nginx

访问 Nginx [下载](http://nginx.org/en/download.html) 页面，选择 **Stable version** 标签下的 `nginx/Windows-1.20.2` 下载完成后得到一个 `nginx-1.20.1.zip` 的压缩包，解压至合适的目录，这里我解压在了 `C:\Config\nginx-1.20.1` 目录下，此目录即为 Nginx 的安装目录，此时 Nginx 就已经安装好了。

Nginx 常用命令(cmd/powershell)：

* 启动：start nginx.exe
* 快速停止：nginx.exe -s stop
* 正常停止：nginx.exe -s quit
* 重载配置：nginx.exe -s reload
* 检查配置文件：nginx.exe -t -c conf/nginx.conf

因为 Nginx 可以被启动多次，因此可能存在多个 Nginx 进程，而 `nginx.exe -s stop` 只能停止一个 Nginx 进程，因此：

* 查看有多少 Nginx 在运行：tasklist /fi "imagename eq nginx.exe"
* 停止多个 Nginx 进程：taskkill /fi "imagename eq nginx.exe" /f 或 taskkill /f /t /im nginx.exe

## 2. 下载并安装 Windows Service Wrapper

Windows Service Wrapper 是 Github 上一个开源软件，可以将任意**可执行文件**注册为 Windows 服务，例如：\*.bat, \*.jar, \*.py 等。

在 [下载](https://github.com/winsw/winsw/releases) 页面找到最新版本，根据自己系统是 32 位还是 64 位选择 `WinSW-x64.exe` 或 `WinSW-x86.exe`，此程序即为 Windows Service Wrapper。

例如我的 Windows 系统是 64 位，下载 `WinSW-x64.exe`，下载完成后放入 Nginx 安装目录 `C:\Config\nginx-1.20.1` 下，重命名为 `nginx-service.exe`，再创建两个文件：`nginx-service.exe.config`、`nginx-service.xml`。

```xml title="nginx-service.exe.config" :no-line-numbers
<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727" />
    <supportedRuntime version="v4.0" />
  </startup>
  <runtime>
    <generatePublisherEvidence enabled="false"/>
  </runtime>
</configuration>
```

```xml title="nginx-service.xml" :no-line-numbers
<service>
  <id>nginx</id>
  <name>Nginx Service</name>
  <description>High Performance Nginx Service</description>
  <logpath>C:\Config\nginx-1.20.1\logs</logpath>
  <log mode="roll-by-size">
    <sizeThreshold>10240</sizeThreshold>
    <keepFiles>8</keepFiles>
  </log>
  <executable>C:\Config\nginx-1.20.1\nginx.exe</executable>
  <startarguments>-p C:\Config\nginx-1.20.1</startarguments>
  <stopexecutable>C:\Config\nginx-1.20.1\nginx.exe</stopexecutable>
  <stoparguments>-p C:\Config\nginx-1.20.1 -s stop</stoparguments>
</service>
```

注意，文件内容中的 Nginx 目录需要替换为自己的实际目录。

## 3. 将 Nginx 注册为服务

以管理员权限打开命令行工具，并进入到 Nginx 的安装目录。

1. 按下键盘上的 windows 键，接着输入 `cmd`，找到 **命令提示符**，然后右键单击 **以管理员身份运行**；
2. 输入 `nginx-service.exe install` 安装服务；

正常执行完上面两步操作即可注册成功，然后返回桌面右键单击 **此电脑**，选择 **管理**。接着在左侧的菜单树选择 **服务和应用程序 -> 服务**，在右侧的服务列表中找到 **Nginx Service**，此时可以通过点击服务来启动、停止、重启 Nginx。

***

补充 Windows Servcie Wrapper的命令格式如下：

* 安装服务：winsw-wrapper.exe install
* 卸载服务：winsw-wrapper.exe uninstall
* 启动服务：winsw-wrapper.exe start
* 停止服务：winsw-wrapper.exe stop
