一、概述
ngrok
是一个反向代理的内网穿透服务器,用于把没有公网地址的内网主机映射到公网,常被用于微信后台开发。ngrok
使用go
语言编写,目前版本2.1
,开源版本为1.7
,存在内存泄漏且不稳定,长时间使用会导致资源占用异常,不适合长久使用,需要稳定版可以去购买正版。
环境要求:公网主机,域名。
二、环境准备
1.安装go语言环境
软件基于go
语言编写,需要先安装go
语言环境,安装方法详见:CentOS源码安装golang
2.安装git
go
语言安装依赖包时需要用到git
,安装方法:centos源码安装git
3.域名
添加一个A记录
指向服务器地址,例如ngrok.dyxmq.cn
。
添加一个CNAME
解析,例如a.ngrok.dyxmq.cn
,记录值:ngrok.dyxmq.cn
,a.ngrok.dyxmq.cn
是访问本地主机的地址,可以同时添加多个CNAME
解析映射到多个不同的客户端。
三、安装ngrok
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 下载源码 git clone https://github.com/tutumcloud/ngrok.git ngrok mv ngrok/ /usr/local/ cd /usr/local/ngrok/ # 填入域名地址 NGROK_DOMAIN="ngrok.dyxmq.cn" # 生成密钥 openssl genrsa -out base.key 2048 openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.pem openssl genrsa -out server.key 2048 openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt cp base.pem assets/client/tls/ngrokroot.crt |
编译服务端:
1 |
make release-server release-client |
如果没有意外发生的话,将会在bin
目录下生成服务端和linux
客户端:
1 2 3 4 5 |
[root@vm bin]# ll bin total 21896 -rwxr-xr-x 1 root root 2527810 Oct 17 17:12 go-bindata -rwxr-xr-x 1 root root 11005317 Oct 17 17:13 ngrok -rwxr-xr-x 1 root root 8845829 Oct 17 17:13 ngrokd |
生成不同系统下的客户端:
1 2 3 4 |
GOOS=linux GOARCH=amd64 make release-server release-client # linux GOOS=windows GOARCH=amd64 make release-server release-client # windows GOOS=darwin GOARCH=amd64 make release-server release-client # mac GOOS=linux GOARCH=arm make release-server release-client # arm |
四、配置和使用
1. 开启服务端
1 |
/bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="ngrok.dyxmq.cn" -httpAddr=":9080" -httpsAddr=":8443" -tunnelAddr=":9001" |
httpAddr
:监听http
的端口,把访问该端口的http
请求转发到本地。httpsAddr
:监听https
的端口,把访问本端口的https
请求发送到本地。tunnelAddr
:和本地进行数据通信的端口。
2. 开启本地客户端
创建一个配置文件ngrok.cfg
,写入配置以下信息:
1 2 |
server_addr: ngrok.dyxmq.cn:9001 # 这个端口和服务端的tunnelAddr对应 trust_host_root_certs: false |
windows
下在当前目录打开命令提示符,输入以下命令运行本地客户端:
1 |
ngrok.exe -subdomain b -proto=http -config=ngrok.cfg 80 # 80是想要映射的本地端口 |
linux
环境下开启本地客户端:
1 |
./ngrok -subdomain win -proto=http -config=ngrok.cfg 80 |
成功连接之后的效果:
3. 测试页面
本地windows
主机开启iis
服务,然后在浏览器输入https://b.ngrok.dyxmq.cn:9080
,可以访问到 本地网页:
一般的云服务商都会有默认的安全组禁止了端口,需要手动开启凯能访问服务。
windows10安装IIS:https://www.dyxmq.cn/windows/windows-10-iis-web-service.html
五、优化
1. 添加到supervisor守护进程
https://www.dyxmq.cn/others/add-ngrok-to-supervisor.html
2. 给ngrok子域名添加反向代理
https://www.dyxmq.cn/others/add-reverse-proxy-to-ngrok.html
3. windows一键运行脚本
windows
每次运行都要使用命令提示符,然后还要输入一长串命令,比较麻烦.
可以在程序目录下添加一个run.bat
,把运行命令写进去,然后双击run.bat
就能直接运行了:
1 |
ngrok.exe -subdomain b -proto=http -config=ngrok.cfg 80 |
评论