配置Google Load Balancer主机和路径规则,以便与GCF

时间:2017-06-26 15:03:51

标签: apache routing google-cloud-platform load-balancing google-compute-engine

我们将使用带有React.js应用程序的Google Cloud Load Balancer。 React.js应用程序具有特殊的路由规则。我们将以下列方式组织我们的应用程序结构。

-[BUCKET]uiresources
  -[FILE]index.html
  -[FOLDER]dist
    -[FILE]src.bundle.js
    -[FOLDER]...
    -[FILE]

我们还需要将api调用路由到GCF端点。这意味着它们应该被代理到另一个域,这似乎是不可能的,因为我们将VM配置为后端服务作为目标。

路由示例

  1. / ---------------------------> /index.html( 到存储桶
  2. /index.html --------------> /index.html( 到存储桶
  3. / signup -------------------> /index.html( 到存储桶
  4. / someroute --------------> /index.html(仍然存储桶
  5. / api / signup ---------------> anotherhost.com/signup( 到具有长URL的GCF端点
  6. / resources / images -----> / resources / images(到存储桶
  7. 我们可以说,换句话说,如果我们的路由包含dot,那就意味着我们请求文件,然后返回相应的文件,否则总是返回index.html。

    如果它有助于构建此类导航,则可以使用子域。例如:

    另一个路由示例

    那么,问题是如何?我使用教程设置了负载均衡器,并试图在这里配置规则,但我没有运气。我从index.html问题开始,这就是我现在所拥有的。

    enter image description here

    以前我在Azure和简单的nginx服务器上管理过这个,但在这两个平台上可以使用更强大的路由配置。我不知道这是否可能,但希望有人可以帮助我。

    所有VM实例都在Apache服务器的Debian 8下运行。我虽然在每个虚拟机实例中都有路由规则,但对我而言,它现在看起来有点疯狂,并且将来会带来很多麻烦。

1 个答案:

答案 0 :(得分:3)

网址映射

您正在配置的网址路由在GCE HTTP / HTTPS负载均衡器配置中称为URL map

能力和限制

我会推荐你​​read about URL maps to understand how it works。具体而言,您需要了解负载平衡中URL映射的功能和限制。

此列表并不全面,但更适合您的特定用例:

  • 您可以根据主机名和路径添加规则。主机匹配请求的主机名。对于每个主机,指定路径匹配器(它是不同路径字符串的集合)以指定要匹配的路径(例如/foo/*/bar/*/foo/bar/baz/*)。这些正是您在配置UI中看到的文本框。 UI中的Paths列对应于路径匹配器。

  • 您可以为同一个路径字符串设置不同的规则,只要它们适用于不同的主机。

  • 如果未指定主机,则它将匹配所有主机。

  • 每个主机始终有一个默认路径匹配器/*,它将决定如何处理任何未定义的规则匹配的请求。

  • 路由请求的可用目的地为backend servicesbackend buckets

  • 您将使用backend service将请求路由到VM(实际上是一个实例组 - 这是一组VM)。

  • 您将使用后端存储桶将请求路由到Google Cloud Storage buckets中存储的内容。

  • 将请求从负载均衡器路由到backend service时,您的VM将获得包含完整请求的URI的请求。因此,VM上的服务可以通过查看路径来决定如何处理它。

  • 将请求从负载均衡器路由到backend bucket时,请求中的完整路径(来自/)应与Google Cloud Storage Bucket中存储的对象的路径匹配。例如。如果您的请求是针对路径https://www.example.org/foo/bar/baz/info.txt并且路由到后端存储区的路径,则相应的GCS存储区应该在此位置/foo/bar/baz/info.txt处有一个文件。

您的用例的URL映射配置

话虽如此,可以按照您的指定映射所有请求,并进行一些小修改,并利用后端服务HTTP 301 (permanent URL redirects)

/ -------------------> /index.html
/index.html ---------> /index.html (in GCS bucket)
/signup -------------> /index.html (in GCS bucket)
/someroute ----------> /index.html (in GCS bucket)
/api/signup ---------> anotherhost.com/signup
/resources/images/* -> /resources/images/* (in GCS bucket)
/* ------------------> Recommend using a backend service which returns a 404.

您需要按如下方式配置您的网址:

/ -------------------> Backend service which returns a HTTP 301 (permanent URL redirection) /index.html
/index.html ---------> Backend bucket (will take to /index.html in the GCS bucket)
/signup -------------> Backend service which returns a HTTP 301 (permanent URL redirection) /index.html (which will cause the user to hit your GCS bucket)
/someroute ----------> Backend service which returns a HTTP 301 /index.html (will redirect to the /index.html content from your GCS bucket)
/api/signup ---------> Backend Service which returns a HTTP 301 (permanent URL redirection) to anotherhost.com/signup
/resources/images/* -> Backend bucket - Will pull /resources/images/* in GCS bucket
/* ------------------> Backend Service which returns a 404.