在 Google App Engine 上使用 urlfetch 时,有没有办法指定代理服务器?
具体来说,每次我使用 urlfetch 拨打电话时,我都希望 GAE 通过代理服务器。我想在生产中做到这一点,而不仅仅是开发。
我想使用代理,因为使用 google 的出站 IP 地址存在问题(速率限制、无静态出站 IP、有时被列入黑名单等)。如果您可以编辑 http 消息本身,设置代理通常很容易,但 GAE 的 API 似乎不允许您这样做。
在 Google App Engine 上使用 urlfetch 时,有没有办法指定代理服务器?
具体来说,每次我使用 urlfetch 拨打电话时,我都希望 GAE 通过代理服务器。我想在生产中做到这一点,而不仅仅是开发。
我想使用代理,因为使用 google 的出站 IP 地址存在问题(速率限制、无静态出站 IP、有时被列入黑名单等)。如果您可以编辑 http 消息本身,设置代理通常很容易,但 GAE 的 API 似乎不允许您这样做。
你总是可以自己动手:
在固定目的地的情况下:只需在代理服务器上设置固定端口转发。然后从 GAE 向代理发送请求。如果您有多个目的地,则在单独的端口上设置转发,每个目的地一个。
如果是动态目的地(通过固定端口转发处理太多),您的 GAE 应用程序会添加一个X-Something
包含最终目的地的自定义 http 标头 ( ),然后连接到自定义代理。自定义代理检查此字段并将请求转发到目的地。
我们遇到了这个问题并联系了 Google Cloud 支持。他们建议我们使用具有一些 app.yaml 设置、自定义网络和 ip 转发 NAT 网关实例的 Google App Engine 灵活。
这对我们不起作用,因为 App Engine Standard 的许多核心功能并未在 App Engine Flexible 中实现。本质上,我们需要重写我们的产品。
因此,为了使适用的 URL 获取请求看起来有一个静态 IP,我们制作了一个自定义代理:https ://github.com/csgactuarial/app-engine-proxy
出于冗余原因,我建议将其实现为多区域、多区域、负载平衡系统。