防止阿里云oss被刷
本文适用于把图片放在对象存储(阿里云 OSS、Backblaze B2 等)并开启公开读的场景。你会学到:隐藏 bucket 特征(文件列表、响应标头)、配置错误页,以及通过 Cloudflare 缓存规则降低被刷成本。
S3 协议的 bucket 在公开读的权限下会默认展示桶内文件列表和路径,特征明显而且并不友好。
隐藏Bucket特征
设置错误页
绝大多数的对象存储都支持设置静态网站 index.html 和错误页 404.html 的设置,比如阿里云 OSS 在【基础设置】-【静态页面】下。这里随手找了两个单页供选择和参考(点击前往)。

显然,像 B2 这种简单粗暴的又一次是没有这样的功能,可以如图使用 URL 重写规则将主页静态定向至 index.html。404 页面的功能没有一个比较好的办法,不过 B2 的友好访问链接不会展示目录列表和 bucket 信息,影响并不大。

隐藏bucket标头
在对象存储的标头中会包含有一些 bucket 信息,可以通过控制台的 Network 选项卡暴露出来,也是对对象存储特征的一个暴露点。

通过 CloudFlare 转换规则中的【修改响应头】,能够简单地实现响应头的去除,同时还可以加入跨域请求头等需要的标头。

目前 B2 和 OSS 可以隐藏的标头大致如下,其他对象存储请根据实际情况去查看和配置,在此就不一一列出了。
| 阿里云OSS | Backblaze B2 |
|---|---|
| x-oss-hash-crc64ecma | x-bz-content-sha1 |
| x-oss-object-type | x-bz-file-id |
| x-oss-request-id | x-bz-file-name |
| x-oss-server-time | x-bz-info-src_last_modified_millis |
| x-oss-storage-class | x-bz-upload-timestamp |
配置缓存规则
通过 Cloudflare 配置对象存储的缓存规则,命中缓存的请求不会回源,从而减少被刷时的源站费用:




验证与自查
- 浏览器直接访问 bucket 域名根路径,显示的是
index.html而非文件列表 - 访问一个不存在的路径,返回的是自定义
404.html - 浏览器 DevTools → Network 检查响应头,
x-oss-*/x-bz-*标头已消失 - 同一图片二次访问时命中 Cloudflare 缓存(响应头出现
cf-cache-status: HIT)