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

如何解决Kubernetes中多Next.js项目的Ingress路径冲突?

解决Kubernetes中多Next.js项目的/_next/路径冲突问题

你遇到的核心问题是两个Next.js应用的静态资源路径(/_next/)重叠,导致Ingress无法区分请求应该转发到哪个服务。下面提供两种可行的解决方案:

方案一:修改Admin项目的Next.js配置(推荐)

通过给Admin项目设置basePath,让它的静态资源路径带上/admin前缀,从根本上避免路径冲突。

  1. 在Admin项目的next.config.js中添加以下配置:
module.exports = {
  basePath: '/admin',
  assetPrefix: '/admin',
}

这样Admin应用的所有静态资源请求会变成/admin/_next/...,不再和根路径的Client应用的/_next/冲突。

  1. 恢复到第二次的Ingress配置即可:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress-service
  labels: 
    app: my-service
  annotations:
    # 保留你的原有注解(如SSL、限流等)
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: client-srv
                port:
                  number: 3000
          - path: /admin/
            pathType: Prefix
            backend:
              service:
                name: admin-srv
                port:
                  number: 3001

方案二:通过Ingress路径重写实现(无需修改应用代码)

如果无法修改Admin项目代码,可以利用NGINX Ingress的路径重写注解,将/admin/_next/的请求转发到Admin服务时去掉/admin前缀。

  1. 更新Ingress配置,添加重写注解并调整路径规则:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress-service
  labels: 
    app: my-service
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    # 保留你的其他原有注解
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: client-srv
                port:
                  number: 3000
          - path: /admin(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: admin-srv
                port:
                  number: 3001

这个配置的作用是:

  • 当请求路径为/admin或/admin/xxx时,会被重写成/xxx转发到Admin服务
  • 比如请求/admin/_next/static/css/xxx.css会被重写成/_next/static/css/xxx.css发送到admin-srv
  • 根路径的/_next/请求依然会匹配第一个规则,转发到client-srv

注意事项

  • 方案二依赖NGINX Ingress Controller(AWS EKS默认或常用的Ingress Controller),如果使用其他类型的Ingress Controller,需要调整对应的重写配置
  • 路径匹配优先级:Kubernetes Ingress会优先匹配最长前缀的路径规则,因此/admin(/|$)(.*)会优先于/匹配所有/admin开头的请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:13:15