如何用CloudFront实现同域名下EC2与Amplify路径路由及排障?
CloudFront配置区分Amplify应用与EC2 API及Access Denied排查方案
一、CloudFront路径转发的正确配置
要让domain.com指向Amplify部署的NextJS应用,domain.com/api/*转发到EC2负载均衡后的API,核心是通过缓存行为规则区分路径,具体步骤如下:
1. 添加两个自定义源(Origin)
Amplify应用源:
- 源类型选
Custom Origin,输入Amplify提供的默认域名(格式类似xxx.amplifyapp.com) - 源协议策略设为
HTTPS Only(Amplify默认启用HTTPS) - 其余参数保持默认,完成源创建
- 源类型选
EC2负载均衡源:
- 源类型选
Custom Origin,输入负载均衡的DNS名称(格式类似xxx.us-east-1.elb.amazonaws.com) - 源协议策略根据负载均衡的配置选择
HTTPS Only或HTTP and HTTPS - 其余参数保持默认,完成源创建
- 源类型选
2. 配置缓存行为优先级与规则
CloudFront会按优先级匹配最具体的路径,所以需要给API路径设置更高优先级:
默认缓存行为(路径
*):- 关联Amplify应用源
- 缓存策略选择
CachingOptimized(适配NextJS静态资源缓存) - 允许的HTTP方法选
GET, HEAD, OPTIONS - 按需配置Cookie、查询字符串转发(静态页面一般无需转发)
API专属缓存行为(路径
/api/*):- 路径模式填写
/api/*,优先级设为高于默认行为(数值越小优先级越高) - 关联EC2负载均衡源
- 缓存策略选择
CachingDisabled(API为动态内容,禁用缓存避免数据不一致) - 允许的HTTP方法选
GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE(覆盖API全请求方法) - 根据API需求转发必要的请求头(如
Authorization)、Cookie或查询字符串
- 路径模式填写
3. 域名与SSL配置
- 在CloudFront分发的
Alternate Domain Names (CNAMEs)中添加domain.com - 选择AWS Certificate Manager(ACM)中已完成域名验证的
domain.com证书(注意:证书必须部署在us-east-1区域)
二、Access Denied错误排查方向
既然Amplify应用和EC2 API独立运行正常,错误基本出在CloudFront配置或权限链路,逐一排查:
1. 源访问权限问题
Amplify端:
- 确保CloudFront请求的是Amplify的默认域名,而非自定义域名(避免DNS循环解析)
- 检查Amplify应用的访问控制,是否限制了特定IP?如果是,需将CloudFront的IP段加入允许列表
EC2负载均衡端:
- 检查负载均衡安全组,是否允许CloudFront的IP段访问对应端口(如443)
- 验证负载均衡目标组的健康状态,确认EC2实例正常在线,目标组转发规则正确(如端口匹配API服务端口)
2. 缓存行为路径匹配错误
- 确认
/api/*的缓存行为优先级高于默认行为(CloudFront优先匹配更具体的路径,优先级数值越小越优先) - 检查路径模式是否正确,必须是
/api/*,不能省略开头的斜杠,否则无法匹配所有子路径
3. Origin Access Control(OAC)配置错误
- OAC仅适用于S3源,EC2负载均衡和Amplify源不需要配置OAC
- 如果给Amplify源错误配置了OAC,会导致CloudFront无法正常访问Amplify资源,需删除OAC配置
4. NextJS路由与静态资源配置
- 检查NextJS的
next.config.js,确认没有错误的basePath或rewrites规则导致请求被拦截 - 可单独添加缓存行为匹配
/_next/*,关联Amplify源,确保静态资源能正常转发
5. SSL协议与证书问题
- 确认CloudFront的源协议策略与后端服务的协议一致:比如负载均衡只支持HTTPS,CloudFront源协议策略必须设为
HTTPS Only,否则会出现握手失败 - 验证
domain.com的DNS记录是否正确指向CloudFront分发域名,避免解析错误
6. CloudFront错误页面配置干扰
- 暂时关闭CloudFront的自定义错误页面设置,查看原始错误响应,确认是后端返回的403还是CloudFront自身的权限错误
内容的提问来源于stack exchange,提问作者Nithur
相关产品推荐
相关产品推荐

