部分VPN用户登录时调用NodeJS后端报ERR_CONNECTION_TIMED_OUT如何解决
问题排查与修复方案
核心问题定位
你当前的Nginx配置仅配置了前端3001端口的反向代理,没有对后端3000端口的接口请求做反向代理规则。如果你的前端代码是直接请求xxx.fr:3000/xxx的接口地址,部分VPN会默认屏蔽80、443以外的非标准端口,就会出现前端静态资源(走443端口)加载正常,但调用后端接口(走3000端口)超时的问题。
修复步骤
- 第一步:修改Nginx配置,添加后端接口反向代理规则
在Nginx的443端口对应的server块中添加如下location配置,统一将/api前缀的请求转发到后端3000端口:
location /api { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; proxy_set_header X-Scheme $scheme; proxy_pass http://127.0.0.1:3000; }
修改完成后重载Nginx配置,再把前端代码里的所有接口请求地址,从直接调用3000端口的格式改为/api/xxx的相对路径,让所有请求统一走443端口,避免非标准端口被VPN拦截。
- 第二步:修复CORS配置冲突
你当前Node.js的CORS配置存在逻辑冲突:Access-Control-Allow-Origin设置为*的同时开启了Access-Control-Allow-Credentials: true,浏览器会直接拦截这类跨域请求,按你的需求二选一修改即可:
- 如果不需要携带Cookie等身份凭证,直接删除
res.header("Access-Control-Allow-Credentials", true);这行配置 - 如果需要携带凭证,把
Access-Control-Allow-Origin的值改为你的前端域名https://xxx.fr,不要使用通配符*
- 第三步:辅助排查验证
如果修改后仍有问题,按以下步骤定位即可:
- 让出现问题的用户打开浏览器控制台,查看Network面板中接口的请求地址、请求头是否符合预期
- 查看Nginx的access.log和error.log,确认异常请求是否正常到达服务器
- 检查服务器防火墙、安全组规则,是否存在针对特定IP段的访问限制
内容的提问来源于stack exchange,提问作者zakk8889
相关产品推荐
相关产品推荐

