You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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实例本身发起请求仍失败,按以下步骤排查:

  1. 直接测试Nginx转发是否正常
    执行命令测试:

    curl http://127.0.0.1/v1/test
    

    如果失败,查看Nginx错误日志定位问题:

    cat /var/log/nginx/error.log
    

    同时检查Node服务状态和日志:

    pm2 status
    pm2 logs
    
  2. 确认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')
    })
    
  3. 检查实例内部防火墙规则
    查看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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 15:07:05