App Engine生产环境下代理服务器的URLFetch

6 投票
2 回答
2147 浏览
提问于 2025-04-17 09:54

有没有办法在使用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

你可以自己动手做:

  1. 如果目标地址是固定的:只需要在代理服务器上设置一个固定的端口转发。然后把请求从GAE(Google App Engine)发送到这个代理。如果你有多个目标地址,就为每个目标设置不同的端口转发。

  2. 如果目标地址是动态的(也就是变化太多,不能用固定端口转发处理),你的GAE应用可以添加一个自定义的HTTP头(X-Something),里面包含最终的目标地址,然后连接到自定义的代理。这个自定义代理会检查这个字段,并把请求转发到目标地址。

撰写回答