534 字
3 分钟
将Backblaze B2对象存储经过Cloudflare CDN下载文件免出口费用

Backblaze B2 + Cloudflare CDN 下载文件配置#

目标#

使用 Backblaze B2 作为源站存储,通过 CloudflareWorkers实现低成本、可缓存、支持大文件与断点续传的下载站。

最终访问形式: https://dl.example.com/file.txt#

架构说明#


Backblaze B2 配置#

1. 注册Backblaze并创建 Bucket#

前往Backblaze注册,注册后来到B2Cloud Storage创建桶:

B2 Cloud Storage → Buckets → Create a Bucket

  • Bucket Name: 任意

  • Bucket Type: Public

公开访问需要支付1美元(后续创建其他桶无需支付)

2. 上传文件#

上传任意示例文件,例如:file.txt

查看分配的友好URL域名#

点击任意桶中文件的属性,查看友好URL,下面会写到CNAME和Worker中

Cloudflare DNS 配置#

在Cloudflare添加 CNAME 记录:

dl.example.com(你的域名) → f004.backblazeb2.com(你的友好URL域名)启用橙云代理(必须)


Cloudflare Worker#

创建一个HelloWorld示例,将下面的代码全选并覆盖默认的内容,需要更改test为自己的桶名,https://f004.backblazeb2.com 替换为获得的“友好 URL”域名:

export default {
  async fetch(request) {
    const url = new URL(request.url)
    const B2_ORIGIN = "https://f004.backblazeb2.com"
    const BUCKET = "test"
    const target = `${B2_ORIGIN}/file/${BUCKET}${url.pathname}`
    //cache
    return fetch(target, {
      cf: {
        cacheEverything: true,
        cacheTtl: 60 * 60 * 24 * 7
      }
    })
  }
}

绑定路由到刚才的CNAME域名:

例如 dl.example.com/*


缓存验证#

Terminal window
curl -I https://dl.example.com/file.txt

第一次请求应返回: CF-Cache-Status: MISS 第二次请求应返回: CF-Cache-Status: HIT


Cloudflare Cache Rules兜底(可选)#

Worker内部的配置优先级高于Cache Rules,此步骤非必须

域名 -> 规则 -> 概述 -> Cache Rules

如果传入请求匹配…自定义筛选表达式
当传入请求匹配时…主机名 等于 你的自定义域名(CNAME、路由)
缓存资格符合缓存条件
边缘 TTL(添加)忽略缓存控制标头,使用此 TTL 7天
浏览器 TTL(添加)替代源服务器,使用此 TTL 1天

最终你获得了什么#

B2 出口流量费用:0

支持:

  • 大文件
  • HTTP Range / 断点续传
  • 多线程下载

桶名 / 文件信息不暴露

将Backblaze B2对象存储经过Cloudflare CDN下载文件免出口费用
https://www.xie.today/posts/cloudflaretob2/
作者
RATING3PRO
发布于
2026-01-13
许可协议
CC BY-NC-SA 4.0

评论