如何排查CloudFront返回301状态码的原因?
CloudFront分发突然全量返回301状态码的排查方案
已知条件:
- CloudFront分发正常运行5年,近几周所有请求返回301
- 源站
relay.jare.io直接访问https://relay.jare.io/?u=https://www.yegor256.com/index.html正常 - CloudFront端点和源站SSL证书均有效,行为配置未修改
可能的问题及排查步骤
1. 源站针对CloudFront请求的特殊重定向规则
源站直接访问正常,但CloudFront的请求带有特殊标识(如User-Agent为Amazon CloudFront),可能触发源站的专属重定向规则:
- 模拟CloudFront的请求头访问源站,检查响应状态:
curl -I -A "Amazon CloudFront" "https://relay.jare.io/?u=https://www.yegor256.com/index.html" - 对比源站访问日志中,CloudFront发起的请求与你本地请求的响应差异。
2. CloudFront源站协议/端口配置隐性变更
虽然行为配置未修改,但源站基础设置可能被误操作:
- 进入CloudFront控制台,检查分发的源设置:确认源站的协议策略(是否强制HTTPS)、端口是否正确。
- 查看CloudFront访问日志,确认请求源站时使用的协议(HTTP/HTTPS),若使用HTTP而源站强制HTTPS,会触发301重定向。
3. CloudFront缓存的旧301响应
若之前某请求意外触发301,且缓存TTL过长,会导致后续请求命中缓存的301:
- 手动清除对应路径的缓存:在CloudFront控制台的“缓存”选项卡,创建无效ation,路径填
/*或具体路径/?u=https://www.yegor256.com/index.html。 - 检查缓存策略配置,确认是否允许源站的
Cache-Control/Expires头覆盖默认TTL,若源站近期修改了这些头,可能引发缓存异常。
4. CloudFront对源站的DNS解析异常
本地解析正常不代表CloudFront边缘节点解析正常:
- 使用AWS CLI测试源站解析:
aws cloudfront test-distribution --id <你的分发ID> --origin-domain-name relay.jare.io - 检查源站DNS记录是否近期变更(如切换DNS服务商、修改A/CNAME记录),导致CloudFront解析到错误IP。
5. CloudFront边缘节点或AWS区域故障
- 查看AWS官方状态页面,确认CloudFront服务是否存在区域性故障。
- 修改本地hosts文件,将CloudFront域名
djk1be5eatcae.cloudfront.net指向其他区域的边缘节点IP,测试是否仍返回301。
6. 源站防火墙/WAF拦截CloudFront请求
源站防火墙可能对CloudFront IP段设置了重定向规则:
- 将CloudFront的IP段临时加入源站白名单,测试请求是否恢复正常。
- 查看源站防火墙/WAF日志,确认是否有来自CloudFront IP的请求被触发重定向。
内容的提问来源于stack exchange,提问作者yegor256
相关产品推荐
相关产品推荐

