AWS CloudFront 配置指南:创建分发与缓存失效

为什么选 CloudFront

CloudFront 是 AWS 官方的全球 CDN 服务,与 S3、EC2、ALB 等 AWS 产品深度集成,适合已经"住在 AWS"的网站、SaaS 与视频类应用。它把内容缓存到遍布全球的边缘节点,显著降低跨地域访问延迟,同时可联动 AWS WAF 与 Shield 提供安全防护。如果你还没确定用哪家 CDN,可以先看主流 CDN 服务商对比

第一步:准备源站

创建分发之前先准备好源站(Origin),即内容的原始存放地:

  • S3 存储桶:适合静态资源。桶名必须全小写且不含空格,推荐用 Origin Access Control(OAC)限制只能通过 CloudFront 访问。
  • HTTP 服务器:如 EC2 或自建服务器。CloudFront 会把请求转发到该服务器,注意服务器需允许 CloudFront 访问,并做好安全加固。

如果源站也在 AWS 之外,一样可以作为自定义源站接入,CloudFront 对回源协议、端口和主机头都有可配置项。

第二步:创建分发

在 CloudFront 控制台依次选择 Distributions → Create distribution

  1. 填写分发名称(Distribution Name),可附加最多 50 个标签便于管理。
  2. 选择源站类型(如 S3、自定义源站),填写源站域名或地址,可再填源站路径(Origin Path),例如 /static,让 CDN 只回源该目录。
  3. 选择源站设置:推荐使用默认推荐配置,或自定义缓存与回源参数。
  4. 进入 Enable security protections 页面,可按需启用 AWS WAF 的 Web ACL 防护。

创建后控制台会返回一个形如 d111111abcdef8.cloudfront.net 的域名,用它即可访问内容。发布状态从 Deploying 变为 Enabled 后即可测试。

第三步:配置缓存行为

每个分发默认有一个缓存行为(Cache Behavior),可针对不同路径配置差异化缓存:

  • 路径模式:例如 /images/*/*.css,不同路径走不同缓存策略。
  • 缓存策略与 TTL:静态资源(图片、CSS、JS)可缓存 30 天以上;动态接口建议 TTL 设为 0 或使用动态内容加速方案,可参考CDN 缓存策略
  • 查询字符串:是否保留 ?id=1 这类参数影响缓存命中率,仅在必要时保留。

CloudFront 自带一组托管缓存策略,按场景选即可:CachingOptimized 对静态资源设置较长 TTL 并忽略查询参数,适合图片、CSS、JS;CachingDisabled 完全不缓存,适合动态接口;Elemental-MediaPackage 面向流媒体。要自定义时,重点看两个字段——TTL 下限/默认/上限(决定对象在边缘节点的保留时长)和缓存键(Cache Key)(决定按什么维度区分缓存对象,通常是 host、路径、查询参数与请求头)。把这两项想清楚,命中率就不会差,更多策略见 缓存键策略

第四步:绑定 HTTPS 证书

CloudFront 默认提供 *.cloudfront.net 的 HTTPS。要使用自有域名,需要:

  1. AWS Certificate Manager(ACM) 申请证书,注意证书必须创建在 us-east-1(弗吉尼亚北部)区域
  2. 在分发中添加备用域名(Alternate Domain Name,即 CNAME),例如 cdn.example.com
  3. 在 DNS 处把 cdn.example.com 用 CNAME 指向 d111111abcdef8.cloudfront.net

关于证书类型选择可参考SSL 证书选型指南 2026

第五步:执行缓存失效

源站内容更新后,需要主动清除 CDN 边缘缓存。在控制台进入 Invalidations 页面:

Object paths: /images/logo.png   (单个文件)
              /images/*          (通配符,全部图片)
              /*                 (清空全站)

失效创建后通常几分钟内完成,但注意每次失效有配额限制,频繁全站失效会产生费用,建议配合版本号 URL(如 style.v2.css)减少失效频率。

除了控制台,也可以直接用命令行(先安装并配置好 AWS CLI):

aws cloudfront create-invalidation \
  --distribution-id E123ABC456DEF7 \
  --paths "/images/*" "/index.html"

把它写进发布脚本里,每次上线自动清掉对应路径的缓存,比人工到控制台点一遍更不容易漏。注意 --paths 里的通配符与配额:每个失效请求最少 1 条路径、免费额度为每月 1000 条(按路径计),超出后每条路径约 $0.005;全站 /* 只算 1 条但会清空所有节点,慎用。

费用与适用场景

CloudFront 按流量请求数计费,可按价格分级(Price Class)把服务范围限制在北美/欧洲/亚洲等区域以降低成本,具体可看CDN 成本优化指南

适合选择 CloudFront 的情况:站点本身部署在 AWS、需要 S3/ALB 无缝联动、需要签名 URL 保护私有内容,或需要把内容分发与 AWS WAF/Shield 安全体系整合。若你在用多家 CDN 做容灾,可结合多 CDN 负载均衡搭建一起规划。

费用参考与常见问题

CloudFront 的价格主要看出站流量请求数两块:以 us-east-1 到互联网的传输为例,单价约 $0.085/GB 起步,请求数另计(HTTP 每万次约 $0.01 级)。如果站点只在特定区域使用,把 Price Class 收窄到"北美/欧洲"或"亚洲"能省下不小开销;S3 源站走 CloudFront 出站还有专门的流量优惠。想压成本,参考 CDN 成本优化指南

高频问题里,最常见的三个:

  • 备用域名不生效:确认 ACM 证书创建在 us-east-1,且分发状态已变为 Enabled 再改 DNS。
  • 私有内容如何保护:用签名 URL/签名 Cookie(Signing Behavior 设为 Restrict Viewer Access),密钥放在 CloudFront Key Group,别放进代码。
  • 回源失败的排查:先看源站安全组是否放行 CloudFront 的源站访问,再看 OAC/OAI 是否配置正确,最后查回源请求头(HostUser-Agent)。

16IDC 观察

CloudFront 的核心优势不在"节点最多",而在与 AWS 生态的深度绑定:S3 出站流量走 CloudFront 可显著降低流量费,OAC 让源站完全隐身,签名 URL 天然适合付费内容与下载站。对预算敏感、源站在 AWS 之外的小站,建议先对比其他服务商再决定:Azure 侧见 Azure Front Door,Google 侧见 Google Cloud CDN,整体选型思路可参考CDN 服务商选型指南。更多内容请查看CDN 加速分类。

参考:AWS CloudFront 文档 https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/;失效与配额 https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html;原文来源:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-creating-console.html