这两天做了下支付功能,回调地址需要固定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 rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp 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