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

Nginx Ingress Controller修改路径前缀后路由失效、重定向错误问题求助

解决方案

你遇到的是后端服务返回的重定向路径未携带Ingress前缀的典型场景,不需要修改业务代码,通过Nginx Ingress的注解配置即可解决,以下是两种可行方案:


方案1:无需修改应用,通过Nginx自动修正重定向路径

该方案适合无法调整应用配置的场景,通过Ingress的代理重定向规则自动给所有后端返回的重定向路径加上/sub前缀,完整Ingress配置如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
  namespace: mynamespace
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt
    # 原有重写规则,实现/sub路径转发到后端根路径
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    # 自动修正后端返回的重定向路径,加上/sub前缀
    nginx.ingress.kubernetes.io/proxy-redirect: ~^/(.*) /sub/$1
spec:
  tls:
    - hosts:
        - <myapp>.<myregion>.cloudapp.azure.com
      secretName: tls-secret
  rules:
  - host: <myapp>.<myregion>.cloudapp.azure.com
    http:
      paths:
      - path: /sub(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: myapp-service
            port:
              number: 80

配置说明:

  • path: /sub(/|$)(.*)配合rewrite-target: /$2,实现/sub、/sub/login这类路径统一重写为/、/login传递给后端服务,和你之前的重写逻辑完全一致。
  • proxy-redirect注解会自动拦截后端返回的3xx响应,将响应头中Location字段的根路径前缀替换为/sub/,比如后端返回/login会被自动修改为/sub/login再返回给浏览器。

方案2:通过标准请求头让应用自动生成带前缀的路径(推荐)

如果你的应用使用的Web框架支持识别X-Forwarded-Prefix标准请求头(绝大多数主流框架如Spring Boot、Django、Express、Next.js等都支持),优先选择该方案,兼容性更好,还能解决静态资源路径错误的衍生问题:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
  namespace: mynamespace
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    # 给请求加上X-Forwarded-Prefix头,告知应用对外暴露的前缀是/sub
    nginx.ingress.kubernetes.io/x-forwarded-prefix: "/sub"
spec:
  tls:
    - hosts:
        - <myapp>.<myregion>.cloudapp.azure.com
      secretName: tls-secret
  rules:
  - host: <myapp>.<myregion>.cloudapp.azure.com
    http:
      paths:
      - path: /sub(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: myapp-service
            port:
              number: 80

配置说明:

开启该配置后,应用在生成重定向、静态资源引用路径时,会自动拼接/sub前缀,从根源上避免路径缺失的问题,不需要Nginx额外修改重定向响应。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:39:04