首页 > 解决方案 > 在反向代理中寻找“proxy_set_header”的 Envoy 示例

问题描述

我正在将 Nginx 迁移到 Envoy,但我不知道如何替换这些设置:

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header 主机 $http_host;

我已经阅读了 Envoy 关于IT Transprency的文档,但我仍然不知道如何配置它。当我尝试测试上述链接中包含的示例时,出现错误:

无效值 无效类型 URL,未知类型:envoy.extensions.transport_sockets.proxy_protocol.v3.ProxyProtocolUpstreamTransport 类型为 Any)

如果有人可以与我分享一个在 Envoy 中支持上述 3 个 proxy_set_header 等效性的真实示例,我们将不胜感激。

标签: envoyproxy

解决方案


从您的 NGINX 片段来看,您可能希望 Envoy 将 XFF 标头添加到向上游服务器发出的请求中?

XFF 标头(即类似 的标头X-Forwarded-For)与使用 PROXY 协议(确实如此)有所不同ProxyProtocolUpstreamTransport。PROXY 协议用于在第 4 层 (TCP) 上获得 IP 透明性。XFF 用于第 7 层和 HTTP。

您需要的文档在这里:https ://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/other_features/ip_transparency#arch-overview-ip-transparency-original-src-http

下面是一个例子。xff_num_trusted_hops: 0告诉 Envoy 丢弃它收到的任何 XFF 标头(如果我们是边缘代理,我们绝对不信任来自 Internet 的 XFF 标头)。use_remote_address: true告诉 Envoy 为上游请求生成新的 XFF 标头。

        - filter_chain_match:
            server_names: "foo.example.com"
          filters:
            - name: envoy.filters.network.http_connection_manager
              config:
                stat_prefix: ingress_http
                codec_type: AUTO
                use_remote_address: true
                xff_num_trusted_hops: 0
                route_config:
                  name: local_route
                  virtual_hosts:
                    - name: vh_foo_example
                      domains: ["*"]
                      routes:
                        - match: { prefix: "/" }
                          route: {
                            timeout: 60s,
                            cluster: srv_upstream
                          }
                http_filters:
                  - name: envoy.router

推荐阅读