【问题标题】:Forward client's IP address on AWS在 AWS 上转发客户端的 IP 地址
【发布时间】:2019-11-21 16:08:30
【问题描述】:

我们的基础设施位于 AWS。所有客户端调用都通过 API 网关,然后将请求转发到连接到 ECS 集群的负载均衡器。我们在该集群上运行 API,任务是聚合来自多个第三方的数据。

问题是每个第三方根据位置返回不同的数据。

例如,我们在北弗吉尼亚州托管,数据作为来自美国的请求返回。但是,有些呼叫来自加拿大,应该返回不同的数据集。

我们如何将原始客户端请求的位置连同原始客户端请求的位置一起发送到第三方服务器,以便用户获得正确的数据?

【问题讨论】:

    标签: amazon-web-services go cloud


    【解决方案1】:

    如果您使用负载平衡器,您的后端服务器可以从负载平衡器应用的自定义标头中获取真实的客户端 IP。详见https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x-forwarded-headers.html

    X-Forwarded-For

    X-Forwarded-For 请求标头可帮助您识别 IP 地址 使用 HTTP 或 HTTPS 负载平衡器时的客户端。因为负载 平衡器拦截客户端和服务器之间的流量,您的服务器 访问日志仅包含负载均衡器的 IP 地址。查看 客户端的 IP 地址,使用 X-Forwarded-For 请求头。 Elastic Load Balancing 将客户端的 IP 地址存储在 X-Forwarded-For 请求标头并将标头传递给您的服务器。

    因此,假设您可以在后端服务器上获取客户端 IP,您需要能够将客户端 IP 传递给您正在调用的服务——因此这部分取决于服务支持的内容。如果您正在调用的服务不采用 IP 的显式输入参数,那么它将要求您欺骗调用者的位置,这对于 AWS 后端服务器来说会很麻烦,除非您使用一些自定义代码来生成请求到第 3 方服务。

    【讨论】:

    • 我对您的后端是什么、它如何从真实客户端获取流量以及它如何对第 3 方服务进行 API 调用做出了很多假设,因此在架构上添加了更多详细信息和使用的软件可能有助于产生更好的信息。
    • 谢谢!请看我上面的问题。我添加了有关我们后端的更多详细信息。 @肖恩
    • 第 3 方 API 是否将 IP 地址作为输入参数,还是使用请求来获取 IP 地址(来自诸如引用者之类的东西)?如果它需要一个输入参数,那么使用 x-forwarded-for 标头将为您提供所需的内容。
    • 不幸的是,它不需要输入参数,因此 x-forwarded-header 解决方案对我们不起作用。他们似乎从引用者那里获取了 IP 地址。 @肖恩
    猜你喜欢
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 2011-10-22
    • 2016-08-11
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多