亚马逊AWS官方博客
新推出 – AWS Application Load Balancer 的高级请求路由
AWS Application Load Balancer 自 2016 年夏使用至今! 它们支持基于内容的路由,适用于无服务器且基于容器的应用程序,并且具有高度可扩展性。很多 AWS 客户使用现有的基于主机和路径的路由来增强 HTTP 和 HTTPS 应用程序,同时利用其他 ALB 功能,例如端口转发(非常适合基于容器的应用程序)、健康检查、服务发现、重定向、固定应答以及内置身份验证。
高级请求路由
基于主机的路由功能允许您编写规则,以使用主机
标头将流量路由到所需的目标组。我们正在扩展和推广此功能,使您能够基于标准和自定义 HTTP 标头和方法、查询字符串以及源 IP 地址来编写规则(和路由流量)。我们还致力于使规则和条件更强大;规则可以有多个条件(AND 关系),每个条件可以指定与多个值的匹配(OR 关系)。
您可以使用此新功能来简化应用程序架构,无需使用代理队列进行路由,并在负载均衡器阻止不需要的流量。以下是一些用例:
- 将人为流量与机器人/爬虫流量分开。
- 将客户或客户组分配到单元(不同的目标组)并相应地路由流量。
- 执行 A/B 测试。
- 执行金丝雀或蓝绿部署。
- 根据方法将流量路由到微服务处理程序(例如,PUT 到一个目标组或 GET 到另一个目标组)。
- 执行基于 IP 地址或 CDN 的访问限制。
- 有选择地将流量路由到本地或云端的目标组。
- 为各种类型和类别的设备提供不同的页面或用户体验。
使用高级请求路由
只需编辑现有规则,即可将此功能用于现有的 Application Load Balancer。下面我将从一个简单的规则开始,即返回一个固定的纯文本响应(这篇博文中的示例仅供测试和说明;相信您的情况更实际,也更有趣):
我可以使用curl
来测试:
单击 Insert Rule(插入规则)来设置一些高级请求路由:
然后单击 Add condition(添加条件)并检查可用的选项:
选择 Http header(Http 标头)并创建一个条件,查找名为“user
”且值为 jeff
的 cookie。然后创建一个返回固定响应的操作:
单击 Save(保存),等待几秒钟,然后在更改生效后发出一对请求:
我还可以创建一个匹配一个或多个 IP 地址 CIDR 块的规则:
我可以匹配查询字符串(这对 A/B 测试非常有用):
如果我只关心是否存在特定的字段名称,也可以使用通配符:
我可以匹配标准或自定义 HTTP 方法。我可以创建一个名为 READ 的方法:
针对以下操作有很多灵活处理(并不新鲜,但绝对值得了解):
转发,将请求路由到目标组(一组 EC2 实例、一个 Lambda 函数或一个 IP 地址列表)。
重定向,生成 301(永久)或 302(找到)响应,还可用于在 HTTP 与 HTTPS 之间切换。
返回固定响应,生成带有任何所需响应代码的静态响应,如之前所展示的那样。
身份验证,使用 Amazon Cognito 或 OIDC 提供程序对请求进行身份验证(仅适用于 HTTPS 侦听器)。
注意事项
关于这个强大的新功能有以下几点注意事项:
指标 – 您可以查看规则评估和 HTTP 固定响应计数 CloudWatch 指标,以了解规则相关活动的更多信息(了解更多):
编程访问 – 您还可以使用ALB API 和 CLI创建、修改、检查和删除规则(即将推出 CloudFormation 支持)。
规则匹配 – 这些规则由字符串匹配提供支持,因此请仔细测试并反复检查您的规则是否按预期运行。调试和测试时,ALB 访问日志中的matched_rule_priority 和 actions_executed 字段很有帮助(了解更多)。
限制 – 每个 ALB 最多可以有 100 条规则,不包括默认值。每条规则最多可引用 5 个值,最多可使用 5 个通配符。条件数量仅受引用的唯一值的数量限制。
现已推出
现在,所有 AWS 地区都提供高级请求路由,无需额外付费(您只需支付 Application Load Balancer 的正常价格)。