ngrok配置文件是管理隧道、域名、认证策略和访问控制的核心入口,掌握它的写法就能让内网穿透从“临时用一下”升级为“稳定可维护的服务”。很多朋友把ngrok当成一次性工具,用完就关,但一旦涉及多个端口、固定域名、甚至团队协作,命令行参数就会变得又长又难维护,这时候,一份结构清晰的配置文件才是正解。
ngrok配置文件在哪里?如何快速定位默认路径
ngrok默认使用config.yml(或ngrok.yml)作为配置文件,具体位置因操作系统而异,不用死记硬背,直接运行ngrok config check,它会显示当前加载的配置路径,同时校验语法是否正确,行业共识认为,把配置文件放在用户主目录下是最省心的做法。
| 操作系统 | 默认配置文件路径 |
|---|---|
| Windows | C:\Users\你的用户名\.config\ngrok\ngrok.yml |
| macOS | ~/.config/ngrok/ngrok.yml |
| Linux | ~/.config/ngrok/ngrok.yml |
如果你在某个目录下新建了ngrok.yml,运行ngrok命令时并不会自动加载它,必须通过-config参数显式指定。
ngrok http 8080 -config /path/to/ngrok.yml
验证配置文件语法:一条命令搞定
写错缩进是新手最容易踩的坑,YAML格式对空格敏感,少一个缩进ngrok就会报错,改动配置后先跑一遍校验:
ngrok config check
如果输出显示“Valid configuration file”,说明没问题,如果报错,通常会有具体的行号和错误原因,照着改就是。
ngrok配置文件怎么写:从单隧道到多隧道的完整示例
配置文件的核心结构是version、tunnels和agent三块。version固定为2(不是需要重点记忆的数字,但当前稳定版本都使用2)。tunnels下定义每个隧道的名称和具体参数,agent则保存认证令牌和全局连接选项。
单隧道配置:最常见的本地Web服务
假设你有一个跑在4000端口的Node.js服务,想通过ngrok暴露到公网,配置文件可以这样写:
version: "2"
tunnels:
web:
proto: http
addr: 4000
保存后,用ngrok start web即可启动这个隧道,此时ngrok会分配一个随机域名,每次重启都会变。
多隧道配置:一次启动多个服务
比如本地同时跑着前端(3000端口)和后端(8080端口),你希望两条隧道同时开启,配置文件里继续加:
version: "2" tunnels: frontend: proto: http addr: 3000 backend: proto: http addr: 8080
运行ngrok start frontend backend或直接ngrok start --all,两条隧道就会一起建立连接,这在调试前后端分离项目时特别省事,不用开多个命令行窗口。
给配置文件加上认证令牌
在配置文件里写入authtoken,可以避免每次命令行都带-authtoken参数,先在你的个人面板里复制token,然后放到agent块下:
version: "2"
agent:
authtoken: 你的token粘贴到这
tunnels:
web:
proto: http
addr: 4000
注意version和agent是平级,缩进要一致,配置完成后,ngrok start web就会直接使用这个token。
ngrok yml配置示例:固定域名与本地域名映射
默认情况下每次启动域名都会变,不方便测试回调接口,只要你在ngrok后台绑定了自己的二级域名,就可以在配置文件中指定domain字段。
version: "2"
tunnels:
mysite:
proto: http
addr: 5000
domain: yourname.ngrok.app
这样启动后访问yourname.ngrok.app就能直达本地的5000端口,类似地,如果你有自定义域名(比如dev.example.com),需要在ngrok面板中完成域名验证后,同样写到domain字段即可。
通过配置文件实现访问密码保护
ngrok支持为隧道加上Basic Auth,比如给预览页面加一层验证,避免所有人都能打开:
version: "2"
tunnels:
admin:
proto: http
addr: 5001
basic_auth:
- "admin:secret123"
basic_auth是一个列表,可以放多个用户名密码对,注意用户名和密码中间用冒号隔开,密码不要用弱口令,毕竟暴露在公网上。
用配置文件转发TCP流量(比如SSH)
ngrok不只支持HTTP,还能转发任意TCP端口,例如你想让外部通过ngrok连接本地SSH服务(22端口),配置如下:
version: "2"
tunnels:
ssh:
proto: tcp
addr: 22
启动后会得到一个tcp.ngrok.io开头的地址和随机端口,外部通过ssh -p 某端口 用户@该地址即可连接,注意免费版TCP隧道不支持自定义远程端口,选用付费套餐才有此功能。
ngrok配置文件在Windows和macOS上的实操差异
虽然配置文件格式本身跨平台一致,但路径写法和命令调用有些不同。
Windows上的坑:反斜杠和配置路径
Windows下路径分隔符是\

,在YAML里需要写转义符或直接用正斜杠,比如想指定日志文件位置:
version: "2" agent: log: C:/Users/me/ngrok.log
建议统一用正斜杠,避免转义烦恼,另外Windows PowerShell里运行ngrok start --all时,如果提示权限问题,用管理员身份打开终端。
macOS/Linux上的软链接技巧
很多开发者习惯把配置文件放到项目目录里,与其他成员共享,这时可以在主目录创建软链接指向项目配置文件:
ln -s ~/myproject/ngrok.yml ~/.config/ngrok/ngrok.yml
这样在项目里更新配置,全局ngrok命令都会自动使用新配置,需要提醒的是,配置里不要写死个人token,否则团队协作时容易泄露。
ngrok配置文件常见错误排查与优化建议
相当一部分新手在配置ngrok.yml时,遇到问题不是语法错就是网络策略限制,这里梳理三个高频场景。
错误提示“failed to verify certificate”
如果配置了自定义域名,但SSL证书校验失败,优先检查域名解析是否指向ngrok的IP,且域名是否已完成CNAME解析,有时候DNS缓存会有延迟,等几分钟再试。
报错“yaml: line 6: mapping values are not allowed in this context”
这是典型的缩进错误,YAML里同一层级的键必须对齐,子键比父键多两个空格即可,推荐使用编辑器自带的YAML格式化工具,比如VS Code里按Shift+Alt+F。
优化建议:把常用参数写进配置文件
命令行虽然快,但参数一多就乱,可以把超时、重试次数、日志级别等全局选项统一放到agent下,团队协作时保持配置一致,下面是一个增强版的demo:
version: "2"
agent:
authtoken: xxxx
log_level: warn
log_format: logfmt
tunnels:
web:
proto: http
addr: 8080
inspect: false # 关闭请求检查页面,减少内存占用
inspect: false在公网生产环境调试时很有用,避免真实请求细节暴露在web界面上。
从命令行到配置文件的迁移方法
如果你已经习惯用ngrok http 8080这种命令方式,迁移到配置文件并不难,核心思路是:把http协议和8080端口搬到tunnels块下,把-authtoken参数搬到agent块下,具体操作步骤:
- 在ngrok安装目录或主目录新建
ngrok.yml - 填写
version: "2" - 在
tunnels下定义隧道名称,例如main - 设置
proto: http、addr: 8080 - 把token粘贴到
agent.authtoken - 运行
ngrok start main验证

对比表格:
| 命令行参数 | 配置文件写法 |
|---|---|
-authtoken xxx |
agent.authtoken: xxx |
-log_level debug |
agent.log_level: debug |
http 8080 |
tunnels.main.addr: 8080 |
--domain example.ngrok.app |
tunnels.main.domain: example.ngrok.app |
如何在ngrok配置文件中设置自定义域名和保留地址
自定义域名的前提是你在ngrok的后台开启了一个保留域名,免费版本也有一个随机域名,但无法自定义,付费后可以在Dashboard里创建保留域名(如myapp.ngrok.app),然后在配置文件里直接引用,假设你有一个region设置为jp的需求,可以在agent块下注明:
version: "2"
agent:
region: jp
tunnels:
app:
proto: http
addr: 3000
domain: myapp.ngrok.app
这样启动时自动选择日本节点,适合面向亚太地区的测试流量,国内开发者经常把这个配置用于调试海外API回调,延迟会明显降低。
配置文件是ngrok长期使用的分水岭
从临时转发到常态化调试,配置文件的引入意味着你不再依赖容易出错的命令行记忆,只要把验证过的ngrok.yml放进项目仓库,换电脑、换同事、换环境,一行ngrok start --all就能复现同样的隧道拓扑,掌握这套写法,内网穿透才会真正变成一项可维护的基础设施。
如何解决ngrok配置文件不生效的问题?
常见原因是ngrok启动时没有加载你编辑的那个文件。 如果你把ngrok.yml放在当前目录,但没有显式指定,ngrok不会自动找它,先运行ngrok config check,确认显示的路径与你编辑的文件一致,如果不一致,用-config参数强制指定,另一个隐蔽原因是缩进用了Tab而非空格,YAML严格禁止Tab缩进,把所有Tab替换成两个或四个空格即可。
配置文件里写了多个隧道,但ngrok start只启动了一个? 检查你的命令。ngrok start 隧道名只会启动指定隧道,想要全部启动必须用ngrok start --all,另外注意隧道名之间不能有中文或空格,建议只用小写字母和数字。
修改配置文件后是否要重启ngrok? 是的,配置文件只在启动时读取一次,修改后要先Ctrl+C停止当前进程,再重新运行ngrok start,如果嫌麻烦,可以按Ctrl+C后用方向键向上恢复历史命令,回车即可快速重启,有一些新版本支持热加载,但目前仍以重启为最稳妥的方式。

