如何配置CloudFront实现同一主域名下前后端服务对接
CloudFront 对接 ALB 后端(api.foo.com 入口)配置步骤
前置校验
- 确认负载均衡器(ALB/NLB)已开启公网访问,安全组已放通 CloudFront 出口IP段、80/443端口,后端服务可正常响应请求
- 已在 AWS Certificate Manager(ACM)的 us-east-1 区域 申请包含
www.foo.com和api.foo.com的多域名SSL证书(CloudFront仅支持us-east-1区域的ACM证书)
方案1:独立CloudFront分发承载api.foo.com(推荐,前后端流量完全隔离)
- 进入CloudFront控制台,点击创建分发
- 源配置
- 源域选择你使用的负载均衡器公网域名,不要选择自动关联的S3存储桶
- 协议选择
HTTPS only(需提前为ALB配置SSL证书)或匹配查看器协议 - 其余源级配置保持默认即可
- 默认缓存行为配置
- 查看器协议策略选择
重定向HTTP到HTTPS - 允许的HTTP方法选择
GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE(覆盖所有后端接口需要的请求方法) - 缓存策略选择
Managed-CachingDisabled(后端接口默认不需要缓存,如有特定缓存需求可自定义策略) - 源请求策略选择
Managed-AllViewerAndCloudFrontHeaders-2022-06,将用户侧所有请求头、Cookie、查询参数完整透传给后端 - 如需配置跨域,可直接选择预设CORS响应头策略,或自定义策略允许
https://www.foo.com跨域访问
- 查看器协议策略选择
- 分发全局配置
- 备用域名(CNAME)处添加
api.foo.com - 自定义SSL证书选择之前在us-east-1区域申请的包含
api.foo.com的ACM证书 - 其余配置保持默认,点击创建分发
- 备用域名(CNAME)处添加
- 进入Route53控制台,打开
foo.com托管区域,添加A记录:- 记录名称填
api - 开启别名,选择别名指向CloudFront分发,选中刚创建的api对应CloudFront分发,保存记录
- 记录名称填
- 等待CloudFront分发部署完成(通常5~10分钟),将React代码中的请求地址前缀替换为
https://api.foo.com/即可正常调用后端接口
方案2:复用现有www.foo.com的CloudFront分发(可选,无需额外子域名)
如果不要求必须用子域名访问后端,可直接在现有CloudFront分发中新增路径规则:
- 进入现有www.foo.com对应的CloudFront分发配置,切换到源选项卡,新增源指向负载均衡器域名
- 切换到行为选项卡,新增行为:路径模式填
/api/*,源选择刚添加的负载均衡器源,缓存和透传配置和方案1保持一致即可 - 前端代码直接调用
https://www.foo.com/api/xxx即可访问后端,不需要额外配置子域名和证书
常见问题排查
- 跨域报错:可在CloudFront响应头策略中配置
Access-Control-Allow-Origin: https://www.foo.com,也可以在后端服务/ALB侧配置该响应头 - 后端拿不到真实客户端IP:确认源请求策略已经开启
X-Forwarded-For头透传,使用预设的全量透传策略可直接规避该问题 - 配置不生效:CloudFront配置修改后需要等待分发状态变为已部署才会全局生效,可在分发列表页查看部署进度
内容的提问来源于stack exchange,提问作者feldo badix
相关产品推荐
相关产品推荐

