Apache 配置Google负载平衡器主机和路径规则,以便使用GCF正确地为react.js应用程序提供服务

Apache 配置Google负载平衡器主机和路径规则,以便使用GCF正确地为react.js应用程序提供服务,apache,routing,google-cloud-platform,load-balancing,google-compute-engine,Apache,Routing,Google Cloud Platform,Load Balancing,Google Compute Engine,我们将在React.js应用程序中使用Google云负载平衡器。React.js应用程序具有特殊的路由规则。我们将按照以下方式组织我们的应用程序结构 -[BUCKET]uiresources -[FILE]index.html -[FOLDER]dist -[FILE]src.bundle.js -[FOLDER]... -[FILE] 我们还需要将api调用路由到GCF端点。这意味着它们应该被代理到另一个域,这似乎是不可能的,因为我们以VM为目标配置后端服务

我们将在React.js应用程序中使用Google云负载平衡器。React.js应用程序具有特殊的路由规则。我们将按照以下方式组织我们的应用程序结构

-[BUCKET]uiresources
  -[FILE]index.html
  -[FOLDER]dist
    -[FILE]src.bundle.js
    -[FOLDER]...
    -[FILE]
我们还需要将api调用路由到GCF端点。这意味着它们应该被代理到另一个域,这似乎是不可能的,因为我们以VM为目标配置后端服务

路由示例
  • /----------------------------------->/index.html(到存储桶
  • /index.html----------------->/index.html(到存储桶
  • /注册----------------->/index.html(到存储桶
  • /someroute----------------->/index.html(仍然到存储桶
  • /api/signup----------------->anotherhost.com/signup(到具有长url的GCF端点)
  • /资源/图像------>/resources/images(到存储桶
  • 我们可以用另一种方式说,比如,如果我们的路由包含点,这意味着我们请求文件,然后返回适当的文件,否则总是返回index.html

    如果子域有助于构建这样的导航,则可以使用子域。例如:

    另一个路由示例
    • 或->服务呼叫
    • 或->-用于加载包括index.html在内的资源
    • ^index.html]->用于从浏览器返回index.html的直接路由
    所以,问题是怎么做?我使用教程设置了负载平衡器,并尝试在这里配置规则,但没有成功。我从index.html问题开始,这就是我目前拥有的

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

    所有VM实例都在Debian8和Apache服务器下运行。我想知道每个VM实例中的路由规则,但对我来说,它现在看起来有点疯狂,将来会带来很多麻烦。

    URL映射 您正在配置的URL路由在GCE HTTP/HTTPS负载平衡器配置中称为

    能力和限制 我推荐你。具体来说,您需要了解负载平衡中URL映射的功能和限制

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

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

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

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

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

    • 路由请求的可用目的地为和

    • 您将使用将请求路由到VM(实际上是一个实例组,它是VM的集合)

    • 您将使用后端bucket将请求路由到存储在中的内容

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

    • 将请求从负载平衡器路由到时,请求中的完整路径(从
      /
      )应与存储在中的对象的路径匹配。如果您请求的是路径
      https://www.example.org/foo/bar/baz/info.txt
      将被路由到后端存储桶,相应的GCS存储桶应该在此位置有一个文件
      /foo/bar/baz/info.txt

    针对您的用例的URL映射配置 话虽如此,只要稍加修改并利用后端服务,就可以映射指定的所有请求

    / -------------------> /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.
    
    您需要按如下方式配置URL映射:

    / -------------------> 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. 
    

    谢谢您的回答,但不清楚如何设置重定向?在哪里可以配置?在每个VM实例上,或者负载平衡器有其他设置?GCE负载平衡器不允许您配置重定向。您必须在接收请求的应用程序中的VM上执行此操作。我如何集中重定向配置?我的意思是,如果我需要更改某些内容,我需要在所有虚拟机上更改它,如果我的基础设施由10个虚拟机或100个虚拟机组成,该怎么办?我可以使用VM模板,但它仍然不能解决跨所有VM实例配置分发的问题。您可以在后端服务中使用。托管实例组是使用。如果需要,它也支持。是的,你说得对。您可以通过更新模板来更新托管实例组中的所有实例。请注意,更新模板只会影响将在实例组中创建的任何新实例。使用旧模板运行的现有实例不会受到影响,除非重新创建它们。