更新 Envoy 代理中的主机 header

Update HOST header in Envoy proxy

大家好,我有一个架构,我想将我的请求从 Envoy 代理路由到 nginx 代理。正如我们所知,Nginx 在 HOST header 匹配上工作以路由其请求。在将请求从 Envoy 转发到 Nginx 时,我在设置主机 header 时遇到问题。我有以下配置

LDS.config

resources:
- "@type": type.googleapis.com/envoy.config.listener.v3.Listener
  name: listener_0
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 8443
  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: HTTP1
        stat_prefix: ingress_http
        http_filters:
        - name: envoy.router
        route_config:
          name: local_route
          virtual_hosts:
          - name: app
            domains:
            - "some.domain.com"
            routes:
            - match:
                prefix: "/"
              route:
                cluster: test-cluster
                host_rewrite_literal: "mydns.com"
    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/merged_certificate.crt" }
            private_key: { filename: "/etc/ssl/key.key" }

CDS.config

resources:
- "@type": type.googleapis.com/envoy.config.cluster.v3.Cluster
  name: test-cluster
  connect_timeout: 30s
  type: static
  load_assignment:
    cluster_name: test-cluster
    endpoints:
    - lb_endpoints:
      - endpoint:
          address:
            socket_address:
              address: my_private_ip_address
              port_value: 443

我试过 auto_host_rewrite 但发现它不适用于静态群集类型。但它也不会更新 host_literal。

事实证明,配置完全按预期工作。我正在查看错误的 header 以在 NGINX 访问日志中验证它。吸取教训。