【问题标题】:Using Google Compute Engine as a proxy for a Google App Engine web app使用 Google Compute Engine 作为 Google App Engine 网络应用程序的代理
【发布时间】:2017-12-11 01:49:32
【问题描述】:

我在 Google App Engine 上有一个 Java Web 应用程序,它向外部 API 发出请求。 API 最近需要将 IP 地址列入白名单才能访问其服务。因为 GAE 不提供静态 IP,我知道一种解决方案是设置 GCE 实例(使用静态 IP)并将其用作 GAE 应用程序发出的外部请求的代理。

我已经使用 Debian GNU/Linux 9 设置了一个 f1-micro 实例,并根据 the documentation 创建了一个静态外部 IP 地址。

如何安装 nginx 并设置 GAE 以将请求路由到 GCE 代理?

【问题讨论】:

    标签: java google-app-engine nginx google-cloud-platform google-compute-engine


    【解决方案1】:

    我们遇到了一个需要将我们的 IP 地址列入白名单的客户的类似问题。我们通过以下方式解决了这个问题:

    1. 使用静态 IP 地址启动 Compute Engine。这是我们提供给客户的 IP 地址
    2. 在计算引擎上安装了 Squid (https://help.ubuntu.com/lts/serverguide/squid.html)
    3. 然后,我们通过代理服务器重定向来自 App Engine 的所有调用。您没有列出您使用的语言,但对于 PHP,这意味着将以下两行添加到我们的 CURL 操作中:

      curl_setopt($ch, CURLOPT_PROXY, "http://" . $_SERVER['SQUID_PROXY_HOST'] . ":" . $_SERVER['SQUID_PROXY_PORT'] );

      curl_setopt($ch, CURLOPT_PROXYUSERPWD, $_SERVER['SQUID_PROXY_USER'] . ":" . $_SERVER['SQUID_PROXY_PWD']);

    需要注意的一点是,根据您进行的调用次数,微型实例可能不适合您。我们最初在一个微型盒子上设置了我们的代理服务器,但每隔几天就不得不重新启动它。我们最终改用标准盒子,此后没有遇到任何问题。

    【讨论】:

    • 您好,我现在面临同样的问题,我们在应用引擎上运行一个 Go 应用程序,该应用程序向外部服务器发出请求,我们必须被列入白名单。所以这是同样的情况。你提到了 PHP 的两行,我不知道我必须用 Go 应用程序做什么才能使这成为可能。我已经使用静态 IP 设置了一个虚拟机,但是现在从 App Engine 到虚拟机的连接丢失了。
    • @vario 我也面临同样的问题,想知道您是否/如何最终解决了这个问题?似乎需要一个 VPC 访问连接器来在 App Engine 和 Compute Engine 中的 Squid 实例之间建立连接?
    • 如果所有请求都将被重定向到代理服务器,那么使用应用引擎的意义何在。我们为什么不直接在计算引擎上部署应用程序并从那里处理请求。我认为使用应用引擎的目的是获得冗余和容错。如果它被代理,那么所有请求都将由计算引擎提供服务?我在这里错过了什么吗?
    • 这很好。我绝对不建议通过代理服务器路由每个请求,否则您会限制您的请求并创建单点故障。在我们的例子中,我们有一些需要静态 IP 地址的客户端,所以我们只通过代理服务器向他们的站点发送请求。所有其他请求都正常路由。我不熟悉 Go,但在 PHP 中,如果客户端请求列入白名单的 IP 地址,它只需要我们从我的原始答案中添加两行。
    【解决方案2】:

    您可以通过在具有路由规则的同一 VPC 自定义网络中配置您的应用引擎实例和自定义 NAT 实例来解决此问题。

    相关的google文档如下;

    1. 将 Compute Engine 虚拟机实例配置为 Nat 网关 (https://cloud.google.com/vpc/docs/special-configurations#natgateway)

    2. 为此实例(https://cloud.google.com/vpc/docs/using-routes#addingroute)和(https://cloud.google.com/vpc/docs/using-routes#canipforward)创建路由规则

    3. 配置您的 app.yaml 网络属性 (https://cloud.google.com/appengine/docs/flexible/java/configuring-your-app-with-app-yaml#network_settings)

    如果你有复杂的系统,我强烈建议你创建子网和某个标签来flog哪些GAE实例被转发到NAT网关。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-15
    • 2015-04-25
    • 2018-02-14
    • 2013-10-09
    • 2018-04-28
    • 2017-03-02
    • 2017-11-17
    • 2021-06-17
    相关资源
    最近更新 更多