Skip to content

ngrok

ngrok 提供即开即用的公网隧道服务,几秒钟内即可获得一个公网 URL。这是 PRX 最简单的隧道方案,特别适合开发调试和临时演示。

概述

ngrok 的特点:

  • 即开即用 -- 一行命令获得公网 URL
  • Web Inspector -- 内置请求检查面板,方便调试 webhook
  • 多协议 -- 支持 HTTP、HTTPS、TCP、TLS
  • 全球覆盖 -- 多区域边缘节点
  • 免费层可用 -- 免费计划足够开发使用

前置要求

  1. 注册 ngrok 账户(免费)
  2. 安装 ngrok CLI
  3. 配置认证 Token

安装

bash
# macOS
brew install ngrok

# Linux
curl -fsSL https://ngrok-agent.s3.amazonaws.com/ngrok-v3-stable-linux-amd64.tgz \
  | sudo tar xz -C /usr/local/bin

# 验证
ngrok version

配置 Authtoken

bash
# 从 https://dashboard.ngrok.com/get-started/your-authtoken 获取 Token
ngrok config add-authtoken <YOUR_TOKEN>

配置

PRX 配置

config.toml 中配置 ngrok:

toml
[tunnel]
backend = "ngrok"
local_port = 3000
auto_start = true

[tunnel.ngrok]
# 认证 Token(推荐通过环境变量)
authtoken = "${NGROK_AUTHTOKEN}"

# 可选:使用自定义域名(付费计划)
# domain = "my-agent.ngrok-free.app"

# 可选:指定区域
# region = "ap"  # "us" | "eu" | "ap" | "au" | "sa" | "jp" | "in"

# 可选:启用 Web Inspector
inspect = true
inspect_port = 4040

# 可选:基础认证(保护 Agent 端点)
# basic_auth = "user:password"

完整 TOML 示例

toml
[tunnel]
backend = "ngrok"
local_port = 3000
auto_start = true
health_check_interval = 30

[tunnel.ngrok]
authtoken = "${NGROK_AUTHTOKEN}"
domain = "my-agent.ngrok-free.app"
region = "ap"
inspect = true
inspect_port = 4040

[tunnel.reconnect]
enabled = true
max_attempts = 10
backoff_base_ms = 1000
backoff_max_ms = 60000

环境变量

bash
# 认证 Token
export NGROK_AUTHTOKEN="2abcdef..."

# 可选:API Key(用于 ngrok API 管理)
export NGROK_API_KEY="..."

使用方法

通过 PRX CLI

bash
# 启动 ngrok 隧道
prx tunnel start --backend ngrok

# 查看状态
prx tunnel status
# Tunnel: ngrok (connected)
# Public URL: https://a1b2-203-0-113-1.ngrok-free.app
# Inspector: http://localhost:4040
# Local: http://localhost:3000

# 停止
prx tunnel stop

Web Inspector

inspect = true 时,ngrok 提供请求检查界面:

http://localhost:4040

Inspector 功能:

  • 查看所有经过隧道的请求和响应
  • 请求回放(Replay)
  • 查看 webhook payload 详情
  • 响应时间分析

免费层限制

限制项免费计划付费计划
并发隧道1按计划
自定义域名1 (ngrok-free.app)多个
每分钟连接数40按计划
持久 URL1 个静态域名多个
Inspector 请求保留500 条更多
IP 限制不支持支持

注意

免费计划的随机 URL 在重启后会变更。如果 webhook 源不支持动态更新 URL,请使用自定义域名或静态域名。

参数说明

参数类型必填默认值说明
authtokenstring--ngrok 认证 Token
domainstring--自定义域名
regionstring"us"边缘节点区域
inspectbooltrue启用 Web Inspector
inspect_portu164040Inspector 端口
basic_authstring--基础认证(格式:user:pass

安全性

  • TLS 加密 -- ngrok 边缘节点自动终止 TLS
  • Authtoken 保护 -- 通过环境变量管理,避免泄露
  • 基础认证 -- 为开发环境添加简单的访问保护
  • 请求检查 -- Inspector 仅监听 localhost,不暴露到网络
  • 生产建议 -- 生产环境建议使用 Cloudflare Tunnel 替代 ngrok

安全提醒

免费计划的 ngrok URL 虽然随机,但 任何知道 URL 的人都可以访问。请勿在未保护的 ngrok 隧道上暴露包含敏感数据的 Agent。

与其他后端对比

特性ngrokCloudflare TunnelTailscale Funnel
上手难度最简单中等中等
自定义域名付费免费(需 CF DNS)固定 ts.net
零信任付费免费内置
请求调试Inspector
适用场景开发调试生产部署团队内部

故障排除

问题可能原因解决方案
ERR_NGROK_108Authtoken 无效重新配置 ngrok config add-authtoken
ERR_NGROK_226免费账户并发隧道超限关闭其他 ngrok 隧道
随机 URL 变更免费计划重启后 URL 变化使用 domain 配置静态域名
请求被拦截ngrok 免费层的浏览器警告页添加 ngrok-skip-browser-warning: true Header
Inspector 打不开端口冲突修改 inspect_port

相关文档

Released under the Apache-2.0 License.