使用 Backblaze B2 + Cloudflare + PicGO 搭建免费图床
简介
Backblaze B2 是一个云存储解决方案,类似于Amazon AWS S3, 前 10GB 存储是完全免费的,通常情况下,像使用 AWS S3 这类的服务,带宽费用特别高。不过,由于有了 Bandwidth Alliance(带宽联盟),Backblaze 到 Cloudflare 之间的出口是完全免费的。
Backblaze B2有一个免费套餐,它可以让你享受以下优惠:
- 10GB的存储容量,足够您存放一些重要的文件或者媒体资料。
- 每天1GB的流量,可以让您方便地上传和下载数据,或者通过网络浏览文件。
- S3兼容的API,可以让您轻松地将Backblaze B2集成到您的应用程序或者服务中。
- 支持多种工具和软件,例如Cloudflare CDN、Veeam备份、NAS设备等,可以让您提高数据的安全性、可用性和传输速度。
即使超出了免费额度,Backblaze B2也只会收取非常低的费用:
- 每月$0.005/GB的存储费用,比Amazon S3和Microsoft Azure便宜80%以上。
- 每月$0.01/GB的下载费用,比Amazon S3和Microsoft Azure便宜88%以上。
Backblaze配置
1.登录 Backblaze B2(可以直接使用 Google 帐号);
2.创建一个公开的存储桶(Bucket)并上传文件;

3.在存储桶设置的桶信息中写入 {"cache-control":"max-age=720000"},设置缓存控制时间;
4.通过查看文件详细信息获得文件地址并复制备用,如;
https://f004.backblazeb2.com/file/<存储桶名称>/<文件夹名称>/<文件名称>

Cloudflare配置
5.登录 Cloudflare;
6.在某域名下(如果没有就注册一个,或者转入一个)进入 SSL/TLS,确保 Cloudflare 以 FULL 模式对源使用 SSL(Backblaze B2 仅支持 HTTPS 连接);

7.在同域名下新建一条 CNAME 解析,创建一个该域名的子域,目标地址 f004.backblazeb2.com(与文件详细中的文件地址域名相同);
配置Page Rule缓存
8.配置Page Rule缓存可以降低对backblaze的访问,在同域名下的 Rules > Page Rules 中配置页面规则以仅允许从您的域中获取您的存储桶;
https://<解析的域名>/* # 设置:缓存级别 - 缓存所有内容

重写URL
9.因为桶名暴露在公共下比较危险,容易让别人滥用流量。于是可以通过cloudflare进行URL重写。点击规则-转换规则-重写URL,添加一个规则,在同域名下的 Rules > transform Rules 中配置转换规则以隐藏存储桶名称,我们需要添加的规则为:当路径为/file/bucket_name,且主机名为你刚才的二级域名时,重写。
条件
http.request.uri.path ne "/file/{bucketName}" and http.host eq "{your_domain}"
重写
concat("/file/{bucketName}",http.request.uri.path)
例如:

这里的配置实现了{your_domain}/xxx.jpg -> https://f004.backblazeb2.com/file/{bucketName}/xxx.jpg 的转换,既不会暴露自己的桶名称,还缩短了 URL。
picgo配置
Picgo 是一个开源的图片上传工具,它可以让你方便地将图片上传到各种图床服务,包括 Backblaze B2(有 s3 插件支持)。Picgo 支持 Windows、MacOS 和 Linux 系统,它有一个简洁的界面和丰富的插件。你可以通过快捷键、拖拽、剪贴板等方式上传图片,也可以对图片进行压缩、裁剪、水印等处理。Picgo 还可以自动生成图片的 URL 和 Markdown 代码,方便你在网上引用图片。
PicGO的下载地址:https://github.com/Molunerfinn/PicGo/releases
PicGo Amazon S3 上传插件: https://github.com/wayjam/picgo-plugin-s3
10.在Backblaze的控制面板找到左侧的Application Keys,然后拉下来添加一个新key,找到密钥ID和密钥复制填入到PicGo就可以使用PicGo愉快的上传图片了
"aws-s3": {
"accessKeyID": "002a03abebexample000002",
"acl": "public-read",
"bucketName": "example",
"endpoint": "s3.example.backblazeb2.com",
"pathStyleAccess": false,
"region": null,
"rejectUnauthorized": false,
"secretAccessKey": "K0028example96r7wtlblUQ",
"uploadPath": "PicGo/{fullName}",
"urlPrefix": "https://cdn.example.cn"
},

浙公网安备 33010602011771号