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

NGINX反向代理多Next.js应用出现静态资源404错误求助

解决Next.js应用在NGINX反向代理子路径下静态资源404问题

1. 修改Next.js App2的配置

在App2的next.config.js中添加basePath配置,告诉Next.js应用运行在/admin子路径下,这样它生成的所有静态资源、路由链接都会自动带上/admin前缀:

/** @type {import('next').NextConfig} */
const nextConfig = {
  basePath: '/admin',
  // 保留你已有的其他配置
}

module.exports = nextConfig

2. 调整NGINX代理配置

你的现有NGINX配置需要两处关键调整,修复路径转发和请求头问题:

location /admin {
    proxy_pass http://adminui:3010/;
    # 传递必要的请求头,让Next.js识别真实请求信息
    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;
    # 适配Next.js的路由刷新需求
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_cache_bypass $http_upgrade;
}

location / {
    proxy_pass http://frontendui:3003;
    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;
}

关键逻辑说明

  • Next.js的basePath:Next.js默认从根路径/加载资源,设置basePath: '/admin'后,所有静态资源、路由链接都会自动拼接/admin前缀,比如/_next/static/xxx.js会变成/admin/_next/static/xxx.js,刚好匹配NGINX的/admin规则。
  • proxy_pass末尾的斜杠:如果不带斜杠,NGINX会把/admin连同后续路径一起转发给后端(比如/admin/_next/xxx会变成http://adminui:3010/admin/_next/xxx),但App2已经设置了basePath,实际期望的后端路径是/_next/xxx,加斜杠后NGINX会自动去掉/admin前缀再转发。
  • 代理请求头:确保Next.js能正确获取请求的主机、协议等信息,避免生成错误的资源链接或路由跳转。

修改完成后,重启NGINX和App2容器,访问localhost/admin即可正常加载静态资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:19:59