ngrok前置域名就是ngrok隧道对外暴露的公开访问域名,访问者通过它访问你本地或内网的服务;免费版多为随机子域名或ngrok提供的静态域名,绑定自己的域名通常需要付费计划,配置的核心是账号token、域名预留、DNS的CNAME验证,以及启动隧道时用命令指定域名。
ngrok前置域名是什么?先厘清它和自定义域名的关系
在ngrok语境里,“前置域名”不是官方唯一术语,官方文档更多使用Forwarding URL、Domain、Custom Domain这些说法,你可以把它想成一条隧道的“门牌号”:本地服务跑在 localhost:3000,ngrok在公网给你一个 https://xxxx.ngrok-free.app 或 https://dev.example.com,外部请求先到这个门牌号,再被转发到本地端口。
这个门牌号由协议、域名、端口组成,日常开发最常用的是HTTPS域名部分,它既不是本地服务域名,也不是内网DNS域名,而是ngrok边缘节点暴露给公网的入口。
前置域名、隧道地址和本地端口三者怎么区分
| 组成 | 示例 | 作用 |
|---|---|---|
| 前置域名 | dev.example.com 或 xxxx.ngrok-free.app |
外部访问的公开入口 |
| 隧道地址 | https://dev.example.com |
带协议的完整Forwarding URL |
| 本地端口 | http://localhost:3000 |
ngrok转发到的本地服务地址 |
从实际使用看,前置域名有两种常见形态:一种是ngrok随机分配的免费子域名,重启后可能变化;另一种是预留的静态域名或自定义域名,入口相对固定。固定入口对Webhook回调、OAuth回调、小程序合法域名、第三方平台白名单都很重要,因为随机域名一变,平台侧配置就会失效。
为什么需要固定前置域名
具体场景很常见:你在本地调试支付回调,第三方平台要求填一个HTTPS回调地址,还会校验域名白名单,用随机域名,今天通了,明天重启ngrok又换一个,白名单就得反复改,再比如GitHub Webhook、企业微信回调、OAuth授权回调,都依赖稳定域名。
据ngrok官方文档,自定义域名需要在Dashboard完成域名预留,并按提示配置DNS记录,免费账户通常只能使用ngrok提供的域名形态,绑定自己的域名一般要升级到付费计划。
ngrok自定义域名怎么配置?按这四步走
配置前先确认三件事:你有域名管理权限;你的ngrok计划支持自定义域名;你愿意按DNS提示添加CNAME记录,下面以子域名 dev.example.com 转发到本地 3000 端口为例。
第一步:安装并写入authtoken
先注册ngrok账号,在Dashboard复制authtoken,命令行执行:
ngrok config add-authtoken 你的tokenngrok config check
这一步把账号和本机CLI绑定,token不对,后续域名预留和隧道启动都会报权限错误。
第二步:在Dashboard预留域名
进入ngrok Dashboard的Domains区域,选择New Domain,输入 dev.example.com,选择离你用户较近的region,系统会给出一个CNAME目标地址,建议用子域名,dev、app、api,不要直接拿根域名做CNAME,因为根域名通常不支持CNAME,需要域名商提供ALIAS或ANAME。
第三步:到DNS服务商添加CNAME
在域名解析控制台新增一条CNAME记录:
- 主机记录:
dev - 记录类型:
CNAME - 记录值:Dashboard给出的ngrok目标
- TTL:先按默认值
保存后等待解析生效,可用 dig dev.example.com CNAME 或 nslookup dev.example.com 检查,解析没生效时,Dashboard的域名状态通常不会变成已验证。
第四步:启动隧道时指定域名
新版CLI常见写法:
ngrok http 3000 --domain=dev.example.com- 或
ngrok http 3000 --url=https://dev.example.com
旧版本可能使用 --hostname,不同版本参数名有差异,以 ngrok http --help 和官方文档为准,启动成功后,Forwarding一行会显示你的自定义域名,而不是随机子域名。
常见报错要会看:域名未验证,通常是CNAME没生效;--domain 报无权限,通常是计划不支持或域名没在Dashboard预留;访问502,通常是本地服务没启动或端口写错。
本地开发webhook调试用ngrok前置域名怎么配置
这个场景最实用,假设你在调支付回调,本地服务是 http://localhost:3000,回调路径是 /webhook/pay。
- 先启动固定域名隧道:
ngrok http 3000 --domain=dev.example.com - 把第三方平台回调地址填成
https://dev.example.com/webhook/pay - 在平台后台把
dev.example.com加入白名单 - 本地服务只监听
0.0.1时,确认ngrok能访问到;必要时让服务监听0.0.0 - 排查时看ngrok日志:
ngrok http 3000 --log=stdout
HTTPS在ngrok边缘终止,本地用HTTP即可,请求到ngrok后会被转发到本地端口,所以本地服务不需要自己配证书。
ngrok免费版和付费版域名区别:随机子域名与固定入口
| 对比项 | 免费随机子域名 | 免费静态域名 | 付费自定义域名 |
|---|---|---|---|
| 域名形态 | .ngrok-free.app 随机分配 |
ngrok提供的固定子域名 | 你自己的域名,如 dev.example.com |
| 重启后变化 | 可能变化 | 通常不变 | 不变 |
| 能否绑定自己的域名 | 不能 | 一般不能 | 可以 |
| 适合场景 | 临时演示、一次性调试 | 短期固定回调 | 品牌入口、长期联调、团队协作 |
| 主要限制 | 入口不稳定 | 域名归属ngrok | 需要付费计划 |
行业共识认为,回调白名单和第三方平台配置更适合固定域名;随机域名适合快速验证,不适合长期挂在生产联调环境里。
国内使用ngrok前置域名稳定吗?先看网络链路与场景
ngrok的边缘节点在海外,国内访问会受跨境链路影响,不同地区、不同运营商体验差异较大,据统计,跨境网络访问的延迟和丢包在不同时间段波动明显,所以它更适合开发调试、临时演示,不建议直接作为面向国内用户的正式生产入口。
业内专家指出,判断是否可用要看具体场景:海外第三方平台回调到你本地,ngrok链路可能够用;国内用户直接访问你的演示页面,体验可能不稳定,可以用 curl -I https://dev.example.com 看响应头,用浏览器开发者工具看TLS握手和首包时间,若延迟明显,考虑Cloudflare Tunnel、frp、cpolar、花生壳等替代方案,或把服务部署到国内云主机。
ngrok自定义域名价格多少?套餐选择前先看这些
ngrok自定义域名的价格不写死,因为套餐会调整,按官网订阅周期计费,绑定自己的域名需要至少包含自定义域名能力的付费计划;免费版可以用ngrok提供的域名,但不适合长期品牌入口,选择时看三点:
- 是否需要自己的域名和HTTPS入口
- 是否需要多人协作和访问控制
- 是否能接受跨境链路的延迟波动
短期演示先用免费随机域名或免费静态域名;需要稳定回调白名单,再考虑最低含自定义域名的付费套餐;团队用再评估更高套餐,域名本身的年费和DNS服务成本另算,别只看ngrok订阅价。
配置时容易踩的坑与排查清单
- CNAME没生效:先等几分钟,再用
dig查;不要同时保留冲突的A记录。 - 根域名做CNAME:多数域名商不支持,改用子域名或ALIAS/ANAME。
- token没写入:
ngrok config check看配置。 - CLI版本旧:
ngrok update或按官方文档换参数。 - 本地服务没监听:
curl http://localhost:3000先自测。 - 端口写错:
ngrok http 3000的端口必须和本地服务一致。 - 防火墙拦截:确认本机防火墙允许ngrok出站。
- 访问502:ngrok已收到请求,但本地服务未响应,查本地进程和端口。
Q&A:ngrok前置域名常见问题
ngrok前置域名可以绑定根域名吗?
不建议直接用根域名做CNAME,多数DNS服务商不支持apex根域名CNAME,建议用 dev.example.com 这类子域名;根域名需要ALIAS/ANAME或域名商特殊支持。
免费版能固定ngrok前置域名吗?
免费版可以用ngrok提供的随机子域名,部分账户可预留ngrok静态域名;绑定自己的域名通常需要付费计划,随机子域名重启后可能变化,固定入口要按账户能力选择。
自定义域名配置后访问502怎么办?
先看ngrok日志里请求是否到达,再在本地执行 curl http://localhost:3000 确认服务是否响应,502通常表示ngrok已收到外部请求,但本地服务没有给出有效响应。
ngrok前置域名的本质是隧道入口,免费形态适合快速调试,付费自定义域名适合稳定联调;把域名预留、CNAME验证和启动命令对齐,配置就完成了。