[ngrok使用教程]:是什么、为什么、哪里下载、价格如何、如何快速上手与高级用法详解
ngrok 是一个命令行工具,它允许您将本地运行的服务(比如一个网站服务器、SSH 服务、数据库等)通过安全的隧道暴露到公共互联网上。这意味着,即使您的电脑位于家庭网络、公司防火墙后方,或者没有公网 IP 地址,其他人也可以通过 ngrok 提供的一个公共 URL 或地址来访问您的本地服务。
ngrok 是什么?(What is ngrok?)
简单来说,ngrok 就是一个“内网穿透”工具,但它做得更好、更安全、更易用。它在您的本地机器上运行一个客户端程序,这个客户端程序会与 ngrok 的云服务建立一个安全的隧道连接。ngrok 的云服务会分配一个公共的互联网地址给这个隧道。当有人访问这个公共地址时,ngrok 云服务会把流量转发到您本地机器上的 ngrok 客户端,再由客户端转发到您指定的本地服务端口。反之亦然。
它提供的主要功能包括:
- 将本地 HTTP/HTTPS 服务暴露为公共 URL。
- 将本地任意 TCP 服务(如 SSH、RDP、数据库)暴露为公共 TCP 地址。
- 为隧道提供 TLS 加密。
- 提供一个本地的 Web 界面(通常在 `localhost:4040`),用于实时检查通过隧道传输的请求和响应。
为什么使用 ngrok?(Why use ngrok?)
ngrok 解决了许多开发者和需要临时分享本地服务的人的痛点,主要的使用场景包括:
- 演示本地开发中的网站或应用: 您正在本地开发一个网站,想快速给客户、同事或朋友看看进展,而无需部署到远程服务器。使用 ngrok,您可以立即获得一个公共 URL,对方通过浏览器就能访问您本地运行的网站。
- 测试 Webhook: 很多第三方服务(如 GitHub、Stripe、Slack)通过 Webhook 向您的应用发送实时通知。Webhook 需要一个公网可访问的 URL。如果您在本地开发,没有公网 IP,就无法接收 Webhook。ngrok 提供了一个公共 URL,可以指向您本地的 Webhook 接收端。
- 临时访问本地机器: 需要远程访问您家或公司的电脑(例如 SSH 远程登录),但又不想配置复杂的端口转发或 VPN?ngrok 可以快速提供一个公共 TCP 地址来连接您的本地 SSH 服务。
- 调试移动应用: 开发移动应用时,后端服务通常运行在您的电脑上。通过 ngrok 将本地后端暴露出来,移动设备就可以连接到 ngrok 的公共地址来访问您的本地后端进行测试。
- 分享本地文件或服务: 快速分享一个本地运行的服务给特定的人,而无需复杂的网络设置。
ngrok 的优势在于其简单性、速度和无需配置路由器或防火墙的便利性。
ngrok 在哪里下载?(Where to download ngrok?)
下载 ngrok 客户端的唯一官方渠道是其官方网站:https://ngrok.com/download
在下载页面,您可以根据您的操作系统(Windows, macOS, Linux 等)和架构选择合适的版本进行下载。通常提供的是一个压缩包(zip 或 tar.gz)。
ngrok 价格如何?(How much does ngrok cost?)
ngrok 提供免费(Free)计划和多个付费计划。
- 免费计划:
- 功能足够满足大多数临时和个人使用需求。
- 提供随机的公共 URL (例如 `https://random_string.ngrok.io`),每次启动客户端 URL 会变化。
- 同时只能运行有限数量的隧道。
- 不支持自定义域名或保留的 TCP 地址。
- 有连接数和传输流量的限制。
- 付费计划:
- 提供更多功能,适合专业开发者或企业使用。
- 可以绑定自定义域名 (例如 `myapp.yourdomain.com`)。
- 提供保留的 TCP 地址,地址固定不变。
- 允许同时运行更多隧道。
- 更高的连接数和传输流量限制。
- 提供更多的身份验证、访问控制等高级功能。
对于初学者和大多数临时用途,免费计划通常足够使用。如果您需要稳定的地址、更多隧道或高级功能,可以考虑升级到付费计划。具体的价格和各计划的详细功能可以在 ngrok 官网上查看。
如何快速上手使用 ngrok?(How to use ngrok quickly?)
1. 下载 ngrok 客户端
访问 ngrok.com/download,下载适用于您操作系统的压缩包。
2. 解压 ngrok
将下载的压缩包解压到一个您方便找到的文件夹。
在 macOS 或 Linux 上,可以使用命令:
unzip /path/to/ngrok-v3-stable-linux-amd64.zip在 Windows 上,直接右键点击压缩包选择“解压到当前文件夹”或类似选项。
解压后,您会得到一个名为 `ngrok` (Linux/macOS) 或 `ngrok.exe` (Windows) 的可执行文件。
3. 将 ngrok 添加到系统 PATH (可选,但强烈推荐)
为了能在任意命令行窗口直接运行 `ngrok` 命令,建议将其所在目录添加到系统的环境变量 PATH 中。如果您不熟悉此操作,也可以直接进入 ngrok 可执行文件所在的目录来运行命令。
4. 连接您的 ngrok 账户 (获取 auth token)
即使是免费用户,连接您的账户也能解锁更多功能,并且是使用 `ngrok` 命令所必需的。您需要从 ngrok 网站获取您的身份验证令牌 (Auth Token)。
- 访问 ngrok.com 并注册一个免费账户或登录。
- 登录后,访问您的 Dashboard。
- 在 Dashboard 的 “Your Authtoken” 页面找到您的 Authtoken。
- 打开终端或命令行窗口,运行以下命令,将 `
` 替换为您在网站上看到的实际令牌:
ngrok config add-authtoken <YOUR_AUTH_TOKEN>
这个命令会将您的 Authtoken 保存到 ngrok 的配置文件中,通常是 `~/.ngrok2/ngrok.yml` (macOS/Linux) 或 `C:\Users\YOUR_USERNAME\.ngrok2\ngrok.yml` (Windows)。此后您无需每次都输入令牌。
5. 启动一个隧道
现在,您可以启动 ngrok 隧道了。最常见的用法是暴露本地运行的 Web 服务。
假设您的本地 Web 服务正在端口 `8080` 上运行:
- 确保您的本地服务(例如,一个本地 Web 服务器)正在运行并监听某个端口 (如 8080)。
- 打开新的终端或命令行窗口。
- 运行命令:
ngrok http 8080
ngrok 客户端会连接到 ngrok 云服务,并在终端中显示连接状态和公共地址。输出类似:
ngrok v3.x.x
Session Status online
Account Your Name (Free)
Version 3.x.x
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://random_string.ngrok.io -> http://localhost:8080
Forwarding https://random_string.ngrok.io -> http://localhost:8080
Connections ttl opn rt1 avg estlt
0 0 0.00 0.00 0ms
输出中的 `Forwarding` 行给出了公共的 URL。例如 `https://random_string.ngrok.io` 就是您的本地服务现在可以通过互联网访问的地址。任何人打开这个 URL,请求都会通过 ngrok 隧道转发到您本地机器上的 8080 端口。
对于 TCP 服务,例如本地运行在 22 端口的 SSH 服务:
ngrok tcp 22
输出会提供一个公共的 TCP 地址和端口,例如 `tcp://0.tcp.ngrok.io:12345`。您就可以使用 SSH 客户端连接这个地址和端口来访问您本地的 SSH 服务。
ngrok 高级用法与常见场景详解
1. 暴露本地 Web 服务器
这是 ngrok 最核心的用法。无论是前端开发的服务 (如 Vue/React 开发服务器)、后端 API 服务 (如 Node.js, Python Flask/Django, Java Spring Boot) 还是完整的网站,只要它监听一个本地端口,您就可以用 `ngrok http
例如:
- 本地 React App 运行在 3000 端口: `ngrok http 3000`
- 本地后端 API 运行在 8000 端口: `ngrok http 8000`
ngrok 会自动处理 HTTP 和 HTTPS 流量,为您的 HTTP 隧道提供免费的 HTTPS 证书。
2. 暴露本地 SSH 服务
如果您想从外部安全地访问您的本地机器进行命令行操作,可以使用 ngrok 暴露 SSH 服务(通常在 22 端口)。
ngrok tcp 22
ngrok 会给您一个像 `0.tcp.ngrok.io:12345` 这样的地址。然后您就可以使用 SSH 客户端连接:
ssh [email protected] -p 12345
请注意替换 `your_username` 和 ngrok 提供的实际地址与端口。暴露 SSH 有一定的安全风险,请确保您的 SSH 服务配置安全。
3. 使用保留域名和地址 (付费功能)
免费计划每次启动 ngrok 会得到随机的子域名和 TCP 端口。如果需要稳定的地址,以便配置 Webhook 或方便记忆,需要升级到付费计划并配置保留的域名或 TCP 地址。
假设您在 ngrok Dashboard 上保留了一个域名 `myapp.ngrok.io`:
ngrok http --domain myapp.ngrok.io 8080
假设您保留了一个 TCP 地址 `1.tcp.ngrok.io:54321`:
ngrok tcp --remote-addr 1.tcp.ngrok.io:54321 22
4. 添加 HTTP Basic 身份验证
如果您想在分享本地服务时增加一层基本的安全性,可以使用 ngrok 内置的 Basic Auth 功能。访问者在访问 ngrok URL 时将被要求输入用户名和密码。
ngrok http --auth="user:password" 8080
请将 `user` 和 `password` 替换为您希望设置的凭据。这仅提供一个简单的防护,不是替代更完善的认证授权系统。
5. 查看请求和调试
ngrok 最有用的功能之一是其本地 Web 界面,通常在 `http://localhost:4040`。
当 ngrok 客户端运行时,打开浏览器访问 `http://localhost:4040`,您可以看到所有通过 ngrok 隧道传输的请求和响应的详细信息,包括请求头、响应头、请求体、响应体、状态码等。这对于调试本地服务和第三方服务(如 Webhook)之间的交互非常有用。
总结
ngrok 是一个强大且易用的工具,能够帮助开发者快速将本地服务暴露到公网,极大地提高了开发和测试效率。从简单的本地网站演示到复杂的 Webhook 调试,ngrok 都能提供便捷的解决方案。通过官方网站下载客户端、获取 Auth Token 并运行简单的命令,您就可以快速开始使用。免费计划提供了基础功能,而付费计划则为需要更稳定和高级特性的用户提供了更多选择。