如果你已经用过 AWS S3 托管过静态网站,可能会发现一个问题——当用户从地球另一端访问时,加载速度并不理想。这时候就需要 Amazon CloudFront 登场了。简单来说,如果说 S3 是云端的“硬盘”,那么 CloudFront 就是给这块硬盘配上的一张“全球分发网络”。
今天这篇文章,就带你彻底搞懂 CloudFront 是什么、能解决什么问题,然后手把手完成一次 CDN 分发配置。
什么是 Amazon CloudFront?
CloudFront 是 AWS 提供的内容分发网络(CDN)服务。它的核心任务是将你的网站内容(图片、视频、CSS、JavaScript 等)缓存到全球各地的边缘节点,让用户从离自己最近的地方获取数据,从而大幅降低访问延迟。
CloudFront 的核心优势
全球覆盖:CloudFront 拥有超过 600 个全球边缘节点,覆盖 90 多个城市,能够将内容快速分发到世界各地的用户。边缘节点通过 AWS 全球网络骨干网互联,确保数据传输的高效与稳定。
安全防护:CloudFront 与 AWS WAF、AWS Shield 无缝集成,可防御网络层和应用层的 DDoS 攻击。同时,它还支持 HTTPS 加密传输和字段级加密,保障数据安全。
按量付费:AWS 为新用户提供永久免费的每月 1TB 传出数据和 200 万次 HTTP/HTTPS 请求额度,对个人学习和小型项目非常友好。
边缘计算能力:通过 CloudFront Functions 和 Lambda@Edge,可以在边缘节点运行代码,实现请求改写、图片处理、A/B 测试等自定义逻辑。
CloudFront 能用来做什么?
CloudFront 的应用场景非常广泛:
静态网站加速:将 S3 中托管的 HTML、CSS、JS、图片等静态资源分发到全球边缘节点,大幅提升加载速度
动态内容加速:优化 API 请求和个性化内容的传输,Slack 使用 CloudFront 后全球 API 平均延迟从 90ms 降至 15ms
视频点播与直播:通过 AWS Media Services 集成,支持高质量的流媒体分发
边缘计算:在边缘节点执行轻量级代码,如 URL 重写、请求头修改、缓存键规范化等
图文教程:创建你的第一个 CloudFront 分发
下面我们从零开始,为一个 S3 静态网站配置 CloudFront CDN。整个过程大约需要 5-10 分钟配置 + 等待分发部署(约 5-15 分钟)。
第一步:准备 S3 源站
在配置 CloudFront 之前,需要先在 S3 中准备好你的网站文件:
创建一个 S3 存储桶,并上传至少一个
index.html文件记录存储桶的区域域名,格式类似
my-bucket.s3.us-east-1.amazonaws.com
⚠️ 重要提示:CloudFront 访问 S3 时使用 REST API 端点(s3.amazonaws.com),而不是 S3 网站托管端点(s3-website-xxx)。使用错误的端点会导致 OAC 认证失败。
第二步:进入 CloudFront 控制台
登录 AWS 管理控制台,在顶部搜索框输入 “CloudFront” 并点击进入。
第三步:创建分发
点击橙色的 “创建分发” 按钮。
配置源(Origin)
源类型:选择 Amazon S3
源域名:选择你准备好的 S3 存储桶
路径:留空(表示访问根路径)
名称:可自定义,方便识别
配置源访问权限
推荐使用 Origin Access Control(OAC) 来确保只有 CloudFront 能读取 S3 中的内容,而不是让 S3 存储桶公开访问。
选择 “源访问控制(推荐)”
如果已有 OAC 可直接选择,否则点击“创建新的 OAC”,AWS 会自动完成配置
为什么需要 OAC?
如果没有 OAC,你需要将 S3 存储桶设为公开才能让 CloudFront 访问内容,这存在安全风险。OAC 允许 CloudFront 通过服务主体身份安全地访问你的私有 S3 存储桶,同时你可以关闭 S3 的公开访问权限。
配置查看器协议与缓存
查看器协议策略:选择 “将 HTTP 重定向到 HTTPS”(生产环境推荐强制加密)
缓存策略:对于静态网站,推荐使用 AWS 托管策略 “CachingOptimized”,它会自动设置合理的 TTL(默认 TTL 24 小时,最大 TTL 365 天)
压缩对象:建议开启,CloudFront 会自动使用 Brotli 或 Gzip 压缩文本内容(HTML、CSS、JS、JSON),可减少 50%-70% 的文件体积
配置价格等级
CloudFront 提供了三个价格等级,用于控制哪些边缘节点提供服务:
价格等级覆盖范围适用场景Price Class 100北美、欧洲、以色列用户集中在这些区域,成本最低Price Class 200Price Class 100 + 亚洲、非洲、中东用户分布较广Price Class All全球所有边缘节点追求极致全球性能
对于个人项目,Price Class 100 通常已经足够。
配置 SSL/TLS 证书
如果你暂时不使用自定义域名,可以直接使用 CloudFront 提供的默认证书。CloudFront 会为 *.cloudfront.net 域名自动启用 HTTPS,无需额外配置。
如果已有自定义域名(如 www.example.com),则需要先在 AWS Certificate Manager(ACM)中申请证书,并在分发配置中关联。
配置自定义错误响应(SPA 路由支持)
如果你的网站是单页应用(SPA),需要特别配置错误响应,否则直接访问 /about-us 这类路径时会返回 403 或 404 错误。原因是 S3 中并没有 about-us 这个文件,CloudFront 需要将这些路径映射到 index.html。
在“错误页面”选项卡中,完成以下配置:
点击 “创建自定义错误响应”
HTTP 错误码:选择 403: Forbidden
自定义错误响应:选择 “是”
响应页面路径:输入
/index.htmlHTTP 响应码:选择 200: OK
重复以上步骤,为 404: Not Found 添加相同的配置
错误缓存最小 TTL 可设置为 10 秒或 0
第四步:等待部署并测试
点击 “创建分发” 后,CloudFront 会将配置部署到全球边缘节点,状态显示为“正在部署”。
可以使用以下命令等待部署完成:
bash
aws cloudfront wait distribution-deployed --id YOUR_DISTRIBUTION_ID部署完成后,在分发详情页可以看到 “分发域名”(类似 d12345678.cloudfront.net),在浏览器中访问该地址即可看到你的网站。
第五步:更新 S3 存储桶策略(加强安全)
创建分发后,需要更新 S3 存储桶策略,仅允许 CloudFront 服务主体访问,同时可以重新启用 S3 的“阻止公开访问”设置。
以下是一个策略示例,将 YOUR_DISTRIBUTION_ID 和 YOUR_ACCOUNT_ID 替换为实际值:
json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCloudFrontServicePrincipal",
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:cloudfront::YOUR_ACCOUNT_ID:distribution/YOUR_DISTRIBUTION_ID"
}
}
}
]
}应用策略后,任何对 S3 的直接访问都会被拒绝,只有 CloudFront 能读取内容。
进阶优化技巧
当你掌握了基本配置后,可以尝试以下优化:
1. 差异化缓存策略
对于 SPA 项目,建议对不同资源采用不同缓存策略:
index.html:设置短 TTL(如 60 秒),配合stale-while-revalidate确保用户在后台更新期间能获得内容带哈希的 JS/CSS 文件:设置长 TTL(如 1 年),利用
Cache-Control: public, max-age=31536000, immutable图片资源:设置 24 小时到 7 天的缓存时间
2. 启用 Origin Shield
Origin Shield 是一个位于区域边缘的缓存层,它会整合来自多个边缘节点的回源请求,减少对源站的压力,可降低 60% 以上的回源频率。
3. 使用 Lambda@Edge 做边缘计算
Lambda@Edge 允许在边缘节点运行代码,可实现更复杂的自定义逻辑:
根据用户所在国家/地区返回不同语言的版本
检测浏览器是否支持 WebP,动态转换图片格式
修改或添加响应头
别忘了“打扫房间”
CloudFront 本身收费基于实际用量,但如果你创建的 S3 存储桶和 OAC 资源持续存在,可能会产生费用。测试完成后:
删除 CloudFront 分发:先禁用分发,待状态变为“已禁用”后再删除
删除 OAC:在 CloudFront 的“源访问控制”面板中删除
清空并删除 S3 存储桶
希望这篇教程能帮你将网站接入 CDN,让全球用户都能享受快速访问体验。CloudFront 是 AWS 生态中最成熟的服务之一,掌握它,你的云上架构能力会更上一层楼!