调试 Webhook、支付回调、第三方 OAuth 时,本地服务需要公网可访问地址。下面按「临时调试」和「长期固定域名」两类对比常用工具,并附上启动命令。
工具对比
| 工具 | 类型 | 免费 | 固定域名 | 侧重场景 | 代理方式 | 亮点 | 注意 |
|---|---|---|---|---|---|---|---|
| Cloudflare Quick Tunnel | CLI | 是 | 随机子域 | 通用 HTTP | 整端口 | 免账号、稳定、HTTPS | 每次 URL 会变 |
| smee | CLI / 网页 | 是 | 固定隧道 URL | GitHub Webhook | 指定 path | 专为 Webhook 设计 | 只转发 HTTP,非通用隧道 |
| Hookdeck CLI | CLI | 有免费档 | — | Webhook | 指定 path | 事件重放、过滤、日志 | 需登录,偏 Webhook 平台 |
| ngrok | CLI | 有免费档 | 随机 / 付费固定 | 通用 | HTTP / TCP | 老牌、文档全、生态大 | 免费随机子域,固定域名付费 |
| dev tunnel | CLI | 是 | 可配置 | 通用 | 整端口 | 微软出品,GitHub 登录 | brew 版本可能过旧,用官方脚本 |
| Localtunnel | npx | 是 | 随机子域 | 通用 | 整端口 | 零安装 | 首次访问需隧道密码 |
| Cloudflare Tunnel | 面板 + 守护进程 | 是 | 自定义子域 | 生产 / 长期 | 完整路由 | 固定域名、可绑自有域 | 配置步骤多,适合长期用 |
推荐
- 临时调试、不想注册:Cloudflare Quick Tunnel(
cloudflared tunnel --url)。 - 只接 GitHub Webhook:smee 或 Hookdeck CLI(带重放更方便)。
- 要 TCP、固定子域或团队习惯:ngrok。
- 微软 / GitHub 生态:dev tunnel。
- 长期固定域名、自有域:Cloudflare Tunnel(面板配置)。
Cloudflare Quick Tunnel
安装:
brew install cloudflared
winget install --id Cloudflare.cloudflared
启动(将 8080 换成本地端口):
cloudflared tunnel --url http://localhost:8080
smee
# 将 URL 换成 https://smee.io/new 生成的地址
npx smee-client --url https://smee.io/xxx --path /integration/webhook/github --port 8080
Hookdeck CLI
npx hookdeck-cli login
npx hookdeck-cli listen 8080 github --path /integration/webhook/github
ngrok
安装:
brew install ngrok/ngrok/ngrok
winget install ngrok -s msstore
写入 token(登录后页面会给出命令):
ngrok config add-authtoken XXX
启动:
ngrok http http://localhost:8080
dev tunnel
安装(brew 版本可能过旧,推荐官方脚本):
curl -sL https://aka.ms/DevTunnelCliInstall | bash
登录(-g 为 GitHub,否则微软账号):
devtunnel user login -g
启动:
devtunnel host -p 8080
Localtunnel
npx localtunnel --port 8000
首次访问页面会要求隧道密码,二选一获取:
curl https://loca.lt/mytunnelpassword
wget -q -O - https://loca.lt/mytunnelpassword
Cloudflare Tunnel(固定域名)
Cloudflare One 面板 — 适合需要稳定公网域名的场景。
Networks→Tunnels→ Create a tunnel → 选 Cloudflared,填写名称并保存。- 按页面提示安装 connector,示例:
brew install cloudflared &&
sudo cloudflared service install XXX
Public Hostnames里配置 Subdomain、Domain、Path、Type、后端 URL(不要写http:///https://前缀)。- 保存后测试路由是否可达。