Note
该项目基于 backblaze-b2-samples/cloudflare-b2 二创。
功能
- 代理 Backblaze B2 S3 兼容 API 请求
- 自动为请求添加认证签名
- 支持 GET 和 HEAD 请求方法
- 支持桶名通过路径或主机名传递
效果:私有桶链接实现公开化,并通过 cloudflare 代理 100% 省去流量
1 克隆项目,安装依赖
pnpm install2 将配置模板复制到实际配置文件
cp wrangler.toml.template wrangler.toml编辑 wrangler.toml 文件,配置以下参数
name = "cloudflare-b2"
workers_dev = true
compatibility_date = "2023-09-04"
main = "index.js"
[vars]
B2_APPLICATION_KEY_ID = "<your b2 application key id>"
B2_ENDPOINT = "<your endpoint - e.g. s3.us-west-001.backblazeb2.com >"
BUCKET_NAME = "<your bucket name, $path, or $host>"
ALLOW_LIST_BUCKET = "<true or false>"
RCLONE_DOWNLOAD = "<true or false>"1 编辑 .dev.vars 文件,添加 B2 密钥:
cp .dev.vars.template .dev.vars
vi .dev.vars
B2_APPLICATION_KEY = "<your b2 application key>"2 运行 cp .dev.vars.template .dev.vars ,并填入密钥
3 登录 Cloudflare:wrangler login,构建并部署
wrangler build
wrangler deploy当服务器返回这个响应头时,它在告诉所有接收到该资源的缓存系统:这个资源可以被任何人(public)缓存起来,并且在接下来的 24 小时(max-age=86400)内,它都是有效的、新鲜的。在这 24 小时内,请直接使用缓存的版本,不必来问服务器。
{"cache-control":"public, max-age=86400"}
一二步做完后,将如上代码复制到桶信息,至此所有配置工作已全部完成,并以部署的 worker 完成测验,测试效果如“功能及效果”标题内容所示。
- 不要将
B2_APPLICATION_KEY直接存储在配置文件中,应使用wrangler secret put命令设置 - 确保 B2 存储桶设置了适当的缓存控制头
- 该 Worker 只支持 GET 和 HEAD 请求方法
- 如果使用自定义域名,需要在 Cloudflare 控制台配置路由或自定义域
由于 Cloudflare 和 Backblaze 都属于 Bandwidth Alliance(带宽联盟),因此从 Cloudflare 回源到Backblaze B2(即“入口流量”)也是完全免费的。
简单来说,这套方案的免费流量模式是:
- 出口流量免费:Backblaze B2 → Cloudflare CDN
- 入口流量免费:Cloudflare CDN → Backblaze B2
flowchart TD
User[“用户访问<br>img.yourdomain.com/xxx.jpg”]
subgraph Cloudflare [Cloudflare CDN]
direction LR
CF_Cache[边缘节点缓存]
end
subgraph Backblaze[Backblaze B2]
B2_Storage[“存储桶<br>(源站)”]
end
User --> Cloudflare
CF_Cache -- “❌ 缓存未命中<br>入口请求:免费(带宽联盟)” --> B2_Storage
B2_Storage -- “✅ 回源响应<br>出口流量:免费(带宽联盟)” --> CF_Cache
CF_Cache -- “✅ 缓存命中<br>无流量费用” --> User
