ngrok 与 localtunnel 隧道起不来:令牌、端点离线和访客确认页全解
调试网页回调或给同事看本机页面时,常用 ngrok 或 localtunnel 把本机端口临时暴露出去。ngrok http 3000 停在认证失败,或提示端点离线。localtunnel 打印了地址,对方打开却停在 loca.lt 的确认页,要求先继续才能看到你的站点。
这两条都只应该指向你自己正在跑的开发服务,不要拿去暴露你不拥有的机器。下面按令牌、本地端口和访客确认分开。免费额度和域名规则会变,以官方最新条款为准。
两条隧道的检查点不一样
终端里出现地址,只说明隧道进程起来了,不说明你的程序在听那个端口。先在本机用浏览器打开本地地址,确认页面正常,再把隧道地址发给别人。程序没启动时,隧道会把访客带到错误页,看起来像隧道坏了。
| 对比项 | ngrok | localtunnel |
|---|---|---|
| 命令 | ngrok http 端口 | npx localtunnel --port 端口 |
| 凭证 | 控制台里的 authtoken | 通常不需要账号也能起一条 |
| 配置 | ngrok config add-authtoken | 命令行参数指定端口 |
| 成功标志 | 终端里出现转发地址 | 终端打印 your url |
| 访客障碍 | 端点离线或令牌无效 | 确认页要访客的公网地址 |
| 本地前提 | 该端口已有进程在听 | 同左 |
从起不来到同事能打开:分步操作
- 第一步:先把线路准备好,连上刺猬VPN。自定义用户名和密码即可匿名注册,不需要邮箱、也不需要手机号;免费节点永久免费、不限流量、不限速,注册即用。全程 HTTPS+AES 加密传输。ngrok 的控制台和隧道接入如果在境外,本机要先出得去;
- 第二步:在本机把开发服务跑起来,用浏览器访问本地端口,确认不是连接被拒绝。这一步不要经过隧道;
- 第三步:打开 ngrok 控制台,复制 authtoken。在本机执行 ngrok config add-authtoken,再执行 ngrok http 加你的端口。终端应打印转发地址;
- 第四步:用另一台设备打开该地址。若提示端点离线,回到终端看进程是否还在。关掉终端,隧道就没了;
- 第五步:localtunnel 在项目目录执行 npx localtunnel 并指定端口。记下打印出的地址。不要把旧地址发给别人;
- 第六步:对方如果停在确认页,页面要的是对方自己的公网 IP,用来点继续。这不是你的令牌。让对方按页面说明打开,不要把你的 authtoken 发给对方;
- 第七步:需要固定域名或访问策略时用 ngrok 控制台里的域名和策略,不要在命令里手写别人的域名;
- 第八步:回调地址填进第三方后台时,用隧道给出的 https 地址加路径。第三方服务器要能访问这个地址,和你同事的浏览器不是同一条网络;
- 第九步:调试结束就停掉隧道进程。长期把开发端口暴露在公网上没有必要。
按现象排查:令牌、端口、确认页
先看终端有没有打印地址,再看本地端口,最后看访客看到的那一页。
- 认证失败或令牌无效:authtoken 没有写入配置,或复制时多了空格。重新从控制台复制,再执行 add-authtoken;
- 端点离线:隧道进程已退出,或你看的是上一次的地址。以当前终端里的地址为准;
- 隧道在、本地连接被拒绝:端口号写错,或程序听在别的端口。先让本地浏览器能开;
- localtunnel 确认页过不去:访客没按页面完成确认。确认用的是访客当前的公网地址,开着另一层转发时这个地址会对不上;
- 你自己能开、第三方回调失败:回调来自对方服务器,不是你的浏览器。对方服务器到隧道地址的网络不通时,要看对方的出网,而不是只在你电脑上刷新;
- 免费额度用尽:控制台会提示限额。停掉不用的隧道,或按控制台给出的额度处理,以官方最新条款为准;
- 地址每次启动都变:没有使用保留域名。把新地址更新到回调配置,不要继续用旧地址;
- 只有公司网络起不来:到接入主机的连接被拦。换一条能完成控制台登录的线路后再启动隧道。
线路只负责你到隧道服务
刺猬VPN 帮助你的电脑到达隧道服务的控制台和接入点。同事打开地址、第三方发回调,走的是他们自己的网络。免费节点适合先完成令牌配置。需要连续调试,用时长套餐按周期计费,期间不限流量、不限速。实际可用性取决于当前网络环境。
| 对比项 | 本机能打开控制台 | 隧道已打印地址 | 免费节点试一次 |
|---|---|---|---|
| 登录控制台 | 能复制令牌 | 与令牌是否有效不是一回事 | 适合先登录 |
| 启动隧道 | 进程能连上接入点 | 本地端口仍要自己听着 | 试一条短隧道 |
| 同事访问 | 同事的网络另算 | 确认页在同事浏览器里 | 不代替同事的网络 |
| 回调 | 第三方服务器要能访问该地址 | 你刷新成功不等于回调成功 | 同左 |
| 长时间挂着 | 时长套餐期间不限流量、不限速 | 进程退出即离线 | 永久免费、不限流量、不限速 |
| 适合场景 | 控制台在境外时 | 给同事看本机页面 | 第一次配置令牌 |
本机、同事和回调服务器是三方
你在笔记本上能打开隧道地址,只证明你的浏览器到该地址是通的。同事在另一网络,可能停在确认页或根本打不开。把同事看到的原文记下来,不要用你自己的成功代替他的结果。
第三方的回调超时,要看对方后台的投递记录,而不是你终端的颜色。投递记录写连接失败,就是对方到隧道地址不通。投递记录写你的程序返回了错误码,隧道已经通了,去改你的处理函数。
不要把 authtoken 写进仓库。它放在本机配置里。换电脑时重新从控制台复制。旧令牌如果已经出现在聊天记录里,就在控制台作废并新建。
localtunnel 的确认页是为了减少别人误扫到你的临时地址。把它关掉或绕过的做法不在调试步骤里。让访客按页面继续即可。确认完成后应看到你的本地页面,而不是再跳回确认页。若仍跳回,访客的地址在中途变了,让他直接打开,不要再套一层会改地址的转发。
本地同时跑两个端口时,隧道命令里的端口必须和正在听的那个一致。你看的是 3000,命令写成了 8080,访客会打开另一个空服务,看起来像隧道串了内容。先在本机浏览器核对端口,再把这个端口写进命令。
请求头和路径要和本地一致。第三方回调如果打到根路径,而你的处理函数在子路径,隧道是通的,程序会返回找不到。投递记录里的路径要和本地路由对照,不要一看到错误码就重启隧道。
电脑睡眠会把隧道进程挂起,访客立刻看到离线。长时间调试时避免睡眠,或在终端里看到进程还在再把地址发出去。地址发出去之后又改了端口,旧地址不会跟着变。
团队里只应有一个人持有令牌。第二个人需要看页面时,只收地址,不收令牌。他若自己再起一条隧道,会得到另一个地址,回调配置就会指错地方。调试群里置顶当前地址,旧地址标明已停。
本地程序如果只听在本机回环地址,隧道仍可能连上,但有的框架会拒绝不是本机浏览器的请求。终端没有报错、访客却看到拒绝,先看程序是不是只允许本机来源。允许隧道转发的来源之后再试,不要先换令牌。
你在命令里加了子域名或路径前缀时,回调配置要写成带前缀的完整地址。漏掉前缀,对方会打到根路径并得到找不到。把双方的完整地址逐字对照,包括末尾有没有斜杠。
防火墙弹出是否允许该程序联网时,如果点了拒绝,隧道进程会一直停在重试。到系统防火墙里把这次的程序改成允许,再重新执行命令。只重装命令行工具,不会改掉已经拒绝的规则。
把本地页面改了代码却没重启进程时,隧道地址仍指向旧进程。访客看到的是旧页面。先在本地浏览器强制刷新,确认已经是新页面,再让访客重新打开。不要因为旧页面去重建隧道。
和 Cloudflare、Tailscale 怎么分工
用 Cloudflare 的隧道或 Workers 暴露服务,是另一套控制台和登录,见 Cloudflare 控制台与 Workers。要把几台自己的机器组成私网,而不是给公网一个临时地址,见 Tailscale 异地组网。
ngrok 的令牌不能填进那两处的登录。公网临时地址和私网地址用途不同。同事没有你的私网账号时,才需要一条临时公网地址。
调试结束优先停隧道。长期互联用组网,而不是把开发端口一直挂在公网。
常见报错速查表
| 现象 | 原因 | 解决办法 |
|---|---|---|
| 令牌无效 | 没写入或复制了空格 | 重新 add-authtoken |
| 端点离线 | 进程已退出或地址过期 | 看当前终端里的地址 |
| 本地被拒绝 | 端口没有程序 | 先让本地浏览器能开 |
| 确认页过不去 | 访客地址对不上 | 让访客按页面直接打开 |
| 回调超时 | 对方服务器到不了隧道 | 看对方的投递记录 |
| 程序返回错误 | 隧道已通 | 改你的处理函数 |
| 额度用尽 | 免费限额 | 停掉多余隧道,以控制台为准 |
高频问答
- 问:localtunnel 一定要账号吗?答:临时地址通常可以直接起。确认页仍然会出现,那不是登录;
- 问:令牌能发给同事吗?答:不要。同事只需要隧道地址。令牌留在你的电脑上;
- 问:地址为什么每次都变?答:没有保留域名。回调配置要跟着新地址改;
- 问:免费节点够不够?答:够登录控制台并起一条短隧道。连续调试用时长套餐,期间不限流量、不限速;
- 问:我能开、回调不行?答:回调来自第三方服务器。看对方的投递记录,不要只刷新你的浏览器;
- 问:和组网哪个适合长期用?答:长期互联用私网。临时给外网看一眼再用隧道,用完即停。
先证明本地端口,再启动隧道
ngrok 令牌无效、端点离线,localtunnel 停在确认页、回调超时,要先让本机浏览器打开本地端口,再看终端里的地址是否还活着。令牌不外发。同事的确认页让同事自己按页面完成。第三方回调看投递记录,区分是隧道没通,还是你的程序返回了错误。
刺猬VPN 采用 HTTPS+AES 加密传输,支持断线保护。自定义用户名和密码即可匿名注册,不需要邮箱和手机号。免费节点永久免费、不限流量、不限速;时长套餐按周期计费,期间不限流量、不限速。一个账号支持多设备同时在线。额度以官方最新条款为准。实际可用性取决于当前网络环境。
换刺猬VPN告别连接烦恼:一键连接、连接稳定
刺猬VPN提供永久免费节点,不限流量;无需邮箱,自定义用户名即可匿名注册。一个账号支持多设备同时在线,实际可用性取决于当前网络环境。