AWS CloudFront:全球内容分发网络

FreeGuideOnline 最新 2026-06-30

什么是 AWS CloudFront?

AWS CloudFront 是 Amazon 提供的一项快速内容分发网络(CDN)服务。它通过全球分布的边缘节点(Edge Locations)缓存你的静态和动态内容,显著降低访问延迟、提高传输速度,同时为你的应用提供 DDoS 防护和 HTTPS 支持。

CloudFront 可以加速的内容类型包括:

  • 网页中常用的静态文件:HTML、CSS、JavaScript、图片、视频
  • 动态 API 响应
  • 流媒体直播与点播
  • 整个 Web 应用

与 S3 的关系:CloudFront 经常和 S3 配合,将 S3 存储桶作为源站(Origin),让用户从最近的边缘节点获取文件,而不是直接请求 S3,从而节省跨区域传输成本并提升性能。


CloudFront 的核心概念

在开始配置之前,你需要理解以下四个关键组件:

1. 分发(Distribution)

CloudFront 的基本工作单元。每个分发相当于一个 CDN 配置实例,它定义了:

  • 内容从哪里来(源站)
  • 如何在边缘节点上缓存
  • 域名、SSL 证书等行为策略

分发分为两类:

  • Web 分发:用于静态网站、API、视频流等
  • RTMP 分发:已基本弃用,推荐使用 HLS 等基于 HTTP 的流媒体方案

2. 源站(Origin)

你的内容的最终源头,可以是:

  • AWS 内部服务:S3 存储桶、MediaStore、MediaPackage、ALB / NLB 等
  • 自建源站:运行在 EC2 上的 HTTP 服务器、本地数据中心通过 VPN/Direct Connect 对外暴露的端点

3. 边缘节点(Edge Location)

CloudFront 在全球有 600+ 边缘节点,分布在 90+ 城市。请求会被自动路由到延迟最低的节点。如果节点没有缓存内容,它会从源站拉取、缓存,并返回给用户。

4. 区域性边缘缓存(Regional Edge Cache)

介于源站和边缘节点之间的更大缓存层。当本地边缘节点未命中时,先检查区域边缘缓存,没有才会回源。这减少了向源站发起的请求数,对高并发场景十分关键。


CloudFront 的工作原理

一次典型的用户请求流程如下:

  1. 用户访问你的 CloudFront 域名(例如 d1234.cloudfront.net 或你的自定义域名)。
  2. DNS 将请求路由到最近的边缘节点。
  3. 边缘节点检查缓存:
    • 命中缓存(Cache Hit):直接返回内容。
    • 未命中(Cache Miss):节点向区域边缘缓存请求;如仍未命中,则向源站发起请求。
  4. 源站返回数据,边缘节点根据配置的缓存策略(Cache Policy)缓存该对象,并交付给用户。
  5. 后续相同请求直接被边缘节点服务。

动态内容(如 API)可以配置为 不缓存,但 CloudFront 仍能通过优化的 AWS 骨干网络加速从源站到用户的传输。


创建你的第一个 CloudFront 分发

下面以 S3 静态网站为源站,演示如何快速起步。

步骤 1:准备 S3 源站

  • 创建一个 S3 存储桶,上传你的网站文件(例如 index.html)。
  • 关闭“阻止所有公共访问”,并附加以下存储桶策略(允许 CloudFront 访问):
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::你的存储桶名/*",
            "Condition": {
                "StringEquals": {
                    "AWS:SourceArn": "arn:aws:cloudfront::你的账户ID:distribution/分发ID"
                }
            }
        }
    ]
}

提示:使用 OAC(Origin Access Control)代替老旧的 OAI,更安全且支持 SSE-KMS 加密。

步骤 2:创建 CloudFront Web 分发

  1. 进入 CloudFront 控制台,点击 创建分发
  2. 源站域名:选择你的 S3 存储桶(列表会自动加载)。
  3. 源站访问:选择“源站访问控制设置”,推荐使用 OAC,并让 CloudFront 自动更新 S3 存储桶策略。
  4. 查看器协议策略:选择“Redirect HTTP to HTTPS”,强制 HTTPS。
  5. 允许的 HTTP 方法:若仅提供静态网站,选择 GET、HEAD;若涉及 API 则需 POST、PUT 等。
  6. 缓存策略:可以选用预设的 Managed-CachingOptimized(适用于大多数静态内容)或 Managed-CachingDisabled(完全禁用缓存)。
  7. Web 应用程序防火墙 (WAF):根据需要可启用 AWS WAF 防护。
  8. 价格等级:选择“仅使用北美、欧洲、亚洲、中东和非洲”可控制成本。
  9. 备用域名 (CNAME):如果你有自定义域名,在此添加,并需在 Route 53 或外部 DNS 配置别名记录或 CNAME。
  10. SSL 证书:若使用自定义域名,需通过 ACM 申请证书(必须位于 us-east-1 区域)。
  11. 其他设置默认,点击 创建分发

步骤 3:测试与验证

  • 分发部署需要 5-15 分钟,状态变为“已部署”后,访问分配的 CloudFront 域名(如 d123.cloudfront.net)。
  • 检查响应头中是否包含 x-cache: Hit from cloudfront,说明已命中缓存。

缓存与失效策略

控制缓存时间

CloudFront 的缓存行为遵循以下优先级(从高到低):

  1. 源站响应的 Cache-Control: max-ageExpires
  2. 分发中配置的缓存策略(最小、最大 TTL,以及默认 TTL)
  3. 若均未指定,默认 TTL 为 24 小时

常用缓存策略示例

  • 静态资源:设置 max-age=31536000(一年),并配合文件版本化(如 style.v2.css)实现及时更新。
  • HTML 入口页:设置短缓存或不缓存(max-age=0,配合 must-revalidate)。

缓存失效(Invalidation)

当源站内容更新,但你希望用户立即获取最新版本时,可以创建失效请求,手动清除边缘节点缓存。控制台支持按路径失效,例如:

  • /* 清空全部分发内容(尽量少用,可能产生费用)
  • /images/* 只清除图片目录

每月前 1,000 条失效路径免费,超出后按每条收费。


自定义域名与 HTTPS

绑定自定义域名

  1. 在 CloudFront 分发的 备用域名 处添加你的域名(如 www.example.com)。
  2. 在 DNS 提供商(如 Route 53)创建记录:
    • 若是 Route 53,可选择别名记录指向 CloudFront 分发域名。
    • 其他 DNS:创建 CNAME 记录,但需要注意根域名(example.com)无法使用 CNAME,此时需用 Route 53 的别名或 CloudFront 的备用域名配合 ALB。
  3. 在 ACM(us-east-1区)申请或导入证书,覆盖你的自定义域名,然后在 CloudFront 分发的 SSL 证书设置中选中该证书。

强制 HTTPS 与 HTTP/2

  • 查看器协议策略建议设为“Redirect HTTP to HTTPS”。
  • CloudFront 默认支持 HTTP/2 和 HTTP/3(QUIC),无需额外配置,能进一步提升加载速度。

保护你的内容

对于付费或私有内容,可以启用 CloudFront 的 受信任的密钥组AWS 账户根密钥 来生成签名 URL 或签名 Cookie,只允许持有有效签名的请求访问。

典型流程:

  1. 在 CloudFront 分配的行为设置中,将“限制查看者访问”设为“是”。
  2. 创建一个密钥组,并生成公钥/私钥对。
  3. 在你的后端应用中,用私钥生成有时效性的签名 URL,返回给授权用户。

防止直接访问 S3

使用 OAC 后,即使有人知道了 S3 原始端点,也无法直接下载文件,因为桶策略只允许 CloudFront 获取对象。


日志、监控与成本优化

访问日志

可启用标准日志记录或实时日志。标准日志会将每个请求的详细信息存储到你指定的 S3 存储桶中。日志字段包括请求时间、边缘节点 IP、缓存状态、字节数等。通过 Athena 可对日志进行 SQL 查询。

监控指标

在 CloudFront 控制台或 CloudWatch 中,可查看:

  • 总请求数、HTTP 错误率
  • 缓存命中率
  • 数据传输量(按区域细分)

设置 CloudWatch 告警,当 4xx / 5xx 错误率异常或请求量激增时通知你。

降低成本的技巧

  • 合理使用价格等级:排除掉边缘节点费用较高的区域(如南美、澳大利亚),如果目标用户主要在某一大洲。
  • 提高缓存命中率:延长静态资源 TTL,减少回源请求。
  • Origin Shield:在 CloudFront 中启用中央缓存层,专门用于合并回源请求,进一步减少对 S3 等源站的请求数。
  • 压缩:在分发行为中启用“自动压缩对象”,对文本、JSON 等压缩,减少传出带宽。

常见问题与排错

问题:修改 S3 文件后,CloudFront 仍然显示旧版本

  • 等待 TTL 过期,或发起缓存失效。
  • 确保文件未在浏览器端被强缓存,检查响应头中的 Cache-Control 是否设置过长。建议对 HTML 入口使用较短的缓存,引用资源使用版本化 URL。

问题:CloudFront 返回 403 禁止访问

  • 检查 S3 存储桶策略是否正确授予 CloudFront OAC 访问。
  • 检查对象是否已上传,并且对象 URL 与请求路径匹配。
  • 如果启用了 WAF,检查 WAF 规则是否误拦。

问题:自定义域名 HTTPS 不生效

  • 确保证书已在 us-east-1 区域(即使分发在其他区域)。
  • 证书需包含备用域名列表中的域名。
  • DNS 记录必须指向 CloudFront 分发域名。

总结

AWS CloudFront 为你提供了简单易用、弹性扩展的全球 CDN 服务。从托管静态网站到加速整站动态内容,它都能胜任。通过本教程,你已经了解了:

  • CloudFront 的基础术语和工作原理
  • 如何创建一个连接 S3 的 Web 分发
  • 缓存控制与失效管理的实践
  • 自定义域名及安全加固方法
  • 监控、日志和成本优化的关键点

下一步,你可以尝试将现有应用接入 CloudFront,并通过调整缓存策略、启用 Origin Shield 和分析日志来持续优化性能。欢迎随时参考官方文档深入了解 Lambda@Edge 函数、实时日志等高级功能。