首页 > 解决方案 > 如何使来自不同客户端的 HTTP 请求看起来来自同一个 IP 地址?

问题描述

如果请求来自不同的 IP 地址,我正在使用使 OAuth 令牌无效的第 3 方 API。这会导致问题,因为该服务在多个主机上运行。

理想情况下,我希望只有对这个特定 API 的请求将通过单个 IP 进行路由。

我考虑过设置代理服务器,但我担心我无法将此代理扩展到 1 台机器以上。

有什么建议么?

标签: pythongoogle-cloud-platformgoogle-cloud-networking

解决方案


这里的理想选择当然是为每台机器获取一个 OAuth 令牌。(或者,更好的是,让服务允许您跨 IP 共享令牌。)但我认为您不能这样做是有原因的。

在这种情况下,您可能确实需要一个代理服务器。

仅通过该代理路由对这个特定 API 的请求的选项非常简单。设置显式代理而不是透明代理,并为这些特定方法指定显式代理。

由于您没有向我们展示,甚至没有描述您的代码,我无法向您展示如何使用您使用的任何库来做到这一点,但这里是如何使用requests,并且使用 stdliburllib或大多数其他第三方库。

但是,为了完整起见:只要你所有的机器都在你可以控制的路由器后面,让不同的机器看起来有相同的 IP 地址并不是不可能的。事实上,这正是您通过NAT使用典型的家庭 DSL/电缆设置所获得的:每台机器都有自己的内部专用地址,但它们都共享一个公共地址。但这可能不是你想要的。一方面,如果您的机器实际上是 GCP 主机,则您无法控制路由器,甚至可能无法控制它们是否在同一个网络上(如果您正在考虑运行软件路由器来管道他们都通过)。此外,NAT 会给服务器带来各种问题。而且,由于您在这里担心的是扩展,因此一旦您必须扩展到单个子网之外,使用 NAT 就是一场噩梦。如果这些实例是服务器,则更是如此(如果您在 GCP 上运行它们,这似乎很可能)。最后,要使用 NAT 只与一个服务通信,您需要非常复杂的路由表,或者每台机器需要一个额外的网络接口(可以放在不同的路由器后面)。所以,


推荐阅读