介绍
ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。
通过 ngrok 服务我们可以在本地调试微信的接口,调试微信和支付宝的支付回调或者临时搭建一个通道用于在外网访问本地部署的项目。
准备
一台云服务器(以 centos 为例)
一个域名
搭建
-
配置一个 ngrok 的二级域名 :ngrok.xxx.com (将 xxx.com 替换为你自己的域名,下同)
一个泛域名 : *.ngrok.xxx.com
都指向云服务器的 ip 地址 -
在服务器上安装 git
yum -y install git
-
在服务器上安装 golang
yum -y install golang
-
clone ngrok 源码
#创建一个文件夹 mkdir ~/ngrok && cd ~/ngrok #下载源码 git clone https://github.com/inconshreveable/ngrok.git
-
生成自签名 ssl 证书
openssl genrsa -out rootCA.key 2048 openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.xxx.com" -days 5000 -out rootCA.pem openssl genrsa -out device.key 2048 openssl req -new -key device.key -subj "/CN=ngrok.xxx.com" -out device.csr openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
-
替换默认的证书
# 拷贝刚才生成的证书到指定的文件夹 cp rootCA.pem assets/client/tls/ngrokroot.crt cp device.crt assets/server/tls/snakeoil.crt cp device.key assets/server/tls/snakeoil.key
-
编译服务端与客户端的 ngrok 文件
服务端(Linux):
make release-server
客户端:
# linux 客户端 make release-client # mac 客户端 GOOS=darwin GOARCH=amd64 make release-client # windows 客户端 GOOS=windows GOARCH=amd64 make release-client
-
启动服务端 ngrokd
# :8999 和 :4430为服务器的端口,因为我的服务器默认的 80和 443 端口被占用了,改用其他的端口 ./bin/ngrokd -domain="ngrok.xxx.com" -httpAddr=":8999" -httpsAddr=":4430"
-
下载编译好的客户端文件到本地
# mac 客户端 scp root@xxx:~/ngrok/bin/darwin_amd64/ngork ./ # windows 客户端 scp root@xxx:~/ngrok/bin/windows_amd64/ngork.exe ./
-
配置客户端连接(以 mac 环境为例)
修改 ngrok.cfg 文件改为以下内容server_addr: " ngrok.xxx.com:4443" trust_host_root_certs: false
将 ngrok 文件设置为可执行文件
chmod +x ngrok
在客户端启动一个项目,假设在我的客户端有一个运行的项目,端口为8000,启动客户端
#如果不加参数-subdomain=test,将会随机自动分配子域名。 ngrok -config=ngrok.cfg -subdomain=test 8000
如果配置没有问题的话,会出现以下内容
访问 test.ngrok.xxx.com:8999 即可访问到运行在本地的项目