[Infra/SRE 知识库] AWS CloudFront API 边缘缓存配置与排障复盘

文档目的:总结基于 URL 参数的动态 API 缓存配置标准,以及源站 HTTP 响应头冲突的排障方案。


一、 基础架构与回源避坑(Host 头部透传问题)

场景

  • CDN 监听公网域名:api.hahaha.com

  • 源站(Origin):VPC 内部 ALB,域名为 api.hahaha.internal.com

⚠️ SRE 避坑指南 : 在配置"源请求策略 (Origin Request Policy)"时,强烈建议选择 AllViewerExceptHostHeader(或其他剔除 Host 头的自定义策略)。

  • 原因 :如果全量透传(包含 Host),CDN 会把公网域名 api.hahaha.com 丢给后端 ALB。由于内网 ALB 配置的证书或路由规则是基于 internal.com 的,会导致 SSL 握手失败或报 403/404 错误。剔除 Host 头可让 CloudFront 使用源域名与 ALB 进行 SNI 握手。

二、 API 动态缓存核心配置(按参数隔离)

需求 :同一个 API 路径 /public/auth/keys,根据不同的查询参数 ?keyId=xxx 返回并缓存不同的内容。

操作标准

  1. Cache Policy (缓存策略)

    • 必须新建策略,在 Query strings (查询字符串) 设置中选择 All (全部)

    • 作用:强制 CDN 将整个 URL(含参数)作为 Cache Key 哈希值,实现不同 keyId 的缓存隔离,防止数据串号。

  2. Behavior (行为优先级)

    • 缓存规则必须绑定到具体路径 /public/*,且优先级必须高于默认的 *(全站不缓存规则)。

    • 方法限制:严格限制为 GET, HEAD,避免 POST 等写操作被错误缓存。


三、 缓存不生效排障:源站 Cache-Control 冲突

故障现象 :CDN 配置完美,但多次 curl 请求始终返回 x-cache: Miss from cloudfront

根因分析 : 后端应用默认返回了强制禁止缓存的 HTTP 响应头: cache-control: no-cache, no-store, max-age=0

  • CloudFront 默认严格遵守源站指令。只要源站带有 no-store,无论 CDN 设置了多长的 TTL,CDN 均拒绝对其进行缓存。

解决方案对比

  • 方案 A:修改后端应用(🌟 最佳实践)

    • 操作 :要求开发调整此 API 的响应头,输出 cache-control: public, max-age=3600

    • 优势:符合 HTTP 规范,逻辑清晰,不增加边缘架构复杂度。

  • 方案 B:边缘函数强制覆盖(🛠️ 运维降级/兜底方案)

    • 操作 :如果后端无法修改,使用 CloudFront Functions 编写拦截脚本。

    • 绑定位置 :在 Behavior 的 Viewer Response(查看器响应) 阶段绑定该函数。

    • 代码逻辑

      复制代码
      function handler(event) {
          var headers = event.response.headers;
          // 抹除后端的流氓禁止头,强行植入缓存指令
          headers['cache-control'] = { value: 'public, max-age=3600' };
          delete headers['pragma'];
          delete headers['expires'];
          return event.response;
      }
    • 优势:无需业务改代码,运维单方面即可破局强行缓存。


四、 SRE 结单验证

  • 验证 Hit/Miss :连续请求目标 API,观察响应头中的 x-cache 状态以及 Age 参数。

  • 节点集群物理特性 :前期出现 HitMiss 交替属于正常现象(同一 CDN 边缘节点存在多台服务器集群,需时间预热同步)。持续高并发请求后,命中率将趋于 100%。

相关推荐
皮皮虾❀41 分钟前
阿里巴巴“千问办公”公测深度解析:企业级Agent如何重塑智能办公
人工智能·阿里云·云计算
敲上瘾9 小时前
redis常用数据类型与操作方法
数据结构·数据库·redis·缓存
翼龙云_cloud9 小时前
阿里云国际代理商:Redis缓存实例配置和性能优化 从参数调优到持久化
运维·redis·阿里云·缓存·云计算
聚搜云——JuSouClouD11 小时前
深圳阿里云代理商:K8s Pod OOM智能排查修复指南
阿里云·kubernetes·云计算
张毅2004-10-1012 小时前
docker详解:安装docker,docker架构,docker镜像、容器、网络、存储,容器监控,容器日志,综合实验
linux·运维·docker·云原生·云计算
FungLeo12 小时前
Flutter 带 TTL 的多级缓存设计:内存+磁盘+网络三层实战
网络·flutter·缓存·性能优化
Sterting13 小时前
第 9 节:本地存储 — 数据不丢的前端缓存
前端·javascript·缓存
小白考证进阶中13 小时前
阿里云ACP取消约考完整流程 + 核心注意事项
运维·阿里云·云计算·阿里云acp·阿里云acp考试·阿里云acp备考·转行运维
数智化管理手记1 天前
元数据管理怎么做?企业级元数据治理如何落地实操?
大数据·重构·云计算
Dawn-bit1 天前
Linux 日志处理三剑客之 awk:取列、取行、过滤与统计计算
linux·运维·服务器·云计算·运维开发