Skip to content
DAILY QUOTE

“ ”

公网IP与内网穿透

1.常见地址范围

localhost

localhost通常解析为127.0.0.1::1,表示当前设备的回环地址。服务只监听回环地址时,其他设备无法直接访问。

局域网IP

家庭或公司网络常见地址包括192.168.x.x10.x.x.x172.16.x.x172.31.x.x。这些私有地址可以在局域网内使用,但不能直接从公网路由访问。

公网IP

公网IP可以在互联网中路由。家庭宽带可能使用运营商级NAT,多户共享公网IPv4,因此即使路由器配置端口转发,外网也不一定能够访问本地设备。

端口能否开放还取决于运营商策略、防火墙、路由器配置和当地合规要求,不能简单归因于端口被“物理封锁”。

2.内网穿透原理

FRP、cpolar等工具通常包含公网服务端和内网客户端:

  1. 内网客户端主动连接公网服务端并保持隧道
  2. 外部请求到达公网服务端的指定域名或端口
  3. 公网服务端通过隧道把流量转发给内网客户端
  4. 内网客户端再将请求转发给本地服务

因为连接由内网主动发起,所以不要求本地网络拥有可直接访问的公网IP。

公网入口必须配置访问控制,并及时更新穿透工具。不要把数据库、Redis、管理后台等内部服务直接暴露到公网。

3.前后端分离项目的localhost问题

如果只暴露前端开发服务器,而前端接口地址仍是http://localhost:8080,其他用户打开页面后,浏览器会访问用户自己设备的8080端口,而不是开发者电脑上的后端服务。

可选处理方式:

  • 分别暴露前端和后端,并把前端API地址改为后端公网地址
  • 使用Nginx统一代理静态资源和/api请求
  • 将前端构建产物交给Spring Boot提供,通过同一端口访问

4.单端口部署

小型项目可以将前端构建产物放入Spring Boot静态资源目录。

构建前端:

bash
npm run build

dist中的文件复制到:

text
src/main/resources/static

前端接口建议使用相对路径,例如/api/users,由Spring Boot或网关处理。这样只需要暴露应用端口,页面和接口使用同一个来源,也可以减少跨域配置。

如果前端使用History路由,还需要配置未知页面路径回退到index.html。生产环境中通常使用Nginx、网关或独立静态资源服务,是否合并部署取决于项目规模和运维方式。