一、排障核心思路:区分边缘与源站
排查 CloudFront 相关问题时,首要任务是判定故障点位于边缘节点(Edge Location)还是源站(Origin)。
标准流程建议:先通过抓包获取完整响应头,随后绕过 CDN 直接请求源站。
注意:若源站为私有 S3(启用 OAC),无法直接公网绕过 CDN 访问源站,需要查看 S3 访问日志做判断。
- 若源站响应正常,则重点检查 CloudFront 的转发策略、缓存策略或 WAF WebACL 规则;
- 若源站同样报错,则需回溯后端源站配置。
排错建议保留响应头 CloudFrontViewerRequestId,提交 AWS 支持可快速定位具体边缘节点问题。
二、跨域 (CORS) 错误排查
故障现象
浏览器控制台提示 CORS 拦截,响应头中缺少 AccessControlAllowOrigin。
诊断逻辑
- 源站校验:确认 S3 或 API 后端是否已配置 CORS 规则;修改 S3 CORS 策略后,旧跨域响应会被 CDN 缓存,需要执行缓存失效。
- HTTP 方法准入:检查 CloudFront 行为(Behavior)是否允许 OPTIONS 预检请求。
- 请求头转发:确认 CloudFront 是否将 Origin 头转发至源站。若源站收不到该头,则不会触发跨域响应。
重要:AWS 托管策略 CORSS3Origin 仅适用于 S3 源站,不可用于 ALB、EC2 自定义源站;自定义源站需要手动创建源请求策略转发跨域相关请求头。
修复操作(基于 2026 控制台逻辑)
在 CloudFront 行为(Behavior)设置中,确保 Allowed HTTP methods 包含 OPTIONS。
在 Cache key and origin requests 模块中,配置 Origin request policy(源请求策略)。
S3 源站场景:选择 AWS 托管的 CORSS3Origin;ALB/EC2 自定义源站,新建自定义源请求策略,手动添加 Origin、AccessControlRequestHeaders、AccessControlRequestMethod 转发。
S3 存储桶侧完成 CORS JSON 规则配置;更新 CORS 配置后执行一次缓存失效,清理历史缓存。
验证命令
bash
curl -H “Origin: https://www.example.com” -I https://yourcloudfrontdomain.com/resource
检查返回结果中是否包含正确的 AccessControlAllowOrigin 字段。
三、缓存失效 (Cache Invalidation) 异常
故障现象
控制台失效任务状态显示 Completed,但客户端仍访问到旧版本资源。
关键说明:控制台状态 Completed,代表任务下发完成;全球全部边缘节点完整传播通常还需要 515 分钟;另外浏览器本地强缓存也会干扰测试结果。
常见原因
- 通配符误用:仅提交了 /images/而非 /images/*,目录斜杠写法错误,目录内文件不会被清理。
- 本地缓存干扰:浏览器强缓存(CacheControl: maxage),请求根本没有到达 CloudFront 边缘节点。
- 查询字符串差异:缓存策略开启基于 Query String 缓存,不同参数视为独立缓存对象。
- 未等待全球边缘节点传播完成,立即刷新测试。
成本提示:每月前 1000 条失效路径免费,超出后计费;大批量清理优先使用/*通配符,减少路径条目消耗配额。
修复建议
- 精确路径:提交失效请求时,确保路径与实际请求 URI 完全匹配;目录清理务必使用目录/*格式。
- 源站控制:优先在源站元数据配置合理 CacheControl响应头,减少对手动失效的依赖。
- 静态 S3 业务建议开启对象版本化,从根源降低对缓存失效的依赖。
验证方式
执行 curl -I 查看 XCache 状态:
- Miss from cloudfront:回源获取最新资源;
- Hit from cloudfront:命中边缘缓存;
不要仅依靠浏览器 F5 刷新验证,使用 curl 命令绕过浏览器缓存。
四、502 Bad Gateway 错误诊断
502 错误代表 CloudFront 无法与源站建立正常会话,收到无效响应。
| 故障根因 | 排查点 | 修复方案 |
| SSL/TLS 握手失败 | 源站证书过期、自签名、域名不匹配、证书链顺序错误 | 部署受信任 CA 证书;源站域名与 Origin Domain Name 严格一致,修复完整证书信任链AWS。 |
| 源站响应超时 | 后端处理超时;Origin Response Timeout 默认 30 秒,最大上限 120 秒,超限需要申请配额提升AWS | 优化后端业务逻辑;在源站设置调大读取超时,不超过 120 秒。 |
| DNS 解析故障 | CloudFront 无法解析源站域名,报错 NonS3OriginDnsError | 检查源站 DNS,确认域名公网可正常解析AWS。 |
| 端口监听异常 | 源站没有监听 CloudFront 回源配置的 80/443 端口 | 确认后端服务监听端口与源站配置端口保持一致。 |
| 网络连通拦截 | 自定义源(ALB/EC2)安全组 / ACL 拦截回源流量;S3 源站无需配置安全组 | ①优先 VPC Origin 私有源;②开启 Origin Shield,放行 Origin Shield 前缀列表;③自定义请求头校验;不建议直接放行全部 CloudFront 动态全球 IP 段AWS。 |
| WAF 拦截 | AWS WAF WebACL 触发 Block 动作 | 检查 WAF 日志,调整误判规则。 |
| 函数执行异常 | Lambda@Edge / CloudFront Function 代码执行报错 | 查看函数日志,修复代码逻辑。 |
五、监控与实践建议
- 实时日志:开启 CloudFront 实时日志输出至 Kinesis Data Streams,快速捕获 502 错误请求细节;注意实时日志会产生额外流量计费。
- 指标告警:在 CloudWatch 针对5xxErrorRate设置阈值告警。
- S3 源站最佳实践:S3 作为源站优先启用 OAC(源访问控制),关闭桶公网访问,防止业务绕过 CDN 直接访问 S3 桶。
- 工具化验证:养成使用curl -Iv命令的习惯,排除浏览器插件、浏览器本地缓存对响应头的干扰。
常见问题 (FAQ)
Q1:AWS CloudFront 是什么,适合哪些场景,选型时要确认什么? AWS CloudFront 是 AWS 的全球内容分发网络服务,可通过边缘站点分发静态和动态内容,并与 S3、负载均衡等源站结合。通常按下行流量或带宽、请求次数、回源、日志及附加安全能力计费;地域分区与计费口径会影响成本。采购前应核对地域、版本、配额、计费项和开通条件,不能只按产品名称判断。
Q2:AWS WAF 是什么,适合哪些场景,选型时要确认什么? AWS WAF 是用于保护 Web 应用和 API 的应用层防火墙,可基于规则检查请求并与 CloudFront、ALB、API Gateway 等受支持服务结合。费用通常由版本或服务层级、受保护站点或应用规模、请求或流量、规则与高级安全能力构成;计费模型因平台而异。采购前应核对地域、版本、配额、计费项和开通条件,不能只按产品名称判断。
Q3:CloudFront 报 502 Bad Gateway 错误如何定位是源站还是 CDN 问题? 可通过以下步骤定位:首先,修改本地 hosts 文件或直接使用源站域名发起请求;私有 OAC 保护的 S3 桶无法直接公网访问,需要查阅 S3 访问日志。
- 直接访问源站同样报错或超时,则为源站故障;
- 直接访问正常,CloudFront 访问报 502,一般是 CDN 回源通信问题:SSL 证书、DNS、超时、安全组拦截、Lambda@Edge 报错。
Q4:如何正确配置 S3 源站以解决 CloudFront 跨域 (CORS) 拦截问题? 需要两端配合配置:
- S3 端:存储桶权限编辑 CORS JSON 配置,写明AllowedOrigins、AllowedMethods、AllowedHeaders。
- CloudFront 端:行为开启 OPTIONS 方法;源请求策略选择托管CORSS3Origin。
- 修改 S3 的 CORS 规则后,务必执行一次缓存失效,清理旧的跨域缓存响应。
