上篇文章《移动程序本地调试过程中常用的内网穿透服务》介绍了常用的几种ngrok服务,本篇文章主要将自建ngrok服务的过程记录下来,方便后续使用。
1.准备工作
阿里云centos7.5一台(独立IP地址)
已备案的域名一个(ICP未备案的域名微信无法授权验证)
二级域名解析到云服务器ip
将ngrok.kfpt.cn和*.ngrok.kfpt.cn二级域名解析到服务器ip
2.安装git、go运行环境
为了快速的将最新版本ngrok程序下载到服务端,可在服务器安装git工具
yum install -y mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386
安装版本:git version 1.8.3.1
3.下载ngrok程序
git clone https://github.com/inconshreveable/ngrok.git
下载到root账号的根目录即:/root/
4.生成自签名证书
进入/root/ngrok/目录下
cd /root/ngrok
NGROK_DOMAIN="ngrok.kfpt.cn"
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
将新生成的证书,复制到assets/client/tls下并重新命名,新生成的证书文件地址采用复制方式,证书留着后续使用。
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
5.编译ngrok服务端程序
由于使用的是阿里云64位centos系统,
cd /root/ngrok
#指定环境变量位64位linux版本
GOOS=linux GOARCH=amd64
#32位系统,GOARCH=386
make release-server
如云服务器在国内,需要考虑到网络慢的问题,我使用的是香港主机,因此很快的编译完成,编译过程需要下载依赖的相关文件。编译完成,在ngrok/bin/下会有ngrokd文件。
6.编译ngrok客户端程序
cd到ngrok目录
(1)若是客户端使用与服务器相同系统可直接使用 make release-client指令。
(2)若是不同系统,则需要通过go中的make.bash手工编译出跨编译工具。
在$GOROOT/src目录下找到make.bash文件,通过设置GOOS和GOARCH来完成生成跨编译工具:
#linux
make release-client
#windows
GOOS=windows GOARCH=amd64 make release-client
编译完成,在ngrok/bin/windows_amd64/下,有刚生成的ngrok.exe,通过WinSCP下载到Windows端。
7.运行ngrok服务端
在运行服务端之前,需要在修改hosts文件,将127.0.0.1指向test.ngrok.kfpt.cn 和ngrok.kfpt.cn
vi /etc/hosts
./bin/ngrokd -tlsKey=device.key -tlsCrt=device.crt -domain="ngrok.kfpt.cn" -httpAddr=":15001" -httpsAddr=":15002" -tunnelAddr=":15003"
启动成功。
如需要后台启动,则:
nohup ./bin/ngrokd -tlsKey=device.key -tlsCrt=device.crt -domain="ngrok.kfpt.cn" -httpAddr=":15001" -httpsAddr=":15002" -tunnelAddr=":15003"&
8.配置ngrok客户端
这里随便建立一个客户端web服务,端口为801,以iis为例,如:http://localhost:801/
在windows系统的ngrok.exe同级目录创建ngrok配置文件:ngrok.cfg
server_addr: "ngrok.kfpt.cn:15003"
trust_host_root_certs: false
编写bat文件或dos下允许命令:
ngrok.exe -config=ngrok.cfg -subdomain=test 801
访问地址:http://test.ngrok.kfpt.cn:15001 ,进入到iis发布的web测试页面,映射成功。
特别说明:
ngrok搭建未采用http的80和https的443默认端口,是因为服务器已经安装了apche,在调试微信和支付宝开发过程中必须具备80域名端口的访问条件,因此可以将apche端口修改为其它端口,或采用nginx代理转发方式,实现共享80端口访问。