我们正在尝试连接外部API的Java 7 Google App Engine实例。由于API服务器需要列入白名单的IP地址才能访问,因此我们设置了安装了Squid(a solution proposed elsewhere)的Google Compute Engine代理服务器,然后将API服务器上代理服务器的外部IP地址列入白名单
这样,从GAE发出的请求将首先重定向到GCE,从而允许进行API调用。但是,GAE请求当前失败并显示以下消息:
WARNING: Google App Engine does not support the use of proxies.
有人可以建议解决方案吗?
答案 0 :(得分:0)
首先,不推荐使用Java 7运行时,因此您应该迁移到Java 8版本。您可以通过在appengine-web.xml文件中指定Java 8运行时来执行此操作:
vSync
随着迁移到Java 8,其他功能也会发生变化。所有更改都会在here中解释。
如果由于配置中的某些问题而出现错误,请确保您正在使用的实例作为代理正确配置(使用Squid是正常的)。应正确建立防火墙规则和访问控制列表,例如:
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<runtime>java8</runtime>
<threadsafe>true</threadsafe>
</appengine-web-app>
您还应该通过在Squid配置中启用它们来设置正确的访问控制条目。以下是一些例子:
gcloud compute firewall-rules create [FIREWALL_RULE] --network [NETWORK] --allow tcp:3128
如果您关注this example,则可以测试正确使用用作代理服务器的实例。
Java中有一个名为ApiProxy(sudo sed -i 's:#\(http_access allow localnet\):\1:' /etc/squid/squid.conf
sudo sed -i 's:#\(http_access deny to_localhost\):\1:'/etc/squid/squid.conf
)的静态类,可用作从用户代码到应用程序服务器的所有调用的集合点。 Here你可以找到与它相关的所有类和方法,以及与ApiProxy相关的其他类。