Skip to content

Cloudflare R2 免费版防超额完全指南

一、免费额度与限制

Cloudflare R2 为所有用户提供慷慨的免费额度,即使企业用户也可以免费开始使用 R2。免费额度每月重置,以下是详细说明:

1.1 免费额度一览表

项目免费额度
存储空间10 GB/月
Class A 操作(写入类)100 万次请求/月
Class B 操作(读取类)1000 万次请求/月
出站带宽(Egress)完全免费,无限制

1.2 操作类型说明

Class A 操作(写入/修改类,成本较高):

  • PutObject(上传对象)
  • CopyObject(复制对象)
  • ListObjects(列举对象)
  • ListBuckets(列举存储桶)
  • CreateMultipartUpload(创建分片上传)
  • UploadPart(上传分片)
  • CompleteMultipartUpload(完成分片上传)
  • PutBucketLifecycleConfiguration(设置生命周期)

Class B 操作(读取类,成本较低):

  • GetObject(下载/读取对象)← 这是最容易超额的操作
  • HeadObject(获取对象元数据)
  • HeadBucket(获取存储桶信息)

免费操作(不计入额度):

  • DeleteObject(删除对象)
  • DeleteBucket(删除存储桶)
  • AbortMultipartUpload(取消分片上传)

1.3 重要说明

  • 免费额度仅适用于标准存储(Standard Storage),不适用于低频访问存储(Infrequent Access Storage)
  • 存储计费采用 GB-month 计量方式,按 30 天内每天存储峰值的平均值计算
  • 出站带宽(Egress)完全免费,这是 R2 相比 AWS S3 最大的优势

二、超额后如何计费

当免费额度用尽后,将按照以下标准计费:

2.1 标准存储超额价格

项目超额价格
存储空间$0.015 / GB-月
Class A 操作$4.50 / 百万次请求
Class B 操作$0.36 / 百万次请求
出站带宽免费

2.2 计费示例

示例 1:小型图床网站

假设你有 100,000 个文件,平均大小 100KB,每天读取 10,000,000 次:

项目用量免费额度计费数量费用
存储100,000 × 100KB ≈ 10GB10GB0GB$0.00
Class A100,000 次写入100 万0$0.00
Class B10,000,000 × 30天 = 3亿次1000 万2.9 亿次$104.40
合计$104.40

示例 2:正常使用

存储 5GB 文件,每月读取 500 万次:

项目用量免费额度计费数量费用
存储5GB10GB0GB$0.00
Class A1 万次100 万0$0.00
Class B500 万次1000 万0$0.00
合计$0.00

2.3 计费规则

  • 向上取整:Cloudflare 会对用量向上取整
    • 存储 1.1 GB 按 2 GB 计费
    • 操作 1,000,001 次按 2,000,000 次计费
  • 未授权请求不计费:返回 HTTP 401 的请求不会被计费
  • 免费操作不计费:删除操作完全免费

三、防止超额的方法

3.1 方法一:设置缓存规则(最重要)

缓存是最有效的防超额手段。通过设置缓存,用户的请求会从 CDN 缓存或浏览器缓存获取资源,而不是每次都访问 R2 存储桶,从而大幅减少 Class B 操作次数。

3.1.1 设置页面规则(Page Rules)

操作路径:Cloudflare Dashboard → 你的域名 → 规则 → 页面规则

创建规则

  1. 点击「创建页面规则」
  2. URL 填写:img.yourdomain.com/*(替换为你的 R2 自定义域名)
  3. 添加以下设置:
设置项推荐值说明
缓存级别缓存所有内容确保所有资源都被缓存
浏览器缓存 TTL8 小时用户浏览器本地缓存时间
边缘缓存 TTL1 个月CDN 边缘节点缓存时间

原理

  • 浏览器缓存:用户访问后,资源保存在浏览器本地,再次访问直接使用本地文件
  • 边缘缓存:资源缓存在最近的 CDN 节点,其他用户访问时从 CDN 获取,不回源到 R2

3.1.2 设置缓存规则(Cache Rules)

操作路径:Cloudflare Dashboard → 你的域名 → 规则 → 缓存规则

可以创建更精细的缓存规则,例如:

  • 针对图片文件(.jpg, .png, .gif, .webp)设置更长的缓存时间
  • 针对 CSS/JS 文件设置适当的缓存策略

3.1.3 效果预估

设置缓存后,假设缓存命中率达到 95%:

  • 原本 1000 万次请求 → 实际回源到 R2 的只有 50 万次
  • 大幅降低 Class B 操作消耗,轻松控制在免费额度内

3.2 方法二:WAF 设置速率限制

通过 WAF(Web 应用防火墙)的速率限制功能,可以防止恶意刷流量和 DDoS 攻击。

3.2.1 创建速率限制规则

操作路径:Cloudflare Dashboard → 你的域名 → 安全性 → WAF → 速率限制规则

推荐配置

设置项推荐值说明
规则名称R2 访问限速自定义名称
匹配条件URI Path 包含 / 或特定路径匹配 R2 资源路径
计数特征IP 地址按 IP 统计请求次数
速率限制100 次请求 / 1 分钟根据实际业务调整
采取操作拦截(Block)超限时阻止访问
持续时间1 分钟超限后阻止的时间

3.2.2 进阶配置

针对特定文件类型限制

表达式:

(http.request.uri.path contains ".jpg" or http.request.uri.path contains ".png") and (not ip.src in $trusted_ips)

按 Referer 限制

表达式:

not http.request.uri.path contains "/public/" and (not http.referer contains "yourdomain.com")

3.2.3 免费版限制

需要注意的是,Cloudflare 免费版的 WAF 速率限制规则有一定限制:

  • 免费版只能创建 1 条 速率限制规则
  • 部分高级特征(如按 Cookie 计数)需要付费版

建议将最严格的规则用在最容易被攻击的路径上。


3.3 方法三:设置图片防盗链

防盗链可以防止其他网站直接引用你的 R2 资源,避免被恶意盗用产生大量请求。

3.3.1 通过 WAF 自定义规则实现

操作路径:Cloudflare Dashboard → 你的域名 → 安全性 → WAF → 自定义规则

创建防盗链规则

设置项
规则名称R2 防盗链
表达式见下方
操作拦截(Block)

表达式(只允许指定域名访问):

(http.request.uri.path contains "/r2/" or http.request.uri.path contains "/img/") and not (http.referer contains "yourdomain.com" or http.referer contains "yourdomain2.com" or http.referer eq "")

说明

  • http.referer contains "yourdomain.com":允许来自你网站的请求
  • http.referer eq "":允许直接访问(无 Referer 头),某些场景下需要保留

3.3.2 通过 Transform Rules 实现

操作路径:Cloudflare Dashboard → 你的域名 → 规则 → 转换规则 → 修改请求头

可以添加自定义逻辑,在 Referer 不匹配时返回 403 错误。

3.3.3 防盗链注意事项

  • 防盗链是「防君子不防小人」,Referer 头可以被伪造
  • 对于防止普通盗图、文章爬虫已经足够有效
  • 建议配合其他方法一起使用

3.4 方法四:使用自定义域名

使用自定义域名(而非 R2.dev 默认域名)有以下优势:

3.4.1 好处

  1. 可控性强:出现问题可以随时断开域名与 R2 的关联
  2. 缓存支持:自定义域名才能使用 Cloudflare 的完整缓存功能
  3. 防盗链:需要自定义域名才能设置 Referer 防盗链
  4. 品牌形象:使用自己的域名更专业

3.4.2 设置方法

  1. 将域名托管到 Cloudflare
  2. 进入 R2 控制台 → 选择存储桶 → 设置 → 自定义域名
  3. 输入你的子域名(如 img.yourdomain.com
  4. Cloudflare 会自动添加 DNS 记录

3.5 方法五:合理使用对象生命周期

通过设置对象生命周期规则,自动管理存储空间。

3.5.1 设置方法

操作路径:R2 Dashboard → 选择存储桶 → 设置 → 生命周期规则

3.5.2 常用规则

规则说明适用场景
删除 x 天后未访问的对象自动清理长期未使用的文件临时文件、缓存
转换到低频访问存储降低存储成本归档数据
删除特定前缀的对象批量清理特定目录日志、临时上传

3.5.3 注意事项

  • 低频访问存储(Infrequent Access)不享受免费额度
  • 低频存储有最短 30 天的存储计费
  • 建议使用标准存储并配合缓存,而非使用低频存储

3.6 方法六:监控与告警

3.6.1 查看使用量

操作路径:R2 Dashboard → 概览

可以查看:

  • 当月存储用量
  • Class A / Class B 操作次数
  • 费用预估

3.6.2 设置通知

操作路径:Cloudflare Dashboard → 通知

可以设置以下告警:

  • 费用超过阈值时通知
  • 操作次数接近免费额度时通知

3.6.3 使用 Cloudflare Analytics

通过分析面板监控:

  • 热门资源排行
  • 请求来源分析
  • 缓存命中率

四、最佳实践总结

4.1 推荐配置清单

优先级配置项作用
⭐⭐⭐设置页面规则缓存大幅减少回源请求
⭐⭐⭐使用自定义域名启用完整缓存和防护功能
⭐⭐设置 WAF 速率限制防止恶意刷流量
⭐⭐设置防盗链规则防止资源被盗用
设置通知告警及时发现异常情况

4.2 免费额度够用吗?

适合免费额度的场景

  • 个人博客图床(图片数量 < 5000 张)
  • 小型企业官网
  • 个人项目、测试环境
  • 配置了缓存的中小型网站

可能需要付费的场景

  • 大型图片分享网站
  • 高流量的文件下载站
  • 未配置缓存的热门网站
  • 被恶意攻击的网站

4.3 关键提醒

  1. 缓存是第一道防线:95% 的请求应该由缓存处理
  2. 监控是必要的:定期查看 R2 使用量面板
  3. 不要过度依赖防盗链:Referer 可以被伪造
  4. 删除操作免费:不需要担心清理文件产生费用
  5. 出站流量免费:R2 的最大优势就是没有 Egress 费用

五、参考资料

Released under the 如意开源许可协议.