如何将Amazon CloudFront与Elastic Beanstalk单实例连接以使用HTTPS证书
解决CloudFront与Elastic Beanstalk单实例/EC2的通信问题
核心误区澄清
CloudFront并非仅支持S3作为源,它完全可以配置自定义源指向Elastic Beanstalk环境或EC2实例的公网域名,以下是具体实现步骤:
1. 创建CloudFront分发时配置自定义源
在创建CloudFront分发的源设置环节:
- 源类型选择「自定义源」
- 源域名填写你的Elastic Beanstalk环境公网域名(例如
xxx.elasticbeanstalk.com),或EC2实例的公网DNS - 源端口选择
80(单实例EB默认通过HTTP提供服务) - 协议选择「HTTP only」(CloudFront与源用HTTP通信,对外提供HTTPS)
2. 配置缓存行为适配Angular+WebAPI架构
针对静态前端与动态API的不同特性,设置差异化缓存策略:
- 静态资源路径(如
/*):使用默认缓存策略,开启缓存提升访问性能 - API路径(如
/api/*):创建自定义缓存策略,设置「不缓存」,同时转发所有请求头(避免API请求丢失必要参数)
3. 关联ACM证书到CloudFront
- 确保ACM证书在**us-east-1(弗吉尼亚北部)**区域创建(CloudFront仅支持该区域的ACM证书)
- 证书需包含你对外使用的自定义域名(例如
yourdomain.com),且已完成域名验证(DNS或邮箱方式) - 在CloudFront分发的「设置」→「SSL证书」中选择该ACM证书
- 「查看器协议策略」选择「重定向HTTP到HTTPS」,强制用户通过HTTPS访问
4. 配置Route 53指向CloudFront分发
- 修改Route 53中的域名记录,将A类记录的「别名」设置为CloudFront分发的域名
- 必须选择「别名(Alias)」类型,而非直接填写IP,这样能自动适配CloudFront全球节点IP
5. 确保EB实例安全组允许CloudFront访问
- 在EB实例的安全组中添加入站规则:允许
HTTP(80端口)来自CloudFront官方前缀列表com.amazonaws.global.cloudfront.origin-facing - 该前缀列表会自动维护CloudFront所有源站访问的IP范围,无需手动更新
额外注意事项
- ACM证书无法下载,仅能通过CloudFront、ELB等AWS托管服务使用,无需尝试部署到EB实例
- EB环境域名是固定的(除非删除重建环境),不会因实例重启导致源地址失效
- 若使用自定义域名,务必确保ACM证书覆盖该域名,否则CloudFront无法正常提供HTTPS服务
内容的提问来源于stack exchange,提问作者Brandon Miller
相关产品推荐
相关产品推荐

