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

如何将NGINX Ingress的URL重写配置迁移到Azure应用网关?

迁移NGINX Ingress URL重写到Azure应用网关Ingress Controller的解决方案

问题分析

原NGINX Ingress通过正则路径/trackingserviceapi(/|$)(.*)和rewrite-target: /$2实现的核心逻辑是:

  • 匹配所有以/trackingserviceapi开头的请求(包括/trackingserviceapi本身和/trackingserviceapi/xxx格式的路径)
  • 将请求路径重写为正则捕获的第二个组内容,即去掉/trackingserviceapi(及后续可选斜杠),保留剩余路径部分

Azure应用网关Ingress Controller(AGIC)不兼容NGINX的rewrite-target注解,且backend-path-prefix仅支持简单前缀替换,无法处理正则捕获组,因此原配置迁移后失效。

正确配置方案

1. 创建RewriteRuleSet自定义资源

AGIC通过RewriteRuleSet CRD实现复杂URL重写,需先定义正则匹配和路径替换规则:

apiVersion: networking.azure.com/v1
kind: RewriteRuleSet
metadata:
  name: trackingservice-rewrite
  namespace: trackingserviceespace
spec:
  rewriteRules:
  - ruleSequence: 100  # 规则执行顺序,数值越小优先级越高
    conditions:
    - variable: Request_URI
      pattern: ^/trackingserviceapi(/|$)(.*)  # 与原NGINX正则规则一致
      ignoreCase: true
    actionSet:
      urlConfiguration:
        modifiedPath: /{R:2}  # {R:2}对应正则第二个捕获组,等价于NGINX的$2
        queryString: "{originalQueryString}"  # 保留原始请求的查询参数
        reroute: true  # 启用路径重写逻辑

2. 修改Ingress配置

更新Ingress资源,启用正则匹配并引用上述重写规则集:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-trackingservice
  namespace: trackingserviceespace
  annotations:
    kubernetes.io/ingress.class: "azure/application-gateway"
    appgw.ingress.kubernetes.io/use-regex: "true"  # 开启路径正则匹配支持
    appgw.ingress.kubernetes.io/rewrite-rule-set: "trackingservice-rewrite"  # 绑定重写规则集
spec:
  tls:
    - hosts:
      - "essoftware.online"
      secretName: "tlscertn"
  rules:
  - host: "essoftware.online"
    http:
      paths:
      - path: /trackingserviceapi(/|$)(.*)
        pathType: ImplementationSpecific  # 使用AGIC原生路径匹配逻辑,替代Prefix
        backend:
          service:
            name: trackingservice
            port:
              number: 80

关键注意事项

  • 正则匹配启用:必须添加appgw.ingress.kubernetes.io/use-regex: "true",否则AGIC会将路径视为普通字符串,无法解析正则规则。
  • PathType选择:替换原Prefix为ImplementationSpecific,因为Prefix类型与正则路径不兼容,AGIC无法正确解析匹配逻辑。
  • 捕获组映射:AGIC用{R:N}表示正则的第N个捕获组,对应NGINX的$N,这里{R:2}完全匹配原NGINX配置的$2逻辑。
  • 版本要求:确保AGIC版本在v1.5及以上,该版本开始支持RewriteRuleSet CRD,若版本过低需升级AGIC。

内容的提问来源于stack exchange,提问作者Ronal Oswaldo Gonzalez Guardad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:02:32