我们将使用带有React.js应用程序的Google Cloud Load Balancer。 React.js应用程序具有特殊的路由规则。我们将以下列方式组织我们的应用程序结构。
-[BUCKET]uiresources
-[FILE]index.html
-[FOLDER]dist
-[FILE]src.bundle.js
-[FOLDER]...
-[FILE]
我们还需要将api调用路由到GCF端点。这意味着它们应该被代理到另一个域,这似乎是不可能的,因为我们将VM配置为后端服务作为目标。
我们可以说,换句话说,如果我们的路由包含dot,那就意味着我们请求文件,然后返回相应的文件,否则总是返回index.html。
如果它有助于构建此类导航,则可以使用子域。例如:
那么,问题是如何?我使用教程设置了负载均衡器,并试图在这里配置规则,但我没有运气。我从index.html问题开始,这就是我现在所拥有的。
以前我在Azure和简单的nginx服务器上管理过这个,但在这两个平台上可以使用更强大的路由配置。我不知道这是否可能,但希望有人可以帮助我。
所有VM实例都在Apache服务器的Debian 8下运行。我虽然在每个虚拟机实例中都有路由规则,但对我而言,它现在看起来有点疯狂,并且将来会带来很多麻烦。
答案 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 services和backend 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
处有一个文件。
话虽如此,可以按照您的指定映射所有请求,并进行一些小修改,并利用后端服务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.