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

Nuxt.js生产构建后proxy代理pathRewrite路径重写规则失效问题

问题原因及解决方案

根本原因

@nuxtjs/proxy 模块默认仅在开发环境生效,生产环境构建后不会加载对应的代理和路径重写逻辑,这是生产环境请求前缀保留的核心原因。另外你的现有配置存在语法错误,需要先修正。


第一步:修正配置错误

你当前配置中 process.env.BASE_URL 被包裹在引号内,会被识别为固定字符串而非环境变量,先修改为如下格式:

axios: {
  proxy: true,
  baseURL: process.env.NODE_ENV === "production"
    ? process.env.BASE_URL
    : "http://192.168.13.5:5000",
  proxyHeaders: true,
  credentials: true
},
proxy: {
  '/test1/': {
    target: process.env.NODE_ENV !== "production"
      ? "http://192.168.1.2:5000"
      : process.env.BASE_URL, 
    pathRewrite: {'^/test1/': ''}
  },
  '/test2/': {
    target: process.env.NODE_ENV !== "production"
      ? "http://192.168.1.3:5000"
      : process.env.BASE_URL, 
    pathRewrite: {'^/test2/': ''}
  },
},

第二步:根据部署场景选择解决方案

场景1:生产环境使用Nuxt SSR模式(Node服务运行)

如果你的项目是SSR模式部署,可手动开启生产环境代理支持,在nuxt.config.js中新增配置:

server: {
  proxy: true // 开启生产环境代理,默认仅开发环境为true
}

注意:Nuxt内置代理性能远低于专业Web服务器,高并发业务场景不推荐使用该方案。

场景2:生产环境部署在Nginx/Caddy等Web服务器下(SSR/SSG均适用)

直接在Web服务器配置代理及路径重写规则即可,以Nginx为例,配置示例如下:

location ^~ /test1/ {
    proxy_pass http://你的生产环境test1接口地址/; # 末尾的斜杠会自动去掉/test1/前缀
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}
location ^~ /test2/ {
    proxy_pass http://你的生产环境test2接口地址/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

如果生产环境两个接口域名相同,直接把proxy_pass的值换成统一的生产域名即可。

场景3:无需修改服务端配置的兼容方案

可通过axios请求拦截器在生产环境自动移除前缀,在你的axios插件配置中添加如下逻辑:

export default function ({ $axios }) {
  $axios.onRequest(config => {
    if (process.env.NODE_ENV === 'production') {
      // 匹配并移除路径前缀
      config.url = config.url.replace(/^\/test1\//, '/').replace(/^\/test2\//, '/')
    }
    return config
  })
}

该方案仅适用于生产环境两个前缀对应的接口域名和baseURL一致的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:21:01