下面我将为你详细介绍 ngrok 的命令,从基础到进阶。

安装和认证
在使用命令之前,你需要先安装并认证 ngrok。
安装
根据你的操作系统选择安装方式:
- macOS (使用 Homebrew):
brew install ngrok/ngrok/ngrok
- Windows (使用 Scoop):
scoop install ngrok
- Linux (Debian/Ubuntu):
# 下载并安装 sudo apt update sudo apt install ngrok
- 从官网下载: 访问 ngrok 官网 下载适合你系统的二进制文件,并将其添加到系统 PATH 中。
认证
为了使用自定义子域名等高级功能,你需要免费注册一个 ngrok 账户并获取你的 Authtoken。
- 注册账户:访问 ngrok.com/signup
- 登录后,在你的 Dashboard 页面找到你的 Authtoken。
- 在终端中运行以下命令进行认证:
ngrok config add-authtoken YOUR_AUTH_TOKEN
将
YOUR_AUTH_TOKEN替换为你从 Dashboard 复制的真实 Token。
(图片来源网络,侵删)
核心命令:启动隧道
这是 ngrok 最基本也是最常用的功能。
基本语法
ngrok [options] <protocol> <port>
[options]: 可选参数,用于配置隧道。<protocol>: 协议,通常是http或https。<port>: 你本地开发服务器运行的端口号(3000,8080)。
示例
假设你的本地服务器运行在 http://localhost:8080。
启动一个 HTTP 隧道:
ngrok http 8080
运行后,你会看到类似下面的输出,这表示隧道已经成功建立:

ngrok by @inconshreveable
Session Status online
Account Your Name (Plan: Free)
Version 3.1.0
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://a1b2-3c4d-5e6f.ngrok.io -> http://localhost:8080
Forwarding https://a1b2-3c4d-5e6f.ngrok.io -> http://localhost:8080
Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00
http://a1b2-3c4d-5e6f.ngrok.io和https://a1b2-3c4d-5e6f.ngrok.io就是你在公共互联网上可以访问的地址。http://127.0.0.1:4040是 ngrok 的本地 Web 界面,你可以在这里查看详细的请求日志、统计数据等。
常用选项和参数
你可以通过添加选项来更精细地控制隧道。
指定自定义子域名
如果你有付费账户,可以使用固定的子域名。
ngrok http 8080 --subdomain=mycoolapp
访问地址将变为 http://mycoolapp.ngrok.io。
绑定自定义域名
如果你拥有自己的域名(api.myapp.com),并配置了 CNAME 指向 ngrok,可以这样使用。
ngrok http 8080 --hostname=api.myapp.com
基本认证
为你的隧道添加用户名和密码,防止陌生人随意访问。
ngrok http 8080 --auth="username:password"
访问时需要输入 username 和 password。
指定地区
如果你需要连接到特定地区的服务器(例如欧洲)。
ngrok http 8080 --region=eu
可用地区代码: us (默认), eu, au, ap, sa, jp, in。
后台运行
让 ngrok 在后台运行,不占用你的终端窗口。
ngrok http 8080 --log=stdout
(注意:在 macOS 和 Linux 上,你可以使用 nohup ngrok http 8080 & 来实现类似效果)
查看详细日志
将日志输出到文件中,方便排查问题。
ngrok http 8080 --log=ngrok.log
管理现有隧道
当你启动 ngrok 后,它会持续运行直到你手动停止,如果你需要管理已有的隧道,可以使用 ngrok 的 API 或配置文件。
使用配置文件 (ngrok.yml)
这是更高级和推荐的管理方式,尤其适合需要稳定、重复配置的场景。
-
创建一个名为
ngrok.yml的文件在你的项目根目录或用户主目录 (~/.ngrok2/ngrok.yml)。 -
在文件中定义你的隧道配置:
# ngrok.yml tunnels: my-app: proto: http addr: 3000 subdomain: my-awesome-app auth: "admin:secret123" api-server: proto: http addr: 8080 hostname: api.myapp.com -
启动配置好的隧道:
# 启动名为 'my-app' 的隧道 ngrok start my-app # 启动所有在配置文件中定义的隧道 ngrok start --all
使用 ngrok 命令管理
-
列出所有正在运行的隧道:
ngrok list
-
停止一个正在运行的隧道 (通过 ID):
ngrok stop <tunnel_id>
你可以从
ngrok list的输出或ngrok http ...启动时的日志中找到tunnel_id。 -
停止所有正在运行的隧道:
ngrok stop --all
常见问题
- 端口被占用:确保你的本地应用正在该端口上运行,并且没有其他程序占用它。
- 命令未找到:确保
ngrok已正确安装并添加到了系统的 PATH 环境变量中。 - Authtoken 无效:检查你的 Token 是否正确复制,或者尝试重新获取一个。
- 如何获取请求日志?
打开
http://127.0.0.1:4040这个 Web 界面,它会实时显示所有通过 ngrok 转发的请求详情,包括请求头、响应头、请求体和响应体。
| 命令 | 描述 |
|---|---|
ngrok http <port> |
最基本的用法,启动一个 HTTP 隧道。 |
ngrok http <port> --subdomain=<name> |
使用自定义子域名。 |
ngrok http <port> --auth="user:pass" |
添加基本认证。 |
ngrok start <tunnel_name> |
从 ngrok.yml 配置文件启动指定的隧道。 |
ngrok list |
列出所有正在运行的隧道。 |
ngrok stop <id> |
停止指定 ID 的隧道。 |
希望这份详细的指南能帮助你熟练使用 ngrok!
