准备工作
拉取镜像
1
| [root@iZ25f738hs2Z ngrok]# docker pull hteen/ngrok
|
启动一个容器生成ngrok客户端,服务器端和CA证书
1 2
| [root@iZ25f738hs2Z ngrok]# docker run --rm -it -e DOMAIN="tunnel.hteen.cn" \ -v /data/ngrok:/myfiles hteen/ngrok /bin/bash /build.sh
|
挂载宿主机目录/data/ngrok到容器内/myfiles目录 ,之后会
1 2 3 4 5 6
| Generating RSA private key, 2048 bit long modulus ...............+++ ..........+++ ..... build ok ! [root@iZ25f738hs2Z ngrok]#
|
当看到build ok !的时候就成功了
1 2 3 4 5 6 7 8
| [root@iZ25f738hs2Z ngrok]# ls -Al -rw-r--r-- 1 root root 1679 6月 14 18:58 base.key -rw-r--r-- 1 root root 1111 6月 14 18:58 base.pem -rw-r--r-- 1 root root 17 6月 14 18:58 base.srl drwxr-xr-x 4 root root 4096 6月 14 19:01 bin -rw-r--r-- 1 root root 993 6月 14 18:58 device.crt -rw-r--r-- 1 root root 899 6月 14 18:58 device.csr -rw-r--r-- 1 root root 1675 6月 14 18:58 device.key
|
生成了我们要的客户端和服务端在/data/ngrok/bin目录下,包括
1 2 3 4
| bin/ngrokd 服务端 bin/ngrok linux客户端 bin/darwin_amd64/ngrok osx客户端 bin/windows_amd64/ngrok.exe windows客户端
|
启动Ngrok server
直接挂载刚刚的/data/ngrok到容器即可启动服务
1 2 3 4 5 6
| [root@iZ25f738hs2Z ngrok]# docker run -idt --name ngrok-server \ -v /data/ngrok:/myfiles \ -p 80:80 \ -p 443:443 \ -p 4443:4443 \ -e DOMAIN='tunnel.hteen.cn' hteen/ngrok /bin/bash /server.sh
|
这样我们就启动了一个ngrok服务端程序
域名解析
这里我们需要添加两条A记录到阿里云服务器

这样我们才能将 tunnel.hteen.cn 和 *.tunnel.hteen.cn DNS解析到我们的服务器
客户端连接
下载我们生成的客户端,我这里以osx为例,其他平台一样
首先创建一个ngrok.cfg配置文件
1 2
| server_addr: "tunnel.hteen.cn:4443" trust_host_root_certs: false
|
然后在命令行执行
1
| ./ngrok -config ./ngrok.cfg -subdomain wechat 192.168.99.100:80
|
我这里是将wechat.tunnel.hteen.cn绑定的本地192.168.99.100:80
如果不指定-subdomain参数,每次启动客户端的时候会随机分配一个域名,随意并不方便
成功连接效果

Nginx + Docker + Ngrok
由于ngrok默认使用80和443端口,我服务器已经运行了Nginx服务 ,
所以我这里启动Ngrok Server的时候并不是绑定的80和443端口,而是绑定的8082和4432
1 2 3 4 5 6
| [root@iZ25f738hs2Z ngrok]# docker run -idt --name ngrok-server \ -v /data/ngrok:/myfiles \ -p 8082:80 \ -p 4432:443 \ -p 4443:4443 \ -e DOMAIN='tunnel.hteen.cn' hteen/ngrok /bin/bash /server.sh
|
启动之后需要在nginx.conf 添加两条反向代理配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| server { listen 80; server_name tunnel.hteen.cn *.tunnel.hteen.cn;
location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://10.24.198.241:8082; }
}
server { listen 443; server_name tunnel.hteen.cn *.tunnel.hteen.cn;
location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://10.24.198.241:4432; }
}
|
10.24.198.241 是我阿里云内网IP
结语
如果你暂时不准备搭建自己的ngrok服务器,也可以使用我目前的服务器
客户端在这里下载
^_^ Have a nice day