监听器规则与基于路径的路由
在 ALB 上编写监听器规则,根据主机标头、路径模式或查询字符串将请求路由到不同的目标组。
监听器规则与基于路径的路由 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。
ALB 监听器详解
ALB 的监听器是一个使用您指定的协议和端口检查连接请求的进程(例如,在 80 端口上使用 HTTP,或在 443 端口上使用 HTTPS)。每个监听器都有一个或多个规则,根据请求内容决定将请求转发到哪里。
监听器必须有一个默认规则(没有其他规则匹配时执行的兜底操作),并且最多可以有 100 个附加规则。规则按优先级顺序进行评估(数字越小,优先级越高)。当请求匹配某条规则的条件时,就会应用相应操作,不再评估后续规则。
# Create an HTTP listener on port 80
aws elbv2 create-listener \
--load-balancer-arn arn:aws:elasticloadbalancing:us-east-1:123456789:loadbalancer/app/my-alb/abc123 \
--protocol HTTP \
--port 80 \
--default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/default-tg/def456规则条件
监听器规则根据条件匹配请求。您可以在一条规则中组合多个条件(所有条件都必须匹配,规则才会生效)。可用的条件类型包括:
- host-header:匹配
HostHTTP 标头(例如api.example.com) - path-pattern:匹配 URL 路径(例如
/api/*、/images/*.jpg) - http-header:匹配任意 HTTP 标头名称和值模式
- http-request-method:匹配 HTTP 方法(GET、POST、DELETE 等)
- query-string:匹配查询字符串中的键值对
- source-ip:匹配客户端 IP CIDR 范围
基于路径的路由
基于路径的路由根据 URL 路径将请求定向到不同的目标组。这是单个 ALB 后微服务最常见的路由模式。一个 ALB 上的示例规则如下:
- 路径为
/api/*→ 目标组:api-service - 路径为
/images/*→ 目标组:image-processor - 路径为
/admin/*→ 目标组:admin-app - 默认 → 目标组:frontend-app
这样,单个 ALB 就可以为多个彼此独立的服务提供入口,无需使用多个负载均衡器,从而降低成本和 DNS 复杂性。
# Create a path-based routing rule
aws elbv2 create-rule \
--listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
--priority 10 \
--conditions Field=path-pattern,Values='/api/*' \
--actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/api-service/xyz789基于主机的路由
基于主机的路由根据 HTTP Host 标头路由请求,使单个 ALB 能够为多个域名(虚拟主机)提供服务。示例如下:
- 主机为
api.example.com→ api-service 目标组 - 主机为
admin.example.com→ admin-app 目标组 - 主机为
www.example.com→ frontend 目标组
每个域名都有一个 CNAME 或 ALIAS 记录,指向同一个 ALB DNS 名称,但 ALB 会根据主机标头将每个请求路由到相应的后端。基于主机的路由非常适合多租户 SaaS,或正在拆分为微服务的单体应用。
# Create a host-based routing rule
aws elbv2 create-rule \
--listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
--priority 5 \
--conditions '[{"Field":"host-header","HostHeaderConfig":{"Values":["api.example.com"]}}]' \
--actions '[{"Type":"forward","TargetGroupArn":"arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/api-service/xyz789"}]'规则操作
当规则的条件匹配时,ALB 会执行以下操作之一:
- 转发:将请求转发到一个或多个目标组(可选择设置权重)
- 重定向:向新 URL 返回 HTTP 重定向(301 或 302);适用于将 HTTP 重定向到 HTTPS
- 固定响应:返回包含指定状态码、内容类型和正文的静态 HTTP 响应——适用于维护页面或简单的健康检查响应
- authenticate-cognito:通过 Cognito 用户池对用户进行身份验证,然后再转发请求
- authenticate-oidc:通过任何兼容 OIDC 的身份提供商对用户进行身份验证
# Create a redirect rule: HTTP to HTTPS
aws elbv2 create-rule \
--listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/http80 \
--priority 1 \
--conditions '[{"Field":"path-pattern","PathPatternConfig":{"Values":["/*"]}}]' \
--actions '[{"Type":"redirect","RedirectConfig":{"Protocol":"HTTPS","Port":"443","StatusCode":"HTTP_301"}}]'HTTP 到 HTTPS 重定向模式
最常见的监听器规则模式是将 HTTP 重定向到 HTTPS:
- 在 80 端口上创建一个HTTP 监听器,并添加一条规则:将所有流量(
/*)以 301 状态码重定向到 HTTPS - 在 443 端口上创建一个HTTPS 监听器,并添加实际的路由规则,将请求指向目标组
这样,用户输入 http:// 地址或访问旧的 HTTP 链接时,就会透明地重定向到 HTTPS,无需对应用程序进行任何修改。整个重定向过程都在负载均衡器层完成。
固定响应操作
固定响应操作会直接从 ALB 返回静态 HTTP 响应,而不会将请求转发到任何目标。您可以将其用于:
- 在维护期间针对特定路径返回 503 维护页面
- 直接从 ALB 提供轻量级健康检查端点(立即返回 200 OK,无需后端开销)
- 使用 403 Forbidden 响应阻止特定路径
通过动态调整监听器规则,固定响应可以在不修改应用程序代码或重新部署的情况下,临时使某些路径停止提供服务。
# Return 503 maintenance page for a specific path
aws elbv2 create-rule \
--listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
--priority 20 \
--conditions '[{"Field":"path-pattern","PathPatternConfig":{"Values":["/checkout/*"]}}]' \
--actions '[{"Type":"fixed-response","FixedResponseConfig":{"StatusCode":"503","ContentType":"text/html","MessageBody":"<h1>Maintenance</h1>"}}]'使用 Cognito 进行 ALB 身份验证
ALB 的authenticate-cognito 操作与 Amazon Cognito 用户池集成,在将请求转发到应用程序之前处理用户身份验证。当未经过身份验证的用户访问受保护的监听器规则时,ALB 会将其重定向到 Cognito 托管的登录界面。身份验证成功后,ALB 会设置加密 Cookie,并在转发请求时附带用户身份标头。
这样,身份验证逻辑就完全从应用程序中卸载。您的后端会收到包含已验证用户声明的 X-Amzn-Oidc-Identity、X-Amzn-Oidc-Data 和 X-Amzn-Oidc-Access-Token 标头。
基于查询字符串和标头的路由
ALB 侦听器规则可以根据查询字符串参数和 HTTP 标头进行路由,从而实现细粒度的请求路由:
- 通过检测
User-Agent: *Mobile*标头识别移动客户端,并将其路由到针对移动设备优化的后端 - 通过检查自定义
X-API-Tier: premium标头识别高级 API 请求,并将其路由到更快的目标组 - 通过读取查询字符串参数
?variant=beta来路由 A/B 测试变体
基于标头的路由让您可以在基础设施层实现功能开关和流量拆分,而无需修改应用程序代码。
规则优先级和评估顺序
规则按照优先级升序进行评估。优先级编号越小,越先进行评估。应用第一个匹配规则的动作,之后不再评估其他规则。默认规则没有优先级编号,始终作为兜底规则最后进行评估。
最佳实践:将优先级编号按 10 递增(10、20、30……)进行分配,而不要使用连续整数。这样可以在现有规则之间插入新规则,而无需重新编号。更具体的规则(例如路径 + 主机标头)应使用比通用规则更小的编号(更高的优先级)。
# List rules for a listener (shows priorities)
aws elbv2 describe-rules \
--listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
--query 'Rules[*].{Priority:Priority,Conditions:Conditions[0].Field,Actions:Actions[0].Type}' \
--output table微服务的侦听器规则
单个 ALB 可以利用侦听器规则为整个微服务平台提供前端接入。以下是结合全部三种条件类型的实际示例:
- 优先级 10:主机=
api.example.com+ 路径=/v2/*→ api-v2 目标组 - 优先级 20:主机=
api.example.com+ 路径=/v1/*→ api-v1 目标组 - 优先级 30:主机=
auth.example.com→ auth-service 目标组 - 优先级 40:主机=
www.example.com+ 路径=/static/*→ CloudFront 重定向 - 默认:主机=
www.example.com→ 前端目标组
这种设计无需为每项服务使用单独的负载均衡器,因此可以降低成本。
快速检查
测试您对本课 AWS 解决方案架构师(SAA-C03)相关概念的理解。
课程回顾
本课中您学到了:侦听器规则可以根据主机、路径、标头、方法和查询字符串对请求进行路由;规则按优先级顺序进行评估,第一个匹配项获胜;并且动作包括转发、重定向、固定响应和 Cognito 身份验证。基于路径和主机的路由让单个 ALB 可以为多个微服务提供前端接入。接下来我们将学习 SSL 终止和会话保持。
常见问题解答
「监听器规则与基于路径的路由」课时是免费的吗?
是的 — 「监听器规则与基于路径的路由」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。
「监听器规则与基于路径的路由」这节课中我会学到什么?
在 ALB 上编写监听器规则,根据主机标头、路径模式或查询字符串将请求路由到不同的目标组。 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cloud & IT Cert Prep 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「监听器规则与基于路径的路由」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?
能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- ALB、NLB 与 GLB:如何选择
- 目标组与运行状况检查
- 监听器规则与基于路径的路由
- SSL 终止与粘性会话