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

PERN Stack部署AWS EC2 Nginx后Axios请求URL异常求助

PERN Stack部署AWS EC2后子页面Axios请求URL格式错误排查与解决

问题概述

本地运行正常的PERN Stack应用部署到AWS EC2后,主域名下的Axios请求正常,但进入子页面(如商品页)时,请求URL格式错误。例如商品页的请求URL变为 http://app3.dev100.xyz/products/api/products/3/related,正确格式应为 http://app3.dev100.xyz/api/products/3/related。客户端采用react-router history模式,问题疑似出在Axios基础URL配置或Nginx配置上。

相关配置

1. React Axios环境配置

// 开发环境(localhost运行正常)
axios.defaults.baseURL = 'http://localhost:5000/api';

// 生产环境(仅主域名正常,子页面出错)
axios.defaults.baseURL = 'api';

// 原条件判断配置
axios.defaults.baseURL = process.env.NODE_ENV === 'production' ? "api/" : 'http://localhost:5000/api';

2. Nginx配置(客户端与API部署在同一服务器)

server {
    listen 80;
    listen [::]:80;

    root /home/ubuntu/apps/ecom-app/client/build;

    index index.html index.htm;

    server_name app3.dev100.xyz;

    location / {
            try_files $uri /index.html;
    }

    location /api/ {
        proxy_pass http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

问题原因

核心问题是Axios相对路径的解析逻辑:当baseURL设置为api或api/这种不带开头斜杠的相对路径时,浏览器会基于当前页面的路由路径(如/products)来拼接URL,导致最终请求路径变成/products/api/xxx,而非预期的根路径下的/api/xxx。

解决方法

方案一:修改Axios baseURL为根相对路径

将生产环境的baseURL改为/api(开头添加斜杠),确保所有请求都从域名根路径开始拼接:

axios.defaults.baseURL = process.env.NODE_ENV === 'production' ? "/api" : 'http://localhost:5000/api';

方案二:使用完整绝对URL(可选)

如果需要更明确的路径指向,也可以直接配置生产环境的完整绝对URL:

axios.defaults.baseURL = process.env.NODE_ENV === 'production' ? "http://app3.dev100.xyz/api" : 'http://localhost:5000/api';

验证Nginx配置

当前Nginx的location /api/配置是正确的,会自动将所有以/api/开头的请求代理到本地的API服务(localhost:5000),无需额外修改。

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:45:43