在微信开发中,需要一个有域名的服务器作为后端可信任服务器。 这给开发,调试带来了很多麻烦,解决的方法就是使用内网穿透工具,让内网中的开发机器也能具有外部可访问的域名。 当然,网上已经有一些或免费,或收费的内网穿透服务可以直接使用。 本文介绍的是使用开源项目 frp 来搭建直接的内网穿透服务。
为完成本文的实列,你需要有一台能在外网访问的服务器,可以在阿里、腾讯或华为这些云服务商那里购买,价钱不贵。 如果需要用自己的域名进行内网穿透,也可以再购买一个域名并完成必要的认证。为方便后文描述,假设:
外网服务器地址为: 173.178.10.45
域名为: examples.net
服务器系统为: ubuntu 18.04
客户端系统为: Windows 10
下载 frp 服务端
在 frp 官网下载, 选择 frp_0.33.0_linux_amd64.tar.gz。
也可在 ubuntu 中直接执行一下命令进行下载:
1 | wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz |
下载完成后,解压,可以看到目录中包括了服务端(frps)和客户端(frpc)的执行程序和配置样例文件。为避免后面操作混淆,你可以把所有 frpc 的文件删除掉。
安装 frp 服务器
- 将 frps 复制到 /usr/bin 目录中
1 | sudo cp frps /usr/bin |
- 新建名为 /etc/frp 的目录
1 | sudo mkdir /etc/frp |
- 将 frps_full.ini 拷贝到上一步中建立的 /etc/frp 目录中, 并改名为 frps.ini
1 | sudo cp frps_full.ini /etc/frp/frps.ini |
- 新建 /var/frp 目录,用于存放运行日志
1 | sudo mkdir /var/frp |
- 根据需要,编辑 /etc/frp/frps.ini 配置文件
我只修改了下面几行:
1 | bind_port = 1500 |
bind_port - 用来和客户端通信的端口,要与客户端的设置一致
vhost_http_port - frps 服务的 web 端口
vhost_https_port - frps 服务的 web 端口(https)
dashboard_port - frps 提供了一个Web管理界面,这里配置的是管理界面的端口
dashboard_user - 管理界面的用户名
dashboard_pwd - 管理界面的密码
token - frps 和 frpc 连接的 token , (用于简单的客户端认证)
注意: 学员根据自己环境的情况修改以上的配置信息
并注释掉最后的两个 plugin
1 | # [plugin.user-manager] |
- 复制安装包中 systemd 目录下的 frps.service 文件到 /var/systemd/system 中:
1 | sudo cp systemd/frps.service /var/systemd/system |
- 启动 frps 服务
1 | sudo systemctl start frps |
可以用 status 子命令检查 frps 服务启动、运行情况
1 | sudo systemctl status frps |
如果安装没有问题,应该看到类似以下的输出
1 | ● frps.service - Frp Server Service |
- 设置开机启动
1 | sudo systemctl enable frps |
安装 frp 客户端
因为客户端时运行在 windows 10 上的,因此从 官网下载 文件 frp_0.33.0_windows_amd64.zip
解压以后可以看到 frpc 的执行文件,这就是客户端程序了。
新建一个 frpc.ini 的文件(文本文件)
以下的配置信息:
1 | [common] |
其中 server_port 与服务端配置项 bind_port 对于, token 与服务端 token 对应。
然后就可以启动 frp 客户端了,执行:
1 | frpc.exe -c frpc.ini |
启动以后,在启动开发机上的开发环境,比如 IDEA 中的 Spring Boot 项目,默认运行在 8080 端口。
设置 DNS 服务
在 DNS 的管理界面, 设置一个 DNS 的 A 记录, 在案例中设置为:
1 | api.examples.net 173.178.10.45 |
设置好以后就可以用浏览器访问
1 | http://api.examples.net:1500 |
设置多个 web 服务
只需要在客户端的配置中进行修改:
1 | [web] |
注意:custom_domains 需要不同