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

Nginx反向代理Nuxt.js应用静态资源加载异常问题求助

解决Nuxt.js 2子目录反向代理静态资源加载问题

问题根源

Nuxt.js默认认为自己运行在域名根路径下,生成的静态资源、路由链接都是根路径(如/_nuxt/xxx)。当通过反向代理子目录/web访问时,浏览器会从主站ServerA的根路径加载这些资源,而非走代理到ServerB。需要同时调整Nuxt配置和Nginx反向代理规则。

步骤1:修改Nuxt.js配置文件(nuxt.config.js)

在Nuxt项目的nuxt.config.js中添加以下配置,指定应用的基础路径:

export default {
  // 静态资源的基础URL前缀
  publicPath: '/web/',
  // 路由的基础路径
  router: {
    base: '/web/'
  }
}

配置完成后,重新构建并重启Nuxt服务:

npm run build
npm run start

步骤2:修改ServerA的Nginx配置

替换原有配置为以下内容,确保正确处理example.com/web的请求转发:

server {
  listen 80;
  server_name example.com;

  # 保留主站CMS的原有配置,处理根路径请求
  location / {
    # 此处填写你原有的CMS服务配置,比如:
    # root /var/www/cms;
    # index index.html;
    # 或 proxy_pass http://localhost:8080;
  }

  # 处理/web路径的请求,转发到ServerB的Nuxt应用
  location /web/ {
    # 注意proxy_pass结尾的斜杠,会将/web/后的路径转发到ServerB的根路径
    proxy_pass http://ServerB_ip_address:3000/;
    
    # 设置代理头,让Nuxt识别真实请求信息
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    
    proxy_redirect off;
  }
}

注意:如果你的Nuxt应用运行在非3000端口,请修改proxy_pass中的端口号。

配置完成后,重新加载Nginx使配置生效:

sudo nginx -s reload

验证效果

访问example.com/web,查看页面静态资源的请求路径,应该显示为example.com/web/_nuxt/assets/cute-dog.jpg这类带/web/前缀的路径,说明资源已正确从ServerB加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:01:10