EC2实例中Express API经Nginx反向代理本地请求失败问题排查
问题分析与解决方案
核心问题定位
你遇到的请求失败,本质是前端请求的localhost指向的上下文和你预期不符,分两种场景逐一解决:
场景1:本地浏览器访问EC2上的前端页面时发起请求
此时浏览器中的localhost指的是你自己的本地电脑,而非AWS EC2实例,请求自然无法到达EC2的Nginx服务。
解决办法
优先推荐:使用相对路径发起请求
将axios请求改为相对路径,无需指定域名/IP:axios.get('/v1/test')浏览器会自动使用当前加载前端页面的地址(比如
https://mytestdomain.com或EC2公网IP)作为基础URL,请求会正确发送到EC2的Nginx,既规避了localhost的歧义,也适配不同访问场景。备选:配置API基础地址
在Vue项目的环境配置文件(如.env.production)中添加:VUE_APP_API_BASE_URL=https://mytestdomain.com然后在axios的全局配置中设置:
axios.defaults.baseURL = process.env.VUE_APP_API_BASE_URL构建前端后,请求会自动使用配置的域名发起,确保指向EC2实例。
场景2:EC2实例内部测试请求(如SSH登录后用curl/本地浏览器访问)
如果是在EC2实例本身发起请求仍失败,按以下步骤排查:
直接测试Nginx转发是否正常
执行命令测试:curl http://127.0.0.1/v1/test如果失败,查看Nginx错误日志定位问题:
cat /var/log/nginx/error.log同时检查Node服务状态和日志:
pm2 status pm2 logs确认Node服务监听地址
确保Node后端监听的是0.0.0.0:6200而非仅127.0.0.1:6200(虽然Nginx代理到localhost没问题,但监听0.0.0.0能避免潜在的网络绑定问题),Node代码中类似:app.listen(6200, '0.0.0.0', () => { console.log('Server running on port 6200') })检查实例内部防火墙规则
查看EC2内部是否有防火墙(如ufw、iptables)限制了127.0.0.1:80的访问,执行以下命令临时关闭测试:sudo ufw disable # 适用于ufw防火墙
额外验证
你的Nginx配置本身是正确的:
location /v1配合proxy_pass http://localhost:6200/v1,会将/v1/test正确转发到http://localhost:6200/v1/test,和Node的/v1接口前缀匹配,尾斜杠的调整不会影响当前场景。
内容的提问来源于stack exchange,提问作者hotcakedev
相关产品推荐
相关产品推荐

