什么是 ngrok?
ngrok 是一个反向代理工具,它可以将你本地电脑上运行的服务(比如一个网站、一个 API、一个游戏服务器)暴露到公网上,让你或任何人都能通过一个公共的 URL 访问它。

核心工作原理:
- 你在本地电脑上运行一个服务(一个网站在
http://localhost:8080)。 - 你启动 ngrok 客户端,告诉它要映射哪个本地端口(
8080)。 - ngrok 客户端会连接到 ngrok 的云端服务器。
- ngrok 云端服务器会给你分配一个公共的 URL(
https://random-string.ngrok.io)。 - 当有人访问
https://random-string.ngrok.io时,请求会通过 ngrok 云端服务器安全地转发到你本地的http://localhost:8080。
为什么需要 ngrok?
- 开发调试:无需将代码部署到正式服务器,就能让同事或客户测试你的本地网站/API。
- 临时分享:快速分享你本地运行的一个工具、文件或演示。
- 接收 Webhook:当第三方服务(如 GitHub、支付宝、微信支付)需要回调你的服务器时,ngrok 可以提供一个临时的公网地址。
- 物联网:测试本地运行的物联网设备服务器。
在 Windows 上使用 ngrok 的完整步骤
第 1 步:下载 ngrok
- 访问 ngrok 官方网站:https://ngrok.com/download
- 网站会自动检测你的操作系统,并为你提供 Windows 的 64 位版本下载链接,点击下载
ngrok-stable-windows-amd64.zip文件。 - 下载完成后,你会得到一个
.zip压缩包。
第 2 步:解压并配置环境变量(推荐)
为了方便在任何目录下使用 ngrok,最好将其路径添加到系统的环境变量中。
-
解压文件:
- 在你的电脑上创建一个固定的文件夹,
C:\dev\tools\ngrok。 - 将下载的
ngrok-stable-windows-amd64.zip解压到这个文件夹中,解压后,你会看到一个ngrok.exe文件。
- 在你的电脑上创建一个固定的文件夹,
-
添加到环境变量 Path:
(图片来源网络,侵删)- 在 Windows 搜索栏中输入 “编辑系统环境变量”,然后打开它。
- 在弹出的“系统属性”窗口中,点击右下角的 “环境变量...” 按钮。
- 在下方的 “系统变量” 部分,找到名为
Path的变量,选中它,然后点击 “编辑...”。 - 在 “编辑环境变量” 窗口中,点击 “新建”,然后输入你刚刚创建的 ngrok 文件夹路径,
C:\dev\tools\ngrok。 - 一路点击 “确定” 保存所有设置。
-
验证安装:
- 重新打开一个新的命令提示符 或 PowerShell 窗口(重要:必须重新打开,否则环境变量不会生效)。
- 输入以下命令并回车:
ngrok --version
- 如果看到版本号(
ngrok version 3.x.x),说明安装和配置成功!
第 3 步:获取 Authtoken(身份验证)
免费版本的 ngrok 每次启动都会分配一个随机的公共 URL,这很不方便,注册一个免费账户并获取 Authtoken 可以让你使用固定的子域名,并且能查看连接历史记录。
- 访问 ngrok 官网,注册一个免费账户并登录。
- 登录后,进入你的 Dashboard。
- 在页面中找到你的 Authtoken,它是一串很长的字符。
- 将 Authtoken 绑定到你的 ngrok 客户端:
- 在新的命令提示符窗口中,运行以下命令(将
YOUR_AUTHTOKEN替换成你自己的 Token):ngrok config add-authtoken YOUR_AUTHTOKEN
- 看到
Config saved to configuration file: C:\Users\你的用户名\.ngrok2\ngrok.yml即表示成功。
- 在新的命令提示符窗口中,运行以下命令(将
第 4 步:启动本地服务器
在暴露你的服务之前,必须先在本地启动它,这里以最简单的 Python HTTP 服务器为例。
-
打开一个新的文件夹,
D:\my_project,在里面创建一个index.html文件,内容如下:
(图片来源网络,侵删)<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>我的本地服务器</title> </head> <body> <h1>你好,世界!</h1> <p>这是一个通过 ngrok 暴露的本地服务器。</p> </body> </html> -
打开命令提示符,切换到这个目录:
cd D:\my_project
-
启动一个简单的 HTTP 服务器(Python 内置):
- 如果你安装了 Python 3:
python -m http.server 8080
- 如果你安装的是 Python 2:
python -m SimpleHTTPServer 8080
- 你会看到类似
Serving HTTP on 0.0.0.0 port 8080 ...的提示,这说明你的本地服务器已经在http://localhost:8080上运行了。保持这个命令窗口开启。
- 如果你安装了 Python 3:
第 5 步:通过 ngrok 暴露本地服务
打开另一个新的命令提示符窗口(不要关闭运行本地服务器的那个)。
-
暴露 HTTP 服务(端口 8080): 运行以下命令:
ngrok http 8080
http表示你要暴露的是一个 HTTP 服务。8080是你本地服务器运行的端口号。
-
查看 ngrok 仪表盘: 命令执行后,你会看到一个控制台界面,显示类似下面的信息:
ngrok by @inconshreveable Session Status online Account Your Name (Plan: Free) Version 3.x.x Region United States (us-cal-1) Web Interface http://127.0.0.1:4040 Forwarding https://abcdefg12345.ngrok.io -> http://localhost:8080 Connections ttl opn rt1 rt5 p50 p90 0 0 0.00 0.00 0.00 0.00Forwarding这一行是关键,它告诉你,任何访问https://abcdefg12345.ngrok.io的请求都会被转发到你本地的http://localhost:8080。Web Interface提供了一个本地的监控页面(http://127.0.0.1:4040),你可以在这里查看详细的请求日志、统计数据和在线状态。
你可以在任何设备的浏览器上访问 https://abcdefg12345.ngrok.io,就能看到你本地 D:\my_project 文件夹里的 index.html 内容了!
进阶用法
使用自定义子域名
在免费账户下,你可以在 Dashboard 中设置一个固定的子域名(mycoolapp.ngrok.io),然后使用以下命令来启用它:
# 假设你在 Dashboard 设置了子域名 mycoolapp ngrok http --subdomain=mycoolapp 8080
暴露 TCP 端口
ngrok 不仅可以暴露 HTTP,还可以暴露任何 TCP 端口,比如数据库、SSH、游戏服务器等。
假设你的本地有一个 Minecraft 服务器运行在 25565 端口:
ngrok tcp 25565
你会得到一个类似 tcp://0.tcp.ngrok.io:12345 的地址,别人就可以通过 tcp.ngrok.io:12345 来连接你的 Minecraft 服务器了。
使用配置文件
对于复杂的配置,你可以创建一个 ngrok.yml 文件来管理,这个文件通常位于 C:\Users\你的用户名\.ngrok2\ 目录下。
示例 ngrok.yml:
authtoken: YOUR_AUTHTOKEN
tunnels:
my-web-app:
addr: 8080
proto: http
host_header: localhost:8080
my-api:
addr: 3000
proto: http
然后你可以这样启动:
# 启动配置文件中名为 "my-web-app" 的隧道 ngrok start my-web-app # 启动配置文件中所有隧道 ngrok start --all
注意事项
- 免费版本限制:
- �次启动 URL 会随机变化(除非设置了子域名)。
- 有带宽和连接数限制。
- 连接可能会在一段时间后超时(约 2 小时),需要重新启动 ngrok。
- 无法使用自定义域名或 HTTPS 证书。
- 安全性:ngrok 的 URL 是公开的,任何人都可以访问。不要用它来暴露包含敏感数据或生产环境的服务,它仅适用于开发和测试。
- 防火墙:确保 Windows 防火墙允许
ngrok.exe和你的本地服务(如 Python)的网络访问。 - 端口占用:确保你要暴露的端口(如 8080)没有被其他程序占用。
通过以上步骤,你就可以在 Windows 上轻松地使用 ngrok 将任何本地服务分享给世界了!
