type
status
date
slug
summary
tags
category
icon
password
Property
Nov 18, 2022 01:54 AM
零 前言
我在文章 SSH 端口转发 中介绍了使用端口转发来实现将本地端口转发到远程端口,完成一些网络服务的调试,但是 SSH 毕竟是一个临时的方案,如果我们需要长期把本地的端口的 TCP 请求转发某个远端的服务的话,更好的办法是在本地启动一个反向代理服务,例如 nginx。
一 遇到了什么问题
「简悦」是一款功能强大,自定义程度很高的浏览器阅读模式插件,其主体功能在浏览器扩展端,但是一些高阶的功能依赖桌面端的程序「简悦-同步助手」,以及配合坚果云等文件同步工具实现的跨设备配置同步。「简悦-同步助手」会在本机开启一个
localhost:7026
的服务,扩展端通过这个服务地址完成通信。因此,为了在多个设备上同步使用「简悦」,我不得不在每个设备上都安装扩展端、桌面同步助手和坚果云盘。在 将简悦 · 同步助手部署在远程( SaasS 化 ),方便多个扩展端共用一个同步助手 文章的启发下,我在想是不是可以利用家中的 Windows 服务器,实现部署一套「简悦-同步助手」的服务,其他设备通过 nginx 把
localhost:7026
的请求转发到服务端,简化多端设备的安装复杂度,也减少了同步带来的时差和错误。二 整体架构
整体架构我以 Windows 服务端和 Windows + Mac 两个客户端为例来说明。而且现在「简悦-同步助手」已经发布了命令行版本,所以服务端部署在 Linux Server 或者 Docker 容器中也都是可以的。

服务端是一台 Windows 电脑,安装「简悦-同步助手」,由于「简悦-同步助手」为了安全起见监听的是
127.0.0.1
的主机名,所以只接受本机的请求,外部请求是不会接受的,因此我们在服务器又搭建了一个 nginx server 反向代理了「简悦-同步助手」的服务,0.0.0.0:80
→ 127.0.0.1:7026
,因此外部可以通过服务器 IP 加上端口号 80(或者是其他未被占用的合法端口,我选择 80 是因为我通过不同的 server name 做了分流,因此 tcp 端口复用了 80)来访问到服务器上的「简悦-同步助手」。客户端:
- 一台 Windows PC,在 Edge 上安装简悦,nginx 反代
127.0.0.1:7026
→192.168.84.2:80
- 一台 Macbook,在 Chrome 上安装简悦,nginx 反代
127.0.0.1:7026
→192.168.84.2:80
三 部署服务和配置文件
在 Windows 系统上用 NSSM 部署 nginx 服务
nginx for windows 是一个单体可执行文件,可以通过命令行运行,但是没有办法直接作为服务启动,因此需要借助一个小工具 NSSM。
NSSM 全称为:the Non-Sucking Service Manager。NSSM 所采用的方式是把应用安装为一个系统服务,开机自启动;如果需要重启应用,那么重启对应的系统服务就可以了。
首先,下载软件:
- nginx windows zip:nginx/Windows-1.22.1
- NSSM zip:nssm 2.24
分别把压缩包解压缩到以下目录:
C:\Program Files\nginx
C:\Program Files\nssm
nginx 配置
nginx/conf
文件夹下有一个配置文件,nginx.conf
,我们找到 server{…}
的部分,在其中添加反向代理的配置即可:配置也不难理解,监听
0.0.0.0:80
服务,并代理转发至 localhost:7026
,header 部分保留转发。以系统服务安装启动 nginx
下面我们利用 NSSM 来把 nginx 安装成一个系统服务。双击 nssm.exe 文件可以看到 nssm 的基本用法:

NSSM 服务的创建过程是通过命令行启动的,我们在 nssm 目录下启动以管理员身份启动命令行,然后执行

Nginx 服务的配置比较简单:
- Application path:填写 Nginx.exe 的文件路径
- Application startup directory:填写 nginx 所在目录
保存目录,我们就可以在系统服务中看到 Nginx 已经启动起来了,也可以在系统服务中控制 Nginx 启停等:

在 Mac 系统上通过 Homebrew 部署 nginx 服务
Mac 上部署 nginx 服务要简单得多,因为 Mac 上比较成熟的包管理工具 Homebrew,Homebrew 也提供了 service 管理的能力,其中包含 nginx service。没有 Homebrew 的同学可以先在 Mac 上安装这个包管理工具,教程跳过这一步,直接安装 nginx 服务:
短暂的安装过程后会看到一些简短的说明输出:
这个说明有几个重点的信息:
- 可以通过
brew services start/stop/restart nginx
命令来启停 nginx 服务
- nginx 的默认配置文件是
/usr/local/etc/nginx/nginx.conf
,这个配置文件启动了一个localhost:8080
的服务
- 同时,nginx 还会读取并载入
/usr/local/etc/nginx/servers/
目录下的所有配置
下面就简单了,在 /usr/local/etc/nginx/servers/ 目录下创建一个 simpread.conf 文件,配置如下:
配置监听
127.0.0.1:7026
服务,并代理转发至 192.168.84.2:80
,header 部分保留转发。重启服务即可。四 结语
网络代理部分配置完成之后,我们在 Windows 服务器启动「简悦-同步助手」,客户端的扩展端就可以连接到远程的同步助手了。
最后,之所以现在要绕那么一大圈也是因为简悦不支持扩展端直接输入 host+ip 造成的,诚挚希望 @kenshin 可以快点把这个小功能给加上。
