什么是 ngrok?ngrok 教程

时间:2026-05-19 14:44
简单来说,ngrok 是一个开创性的“内网穿透”工具。它能在你位于内网的个人电脑和公共互联网之间,建立一个安全且加密的通道。
 
让我们用一个生活中的例子来理解。想象一下,你正在家里的电脑上搭建一个个人网站,但你的电脑处于家庭局域网中,外界的网络无法直接访问到你。ngrok 就像一个聪明的“信使”,它在公网上拥有一个所有人都能访问的地址。当你启动 ngrok 后,它就会把这个公网地址和你本地电脑的服务(比如你正在运行的一个网站)紧紧地绑定在一起。这样一来,任何人访问那个 ngrok 提供的公网地址,就能立刻看到你本地电脑上的内容。
 
这能解决很多实际问题。比如,你在开发微信公众号或小程序时,微信服务器需要一个公网地址来向你发送用户消息或支付结果,这个地址被称为 Webhook。有了 ngrok,你就不再需要将代码部署到远程服务器上调试,可以直接在本地进行。同样,当你需要给远方的同事或朋友展示一个你正在开发的网站原型,或者想让别人测试你本地电脑上的某个应用时,ngrok 都能让你在几秒钟内实现。甚至,你还可以用它来远程访问家里的树莓派,或者进行 SSH 登录。可以说,ngrok 为开发者提供了一个极其便捷的方式来展示和测试他们的工作成果。
 
快速上手:从零开始使用 ngrok
使用 ngrok 服务非常简单,尤其是在它官方提供的“云服务模式”下,你几乎不需要任何配置,只需几个步骤就能完成。
 
第一步:注册并获取你的“身份证”
首先,你需要访问 ngrok 的官方网站,并注册一个免费账号。你可以使用邮箱,或者直接用 GitHub、Google 账号登录。注册并登录后,在后台的控制台里,你会找到一个叫做 Authtoken 的字符串。这串字符是你的个人身份凭证,ngrok 用它来识别你。
 
第二步:下载并安装 ngrok
接下来,你需要下载适合你电脑操作系统的 ngrok 客户端。ngrok 官网提供了 Windows、macOS、Linux 等多种版本。
 
Windows 用户:最简单的方法是下载一个单独的 .exe 文件,下载后将它解压到一个你容易找到的文件夹里即可。
 
macOS 用户:如果你喜欢使用命令行,可以安装 brew 包管理器,然后通过 brew install ngrok 这条命令进行安装。
 
第三步:将你的电脑和 ngrok 账号“绑定”
下载完成后,我们需要运行它,并用之前获得的 Authtoken 来“登录”。
 
打开你电脑上的命令行工具(在 Windows 上是 CMD 或 PowerShell,在 macOS/Linux 上是终端)。
 
你需要先进入到 ngrok 程序所在的目录。如果你用的是 Windows 的绿色版,可以用 cd 命令切换到那个文件夹;如果你是通过 brew 等方式安装的,那么可以直接在任意位置运行命令。
 
输入以下命令并回车,记得将命令中的 你的Authtoken 换成你从官网复制的那一串字符:
ngrok authtoken 你的Authtoken
执行成功后,ngrok 就会记住你的身份信息,下次使用时无需再次输入。
 
第四步:让世界看到你的本地服务
现在,最激动人心的时刻到了。假设你正在电脑上开发一个网站,这个网站的地址是 http://localhost:8080。你只需要在刚才的命令行窗口中输入:
ngrok http 8080
 
瞬间,命令行界面上就会弹出一个窗口,上面清晰地显示着两个公网 URL,一个是 https://xxxx.ngrok-free.app,另一个是它的 http 版本。现在,你可以把这个以 ngrok-free.app 结尾的网址发给任何人,当他们访问这个地址时,看到的就是你本地电脑上 8080 端口正在运行的服务。
 
请记住,只要这个命令行窗口关闭,这个公网链接就会立刻失效。此外,每次你重新启动 ngrok,它分配的随机域名都会发生变化。如果你需要一个固定的域名,那通常需要升级到付费版本。
 
不只是网站:ngrok 还能做什么?
你可能觉得 ngrok 只能用来映射网页服务,但它的能力远不止于此。ngrok 本质上是一个通用的“隧道”,可以转发任何基于 TCP 协议的数据流,这意味着它可以支持非常多的应用场景。
 
映射任何 Web 应用:无论你用的是哪种编程语言或框架,只要你的服务运行在某个 HTTP 端口上,比如 3000、5000 或 80,只需将命令中的 8080 换成对应的端口号即可,例如 ngrok http 3000。
 
远程 SSH 登录:如果你需要从外网安全地访问家中电脑的 SSH 服务(默认端口是 22),可以使用 ngrok tcp 22。ngrok 会为你生成一个类似 0.tcp.ngrok.io:12345 的地址,你就可以通过这个地址远程登录了。
 
分享数据库连接:在团队协作中,你也可以临时分享一个本地的数据库服务。例如,如果你的 PostgreSQL 数据库运行在 5432 端口,执行 ngrok tcp 5432 后,你的同事就可以通过 ngrok 提供的地址连接到你的本地数据库进行测试。
 
不止于穿透:ngrok 的强大安全与管理功能
很多人对 ngrok 的印象还停留在“内网穿透”工具上,但经过多年的发展,它已经成长为一个功能强大的“API 网关”和“流量管理平台”。除了转发流量,它还能在你电脑上的服务接收到请求之前,就对流量进行各种精细的控制。
 
为你的服务加上“门锁”
你不需要修改任何代码,就可以为你的本地服务添加一层强大的身份验证。
 
OAuth 认证:你可以轻松地要求访问者在看到你的网站前,必须先用 Google、GitHub 或 Facebook 等账号登录。这在向客户展示演示版产品时非常有用。
 
邮箱白名单:你还可以设置规则,只允许特定邮箱或特定域名(如 @company.com)的用户通过验证,这对于内部测试来说非常方便。
 
安全地调试外部 Webhook
在开发支付接口或第三方登录功能时,处理外部发来的 Webhook 请求常常令人头疼。ngrok 提供了一个非常实用的功能来验证这些请求。比如,当你在开发一个接收 GitHub 或 Slack 事件的应用时,可以启动命令:ngrok http 8080 --verify-webhook=slack --verify-webhook-secret=你的密钥。这样,ngrok 会在请求到达你的本地服务前,自动验证它的签名是否合法,从而确保请求是真实可信的,而不是恶意的攻击。
 
成为网络流量的“交通指挥”
即使对于运行在你自己电脑上的服务,ngrok 也能赋予它企业级的流量管理能力。
 
流量策略:你可以创建一个简单的配置文件,在里面定义复杂的路由规则。例如,你可以让所有访问 /api/* 路径的请求转发到一个服务,而让访问 /app/* 的请求转发到另一个内部地址。
 
限流和访问控制:你可以在 ngrok 的“边缘”节点就拒绝掉恶意的爬虫,或者限制每个 IP 地址的访问频率,从而保护你的本地服务不会过载。
 
内网专用端点:你甚至可以创建一个公司内部网络才能访问的私有端点,然后将某些公网请求安全地转发到这个内部服务上,实现更复杂的网络架构。
 
所有这些高级功能,都可以通过一个名为 ngrok.yml 的配置文件,或者在启动命令后添加参数来实现。当你运行 ngrok 后,还可以打开浏览器访问 http://localhost:4040,这里会有一个本地 Web 界面,你可以在此查看所有经过 ngrok 的请求和响应的详细信息,这对调试 API 接口来说是一个巨大的帮助。
 
总结与建议
总的来说,ngrok 是一个极其出色和现代的开发工具。它将复杂的网络配置抽象成一条简单的命令,让你能够专注于代码编写,而无需操心 IP、端口转发、DNS 解析和 HTTPS 证书等繁琐的底层网络细节。
 
对于开发者而言,它是开发阶段的得力助手,能极大地提高调试和协作的效率。对于临时需要展示项目或测试 Webhook 的场景,它的免费版本也通常能够满足需求。
 
当然,也要注意到其局限性。免费版的域名是随机的,并且在每次重启后可能会发生变化,同时速度和带宽也有限制。因此,不建议将任何重要的、需要稳定运行的生产环境服务完全依赖在 ngrok 的免费套餐上。
 
市面上也有许多功能类似的工具,如80km穿云箭https://www.80km.com/cyj/,对新手友好,可以做到以下   
    1、内网端口映射
    将内网 Web、SSH、RDP、数据库等服务一键映射至公网,无需公网 IP、无需路由器端口转发。
    2、动态域名绑定
    支持自定义二级域名或绑定自有域名,域名自动跟随公网 IP 变化更新,永不掉线。
    3、多协议支持
    HTTP/HTTPS/TCP/UDP 全协议穿透,Web 服务、游戏联机、远程桌面、摄像头监控均适用。
    4、P2P 智能加速
    端到端直连优先,数据不经中转节点,低延迟、高带宽,传输更稳定。
    5、安全隧道加密
    采用 TLS/SSL 加密通道与访问鉴权机制,防止非法访问与流量劫持。