如何在AWS ALB中基于host-header和path-pattern两个条件实现流量路由
解决方案
AWS ALB 原生支持单条监听器规则同时匹配host-header和path-pattern两个条件,你之前遇到的单条件块仅支持一种匹配类型的限制,不代表单条规则只能配置一个匹配条件,正确配置方法如下:
1. AWS 控制台配置方式
在ALB对应监听器的「添加规则」页面,依次添加两个匹配条件即可:
- 第一个条件选择「主机头」,输入需要匹配的域名(例如
domain-one.com、another-domain.com) - 第二个条件选择「路径」,输入需要匹配的路径模式(例如
/web/*、/media/files/*) - 最后设置转发动作到对应的目标组,规则触发逻辑为所有条件同时满足才会执行转发,和Kubernetes Ingress的逻辑完全一致。
2. Terraform 配置方式
Terraform的aws_lb_listener_rule资源支持传入多个独立的condition块,每个块对应一种匹配类型,多个条件之间默认是“与”逻辑,示例配置如下:
# 匹配 domain-one.com 和 another-domain.com 下 /web、/media/files 路径的路由 resource "aws_lb_listener_rule" "web_multi_domain" { listener_arn = aws_lb_listener.http.arn priority = 100 condition { host_header { values = ["domain-one.com", "another-domain.com"] } } condition { path_pattern { values = ["/web/*", "/media/files/*"] } } action { type = "forward" target_group_arn = aws_lb_target_group.web_service.arn } } # 匹配 www.domain-one.com 下 /api 路径的路由 resource "aws_lb_listener_rule" "api_domain_one" { listener_arn = aws_lb_listener.http.arn priority = 101 condition { host_header { values = ["www.domain-one.com"] } } condition { path_pattern { values = ["/api/*"] } } action { type = "forward" target_group_arn = aws_lb_target_group.api_service.arn } }
单台ALB最高支持数千条监听器规则,完全可以满足多域名、多路径的路由需求,不需要为每个域名单独创建ALB。
内容的提问来源于stack exchange,提问作者Maximilian Wiens
相关产品推荐
相关产品推荐

