ngrok 快速入门:将本地服务安全暴露到公网
前言
平时开发时,经常遇到需要把本地服务分享给外部测试或调用 Webhook 的场景,但公司的开发机没有公网 IP,防火墙限制也无法自行开放端口。ngrok 就是来解决这个问题的——一条命令,把本地端口映射到公网 HTTPS 地址。
同时它现在已升级为 AI & API Gateway 平台,不只是隧道,还提供流量策略、WAF、API 路由等企业级功能。
ngrok 是什么
ngrok 是一个云端网络平台,核心能力有三个:
- 安全隧道 — 把本地服务暴露到公网,无需开放防火墙端口
- AI & API 网关 — 统一管理多个 AI API 的路由、认证和流量控制
- Traffic Policy — 用 CEL 表达式配置流量规则,替代复杂的 nginx 配置
快速开始
安装
1 | # macOS |
启动隧道
最基础的用法,把本地 8080 端口暴露到公网:
1 | ngrok http 8080 |
运行后 ngrok 会输出一个公网地址,类似:
1 | https://xxxx.ngrok-free.app |
访问这个地址,所有请求都会被转发到本地的 8080 端口。
基本认证
给隧道加一层 HTTP Basic Auth:
1 | ngrok http 8080 --basic-auth "user:password" |
TCP 端口转发
暴露非 HTTP 服务,比如数据库:
1 | ngrok tcp 5432 |
配置 Authtoken
首次使用需要配置 Token(从 https://dashboard.ngrok.com 获取):
1 | ngrok config add-authtoken <YOUR_TOKEN> |
进阶功能
Traffic Policy
ngrok 支持用 CEL 表达式定义流量策略,比如对特定路径限流:
1 | ngrok http 8080 \ |
1 | # traffic-policy.yaml 示例 |
绑定自定义域名
付费版本支持绑定自己的域名:
1 | ngrok http 8080 --domain=api.yourdomain.com |
日志与监控
ngrok 提供 Traffic Inspector,可实时查看每个请求的详细信息,包括 headers、body、延迟等。
常见使用场景
| 场景 | 命令 |
|---|---|
| 暴露本地 Web 服务 | ngrok http 3000 |
| 测试 Webhook(GitHub/Slack 等) | ngrok http 3000 |
| 远程访问本地数据库 | ngrok tcp 5432 |
| 移动端调试 | ngrok http 8080 |
| 给外部同事演示本地项目 | ngrok http 3000 --basic-auth "demo:demo123" |
注意事项
- 免费版每次重启会变更地址,付费版可固定域名
- 免费版有连接数和带宽限制
- 不要把线上服务直接暴露在公网,建议配合认证使用
结语
ngrok 是我日常开发中使用频率最高的工具之一,特别是在前后端联调、Webhook 测试、远程演示等场景下,一行命令解决问题。相比自己搭 VPN 或配置反向代理,ngrok 的体验非常顺滑。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 牛蛙JUN!

