目录
如何注册 Backblaze(简称B2)对象存储
任意邮箱,无需银行卡、无需身份验证,可用临时邮箱随便注册。
未付费1刀开通权限的情况下不能创建公开桶,只能私有桶,但是没啥影响,只是要套一层worker而已。
免费额度
免费账号不会欠费,到额度直接403/404,时间到了就恢复。
免费账号支持10GB存储、每天2500次B类操作+每天2500次C类操作。
操作类型
- A类: S3 的 Put Object、Delete Object 等
- B类: S3 的 S3 Get Object、Head Object 等
- C类: S3 的 List Objects、List Buckets 等
使用 Wrangler 推送 Worker 实现 B2 私有桶对接 CloudFlare
我猜还可以用通用 worker 代理反代 endpoint 实现流量走 cf,然后可接入 rclone/alist 实现免流量然后再拿出来用。
安装 Wrangler
用 NPM 安装,没有的自行找 Nodejs 安装器:
npm i -g wrangler
然后登录 CF:
wrangler login
准备仓库资源
克隆仓库 cloudflare-b2
或下载文件包 cloudflare-b2.zip
配置 wrangler.toml
有这些要改:
name = "你的worker前缀,比如b2"
B2_APPLICATION_KEY_ID = "XXXX"(KEY的ID,末尾为自增数值)
B2_ENDPOINT = "s3.us-west-004.backblazeb2.com"(看桶信息)
BUCKET_NAME = "桶名字"
新增 B2_APPLICATION_KEY = "XXXX"
准备依赖
npm install
如果出现 aws4fetch 异常,还需要在对应的目录安装 aws4fetch 包:
npm i aws4fetch
部署
执行以下命令进行部署:
wrangler publish
或者
wrangler deploy
CloudFlare 进阶技巧
如何屏蔽列出目录
wrangler.toml
中的 ALLOW_LIST_BUCKET = "false"
默认是开的。
如何配置 CloudFlare CDN 缓存
一共需要两步:
- 你需要在 B2 的桶设定中设置
{"cache-control":"public, max-age=15552000"}
来允许缓存。 - 你需要通过页面规则/缓存规则,配置对应的文件走缓存(默认图片就是缓存的,但是你可以额外设置,比如 200 缓存 1 年,403/404 就 1 个小时)。配好后等 10 分钟刷几次图片,显示状态为 HIT 而不是 Bypass/MISS 就没问题了。
如何配置 CloudFlare Worker 路由到域名
把文件放在桶的根路径或者一级文件夹或者更多(要求匹配,否则你要改 JS),比如 我是一级文件夹 /Random-IMG-AVIF 目录下,然后把你的域名的某个路径(也可以根)路由到目标,要求路径匹配,比如 https://imgcdn.000714.xyz/Random-IMG-AVIF/2020S5_1629.avif
就是访问桶 /Random-IMG-AVIF/2020S5_1629.avif。
Rclone 进阶技巧
因为 B2 对于 B 类操作限制严格,无法承载常规的 Rclone 并发调用,需要特调。
上传命令参考:
rclone copy "H:\Cache\7z\Random-IMG-AVIF-20240220-PKG" "oss:b2/Random-IMG-AVIF" --ignore-existing -vvP --checkers=8 --transfers=8 --fast-list --s3-no-head --s3-disable-checksum --s3-no-check-bucket --s3-no-head-object --no-check-dest
一般能绕开 Head,如果没成功就重复再来一次。
这个强制上传可能导致文件有多个版本,清理版本用这个(A类的Put/Delete操作,免费无限):
rclone backend cleanup-hidden "oss:b2/Random-IMG-AVIF" -vvP --fast-list
清空桶可用这个:
rclone cleanup "oss:b2/Random-IMG-AVIF" -vvP --fast-list
Comments NOTHING