搭建Ngrok内网转发服务实现微信开发测试(类似花生壳)

我们在本地开发时,由于现在大部分网络接入都在内网环境中,没有公网ip,因此想要访问本地开发服务进行测试是比较难的,这一点在微信开发时尤其是个问题。因为微信开发是需要与微信的测试服务器接口进行交互,如果没有公网ip,微信服务器找不到本机测试环境的地址,自然无法返回值,也无法完成对接。

很早之前就测试了花生壳这个内网穿透服务,效果还是可以的,但是问题有两个,免费服务并不稳定,同时只能使用其规定的几个域名,如果打算用自定义域名来测试开发,那就没有办法了(也许收费服务可以解决这个问题)。接着测试了网友提供的Ngrok服务,但是由于太多人滥用,导致服务间歇性中断,非常不稳定,已经不能愉快的玩耍了。于是经过一番了解了,终于还是打算自己搭建一个内网转发服务用于开发用。

Ngrok

Ngrok这个服务2.0以前的版本本身是免费开源的,但是其存在两个问题,配置有些复杂,编译麻烦,更重要的是还存在有内存泄露的小问题,这么一点不稳定的因素让我选择了另一个服务,Python-ngrok

搭建的过程非常的简单,首先看一下需求:

服务端与本地端需求

Python 2.7.9 或 Python 3.4.2 以上

很简单的需求,如果服务端与本地端是Linux,直接安装Python3即可。

我这里的服务端是CentOS 7,运行以下命令安装:

1
yum install python34

完成Python3.4的安装。

我的本地操作系统是Windows,因此直接去Pyhton官网下载Python3.6.2后安装即可。

服务端配置

首先下载Python-ngrok服务端并解压,执行

1
2
wget https://github.com/hauntek/python-ngrokd/archive/master.zip
unzip master.zip

进入目录后,修改服务端的配置:

1
vi ngrokd.py

修改以下部分对应的配置:

1
2
3
4
5
SERVERDOMAIN = 'ktsee.com' # 服务域名
SERVERHOST = ''
SERVERHTTP = 80
SERVERHTTPS = 443
SERVERPORT = 4443

其中SERVERDOMAIN修改为你这台服务器对应的域名,该域名的子域名可以分配用于转发服务。其他部分基本不用修改,如果你对安全性的需求比较高,可以修改SERVERPORT为只有你知道的端口。

配置完成后,安装Screen并运行:

1
2
yun install tmux
tmux

进入tmux进程中,开始运行ngrok服务:

1
python3 ngrokd.py

服务端运行成功。

如果需要再次进入tmux,输入:

1
tmux attach

进入进程查看ngrok执行状态

域名配置

除了设置服务端,还得将域名的解析指向装有服务端的服务器ip(这里用1.2.3.4举例),例如前面我们的服务端设置的域名为ktsee.com,那么只需要设置两条记录:

1
2
A记录          ktsee.com         1.2.3.4
CNAME记录      *.ktsee.com       ktsee.com

设置完成,接下来设置本地客户端。

客户端设置

在你的开发电脑上下载客户端:

下载:https://github.com/hauntek/python-ngrok/archive/master.zip

下载解压后,编辑python-ngrok.py文件,修改其中的渠道队列部分:

1
2
3
4
5
6
7
8
body = dict()
body['protocol'] = 'http'
body['hostname'] = 'www.xxx.com'
body['subdomain'] = ''
body['rport'] = 0
body['lhost'] = '127.0.0.1'
body['lport'] = 80
Tunnels.append(body) # 加入渠道队列

这里有三块类似于上面部分的代码,根据需求设置,多余的删除掉,我的配置是:

1
2
3
4
5
6
7
8
body = dict()
body['protocol'] = 'http'
body['hostname'] = ''
body['subdomain'] = 'dev'
body['rport'] = 0
body['lhost'] = '127.0.0.1'
body['lport'] = 80
Tunnels.append(body) # 加入渠道队列

这样表示用dev.ktsee.com这个子域名用作内网转发服务,保存后双击执行。

接着在浏览器中访问dev.ktsee.com,其效果与访问localhost一样,可以看到本地的开发环境显示结果。不同的是,这个dev.ktsee.com可以被外网用户访问,当然也包括了微信的回调服务器。

剩下的就是愉快的玩耍吧。

坚持原创技术分享,您的支持将鼓励我继续创作!