--- title: "10.1 从 Localhost 到互联网" description: "理解网络三层——回环、局域网、广域网,以及为什么你的项目需要部署" --- # 10.1 从 Localhost 到互联网 > **本节目标**:理解 localhost 为什么别人打不开,学会用局域网在手机上测试,搞清楚"让别人看到"有哪几条路。 ## Localhost:每个设备的"自言自语" 小明以为 `localhost` 是"我的电脑的地址"。不完全对——localhost 的意思是"发出请求的设备自己"。 当小明在自己的浏览器输入 `localhost:3000`,浏览器访问的是小明的电脑。小明的电脑上跑着 Next.js 服务,所以页面正常显示。 当朋友在自己的浏览器输入 `localhost:3000`,浏览器访问的是朋友的电脑。朋友的电脑上什么都没跑,所以浏览器报错"拒绝连接"。 一个直觉测试:你在手机浏览器输入 `localhost`,访问的是手机自己,不是你的电脑。每个设备的 localhost 都指向自己。 技术上,localhost 对应 IP 地址 `127.0.0.1`,叫做**回环地址**(loopback)。数据包从你的电脑发出,又回到你的电脑,从不经过网线或 WiFi。这就是为什么 localhost 天然安全——外部设备根本碰不到它。 ::: info 为什么开发服务器默认用 localhost? 正因为 localhost 只有本机能访问,它是最安全的开发环境。你的代码可能有 bug、有安全漏洞、数据库里存着测试数据——都没关系,因为只有你自己能看到。开发框架默认绑定 localhost,就是为了避免你的半成品意外暴露给局域网里的其他设备。 ::: ## 局域网:同一个 WiFi 下的设备互通 小明理解了 localhost 的问题,但他还有一个需求:在手机上测试触摸手势和响应式布局。总不能每次都部署到公网吧? 不需要。如果手机和电脑连着同一个 WiFi,它们就在同一个**局域网(LAN)** 里。局域网内的设备可以直接互相访问。 想象同一个 WiFi 下的设备像同一间办公室里的人,可以直接喊话。不同 WiFi 就像不同城市,喊话听不到。 局域网是全栈开发中真机调试的核心手段。你不需要每次都部署到公网才能在手机上看效果——手机和电脑在同一个 WiFi 下,直接访问就行。 ### 找到你的局域网 IP 你的电脑在局域网里有一个内部 IP 地址,通常是 `192.168.x.x` 或 `10.x.x.x` 的格式。找到它: ::: code-group ```bash [Windows] ipconfig ``` ```bash [macOS] ifconfig ``` ```bash [Linux] ip addr ``` ::: 在输出中找到类似 `192.168.1.105` 的地址(不是 `127.0.0.1`,那是 localhost)。 ### 手机访问电脑上的项目 1. 确保手机和电脑连着同一个 WiFi 2. 确保项目正在运行(比如 `pnpm dev` 在 3000 端口) 3. 在手机浏览器输入 `http://192.168.x.x:3000`(替换成你的实际 IP) 如果一切顺利,手机上就能看到你的项目了。你可以测试触摸手势、检查响应式布局、验证移动端的交互体验——不需要部署,不需要任何工具。 ::: tip Next.js 的绑定地址 有些框架默认只监听 `127.0.0.1`(localhost),不接受局域网内其他设备的请求。如果手机访问不了,试试在启动命令里指定监听所有网络接口: ```bash # Next.js pnpm dev --hostname 0.0.0.0 # Vite pnpm dev --host ``` `0.0.0.0` 的意思是"接受来自任何网络接口的请求",包括局域网。 ::: ## 防火墙:为什么手机还是打不开? 小明照做了,但手机上显示"无法连接"。 90% 的情况下,这是**防火墙**在拦截。 防火墙的作用是保护你的电脑不被局域网内的其他设备随意访问。它就像手机的"勿扰模式"——不是没有来电,是你主动屏蔽了。 当你运行 `pnpm dev` 时,Node.js 在 3000 端口监听请求。但防火墙可能没有允许外部设备访问这个端口,所以手机的请求被挡在了门外。 排查顺序: 1. **确认手机和电脑在同一个 WiFi**(听起来废话,但这是最常见的遗漏) 2. **确认开发服务器监听了 `0.0.0.0`**(见上面的 tip) 3. **检查防火墙设置**——这是最后也是最常见的拦路虎 ### 让 AI 帮你排查 防火墙配置因操作系统而异,手动操作容易出错。直接告诉 Claude Code: > "我的手机和电脑连着同一个 WiFi,但手机访问电脑的 IP 地址打不开。帮我排查防火墙设置,允许 Node.js 的 3000 端口通过。" Claude Code 会根据你的操作系统生成对应的命令。 ::: details Windows 防火墙放行示例 ```powershell # 允许 TCP 3000 端口入站 New-NetFirewallRule -DisplayName "Node.js Dev Server" -Direction Inbound -Protocol TCP -LocalPort 3000 -Action Allow ``` ::: ::: details macOS 防火墙放行 macOS 的防火墙默认按应用管理。在"系统设置 → 网络 → 防火墙 → 选项"中,确保 Node.js 被允许接受传入连接。 ::: ::: tip 用完记得恢复 真机调试完成后,建议关闭这条防火墙规则。开发端口长期暴露在局域网里不是好习惯。 ::: ## 广域网:不同 WiFi 就到不了 小明的手机调试搞定了。但他的朋友在另一个城市,连的是另一个 WiFi。局域网 IP `192.168.x.x` 只在你自己的路由器内部有效,朋友的网络里根本找不到这个地址。 这就涉及到**广域网(WAN)**——也就是真正的互联网。 要让不同网络的人访问你的服务,你需要一个**公网 IP**。但普通家庭宽带通常没有独立的公网 IP。运营商用一种叫 NAT 的技术,让很多用户共享同一个公网 IP。 打个比方:公网 IP 像公寓楼的门牌号,外卖员只能送到楼下大门(运营商的公网 IP),不能直接送到你家门口(你的设备)。你的电脑藏在运营商的 NAT 后面,外部请求找不到它。 你可以验证这一点:在浏览器里搜索"我的 IP",看到的公网 IP 和你用 `ipconfig` 查到的局域网 IP 完全不同。公网 IP 是运营商分配给你家路由器的(而且可能是多户共享的),局域网 IP 是路由器分配给你电脑的。 所以,想让互联网上的人访问你的项目,你需要把代码部署到一台有公网 IP 的服务器上。这就是第十二章要做的事。 ## 网络三层总览 把前面讲的三个层级放在一起看。从内到外,可达范围越来越大,安全风险也越来越高。localhost 最安全(只有你自己),局域网次之(同一个 WiFi 下的人),广域网最开放(全世界)。 ## 三条路:从"自己看"到"别人看" 小明现在理清了整个脉络。想让别人看到你的项目,有三条路,适用于不同场景: ### 1. 局域网直连 **适用场景**:自己在手机上测试,或者让坐在旁边的朋友看一眼。 **条件**:设备连着同一个 WiFi。 **做法**:手机浏览器输入电脑的局域网 IP + 端口。 **局限**:离开这个 WiFi 就访问不了。 ### 2. 内网穿透 **适用场景**:朋友在另一个城市,你想让他临时看看效果,但不想走完整个部署流程。 **做法**:用工具在你的电脑和公网服务器之间建一条隧道,生成一个临时链接。 **局限**:链接每次变、你的电脑必须开着、速度不稳定。 下一节会详细讲怎么操作。 ### 3. 正式部署 **适用场景**:让任何人随时都能访问你的产品。 **做法**:把代码部署到 Vercel、腾讯云等平台,获得一个稳定的公网地址。 **前提**:你需要先用 Git 管理代码(第十一章),然后才能部署(第十二章)。 --- 小明看着这三条路,心里有了数。他的朋友在另一个城市,局域网不通。正式部署又太重了——他只是想让朋友看一眼。 "有没有中间方案?" "有。下一节教你内网穿透。" --- **上一节**:[序言](./index.md) **下一节**:[10.2 内网穿透:临时让朋友看看](./02-tunneling.md)