App Engine生产环境下代理服务器的URLFetch
有没有办法在使用Google App Engine的urlfetch时指定一个代理服务器?
具体来说,我每次用urlfetch发请求的时候,都希望GAE能通过一个代理服务器来处理。我想在生产环境中这样做,而不仅仅是在开发环境。
我想用代理是因为使用谷歌的外部IP地址会遇到一些问题(比如速率限制、没有固定的外部IP,有时候还会被列入黑名单等等)。通常情况下,如果可以直接编辑http消息,设置代理是很简单的,但GAE的API似乎不允许这样做。
2 个回答
1
我们遇到了这个问题,于是联系了谷歌云的支持团队。他们建议我们使用谷歌应用引擎的灵活版本,并进行一些app.yaml设置,使用自定义网络和一个IP转发的NAT网关实例。
但是这个方法对我们来说不行,因为应用引擎标准版的一些核心功能在灵活版中并没有实现。简单来说,我们需要重新编写我们的产品。
所以,为了让需要的URL请求看起来有一个固定的IP,我们做了一个自定义的代理:https://github.com/csgactuarial/app-engine-proxy
为了增加系统的可靠性,我建议把这个系统做成多区域、多可用区的负载均衡系统。
3
你可以自己动手做:
如果目标地址是固定的:只需要在代理服务器上设置一个固定的端口转发。然后把请求从GAE(Google App Engine)发送到这个代理。如果你有多个目标地址,就为每个目标设置不同的端口转发。
如果目标地址是动态的(也就是变化太多,不能用固定端口转发处理),你的GAE应用可以添加一个自定义的HTTP头(
X-Something
),里面包含最终的目标地址,然后连接到自定义的代理。这个自定义代理会检查这个字段,并把请求转发到目标地址。