【问题标题】:Redirect request based on parameter on GCP根据 GCP 上的参数重定向请求
【发布时间】:2022-01-28 03:55:22
【问题描述】:
我有一个小型演示应用程序,它是一个键值存储。我已将此上传到 GCP,我想知道是否可以将请求重定向到适当的分片。我想做的是这样的:
虽然 GCP 的负载均衡器有 URL Maps 和路径规则,但它主要是基于端点的重定向。例如到达视频内容; v1/hd/{videoId} 将重定向到高清视频服务,v1/uhd/{videoId} 将重定向到超高清视频服务。就我而言,这并不能解决我的问题。我希望负载均衡器检测参数的第一个字符,可能是像 ^([A-M]|[a-m]) 这样的正则表达式或类似的东西,如果参数以从 A 到 M 的字符开头,它应该重定向到服务 1。
这是合理的吗?如果可以,可能吗?
【问题讨论】:
标签:
redirect
google-cloud-platform
load-balancing
【解决方案1】:
网址映射路径匹配器不支持条件或正则表达式。
引用自documentation,路径匹配器有一些限制:
路径规则只能在正斜杠字符 (/) 之后包含通配符 (*)。例如,/videos/* 和 /videos/hd/* 对路径规则有效,但 /videos* 和 /videos/hd* 无效。
路径规则不使用正则表达式或子字符串匹配。例如,/videos/hd 或 /videos/hd/* 的路径规则不适用于路径为 /video/hd-abcd 的 URL。但是,/video/* 的路径规则确实适用于该路径。
路径匹配器(以及一般的 URL 映射)不提供功能类似于 Apache LocationMatch 指令的功能。如果您的应用程序生成具有公共前缀的动态 URL 路径,例如 /videos/hd-abcd 和 /videos/hd-pqrs,并且您需要将对这些路径发出的请求发送到不同的后端服务,您可能不会可以使用 URL 映射来做到这一点。对于仅包含几个可能的动态 URL 的简单情况,您可能能够使用一组有限的路径规则创建路径匹配器。对于更复杂的情况,您需要在后端进行基于路径的正则表达式匹配。
您可以通过将 Nginx 或 Apache 网络服务器设置为您的 LoadBalancer 的唯一后端并将此后端配置为使用 条件 和/或regex 到您的服务。
PS:If is Evil... when used in location context