如何注册 Backblaze(简称B2)对象存储

访问 Backblaze 官方网站

任意邮箱,无需银行卡、无需身份验证,可用临时邮箱随便注册。

未付费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 缓存

一共需要两步:

  1. 你需要在 B2 的桶设定中设置 {"cache-control":"public, max-age=15552000"} 来允许缓存。
  2. 你需要通过页面规则/缓存规则,配置对应的文件走缓存(默认图片就是缓存的,但是你可以额外设置,比如 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