防止CloudFlare R2被恶意刷流量的实用设置

Cloudflare R2简介

R2 是 Cloudflare 推出的对象存储服务,主打零出口费用(也就是免流量费)和与 Amazon S3 兼容的 API,适合存储大量数据且需频繁访问的场景,完美解决附件存储的痛点:

更重要的是并且 R2 的免费额度非常的大,以下是R2的核心定价和免费额度:​

流量免费,存、取等操作付费,容量付费。
免费额度及超出部分的计费方式如下:

名称 免费额度 计费套餐
存储 10GB $0.015/GB/月
A类操作 一百万次/月 $4.50/百万次
B类操作 一千万次/月 $0.36/千万次

A类操作包括:
ListBuckets、PutBucket、ListObjects、PutObject、CopyObject、CompleteMultipartUpload、CreateMultipartUpload、Lifecycle、StorageTierTransition、ListMultipartUploads、UploadPart、UploadPartCopy、ListParts、PutBucketEncryption、PutBucketCors、PutBucketLifecycleConfiguration.

B类操作包括:
HeadBucket,HeadObject,GetObject,UsageSummary,GetBucketEncryption,GetBucketLocation,GetBucketCors,GetBucketLifecycleConfiguration.

操作类别 包含的 API 解释
A 类操作 ListBuckets
PutBucket
ListObjects
PutObject
CopyObject
CompleteMultipartUpload
CreateMultipartUpload
Lifecycle
StorageTierTransition
ListMultipartUploads
UploadPart
UploadPartCopy
ListParts
PutBucketEncryption
PutBucketCors
PutBucketLifecycleConfiguration
写入、创建、修改、列举:上传对象、创建桶、分片上传、修改配置等
B 类操作 HeadBucket
HeadObject
GetObject
UsageSummary
GetBucketEncryption
GetBucketLocation
GetBucketCors
GetBucketLifecycleConfiguration
读取、查询、获取元数据:下载对象、检查桶是否存在、获取配置信息等
免费操作 DeleteObject
DeleteBucket
AbortMultipartUpload
删除操作:删除对象、删除桶、中止分片上传(完全免费,不消耗免费额度)

 

全面且有效的设置防刷

Cloudflare R2 每月有免费的读取额度,这对大多数个人和中小开发者来说已经足够。但总有一些恶意行为者会利用这个特性,不断刷请求次数,导致巨额账单。

设置防刷的三个方法:

1.开启强制缓存

2.开启防盗链

3.设置速率限制

一、开启强制缓存

设置这个主要是为了防止被刷下载次数

「域名页面」->「规则」->「页面规则」->「创建页面规则」

(页面规则免费用户每个域名页面只能创建三个比较宝贵)

防止CloudFlare R2被恶意刷流量的实用设置

 

其中:

  1. URL:https://域名.com/*​ 要带https,后面 /*
  2. 浏览器缓存 TTL:1天(按需设置)
  3. 边缘缓存TTL:1个月(如果你经常更换图片的话,可以适当降低)
  4. 缓存级别:缓存所有内容
  5. 源服务器缓存控制:添加但不开启! (开启:缓存会遵循源站规则 关闭:缓存规则由CF控制)

保存页面规则

这样缓存规则就设置完毕了!此时如果有人打你,理论上图片都是CDN缓存给的,不会走到R2对象存储。

补充:

浏览器缓存TTL的意思就是,浏览器访问过一次后,就把文件缓存到本地。
接下来一定时间内,浏览器访问这个文件都直接调用缓存。

边缘缓存TTL的意思就是,当你访问过一次后,与你直接相连的CDN节点会缓存一份文件。
接下来一定时间内,通过这个节点访问这个文件都直接调用缓存。

TTL就是缓存有效期,过期后要重新缓存。

再次补充:

启用强制缓存的另一个设置

「域名页面」->「缓存」->「 缓存规则(Cache Rules)」

创建规则并选择 Cache Everything,确保开启 Edge Cache TTL。

缓存规则(Cache Rules)可以设置10个

防止CloudFlare R2被恶意刷流量的实用设置

 

根据实际路径需求进行匹配设置:

  1. 规则名称 (必需):随意填写方便区分
  2. 自定义筛选表达式
  3. 字段:主机名、等于、img.域名.com(图床域名)
  4. 缓存资格(必需):符合缓存条件
  5. 边缘 TTL(可选):忽略缓存控制标头,使用此 TTL--输入生存时间 (TTL) (必需):1年
  6. 浏览器 TTL(可选);替代源服务器,使用此 TTL--输入生存时间 (TTL) (必需):1年
  7. 放置位置:随意

对缓存规则(Cache Rules)的缓存密钥(可选)补充:

  1. 缓存密钥(可选):忽略查询字符串-打开

防止CloudFlare R2被恶意刷流量的实用设置

缓存规则(Cache Rules)这个设置的解释:

1. 缓存欺骗盔甲 (Cache Deception Armor)
  1. 作用:安全防护选项。防止黑客利用缓存漏洞窃取网站数据(例如用户信息、后台接口返回的 JSON 数据)。

  2. 使用建议:建议默认开启。开启后,即使实际资源返回的是动态敏感数据(如 HTML/JSON/API)且请求的 URL 结尾为 .jpg 或 .css,Cloudflare 也不会缓存它,从而避免数据泄露。

2. 按设备类型缓存
  1. 作用:根据访问者的设备(电脑、手机、平板)分别缓存不同的内容。

  2. 适用场景:如果网站采用了响应式设计(即:手机端看到移动版页面,电脑端看到桌面版页面),此开关必须开启。

  3. 不开启的后果:当第一个访问者(例如使用 iPhone)请求页面后,Cloudflare 会缓存该页面。后续使用 iMac 电脑访问同一网址的人可能会看到本该属于手机的页面,导致样式错乱。

3. 忽略查询字符串
  1. 作用:完全忽略 URL 问号 ? 后面的内容,只根据主要路径缓存。

  2. 适用场景:针对静态资源(图片、CSS 文件、JS 文件)。例如 /logo.png?v=1 和 /logo.png,对服务器来说通常是同一张图片。

  3. 不适用场景:针对动态页面或 API。例如电商网站的搜索 /shop?keyword=冰箱 和 /shop?keyword=空调 必须区分开,因此不建议开启此选项。

4. 对查询字符串排序
  1. 作用:只在乎参数的含义,不在乎参数的顺序。

  2. 适用场景:当 URL 的参数顺序被 JS 或爬虫随机打乱时。

  3. 结果示例:开启此选项后,/product?size=M&color=red 和 /product?color=red&size=M 这两个 URL 被视为完全一样的对象,共用同一个缓存。

二、开启防盗链

防盗链的意思就是,只能通过你的域名,访问你的资源域名。
比如我只允许从我博客a.abc.com访问我的图床img.abc.com

这一步其实对防故意刷请求没什么用,但是可以防止别人搬你文章时,把图片链接直接搬过去。
这样你的图床就可以不用承担别人网站的访问了。

前往 「域名页面」->「安全性」->「安全规则」,「创建规则」

防止CloudFlare R2被恶意刷流量的实用设置

其中:

  1. 主机名:等于,img.你的域名.com (图床域名)
  2. And:右边添加一个 And(需要几个就添加几个)
  3. 引用方:不包含,www.你的域名.com(你的网站域名)
  4. 采取措施...:阻止

也就是说

引用方只要不包含 www.你的域名.com(你的网站域名)And(你需要多少就添加多少)

就会被阻止

三、设置速率限制

通过设置速率限制防止大量的恶意请求:

选择「域名页面」->「安全性」->「安全规则」->「速率限制规则」->「创建规则」

(速率限制免费用户每个域名页面只能创建一个非常宝贵)

防止CloudFlare R2被恶意刷流量的实用设置

​其中:

  1. 规则名称:随意
  2. 字段:URL路径、包含、/​
  3. 当速率超过...:100​,10秒钟
  4. 然后采取措施…:阻止

这里重点是【当速率超过...】这个选项,推荐100甚至更多一点,不建议填写太低,很容易误伤;意思是同一个 IP 10 秒内请求超过多少张图片,就触发操作(按照你站点图片情况设置)

给TA打赏
共{{data.count}}人
人已打赏
技术

OpenList的搭建与挂载网盘

2026-5-13 13:56:20

技术

让Linux机器的时间永远停留在固定一个时间

2026-6-15 5:00:09