如何为同一域名同时配置Web服务器与CloudFront分发实现静态资源访问
解决方案
你遇到的CNAME冲突问题不需要拆分域名实现,直接将根域名全量流量接入CloudFront,通过多源站路径路由规则即可同时支持动态站点和静态资源的同域名访问,具体配置流程如下:
配置步骤
- 调整CloudFront源站配置
- 保留你原有的S3静态源站配置,新增你的Django Web应用服务器作为第二个源站,将该源站设置为默认回源源站
- 配置缓存行为路由规则
- 新增专属缓存行为:路径匹配规则填写
/assets/*,指定源站为S3桶,缓存策略配置为静态资源长缓存策略,无需转发Cookie、动态请求头 - 调整默认缓存行为:指定源站为Django服务器,根据业务需求配置动态请求的转发规则,保留Cookie、Authorization等必要请求头的转发逻辑
- 新增专属缓存行为:路径匹配规则填写
- 修正域名与DNS配置
- 在CloudFront的自定义域名配置中添加
example.com,绑定覆盖example.com的ACM证书(需在us-east-1区域申请) - 删除DNS中原来指向Django服务器的
example.com解析记录,新增一条example.com的ALIAS/ANAME记录(若DNS服务商不支持该类型则用A记录)指向当前CloudFront的分发域名,彻底解决同名解析冲突问题
- 在CloudFront的自定义域名配置中添加
- 验证访问逻辑
- 访问根域名下的普通动态页面,确认Django业务逻辑、登录会话等功能正常
- 访问
example.com/assets/路径下的静态资源,确认返回内容为S3存储的文件,响应头携带CloudFront缓存标识x-cache
注意事项
如果你的Django源站配置了IP白名单、WAF防护规则,需要将CloudFront的官方出口IP段加入白名单,也可以配置自定义源站请求头做鉴权,避免源站被绕过直接访问。
内容的提问来源于stack exchange,提问作者bgrantdev
相关产品推荐
相关产品推荐

