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

单Nginx配置部署两个NextJs应用:静态资源路径异常问题求助

解决方案

问题根源

你的project2静态资源路径错误,是因为Next.js不知道自己部署在/blog子路径下,构建时生成的静态资源URL默认使用根路径/_next/...,而非期望的/blog/_next/...。你之前尝试的rewrites配置用于路由内部重写,无法解决静态资源路径前缀问题。

方案一:仅修正静态资源路径(推荐,适配原有Nginx配置)

  1. 修改project2的next.config.js
    替换原有内容为:

    module.exports = {
      assetPrefix: '/blog',
    };
    

    assetPrefix会告诉Next.js在构建时为所有静态资源URL添加/blog前缀,前端加载资源时会自动请求/blog/_next/static/...。

  2. 重新构建project2
    执行构建命令更新静态资源:

    npm run build
    
  3. 保持原有Nginx配置不变
    现有Nginx配置中location /blog/_next/static/已正确指向project2的静态文件目录,无需修改。

方案二:统一路由与静态资源路径(彻底适配子路径部署)

如果希望project2的所有路由都基于/blog子路径处理,可使用basePath:

  1. 修改project2的next.config.js

    module.exports = {
      basePath: '/blog',
    };
    

    basePath会同时修改路由和静态资源的URL前缀,Next.js会自动处理/blog开头的请求,并生成带前缀的静态资源路径。

  2. 重新构建project2

    npm run build
    
  3. 调整Nginx配置
    移除location /blog/中的rewrite规则,确保请求原封不动代理到project2服务:

    location /blog/ {
            proxy_pass http://localhost:3003;
            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;
            proxy_hide_header Cache-Control;
            add_header Cache-Control "no-cache, no-store";
    }
    

    这样Nginx会将/blog/xxx的请求直接转发到http://localhost:3003/blog/xxx,Next.js收到后会自动去掉basePath处理内部路由。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:27:19