ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。反向代理在计算机网络中是代理服务器的一种。
资料
Ngrok 官网 目前已经切换为 ngrok2 。免费 8 小时
Ngrok Github 升级为 ngrok2 后已闭源。
写在前面
最近痛下决心,把服务器重装系统了。一些软件,工具能用 docker 就用 docker。管理起来方便多了。所以 ngrok 也是用 docker 方式。17 年第一次装ngrok 时,就是直接在服务器上装的,装的过程很痛苦,各种包编译的问题,或者缺胳膊少腿的,折腾了 2-3 天,7,8 篇教程的综合才安装好。所以不建议在服务器上直接安装。 特别是一些没什么基础的小白。避免安装失败或者其他原因造成的服务器各类包安装冗余,甚至冲突。使用 docker 安装,不好用删了即可。
为什么要搭建自己的 ngrok
- 管理内网服务器,内网web进行演示
- 快速开发微信程序和第三方支付平台调试
- 本地WEB外网访问、本地开发微信、TCP端口转发
国内内网穿透
至于搭建自己的 ngrok 服务的目的。 因为没有免费的……
选 ngrok 还是 frp
首先你自己要清楚你的使用范围。 因为他的速度跟你服务器以及供应商息息相关。比如我买的搬瓦工VPS,倒数第二便宜那种。 那内网穿透也就仅限个人项目测试,小范围人群测试这种。 所以在这种情况下无需考虑 ngrok 或 frp 那个更优。 都慢的抓脑壳。
如果是公司使用,那还是建议在阿里云等服务器上搭建一个,速度也快,性能也好。
至于 ngrok,frp 我都试过。 最后选了 ngrok,方便点
准备工作
- 公网 IP 的服务器
- 国内: 腾讯云,阿里云……
- 国外: 搬瓦工,Vultr, 亚马逊……
- 域名
- 可以找别人借你一个二级域名
- 可以买一个域名 便宜的首年 10 来块。 注意:推荐 GoDaddy 或者国外买域名
- Linux 系统。 本文不支持 windows
DNS 解析
全文使用 example.com 代替你购买的域名。 二级域名同理
添加 2 条 A 记录。
1 | # host Type TTL value |
xxx.xxx.xxx.xxx
为你服务器的 IP 地址
- 把 ngrok.example.com 解析到 xxx.xxx.xxx.xxx
- 把 *.ngrok.example.com 解析到 xxx.xxx.xxx.xxx
- ngrok 部署后,会反向代理到对应的子域名中
国内的服务器服务商,DNS 解析基本都支持泛域名(*.xxx.com)添加 。这里比国外强。
如果你的提供商不支持,要么你每增加一个子域名,在 DNS 中增加一个,要么切换到 DNSPod 去
docker 部署 ngrok
本文使用 hteen/ngrok 镜像。
或者你自己选一个 docker 中 ngrok 镜像搜索
docker 的安装不在本文讨论范围。 可以参考 CentOS-7 安装 Docker
拉镜像
1 | # 拉镜像 |
初始化
1 | # 注意替换域名 |
如果国内服务器,这一步时间很长。耐心等待!!!
ngrok 初始化后,会生成 /data/ngrok
目录
查看客户端
目录 /data/ngrok/bin
1 | bin/ngrokd # 服务端。 不管。 注意不要和客户端 ngrok 看混了 |
使用 ftp 或者 scp 等方式拷贝对应客户端到你本地
启动 ngrok 服务
1 | # 注意修改域名 |
- 本地 8081 转发到 image 的 80 端口
- 本地 8082 转发到 image 的 443 端口
- 本地 4443 转发到 image 的 4443 端口
配置 nginx
1 | server { |
配置完后,重启 nginx
配置防火墙
1 | firewall-cmd --zone=public --add-port=4443/tcp --permanent # 开放4443端口 |
配置客户端
下载客户端到本地。并新建 ngrok.yml
1 |
|
启动客户端
1 | # 在 ngrok 客户端目录 |