ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

本地项目运行正常,为什么别人访问不到?localhost、局域网与公网部署原理

本地项目运行正常,为什么别人访问不到?localhost、局域网与公网部署原理

使用 Spring Boot 或 Vue 开发网站时,我们经常通过localhost:8080访问本地服务。项目能够正常运行后,如果希望其他人通过互联网访问,就需要解决网络地址、端口和公网连通性问题。

实际上,个人 Windows 电脑、学校服务器和阿里云 ECS 都可以承担 Web 服务器的工作。区别主要在于外部网络能否访问、服务能否持续运行,以及管理和维护成本。


一、localhost 为什么只能在本机访问?

假设在 Windows 电脑上启动 Spring Boot:

java -jar app.jar --server.port=8080

然后通过浏览器打开:

http://localhost:8080

这里的localhost通常解析为127.0.0.1或::1,属于回环地址,用来访问当前设备自身。

因此,其他人在自己的电脑上输入localhost:8080,访问的仍然是他们自己的电脑,自然无法看到我们运行的 Spring Boot。

还有一个容易忽略的问题:如果 Spring Boot 只监听127.0.0.1,即使其他设备知道我们电脑的局域网 IP,通常也无法通过该 IP 建立连接。


二、同一局域网内怎样访问?

假设电脑连接学校 Wi-Fi,Windows 获得的局域网地址为192.168.1.100。

首先执行:

ipconfig

找到当前网卡的 IPv4 地址,再检查 Spring Boot 是否监听可供其他设备访问的网络接口。

例如,在可信的测试网络中,可以配置:

server.address=0.0.0.0 server.port=8080

0.0.0.0表示监听本机所有 IPv4 网络接口。配置后,同一局域网中的其他设备可以尝试访问:

http://192.168.1.100:8080

如果无法连接,需要检查 Windows 防火墙、服务器端口和网络隔离策略。部分校园 Wi-Fi 会禁止终端设备相互访问,因此即使位于同一个无线网络,也可能无法直接通信。

此外,0.0.0.0只决定程序监听哪些接口,不代表自动获得公网访问能力。


三、为什么局域网地址无法直接在公网访问?

局域网常见地址包括192.168.x.x、10.x.x.x和部分172.16.x.x至172.31.x.x。这些属于私有 IPv4 地址,无法在公共互联网中直接路由。

家庭和校园网络通常通过 NAT(网络地址转换)让多个内部设备共享公网出口。

例如,浏览器访问外部网站时,路由器可以记录内部设备发起的连接,再将网站响应转回对应设备。当陌生用户从公网直接向我们的电脑发起连接时,路由器通常不知道应当将请求转交给哪一台内部设备。如果电脑位于路由器之后,就需要配置公网入口及相应的转发规则。

另外,一些宽带使用运营商级 NAT(CGNAT),用户无法直接控制公网入口。在这种情况下,仅配置自己路由器的端口转发通常无法解决问题。


四、怎样让自己的电脑提供公网服务?

最直接的方法是使用具备公网可达地址的网络,并配置防火墙和端口转发。

例如,在符合网络管理要求的环境中,把路由器公网侧的8080端口映射到内部电脑的192.168.1.100:8080。当外部用户访问公网 IP 对应端口时,请求就会被转交给 Spring Boot。

如果没有可用的公网 IPv4 地址,可以考虑反向隧道或内网穿透,例如 Cloudflare Tunnel。它通过本地连接到外部服务,再由外部入口将用户请求转发给本地应用,适用于开发演示和部分持续运行场景。

无论采用哪种方案,都需要控制公开接口、配置访问权限,并优先使用 HTTPS【通常情况下电脑默认防火墙都会有安全配置,需要自己折腾】。

对于完整的 Java 应用,通常只应开放 Nginx 或受控的应用入口。MySQL 的3306、Redis 的6379等内部服务端口应限制访问,避免将数据库直接暴露到公网。


五、阿里云 ECS 为什么更适合持续部署?

阿里云 ECS 本质上是一台能够远程管理的计算机。购买具备公网地址的 ECS 后,可以在 Linux 上安装 Java、Python、MySQL、Redis 和 Nginx。

例如,用户访问 ECS 的 80 端口,Nginx 接收请求,根据访问路径提供 Vue 静态文件,或将 API 请求转发给本机 Java 服务。

Java 可以通过127.0.0.1:3306连接部署在同一台 ECS 上的 MySQL。这里的127.0.0.1指的是云服务器自身,因为 Java 正运行在 ECS 中。

ECS 具有相对稳定的网络入口,可以独立于个人电脑持续运行。开发者通过 SSH 连接服务器,即使关闭自己的电脑,云端程序仍可继续提供服务。

当然,云服务器同样需要配置安全组、系统防火墙、Nginx、域名、HTTPS 和服务自动启动。


六、本地电脑与云服务器应该怎样选择?

如果只是进行短期演示或内部测试,本地电脑配合局域网或受控隧道即可满足需求。

如果网站需要长期对外开放,并涉及用户登录、数据库存储和多人并发,通常更适合使用学校服务器、企业服务器或云服务器。这样可以降低个人设备关机、网络变化及资源不足造成的影响。

可以记住三个地址概念:127.0.0.1用于设备访问自身;192.168.1.100这样的私有地址用于内部网络通信;公网 IP 则为互联网用户提供寻找目标服务器的入口。

因此,Web 项目能否上线,取决于应用能否运行、外部请求能否到达,以及服务器能否稳定、安全地响应这些请求。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进