You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 12:27:16