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

如何配置Nginx Ingress解决K8s多应用重定向路径丢失问题

解决K8s Nginx Ingress下应用重定向丢失上下文的问题

问题根源

你的应用在重定向时返回的是根路径(如/link1)或内部服务地址(如http://app2-k8s-svc:9090/link1),现有Ingress配置仅处理了请求路径的重写,未修改响应中的Location头,导致浏览器跳转到localhost/link1而非预期的localhost/app2/link1。

解决方案

修改Ingress配置,添加注解处理重定向响应的Location头,同时移除无效的add-base-url注解(该注解需应用配合读取环境变量,你无法修改应用配置故无用)。

修改后的Ingress配置

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-ingress
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    # 替换应用返回的内部服务地址重定向
    nginx.ingress.kubernetes.io/proxy-redirect-from: http://app1-k8s-svc:80/
    nginx.ingress.kubernetes.io/proxy-redirect-to: /app1/
    nginx.ingress.kubernetes.io/proxy-redirect-from: http://app2-k8s-svc:9090/
    nginx.ingress.kubernetes.io/proxy-redirect-to: /app2/
    # 替换应用返回的根路径开头的重定向
    nginx.ingress.kubernetes.io/configuration-snippet: |
      if ($request_uri ~* ^/app1(/|$)) {
          proxy_redirect ~^/(.*) /app1/$1;
      }
      if ($request_uri ~* ^/app2(/|$)) {
          proxy_redirect ~^/(.*) /app2/$1;
      }
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:              
      - path: /app1(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: "app1-k8s-svc"
            port:
              number: 80
      - path: /app2(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: "app2-k8s-svc"
            port:
              number: 9090

配置说明

  1. proxy-redirect-from/to:匹配应用返回的带内部服务域名的Location值,将其替换为对应应用的上下文前缀(如把http://app2-k8s-svc:9090/link1替换为/app2/link1)。
  2. configuration-snippet:通过自定义Nginx规则,根据当前请求的上下文路径,将应用返回的根路径开头的Location(如/link1)替换为带前缀的路径(如/app2/link1),确保重定向始终落在对应应用的上下文下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:29:51