一、概述

ngrok  是一个反向代理的内网穿透服务器,用于把没有公网地址的内网主机映射到公网,常被用于微信后台开发。

ngrok  使用go  语言编写,目前版本2.1 ,开源版本为1.7 存在内存泄漏且不稳定,长时间使用会导致资源占用异常,不适合长久使用,需要稳定版可以去购买正版。

环境要求:公网主机,域名。

二、环境准备

1.安装go语言环境

软件基于go  语言编写,需要先安装go  语言环境,安装方法详见:linux安装Go1.9.2

2.安装git

go  语言安装依赖包时需要用到git ,安装方法:centos源码安装git

3.域名

添加一个A记录 指向服务器地址,例如ngrok.dyxmq.cn

添加一个CNAME  解析,例如a.ngrok.dyxmq.cn ,记录值:ngrok.dyxmq.cna.ngrok.dyxmq.cn 是访问本地主机的地址,可以同时添加多个CNAME 解析映射到多个不同的客户端。

三、安装ngrok

# 下载源码
git clone https://github.com/tutumcloud/ngrok.git ngrok
mv ngrok/ /usr/local/
cd /usr/local/ngrok/
# 填入域名地址
NGROK_DOMAIN="ngrok.dyxmq.cn"

生成ssl密钥和证书,如果已有证书可以跳过这一步:

# 生成密钥
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

编译服务端:

make release-server release-client

如果没有意外发生的话,将会在bin  目录下生成服务端和linux 客户端:

[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

生成不同系统下的客户端:

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. 开启服务端

/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: 和本地进行数据通信的端口。
  • tlsCrt: 证书文件路径
  • tlsKey: ssl私钥文件路径

2. 开启本地客户端

创建一个配置文件ngrok.cfg ,写入配置以下信息:

server_addr: ngrok.dyxmq.cn:9001  # 这个端口和服务端的tunnelAddr对应
trust_host_root_certs: false

windows 下在当前目录打开命令提示符,输入以下命令运行本地客户端:

ngrok.exe -subdomain b -proto=http -config=ngrok.cfg 80  # 80是想要映射的本地端口

linux 环境下开启本地客户端:

./ngrok -subdomain win -proto=http -config=ngrok.cfg 80

成功连接之后的效果:

3. 测试页面

本地windows 主机开启iis 服务,然后在浏览器输入http://b.ngrok.dyxmq.cn:9080 ,可以访问到 本地网页:

一般的云服务商都会有默认的安全组禁止了端口,需要手动开启凯能访问服务。

windows10安装IIS:http://www.dyxmq.cn/windows/windows-10-iis-web-service.html

五、优化

1. 添加到supervisor守护进程

http://www.dyxmq.cn/others/add-ngrok-to-supervisor.html

2. 给ngrok子域名添加反向代理

http://www.dyxmq.cn/others/add-reverse-proxy-to-ngrok.html

3. windows一键运行脚本

windows 每次运行都要使用命令提示符,然后还要输入一长串命令,比较麻烦。

可以在程序目录下添加一个run.bat ,把运行命令写进去,然后双击run.bat  就能直接运行了:

ngrok.exe -subdomain b -proto=http -config=ngrok.cfg 80
最后修改:2019 年 01 月 25 日
喜欢就给我点赞吧