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

Ingress Nginx路由优先级异常:请求误匹配最后通配路径

问题解决:Ingress路由匹配异常

问题原因

启用nginx.ingress.kubernetes.io/use-regex: "true"后,Ingress Controller会将所有path解析为正则表达式,同时忽略pathType: Prefix配置。你的/?(.*)正则会匹配所有以/开头的请求(包括/backend),而原/backend正则仅能精确匹配/backend路径(无法匹配带后续路径的请求),且由于正则匹配逻辑,/?(.*)的覆盖范围更广,导致请求被错误路由到web-svc。

解决方案

方案一:关闭正则,利用Prefix最长匹配优先级

移除正则启用注解,将web-svc的路径改为/。Prefix类型下,更长的前缀(/backend)会优先匹配,/则匹配所有其他路径:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-svc
spec:
  ingressClassName: nginx
  rules:
    - host: localhost
      http:
        paths:
          - path: /backend
            backend:
              service:
                name: backend-svc
                port:
                  number: 4000
            pathType: Prefix
          - path: /
            backend:
              service:
                name: web-svc
                port:
                  number: 8080
            pathType: Prefix

方案二:保留正则,调整/backend的正则规则

修改/backend的路径为/backend(/|$)(.*),使其匹配所有以/backend开头的请求(含/backend、/backend/、/backend/xxx),并确保该路径配置在/?(.*)之前(正则匹配按配置顺序执行,先匹配的生效):

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-svc
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  ingressClassName: nginx
  rules:
    - host: localhost
      http:
        paths:
          - path: /backend(/|$)(.*)
            backend:
              service:
                name: backend-svc
                port:
                  number: 4000
            pathType: Prefix
          - path: /?(.*)
            backend:
              service:
                name: web-svc
                port:
                  number: 8080
            pathType: Prefix

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:51:36