0Pricing
Cloud & IT Cert Prep · 课时

CloudFront 分配与源站

创建 CloudFront 分配,配置 S3 和自定义 HTTP 源站,并了解用于保护 S3 的源站访问控制。

CloudFront 分配与源站 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。

什么是 Amazon CloudFront?

Amazon CloudFront 是 AWS 的全球内容分发网络(CDN),会在分布于 90 多个国家和地区、400 多座城市的边缘站点缓存和分发内容。当用户请求内容时,CloudFront 会从距离用户最近的边缘站点提供内容。与从源站服务器获取内容相比,这可以显著降低延迟。

CloudFront 不仅用于静态文件,还可以加速动态内容、API 和视频流。它与 S3、ALB、Lambda@Edge、WAF 和 Shield 等其他 AWS 服务集成,因此是现代 AWS 架构的标准分发层。

CloudFront 分配

CloudFront 分配是主要的配置单元。它定义一个或多个源站(内容所在的位置)、缓存行为(不同 URL 路径的缓存方式)、安全设置和定价层级。您可以通过分配的域名(例如 d1234abcdef.cloudfront.net)或使用 CNAME 或 ALIAS 记录配置的自定义域名(例如 cdn.example.com)访问内容。

创建后,分配需要 10–15 分钟才能在所有边缘站点完成全球部署。对现有分配的更改也需要几分钟才能传播。历史上存在两种分配类型,但目前所有分配都使用统一的配置界面。

# Create a CloudFront distribution backed by S3
aws cloudfront create-distribution \
  --distribution-config '{
    "Origins": {
      "Quantity": 1,
      "Items": [{
        "Id": "S3Origin",
        "DomainName": "my-bucket.s3.amazonaws.com",
        "S3OriginConfig": {"OriginAccessIdentity": ""}
      }]
    },
    "DefaultCacheBehavior": {
      "TargetOriginId": "S3Origin",
      "ViewerProtocolPolicy": "redirect-to-https",
      "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6"
    },
    "Enabled": true,
    "Comment": "My S3 distribution",
    "CallerReference": "2026-06-20-unique"
  }'

将 S3 用作 CloudFront 源站

使用 S3 存储桶作为 CloudFront 源站是最常见的模式之一。CloudFront 从 S3 获取对象,将其缓存在边缘站点,并从缓存中响应后续请求,而无需再次访问 S3。这样可以降低 S3 请求成本、改善全球用户的延迟,并减少 S3 承担的带宽。

要提供由 S3 支持的网站,无需将存储桶设为公开。请改用源站访问控制(OAC)——它是源站访问身份(OAI)的现代替代方案。OAC 仅授予 CloudFront 分配从存储桶读取数据的权限,在保持 S3 私有的同时,由 CloudFront 公开提供内容。

# S3 bucket policy granting OAC access to CloudFront
{
  'Version': '2012-10-17',
  'Statement': [{
    'Effect': 'Allow',
    'Principal': {
      'Service': 'cloudfront.amazonaws.com'
    },
    'Action': 's3:GetObject',
    'Resource': 'arn:aws:s3:::my-bucket/*',
    'Condition': {
      'StringEquals': {
        'AWS:SourceArn': 'arn:aws:cloudfront::123456789:distribution/EDFDVBD6EXAMPLE'
      }
    }
  }]
}

自定义 HTTP/HTTPS 源站

CloudFront 还支持自定义源站:任何可通过互联网访问的 HTTP 或 HTTPS 服务器,包括 EC2 实例、应用程序负载均衡器、API Gateway 端点和本地服务器。自定义源站使 CloudFront 不仅能够缓存和加速静态文件,还能缓存和加速动态应用程序及 API。

将 ALB 用作自定义源站时,请在其安全组中将 ALB 配置为只接受来自 CloudFront IP 范围的连接。这样可以强制所有外部流量经过 CloudFront,在边缘位置启用 WAF 规则和 TLS 终止,同时使 ALB 保持在 AWS 内部。

源站访问控制(OAC)与 OAI 的比较

源站访问身份(OAI)是最初用于限制 CloudFront 访问 S3 存储桶的方式。它是一种特殊的 CloudFront 用户身份,会在 S3 存储桶策略中授予权限。虽然 OAI 仍然有效,但已被视为旧版方案。

源站访问控制(OAC)是现代替代方案。OAC 支持所有 S3 存储桶类型(包括 AWS 中国 Region 中的 S3 和使用 SSE-KMS 加密的存储桶),使用 IAM 服务主体实现更精细的控制,并自动使用 SigV4 为发送到 S3 的请求签名。对于新建分配,请始终使用 OAC,而不要使用 OAI。

查看器协议策略

查看器协议策略控制 CloudFront 如何处理用户(查看器)与边缘站点之间的连接:

  • HTTP 和 HTTPS:同时允许两者;不建议用于敏感内容
  • 将 HTTP 重定向到 HTTPS:将 HTTP 请求透明地重定向到 HTTPS;最常用的设置
  • 仅 HTTPS:完全拒绝 HTTP 连接;用于严格执行 TLS

此外,源站协议策略控制 CloudFront 如何与源站通信:仅 HTTP、仅 HTTPS 或与查看器匹配。对于使用 OAC 的 S3 源站,CloudFront 始终使用 HTTPS。

自定义域名和 SSL/TLS 证书

如需通过 cdn.example.com 而不是 CloudFront 域名提供内容,您需要在分配中配置备用域名(CNAME),并附加来自 AWS Certificate Manager (ACM) 的 SSL/TLS 证书。无论您的分配在哪个区域提供流量,ACM 证书都必须位于 us-east-1 Region,因为 CloudFront 是由 us-east-1 管理的全球服务。

请将 Route 53 记录创建为指向 CloudFront 分配域名的 ALIAS 记录。CloudFront 会自动为匹配的 SNI 请求提供您的证书。

# Request a certificate in us-east-1 for CloudFront
aws acm request-certificate \
  --domain-name cdn.example.com \
  --validation-method DNS \
  --region us-east-1

价格类别

CloudFront 的价格类别决定使用哪些边缘站点来提供您的分配。较高的价格类别包含更多成本高昂的边缘站点(通常位于带宽成本较高的区域):

  • 价格类别 100:仅限北美和欧洲(成本最低)
  • 价格类别 200:北美、欧洲、亚洲、中东和非洲
  • 价格类别 All:全球所有边缘站点(性能最佳,成本最高)

对于内部工具或受众仅限于北美和欧洲的应用,请使用价格类别 100。对于真正面向全球消费者的应用,请使用价格类别 All。

源组和故障转移

源组支持 CloudFront 源故障转移。您可以在一个组中定义主要源和次要源。如果主要源返回特定的 HTTP 错误代码(例如 500、502、503、504),CloudFront 会自动针对次要源重试该请求。

源故障转移适用于灾难恢复:将主要 S3 Bucket 保留在 us-east-1,并在 us-west-2 中保留一个复制的备份作为次要源。在 S3 中断期间,CloudFront 会透明地执行故障转移,无需更改 DNS。此模式可补充 S3 跨区域复制。

CloudFront 访问日志

CloudFront 可以将访问日志传送到 S3 Bucket,记录每个查看者请求的详细信息:时间戳、边缘站点、状态代码、传输字节数、缓存命中或未命中、用户代理等。日志每隔几分钟批量传送一次。

您可以使用访问日志分析流量模式、识别热点内容、审计与安全相关的字段(IP、引荐来源、用户代理),并衡量缓存命中率。x-edge-result-type 字段会告诉您请求在边缘是否为命中、未命中或 RefreshHit。

# Enable access logging on a distribution
aws cloudfront update-distribution \
  --id EDFDVBD6EXAMPLE \
  --distribution-config '{
    ...existing config...
    "Logging": {
      "Enabled": true,
      "Bucket": "my-logs-bucket.s3.amazonaws.com",
      "Prefix": "cloudfront-logs/",
      "IncludeCookies": false
    }
  }' \
  --if-match ETVPDKIKX0DER

边缘站点与区域边缘缓存

CloudFront 具有两层缓存基础设施:

  • 边缘站点:全球有数百个靠近终端用户的 PoPs,以最低延迟提供缓存内容
  • 区域边缘缓存(RECs):位于边缘站点和源之间的 13 个更大、生命周期更长的缓存;用于提供热门程度不足以留在较小边缘站点缓存中的内容

当请求未命中边缘站点缓存时,CloudFront 会先检查 REC,然后才一直请求到源。RECs 是透明的——您无需直接配置它们——但它们可以显著提高长尾内容的缓存命中率,并减少源的负载。

快速检查

测试您对本课 AWS Solutions Architect (SAA-C03) 概念的理解。

课程回顾

在本课中,您学习了:CloudFront 分配会在全球边缘站点缓存内容、OAC 在允许 CloudFront 访问的同时确保 S3 Bucket 保持私有,以及自定义源支持 ALB、API Gateway 和任意 HTTP 服务器。CloudFront 使用的 ACM 证书必须在 us-east-1 中预置。接下来,我们将学习缓存行为和 TTL 设置。

常见问题解答

「CloudFront 分配与源站」课时是免费的吗?

是的 — 「CloudFront 分配与源站」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。

「CloudFront 分配与源站」这节课中我会学到什么?

创建 CloudFront 分配,配置 S3 和自定义 HTTP 源站,并了解用于保护 S3 的源站访问控制。 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cloud & IT Cert Prep 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「CloudFront 分配与源站」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?

能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. CloudFront 分配与源站
  2. 缓存行为与 TTL 设置
  3. 签名 URL、签名 Cookie 与地理限制
  4. CloudFront 与 WAF 及 Lambda@Edge
← 返回 Cloud & IT Cert Prep