Backblaze B2 + Cloudflare Workers搭建免费图床,站长零成本图片托管方案

对于站长来说,图片托管一直是一个绕不开的问题。直接用服务器存图片,带宽和存储成本不低;用第三方图床,又担心跑路或限制。今天介绍一个在Hacker News上被反复推荐的方案:Backblaze B2 + Cloudflare Workers,可以实现接近零成本的图片托管。

方案原理

这个方案的核心是利用两个服务的免费额度和互补特性:

  • Backblaze B2:对象存储服务,类似AWS S3,但价格便宜得多。免费额度包括10GB存储每天2500次下载(Class B)
  • Cloudflare Workers:边缘计算平台。免费额度包括每天10万次请求,而且Cloudflare到Backblaze的流量不收费(通过Bandwidth Alliance)

简单来说:图片存在Backblaze B2里,通过Cloudflare Workers代理访问,流量几乎免费。

搭建步骤

第一步:注册Backblaze B2

  1. 访问 Backblaze官网,注册账号
  2. 创建一个Bucket(存储桶),名称随意,建议设置为Public方便访问
  3. 在App Keys页面创建一个Application Key,记录下keyIDapplicationKey

第二步:上传图片

可以通过Backblaze网页端上传,也可以用CLI工具:

# 安装B2 CLI
pip install b2

# 登录
b2 authorize-account <keyID> <applicationKey>

# 上传文件
b2 upload-file <bucket-name> ./image.jpg image.jpg

上传后,图片会有一个类似这样的URL:

https://f000.backblazeb2.com/file/bucket-name/image.jpg

第三步:配置Cloudflare Workers

这是实现免费流量的关键。Cloudflare和Backblaze之间有Bandwidth Alliance协议,两者之间的数据传输完全免费。

  1. 将你的域名添加到Cloudflare
  2. 创建一个Worker,代码如下:
export default {
  async fetch(request) {
    const url = new URL(request.url);
    const b2Bucket = 'your-bucket-name';
    const b2Url = `https://f000.backblazeb2.com/file/${b2Bucket}${url.pathname}`;
    
    // 从B2获取图片
    const response = await fetch(b2Url, {
      headers: request.headers
    });
    
    // 返回图片,加上缓存头
    const newResponse = new Response(response.body, response);
    newResponse.headers.set('Cache-Control', 'public, max-age=31536000');
    newResponse.headers.set('CDN-Cache-Control', 'max-age=31536000');
    
    return newResponse;
  }
}

第四步:配置路由

在Worker的Settings中添加路由,将图片请求转发到Worker:

img.yourdomain.com/*

配置完成后,你的图片可以通过以下URL访问:

https://img.yourdomain.com/image.jpg

成本分析

项目 Backblaze B2免费额度 Cloudflare免费额度
存储 10GB
下载(Class B) 每天2500次
上传(Class C) 每天2500次
请求数 每天10万次
流量 与Cloudflare之间免费 无限(对B2免费)

对于中小型个人网站来说,这个免费额度完全够用。超出免费额度后,Backblaze B2的价格也比AWS S3便宜很多:存储$0.005/GB/月,下载$0.01/GB。

适合谁

  • 个人博客/小站:图片不多,免费额度完全够用
  • 开源项目文档:README和文档中的图片托管
  • 小型电商/作品集:产品图、作品展示图
  • 需要自定义域名图床的站长:不想依赖第三方图床域名

注意事项

  • Backblaze B2的免费额度是每天计算的,不是每月。如果某天流量暴增,超出部分按量计费
  • 建议给Worker加上防盗链逻辑,防止其他人盗用你的图床
  • 重要图片建议做好备份,不要把所有鸡蛋放在一个篮子里
  • 国内访问Backblaze的速度一般,如果主要面向国内用户,可以考虑加一层国内CDN
  • Cloudflare Workers免费版有CPU时间限制(每次请求10ms),对于简单的图片代理足够了

本文参考来源:Free Personal Image Hosting with Backblaze B2 and Cloudflare Workers | Hacker News讨论

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容