在本地开发时,你是否遇到过这些场景?需要调试微信支付回调却发现外网无法访问本地服务;想用手机测试后端接口却苦于没有公网地址;向客户演示功能时不得不临时部署到服务器。本文介绍的 ngrok 正是解决这些痛点的利器——一个命令,让你的本地服务秒变公网可访问。
作为开发者,我们的日常工作流通常是这样的:
localhost:3000 或 localhost:8080)http://localhost:PORT 进行调试但现实世界总有意外:
localhost 无法接收传统的解决方案是部署到云服务器,但这意味着:
ngrok 的出现完美解决了这些问题。
ngrok 是一个安全的内网穿透工具,它可以将本地运行的服务暴露到公网,让外部网络能够访问你电脑上的应用。无论你是前端开发、后端开发、移动开发还是 DevOps 工程师,ngrok 都能在多个场景下提升你的开发效率。
核心功能:
localhost 服务转为公网可访问的 HTTPS URL# 使用 Homebrew 安装
brew install ngrok
# 或手动安装
curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | \
sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null && \
echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | \
sudo tee /etc/apt/sources.list.d/ngrok.list && \
sudo apt update && sudo apt install ngrok
# 使用 Chocolatey
choco install ngrok
# 使用 Scoop
scoop install ngrok
# 或下载 MSI 安装包:https://ngrok.com/download
# 下载最新版本
wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz
# 解压
tar xvzf ngrok-v3-stable-linux-amd64.tgz
# 移动到系统路径
sudo mv ngrok /usr/local/bin/
ngrok config add-authtoken YOUR_AUTHTOKEN
将本地 Web 服务 8080 端口暴露到公网:
# 转发本地 8080 端口
ngrok http 8080
# 转发特定目录(静态文件)
ngrok http file:///Users/username/project/static
# 转发本地其他端口
ngrok http 3000
ngrok http 5000
ngrok http 8000
启动后你会看到:
Session Status online
Account Your Name (Plan: Free)
Version 3.35.0
Region Asia Pacific (ap)
Latency 28ms
Web Interface http://127.0.0.1:4040
Forwarding https://a1b2c3d4.ngrok-free.app -> http://localhost:8080
Connections ttl opn rt1 rt5 p50 p90
2 2 0.01 0.01 40.47 72.12
访问 https://a1b2c3d4.ngrok-free.app 即可访问你本地的 8080 端口服务。
首次访问可能出现安全提示,点击「Visit Site」即可:
如果浏览器页面显示:Invalid Host Header,解决方法是设置你的--host-header,比如:
ngrok http 8080 --host-header="localhost:8080"
ngrok 提供一个本地 Web 界面查看所有请求:
http://127.0.0.1:4040
在这个界面你可以:
# 使用固定子域名,避免每次重启 URL 变化
ngrok http --domain=myapp.ngrok.io 8080
# 使用自定义域名(需要 DNS 配置)
ngrok http --domain=dev.mycompany.com 8080
为公网访问添加基础认证:
ngrok http 8080 --basic-auth="username:password"
几乎所有第三方服务的 Webhook 都需要公网可访问的 URL。
微信支付回调调试:
ngrok http 8080
# 将 https://xxx.ngrok.io/api/notify 配置为回调地址
GitHub Webhook 开发:
ngrok http 3000
# 在 GitHub 仓库设置 Webhook 指向 https://xxx.ngrok.io/github/webhook
钉钉/企业微信机器人:
ngrok http 5000
# 将机器人回调地址配置为 ngrok 提供的 URL
开发移动应用时,需要让手机访问本地后端服务:
# 启动本地后端
ngrok http 8080
# 手机 App 配置 base URL 为 https://xxx.ngrok.io
# 无需部署到服务器即可真机调试
优势:
前端开发时经常遇到跨域问题,需要后端配合:
# 前端运行在 localhost:3000
# 后端运行在 localhost:8080
# 将后端暴露到公网
ngrok http 8080
# 前端配置 API 地址为 ngrok URL
# 避免本地跨域问题,模拟生产环境
向客户或同事展示本地开发的功能:
# 启动本地项目
ngrok http 3000
# 将 https://xxx.ngrok.io 发送给其他人
# 对方无需安装任何环境即可查看效果
配合密码保护:
ngrok http 3000 --basic-auth="demo:demo123"
智能家居、硬件设备开发时,设备需要连接云端服务:
# 模拟云端服务
ngrok tcp 1883 # MQTT 协议
ngrok tcp 5683 # CoAP 协议
# 设备配置 ngrok 提供的 TCP 地址和端口
# 实现本地调试物联网应用
临时需要让外部访问本地数据库(注意安全性):
# 将本地 MySQL 暴露到公网(仅临时使用)
ngrok tcp 3306
# 获得类似 tcp://0.tcp.ngrok.io:12345 的地址
# 可在其他地方连接此地址访问本地数据库
⚠️ 安全警告: 生产数据库绝对不要这样暴露,仅用于临时调试。
通过 ngrok 实现内网服务器的远程 SSH 访问:
# 在内网服务器上运行
ngrok tcp 22
# 获得地址如 tcp://0.tcp.ngrok.io:12345
# 从外部连接
ssh [email protected] -p 12345
快速分享一个本地文件夹:
# 进入项目目录
cd my-project
# Python 快速启动 HTTP 服务
python3 -m http.server 8000
# 用 ngrok 暴露
ngrok http 8000
# 获得公网 URL,立即分享给他人
创建 ngrok.yml 配置文件,避免每次输入长命令:
# ngrok.yml
version: "2"
authtoken: YOUR_AUTHTOKEN
tunnels:
# Web 开发
web:
proto: http
addr: 8080
domain: myapp.ngrok.io
inspect: true
# API 服务
api:
proto: http
addr: 3000
subdomain: api-demo
# 数据库
mysql:
proto: tcp
addr: 3306
remote_addr: 1.tcp.ngrok.io:12345
使用配置:
# 启动特定 tunnel
ngrok start web
ngrok start api
# 启动多个
ngrok start web api
# 启动全部
ngrok start --all
通过 ngrok 的 Web 界面,你可以:
VS Code 集成:
安装 “ngrok for VS Code” 插件,一键启动隧道。
package.json 脚本:
{
"scripts": {
"dev": "next dev",
"share": "ngrok http 3000",
"share:prod": "ngrok http --domain=myapp.ngrok.io 3000"
}
}
Makefile:
.PHONY: dev share
dev:
npm run dev
share:
ngrok http 3000
| 功能 | 免费版 | 付费版($5/月起) |
|---|---|---|
| 随机域名 | ✅ | ✅ |
| 固定域名/子域名 | ❌ | ✅ |
| 自定义域名 | ❌ | ✅ |
| 同时在线隧道数 | 1 | 3+ |
| 每秒请求数 | 40 | 无限制 |
| 带宽 | 1GB/月 | 无限制 |
| TCP 隧道 | ❌ | ✅ |
| 团队协作 | ❌ | ✅ |
| 优先支持 | ❌ | ✅ |
建议: 个人开发免费版够用,团队协作或需要固定域名建议付费。
--basic-auth| 工具 | 特点 | 适用场景 |
|---|---|---|
| ngrok | 功能全面,文档完善 | 通用开发调试 |
| Cloudflare Tunnel | 免费、稳定、集成 CF | 长期运行的服务 |
| LocalTunnel | 完全免费,无需注册 | 临时快速分享 |
| PageKite | 开源,可自建服务器 | 隐私敏感场景 |
| Teleport | 企业级,支持 K8s | 团队基础设施 |
如果你是在国内可能使用ngrok加载很慢,可以考虑以下国内内网穿透工具作为替代品:
ngrok 是每个开发者工具箱中的必备工具,它解决了"本地服务如何让外部访问"这一常见问题。无论是调试 Webhook、移动开发、远程协作还是临时演示,ngrok 都能显著提升开发效率。
核心使用流程:
npm run dev / go run . / python app.pyngrok http PORThttp://127.0.0.1:4040掌握 ngrok,让你的开发调试更加高效顺畅。
本文首发于 阿小信的博客-人言兑 ,转载请注明出处。