最近开发一个 Web 项目,在本地用 pnpm dev 调用丢到 R2 服务上的 mock 图片时,图片突然都加载失败了,网络请求全都是 ERR_BLOCKED_BY_ORB 报错。
搜了一圈,从各种要求修改 HTTP Header 的错误方案中,最后定位到是 Cloudflare 的 Hotlink Protection 功能导致的。
这个功能本质上是防盗链,而且它很容易出现在一些“一键开启保护”或者“推荐安全配置”里,被顺手勾上之后,过一阵自己都未必记得。
如果只是想先快速恢复,最直接的方式就是把它关掉。
入口路径:
对应域名 -> 安全性(Security) -> 设置(Settings) -> 热链接保护(Hotlink Protection)
注意,这个入口是在具体的 domain 下,不是在 Cloudflare 后台 landing page 的总览层。
如果不想全局关闭,也可以通过配置规则的方式处理,只对特定资源路径,或者特定调用地址放开。
在上面 热链接保护(Hotlink Protection) 这个版块中,可以直接点击 创建配置规则(Create configuration rule) 进入配置。
我这里实际配了两条规则。
| 用途 | 字段 | 运算符 | 值 |
|---|---|---|---|
| 指定子文件夹开放 | URI 完整 | 开头为 | https://{YOUR-R2-BUCKET-DOMAIN}/{SUB-FOLDER}/ |
| 本地开发环境开放 | 引用方 | 包含 | localhost |
注意,添加规则后,还需要继续拉到下面的 Hotlink 保护 区域,点击 添加,把最终出现的开关设为关闭状态,且在页面的右下角点击 部署 才可以。
请把 https://{YOUR-R2-BUCKET-DOMAIN}/{SUB-FOLDER}/ 替换成你自己的 bucket 绑定域名和想开放的子目录
hotlink-ok 文件夹Cloudflare 官方还提供了一个更简单的约定:
R2 bucket 内,任意深度的、名为 hotlink-ok 的文件夹中的文件,都会自动绕过 Hotlink Protection。
如果只是想让部分资源跳过这个保护,这种方式会更省事。更多细节可以参考官方文档:Hotlink Protection - Cloudflare Docs