# 搭建ngrok服务

回调地址需要固定ip或域名,每次都去服务器调略麻烦,用ngrok可以将本机暴露在公网,实现本地调试的目的。

# 准备配件##

一台有公网ip的服务器
一个可用的域名

服务器配置

这里服务器的系统用的是centos 7 
对外开放80,443,4443端口

域名配置

将该域名的一个子域名解析到这台服务器
比如域名为test.com,可以将ngrok.test.com解析到该服务器,添加两个ngrok.test.com的A记录,如
ngrok.test.com
*.ngrok.test.com

# 开始搭建##

一. 安装git,golang,openssl

yum install -y git golang openssl

二. 将ngrok克隆到本地

git clone https://github.com/inconshreveable/ngrok.git /usr/local/ngrok

三.生成证书

# 使用下面命令生成证书,注意将ngrok.test.com替换为你的域名
cd /usr/local/ngrok
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.test.com" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=ngrok.test.com" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

# 将我们生成的证书替换ngrok默认的证书
\cp -r rootCA.pem assets/client/tls/ngrokroot.crt
\cp -r device.crt assets/server/tls/snakeoil.crt
\cp -r device.key assets/server/tls/snakeoil.key

四.编译不同平台的服务端和客户端

生成服务端
make release-server

生成客户端
GOOS=linux GOARCH=amd64 make release-client
GOOS=windows GOARCH=amd64 make release-client
GOOS=darwin GOARCH=amd64 make release-client

这里编译的时间和服务器的网络有关系,国内网络时间会长一点,可能还会出现中断的情况,可多尝试几次。实在不行就走代理 o( ̄︶ ̄)o

客户端对应的系统参考如下

Linux 平台 32 位系统:GOOS=linux GOARCH=386
Linux 平台 64 位系统:GOOS=linux GOARCH=amd64

Windows 平台 32 位系统:GOOS=windows GOARCH=386
Windows 平台 64 位系统:GOOS=windows GOARCH=amd64

MAC 平台 32 位系统:GOOS=darwin GOARCH=386
MAC 平台 64 位系统:GOOS=darwin GOARCH=amd64

ARM 平台:GOOS=linux GOARCH=arm

编译完成后,将./bin下面对应的客户端文件拷贝到本地,注意是ngrok的,不是ngrokd

# 使用##

一.启动服务端

在服务器上运行如下命令,注意域名替换为你的域名

nohup ./bin/ngrokd -domain="ngrok.test.com" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443" &

这里启动了80,443,4443这些端口,4443用于和客户端连接

二.启动客户端

在本地新建一个文件ngrok.cfg,内容如下

server_addr: "ngrok.test.com:4443"
trust_host_root_certs: false

将服务端编译好的客户端文件拷贝到本地,启动

ngrok -subdomain pay -config=./ngrok.cfg 80
# 这里指将本地的80端口通过ngrok暴露到公网

如果正常的话,可以看到如下信息

ngrok                                                                                                                                         (Ctrl+C to quit)
                                                                                                                                                              
Tunnel Status                 online                                                                                                                          
Version                       1.7/1.7                                                                                                                         
Forwarding                    https://pay.ngrok.test.com -> 127.0.0.1:80                                                                                
Forwarding                    http://pay.ngrok.test.com -> 127.0.0.1:80                                                                                 
Web Interface                 127.0.0.1:4040                                                                                                                  
# Conn                        0                                                                                                                               
Avg Conn Time                 0.00ms                                                                                                                                                                

打开浏览器,访问http://pay.ngrok.test.com,即可访问到本机127.0.0.1:80内容

三.查看使用情况

默认访问如下页面,可看到ngrok的相关信息 http://127.0.0.1:4040/http/in