React部署后向Node.js后端发POST请求报net::ERR_CONNECTION_TIMED_OUT如何解决?
问题根因
- 192.168.0.0/16是私网保留地址段,仅能在局域网内部路由,公网环境下无法直接访问。你当前的Axios配置把请求地址写死为内网IP,公网用户打开前端后,浏览器会在公网环境请求该内网地址,自然无法连通,返回超时错误。
- 你仅做了前端服务的公网映射,后端3010端口没有对外暴露,公网环境没有路径可以访问到你的Node.js后端服务。
- 额外说明:你当前遇到的是网络连通性错误,和CORS配置无关,CORS错误不会返回连接超时的报错。
解决方案
1. 修正Axios基础地址配置
修改axios实例的baseURL,不要写死内网IP,两种可选配置:
- 如果后端用独立端口暴露,改为公网可访问的地址:
axiosInstance.defaults.baseURL = "http://app.testSetup.de:3010" - 如果后端和前端共用域名通过路径区分,改为相对路径前缀:
axiosInstance.defaults.baseURL = "/api"
2. 暴露后端服务到公网,两种可选方案:
方案A:端口映射
在你的内网网关/路由器上做端口转发规则,将公网IP的3010端口流量转发到内网192.168.XX.XXX:3010,同时放开服务器防火墙、云服务商安全组(若用云服务器)的3010端口入站规则。
方案B:同域名反向代理(更推荐)
用你部署前端的反向代理服务(如Nginx)增加路径分流规则,将所有/api前缀的请求转发到内网http://192.168.XX.XXX:3010,示例Nginx配置参考:
location /api { proxy_pass http://192.168.XX.XXX:3010; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
该方案不需要额外暴露3010端口,也能天然避免跨域问题,无需额外配置CORS。
补充排查点
- 确认Node.js后端启动时监听地址为
0.0.0.0而非127.0.0.1,后者仅允许本机访问服务。 - 确认React的package.json代理配置仅在本地开发环境生效,生产打包后不会生效,不要依赖该配置解决生产环境的请求转发问题。
内容的提问来源于stack exchange,提问作者NMSD
相关产品推荐
相关产品推荐

