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

如何在Envoy Proxy中用AND逻辑匹配两个请求头并转发请求

Envoy实现请求头AND逻辑匹配转发

可以实现,Envoy原生支持通过AND逻辑同时匹配多个请求头来路由请求到指定集群,你的配置思路是正确的,仅需注意语法细节和API规范。

核心逻辑说明

Envoy的路由匹配规则中,当match块下定义多个headers条件时,默认就是AND逻辑——所有指定的请求头条件必须同时满足,请求才会匹配该路由并转发到目标集群。你配置中的and_match: true属于冗余声明,且在v3 API中该字段已被标记为废弃,推荐依赖默认的AND行为即可。

修正后的配置示例

针对你提供的配置,修正语法转义问题并优化写法:

kind: ConfigMap
metadata:
  name: test-envoy-conf
data:
  envoy.yaml: |
    static_resources:
      listeners:
      - address:
          socket_address:
            address: 0.0.0.0
            port_value: 443
        traffic_direction: OUTBOUND
        filter_chains:
        - filters:
          - name: envoy.filters.network.http_connection_manager
            typed_config:
              "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
              codec_type: AUTO
              stat_prefix: ingress_http
              route_config:
                name: local_route
                virtual_hosts:
                - name: https
                  domains:
                  - "*"
                  routes:
                  - match:
                      prefix: "/"
                      headers:
                      # 第一个请求头条件:x-envoy-original-dst-host后缀匹配":10004"
                      - name: x-envoy-original-dst-host
                        string_match:
                          suffix: ":10004"
                      # 第二个请求头条件:app头精确匹配"ms-example-server"
                      - name: app
                        exact_match: "ms-example-server"
                    route:
                      cluster: destination_cluster
              http_filters:
              - name: envoy.filters.http.router
                typed_config:
                  "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
          transport_socket:
            name: envoy.transport_sockets.tls
            typed_config:
              "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
              common_tls_context:
                tls_certificates:
                  - certificate_chain:
                      filename: "/etc/ssl/envoy/tls.crt"
                    private_key:
                      filename: "/etc/ssl/envoy/tls.key"
      clusters:
      - name: destination_cluster
        # 补充集群基础配置示例
        connect_timeout: 0.25s
        type: STRICT_DNS
        lb_policy: ROUND_ROBIN
        load_assignment:
          cluster_name: destination_cluster
          endpoints:
          - lb_endpoints:
            - endpoint:
                address:
                  socket_address:
                    address: 目标服务器IP或域名
                    port_value: 目标端口

关键细节提示

  • 匹配类型灵活:除了示例中的suffix_match和exact_match,还支持prefix_match(前缀匹配)、safe_regex_match(正则匹配)等,可根据需求选择。
  • 优先级控制:如果存在多条路由规则,需注意路由的匹配优先级(Envoy按配置顺序匹配,先匹配的路由生效)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:05:15