想要让ngrok同时承载多个域名,核心做法是通过ngrok.yml配置文件为每个域名建立独立的隧道,并分别指定域名和转发端口,这样才能实现一机多域名同时在线。
ngrok多域名配置:三种方案对比与实操
先别急着敲命令,你得想清楚一个场景:本地起了三个网站,一个给客户看后台,一个给同事测接口,还有一个自己要联调小程序,如果每次只开一个隧道,来回切换麻烦不说,回调地址一变,微信开发者工具那边的安全域名又得改,把网关、支付回调、App测试环境全部指向同一个ngrok进程,才是真实需求。
业内专家指出,ngrok多域名的本质是让一个客户端进程管理多条隧道,每条隧道对应一个代理入口,实现路径有三条:改配置文件、走自定义域名、自己搭服务端,下面按推荐程度逐个拆。
ngrok多个域名怎么绑定到同一台电脑?
最常见的方法是编辑ngrok.yml,把每个域名写成一个独立的隧道条目,然后一次性启动,你不需要开多个终端窗口,也不用装多个ngrok进程。
具体操作分四步:
- 打开ngrok安装目录下的
ngrok.yml(没有就新建)。 - 在
tunnels:下面定义多个名字。 - 每个名字里指定
proto、addr和hostname(或subdomain)。 - 保存后运行
ngrok start --config ngrok.yml name1 name2。
举个例子,你想同时映射dev.example.com和test.example.com,配置文件这样写:
tunnels:
dev:
proto: http
addr: 3000
hostname: dev.example.com
test:
proto: http
addr: 4000
hostname: test.example.com
启动命令:
ngrok start --config ngrok.yml dev test
运行后你会看到两张在线隧道列表,各自绑定不同域名和本地端口,修改任意一个服务的代码,刷新对应域名就能看到变化,互不干扰。
注意一个细节:addr既可以写端口号,也可以写ip:端口,比如0.0.1:3000,当你的机器上同时挂着MySQL和Redis时,端口冲突的概率很高,建议写全IP和端口,避免ngrok误连到其他服务的默认端口。
自定义域名绑定:如何绕开随机子域名
官方免费域名每次启动都会变,这对多域名场景是个灾难,你昨天发给客户的管理后台链接,今天再打开就404了,所以第二个方案是绑定你自己的域名。
前提条件:你至少有一个域名,且能修改DNS解析记录,ngrok官方账号的基础版(免费)支持一个自定义域名,付费版支持更多,如果你手头只有免费套餐,想同时绑多个自定义域名,就得用下面第三种的思路了。
配置自定义域名的步骤:
- 在ngrok后台的Domains页面添加你的域名。
- 按提示把一条CNAME记录指向
ngrok.io(具体值取决于你的账号区域)。 - 在
ngrok.yml的对应隧道里,把hostname换成你的域名。 - 重启隧道。
这里有个容易踩的坑:CNAME记录生效需要几分钟,但ngrok会立刻校验TXT记录,如果提示Hostname not found,多半是解析还没同步,等几分钟再试,别反复重启客户端。
自建ngrok服务端:多域名无限制的本质解法
免费版和付费版都受官方配额限制,如果你要同时管理几十个测试域名,或者客户给了独立的子域名做联调,自建服务端才是长久之计,本质是把ngrok的客户端和服务端都部署到自己的服务器上,域名完全由你控制。
你需要准备:
- 一台有公网IP的Linux服务器
- 一个已经解析到你服务器的域名(支持泛解析最佳)
- 编译好的ngrok服务端程序(
ngrokd)
操作路径概括如下:
- 在服务器上解压ngrok服务端,生成自签名证书(生产环境建议用正式证书)。
- 修改服务端启动参数,绑定
httpAddr、httpsAddr和tunnelAddr。 - 客户端连接时指定
server_addr为你服务器IP和隧道端口。 - 通过泛解析
.test.yourdomain.com,让客户端任意指定子域名。
自建方案的优缺点得分清楚:
- 优点:域名数量无限制,流量不走ngrok官方,隐私可控。
- 缺点:需要维护服务器、处理HTTPS证书续期、网络速度取决于你的服务器带宽。
对大多数中小团队而言,先花一天时间搞定自建,后续所有联调环境都能统一管理,比每个月给官方交订阅费划算,但如果你只想临时演示一两个域名,用方案一或方案二就足够。
各方案对比:选型看这张表就够了
| 维度 | 官方代理(默认) | 官方自定义域名 | 自建服务端 |
|---|---|---|---|
| 域名数量 | 1个随机域名 | 按套餐数量 | 理论无限 |
| 域名稳定性 | 每次重启变化 | 固定 | 固定 |
| 配置难度 | 极低 | 低 | 高 |
| 成本 | 免费 | 有免费额度,收费档位多 | 服务器费用+维护时间 |
| 适用场景 | 临时演示、快速联调 | 正式测试环境 | 多团队、多项目长期使用 |
ngrok自定义域名价格与免费版限制
很多人搜这一步是想知道到底要花多少钱,行业共识认为,ngrok的付费体系按域名数量、并发连接数和带宽分层,且不同地区价格略有差异,截至当前的公开信息,官方免费版包含1个静态域名和1个自定义域名,但连接数和吞吐量受限,高峰期容易断连。
如果你只用官方域名,免费版就够做基础联调,但需要注意两个限制:
- 免费域名有随机性:每次重启ngrok,域名前段会变,后端保持一致。
- 并发隧道数限制:免费版同时只开2条隧道,意味着你用配置文件启动3个名字时,第三个会直接报错。
对多数个人开发者来说,同时跑2条隧道已经覆盖常见场景:一个前端一个后端,如果你非要同时挂3个以上,要么升级套餐,要么走自建路线。
多域名ngrok的常见坑与避坑指南
端口冲突和隧道名冲突
当你在配置文件里给两个隧道指定了同一个addr,ngrok不会报错,但两个域名会同时转发到同一个端口,如果你本意是想让不同域名走不同服务,这种错误特别隐蔽,排查方法很简单:启动后看每一行隧道后面的Forwarding字段,确认端口和域名对应关系。
域名解析残留问题
从官方自定义域名切到自建服务端时,原来的CNAME记录可能还指向旧地址,如果服务端日志一直显示Failed to resolve hostname,多半是你本地hosts或者DNS缓存没刷新,在macOS或Linux上执行:
sudo dscacheutil -flushcache
Windows上执行:
ipconfig /flushdns
免费隧道的不稳定性
统计显示,免费版隧道在长期连接时有一定概率出现断流,尤其是长连接WebSocket场景,如果你的联调需要长时间保持连接,建议在代码里加上自动重连逻辑,或者直接使用付费自定义域名。
ngrok多域名的核心就是编好配置文件,让每个域名对应一个明确的内网服务,人少用官方免费版,人多用自建服务端,最忌的是不加规划就临时开一堆终端窗口,你只要先把域名需求和端口映射列清楚,再选一个方案落地,整个联调效率会提升一个档次。
Q&A:ngrok多域名配置相关
问:ngrok多个域名同时在线会影响网速吗?
答:会,所有流量都经过ngrok的转发服务器,你的本地带宽和ngrok服务端的带宽共同决定实际速度,如果同时跑两个视频流项目,延迟和卡顿会明显比单条隧道严重,局域网内联调建议改用局域网IP,避免绕公网。
问:ngrok自定义域名必须用HTTPS吗?
答:ngrok会自动为自定义域名配置HTTPS证书,你不需要手动生成,但如果你在自建服务端上为自己的域名启用HTTPS,需要确保证书包含所有子域名,通配符证书是最常见的做法,否则浏览器会报证书不匹配。
问:ngrok配置文件支持环境变量吗?
答:支持,在ngrok.yml里可以使用${VAR}语法引用环境变量,例如addr: ${LOCAL_PORT},这样你能在同一个配置文件中管理多套环境,启动前动态指定端口,避免每次改文件,这是不少团队在CI流程中的常用做法。