配置Google负载均衡器主机和路径规则,以使用GCF正确服务react.js应用程序 [英] Configure Google Load Balancer host and path rules to serve react.js application properly with GCF
问题描述
我们将在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(到存储桶)
- /signup->/index.html(到存储桶)
- /smeroute->/index.html(仍在存储桶)
- /api/signup->antherhost.com/signup(到具有长url的GCF端点)
- /resources/image->/resources/image(到存储桶)
我们可以用另一种方式说,比如,如果我们的路由包含点,那将意味着我们请求文件,然后返回相应的文件,否则总是返回index.html。
如果子域有助于构建此类导航,则可以使用子域。例如:
另一个路由示例
- https://targetdomain.com/api或https://api.targetdomain.com->服务调用
- https://targetdomain.com/resources或https://resources.targetdomain.com->--用于资源加载,包括index.html
- https://targetdomain.com/[^index.html]->用于将返回index.html的浏览器的直接路由
那么,问题是如何做到这一点呢?我使用教程设置了负载均衡器,并尝试在这里配置规则,但没有成功。我从index.html问题开始,目前的情况就是这样。
之前我在Azure和简单的nginx服务器上管理过这一点,但是在这两个平台上可以使用更强大的路由配置。我不知道这是否可行,但希望有人能帮我。
所有VM实例都在带有Apache服务器的Debian 8下运行。我考虑过每个VM实例中的路由规则,但对我来说,现在看起来有点疯狂,将来会带来很多麻烦。
推荐答案
URL映射
您正在配置的URL路由在GCE HTTP/HTTPS负载平衡器配置中称为URL map。
功能和限制
我推荐您read about URL maps to understand how it works。具体地说,您需要了解URL映射在负载均衡中的功能和限制。
此列表不全面,但更适合您的特定使用情形:
您可以根据主机名和路径添加规则。主机与请求的主机名匹配。对于每个主机,您可以指定一个路径匹配器(它是不同路径字符串的集合)来指定要匹配的路径(例如,
/foo/*
,/bar/*
,/foo/bar/baz/*
)。这些正是您在配置UI中看到的文本框。Paths
UI中的列对应于路径匹配器。您可以为同一路径字符串设置不同的规则,只要它们用于不同的主机。
如果未指定主机,它将匹配所有主机。
每台主机始终有一个默认路径匹配器
/*
,它将决定如何处理与任何定义的规则都不匹配的请求。可用于路由请求的目标为backend services和backend buckets。
您将使用backend service将请求路由到VM(实际上是实例组,它是VM的集合)。
您将使用后端存储桶将请求路由到Google Cloud Storage buckets中存储的内容。
/li>将负载均衡的请求路由到backend service时,您的虚拟机会得到包含完整请求URI的请求。因此,虚拟机上的服务可以通过查看路径来决定如何处理它。
将请求从负载均衡路由到backend bucket时,请求中的完整路径(来自
/
)应与Google Cloud Storage Bucket中存储的Object的路径匹配。例如。如果您的请求是路由到后端存储桶的路径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.
您需要按如下方式配置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.
这篇关于配置Google负载均衡器主机和路径规则,以使用GCF正确服务react.js应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!