Vibe Tutorial
Localhost 与公网访问

9.3 内网穿透实战

Tip

这是一个可以在地球另一端访问你卧室电脑的魔法,但请小心使用。


1. 为什么要学这个?

你在做支付功能。 你点击"支付",跳转到 Stripe/支付宝 页面付了钱。 Stripe 说:"支付成功,我会给你的服务器发一个通知 (Webhook)。" Stripe 对着 http://localhost:3000/api/webhook 发送了通知。 即使 Stripe 的服务器再强大,它也喊不答应你卧室里的那台电脑。 公网服务器找不到私网 IP,这是互联网的基本法则。为了接收这个回调,你需要一条"隧道"。


2. 核心概念:Tunneling (隧道)

内网穿透就像是你在家里(内网)和互联网(公网)之间拉了一根电话线

  1. 你在公网上找了一个中介(如 Ngrok 服务器)。
  2. 你的电脑跟中介保持通话(长连接)。
  3. 当外部有人访问中介时,中介通过电话线把数据传给你。

这样,你就获得了一个临时的公网 URL。


3. 解决方案 (HOW)

方案 A: Ngrok (经典款)

不用配置路由器,不用买服务器,一条命令搞定。

# 1. 安装
npm install -g ngrok

# 2. 启动隧道,转发到 3000 端口
ngrok http 3000

你会得到一个类似 https://e8a2-114-x-x-x.ngrok-free.app 的网址。 把这个网址填给 Stripe,或者发给你的异地客户,他们就能访问你本地的代码了。

方案 B: Cloudflare Tunnel (免费不限速)

Ngrok 免费版现在有限制,Cloudflare 是更现代的选择。

# 使用 quick tunnel
npx cloudflared tunnel --url http://localhost:3000

穿透原理图

graph TD
    Stripe["Stripe 服务器"] -->|POST请求| TunnelURL["公网中介 (Ngrok)"]
    
    subgraph Firewall [防火墙/路由器]
        Line["长连接隧道"]
    end
    
    TunnelURL <===>|穿透| Local["你的电脑"]
    Local -->|转发| NextJS["localhost:3000"]
    
    style Stripe fill:#635bff,color:#fff
    style TunnelURL fill:#ffecb3
    style NextJS fill:#c8e6c9

4. 真实案例

Story

那个忘了关门的实习生

某初创公司的一位实习生,为了在家远程办公,用 Ngrok 把公司的内网开发服务器穿透了出去。 这是一个无需密码的管理员后台。 周末他去玩了,电脑没关,Terminal 里的 Ngrok 也就一直挂着。 结果: 一个自动化的网络扫描器发现了这个公开的 URL。爬虫顺着网线爬进内网,把他们的开发数据库删得干干净净,并留下一封勒索信。

Vibe 心法:内网穿透是"临时手术",绝不是"长久器官"。调试完回调,或者演示完 Demo,立刻 Ctrl+C 关闭隧道。永远不要让这扇后门一直开着。


5. 本章小结

  1. 打洞:Tunnel 让全世界都能访问你的 Localhost。
  2. 调试:开发 Webhook (支付/登录) 必备。
  3. 警惕:用完即关。给隧道加密码 (ngrok http 3000 --basic-auth="user:pass") 是好习惯。