AWS S3全链路CDN加速实战

当你使用AWS的S3存储桶,而你的用户分布在国内乃至全球时,直连下载的等待足以劝退大量访客。我们通过一次配置,将文件下载速度从6秒优化到1秒,第二次访问甚至能快7倍。本文不堆砌概念,只记录从创建CloudFront分配、配置OAC、解决SSL证书坑、到最终在Cloudflare上正确设置DNS的全过程。如果你也正被跨国访问速度困扰,这篇文章或许能帮你少走几步弯路。

📋 完整配置流程总结

🚀 阶段一:创建 CloudFront 分配(AWS 控制台)
  1. 进入 CloudFront → 点击“创建分配”
  2. 选择套餐:选择「免费」套餐(无月租,按量付费)
  3. 配置分配名称Distribution name:如 s3-cdn,Domain输入自定义域名:如 s3.example.com
  4. 配置源站(Origin)
    • 源域名S3 origin(AWS的S3域名):xxx.s3.us-east-1.amazonaws.com
    • 创建 OAC(源站访问控制),并记录 OAC ID
  5. 配置备用域名和证书(可先跳过,稍后配置)
  6. 点击创建,记录分配的 CloudFront 域名(如 xxx.cloudfront.net

🔐 阶段二:申请 SSL 证书(AWS ACM)
  1. 切换到需要使用的区域
  2. 进入 Certificate Manager (ACM) → 请求公有证书
  3. 添加自定义域名
  4. 选择 DNS 验证,生成验证用的 CNAME 记录
  5. 暂不颁发,等待 Cloudflare DNS 配置完成后自动验证

🌐 阶段三:配置 DNS(Cloudflare)
  1. 登录 Cloudflare,进入自己的 example.com 域名
  2. 添加两条 CNAME 记录(代理状态必须为 灰色云朵,即“仅 DNS”):
    SSL验证在AWS Certificate Manager上,类型CNAME,名称和值按照上面提供的填写
    流量指向在CloudFront上,类型CNAME,名称填s3,内容填xxx.cloudfront.net
  3. 等待 1-2 分钟,回到 ACM 刷新,证书状态变为 “已颁发”

🔗 阶段四:关联域名与证书(CloudFront)
  1. 进入 CloudFront 分配详情页 → Add domain

  2. 备用域名:添加 s3.example.com

  3. 自定义 SSL 证书:选择 ACM 中已颁发的证书

  4. 保存,等待分配状态变为 “已部署”(约 2-5 分钟)


🛡️ 阶段五:配置 S3 存储桶策略
  1. 进入 S3 控制台,找到使用的存储桶
  2. 权限 → 存储桶策略 → 编辑,添加以下策略(替换分配 ID 和账号 ID):
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowCloudFrontServicePrincipal",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::桶名/*",
            "Condition": {
                "ArnLike": {
                    "AWS:SourceArn": "arn:aws:cloudfront::[你的账号ID]:distribution/[你的分配ID]"
                }
            }
        }
    ]
}

注意:如果你需要保留公共匿名访问,可以额外添加 "Principal": "*" 的语句,但生产环境建议只保留 OAC 策略。


✅ 阶段六:验证与配置生效
  1. 验证 SSL

    curl -v https://s3.example.com/test.txt
    

    预期返回 SSL certificate verify ok.

  2. 验证访问

    curl -o /dev/null -s -w "Time_total: %{time_total}s\n" \
    https://s3.example.com/你的文件路径
    

    预期返回 200 OK,且第二次请求(缓存命中)速度大幅提升。

  3. 速度对比

curl -o /dev/null -s -w "Time_total: %{time_total}s\nSpeed: %{speed_download} B/s\n" \
https://s3地址/文件路径

curl -o /dev/null -s -w "Time_total: %{time_total}s\nSpeed: %{speed_download} B/s\n" \
https://自定义加速地址/文件路径

🧭 整体架构流程图

用户请求

Cloudflare DNS

CloudFront 边缘节点

缓存命中?

直接返回缓存

通过 OAC 回源

S3 存储桶

返回文件并缓存到边缘节点


📌 关键注意事项

要点说明
Cloudflare 代理必须关闭使用灰色云朵(仅 DNS),否则 SSL 证书验证会失败
ACM 证书CloudFront 证书
S3 存储桶策略必须允许 CloudFront 的 OAC 服务访问,否则会返回 403
缓存 TTL默认 5 分钟,可根据文件类型调整

🎯 最终效果

  • 国内用户访问速度从 ~6 秒 降低到 ~1.3 秒(提升约 78%)
  • 缓存命中后,速度可达首次的 2-7 倍
  • 全球用户都能从就近的边缘节点获取文件,体验显著提升

整个流程的核心就是:用 CloudFront 作为 S3 的“全球缓存层”,通过 OAC 安全访问私有桶,再配合自定义域名和 SSL 证书,最终实现安全、快速的静态资源分发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值