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

Kubernetes Nginx Ingress rewrite-target引发双斜杠问题求助

解决Kubernetes Ingress中/front路径重写的双斜杠问题

问题根因

你当前的Ingress配置里,/front()(.*)这个正则会把请求路径拆成两个分组:第一个分组是空字符串,第二个分组是/main/dashboard/3。配合rewrite-target: /$1$2的话,就会拼接成/ + 空 + /main/dashboard/3,结果就出现了双斜杠//main/dashboard/3。

修正后的配置方案

下面两种配置都能解决问题,选一种即可:

方案一:使用path级别的rewrite规则(Kubernetes 1.20+支持)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demo-ingress
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
    - http:
        paths:
          # 处理/front开头的请求,移除前缀/front
          - path: /front(/.*)
            pathType: ImplementationSpecific
            backend:
              service:
                name: foo-service
                port:
                  number: 8080
            rewrite:
              target: $1
          # 处理/back开头的请求,保留原路径
          - path: /back(/.*)
            pathType: ImplementationSpecific
            backend:
              service:
                name: foo-service
                port:
                  number: 8080
            rewrite:
              target: /back$1

方案二:使用全局rewrite-target注解

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demo-ingress
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: $1
spec:
  rules:
    - http:
        paths:
          # 捕获/front后的整个路径,重写为该路径
          - path: /front(/.*)
            pathType: ImplementationSpecific
            backend:
              service:
                name: foo-service
                port:
                  number: 8080
          # 捕获整个/back开头的路径,直接重写为该路径
          - path: (/back/.*)
            pathType: ImplementationSpecific
            backend:
              service:
                name: foo-service
                port:
                  number: 8080

验证效果

应用配置后测试:

kubectl apply -f demo-ingress.yaml && curl 192.168.49.2:80/front/main/dashboard/3

预期响应:

HTTP/1.1 GET /main/dashboard/3

测试back路径:

curl 192.168.49.2:80/back/main/dashboard/3

预期响应:

HTTP/1.1 GET /back/main/dashboard/3

核心逻辑说明

  • 针对/front路径,用/front(/.*)的正则直接捕获/main/dashboard/3作为分组$1,重写目标设为$1就避免了额外的斜杠
  • 针对/back路径,要么捕获完整的/back/...路径作为分组,要么直接匹配路径不做重写,确保原路径完整传递

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 13:57:34