公网IP与内网穿透
1.常见地址范围
localhost
localhost通常解析为127.0.0.1或::1,表示当前设备的回环地址。服务只监听回环地址时,其他设备无法直接访问。
局域网IP
家庭或公司网络常见地址包括192.168.x.x、10.x.x.x和172.16.x.x至172.31.x.x。这些私有地址可以在局域网内使用,但不能直接从公网路由访问。
公网IP
公网IP可以在互联网中路由。家庭宽带可能使用运营商级NAT,多户共享公网IPv4,因此即使路由器配置端口转发,外网也不一定能够访问本地设备。
端口能否开放还取决于运营商策略、防火墙、路由器配置和当地合规要求,不能简单归因于端口被“物理封锁”。
2.内网穿透原理
FRP、cpolar等工具通常包含公网服务端和内网客户端:
- 内网客户端主动连接公网服务端并保持隧道
- 外部请求到达公网服务端的指定域名或端口
- 公网服务端通过隧道把流量转发给内网客户端
- 内网客户端再将请求转发给本地服务
因为连接由内网主动发起,所以不要求本地网络拥有可直接访问的公网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、网关或独立静态资源服务,是否合并部署取决于项目规模和运维方式。