如何将AWS同一域名的不同路由分别指向API Gateway与负载均衡器?
AWS同一域名按路径分流至API Gateway和ALB的实现方案
AWS完全支持同一域名下将不同路径路由到不同后端服务的需求,核心通过CloudFront + 自定义缓存行为实现,以下是具体步骤:
配置步骤
1. 创建CloudFront分发
- 进入CloudFront控制台,新建分发:
- 临时填写一个Origin Domain(比如你的ALB域名,后续会添加多源)
- 选择
Redirect HTTP to HTTPS作为Viewer Protocol Policy(生产环境推荐) - 在Alternate Domain Names (CNAMEs)中填入
www.mydomain.com - 选择ACM中已申请的对应域名证书(注意:证书必须部署在
us-east-1区域,CloudFront仅识别该区域的证书)
2. 添加后端源(Origin)
在分发的Origins标签页添加两个源:
- API Gateway源:
- Origin Domain填入你的API Gateway自定义域名(或官方生成的
xxx.execute-api.{region}.amazonaws.com) - 其余保持默认,保存
- Origin Domain填入你的API Gateway自定义域名(或官方生成的
- ALB源:
- Origin Domain填入ALB的DNS名称(从EC2负载均衡器详情页获取)
- 其余保持默认,保存
3. 配置路径匹配的缓存行为
在Behaviors标签页创建自定义缓存行为,按路径分流:
- 路由到API Gateway的行为:
- 点击
Create Behavior,Path Pattern填/books/*,选择API Gateway作为源 - 缓存策略选择
CachingDisabled(动态API无需缓存),其余按需配置,保存 - 重复上述操作,创建Path Pattern为
/students/*的行为,同样指向API Gateway源
- 点击
- 路由到ALB的行为:
- 创建Path Pattern为
/teachers/*的行为,选择ALB作为源 - 缓存策略选择
CachingDisabled(若为动态API),其余按需配置,保存 - 重复操作,创建Path Pattern为
/grades/*的行为,指向ALB源
- 创建Path Pattern为
- 默认行为(
/*):根据需求配置默认后端,或留空(如果所有路径都已覆盖)
4. 更新Route 53域名记录
将www.mydomain.com的Route 53记录改为指向CloudFront分发:
- 进入Route 53托管区,修改对应A/AAAA记录
- 记录类型选择
Alias,目标选择你的CloudFront分发域名(格式为xxx.cloudfront.net) - 保存记录
5. 验证配置
等待CloudFront部署完成(约5-15分钟),测试各路径:
www.mydomain.com/books→ API Gatewaywww.mydomain.com/students→ API Gatewaywww.mydomain.com/teachers→ ALB(NestJS API)www.mydomain.com/grades→ ALB(NestJS API)
关键注意事项
- ACM证书必须部署在
us-east-1区域,否则CloudFront无法识别 - 建议为CloudFront配置Origin Access Control (OAC),限制仅CloudFront能访问后端源,提升安全性
- CloudFront会按路径的精准度优先匹配,具体路径(如
/books/*)会覆盖默认的/*行为
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

