使用Backblaze B2和Cloudflare作为免费图床

发布于 2022-06-20  9730 次阅读


B2是Backblaze提供的一个OSS存储服务,有着10G的免费容量以及每天1G的免费流量。而且他还是Cloudflare带宽联盟的成员,通过Cloudflare传输Backblaze中的内容是完全免费的。即使在超出免费额度的情况下,$0.005 GB/Mo的的容量和$0.01 GB/Mo的流量价格比起其他存储服务的价格也十分便宜。

有许多其他文章也介绍了如何使用B2和CF作为免费图床,但现在CF有了新的转换规则功能,和其他文章使用的Worker和页面规则比起来,转换规则提供了更多的免费条目,也更易于使用。

当然用来作为网盘也可以,不过10G就不太够用了。

要求

首先需要注册Backblaze B2和Cloudflare的账号,其次需要一个域名,现在Cloudflare就提供域名购买,也可以从namesilo或者其他地方购买后给Cloudflare解析。Backblaze注册之后需要进行邮箱验证,不然无法创建公开存储桶。

创建存储桶

进入Backblaze的用户管理界面,选择B2云存储下面的桶选项,然后点击创建存储桶,创建时需要输入桶的名称,这个名称会包含在URL中,所以不能与其他人的桶活着自己的其他桶有同样的名字。创建时需要选中公众选项,将其设置为公开的,其他选项不需要修改。

在创建完成后可以在里面上传一张图片,点击上传后的图片,其中友好URL就是要使用的地址,接下来记录下友好URL的主机名,例如f00x.backblaze2.com

刚创建的存储桶默认不会被Cloudflare缓存,而是每次都要回源,对于图床来说,缓存下来才更方便。点击桶选项,回到刚才创建存储桶的地方,可以看到已经创建好的存储桶,点击桶设定,将桶信息修改为{"cache-control":"max-age=43200"},其中max-age=后面的数字为Cloudflare的缓存时长,单位为秒。

配置Cloudflare

在Cloudflare中为图床要使用的子域名创建一个CNAME记录,将其指向刚才记录下的主机名f00x.bckblze2.com,由于要使用Cloudflare的CDN进行缓存,所以要将代理状态设置为已代理。

在创建CNAME记录之后,将友好URL的主机名换成刚创建的域名就可以访问文件了。如果测试时Cloudflare提示错误522,这是因为Backblaze只允许使用Https访问,需要在Cloudflare的SSL/TLS中改成完全(严格)。此外,如果是Cloudflare的Pro付费用户的话,还需要关闭自动签名交换(SXG),他在速度-优化选项中。

直接使用CNAME域名修改URL的话的话会暴露存储桶的名称,也显得URL十分啰嗦,这时候就需要使用Cloudflare的转换规则来将URL缩短。

选择规则-转换规则,然后点击创建转换规则-重写URL创建一个重写URL的规则,首先为规则取一个名字。如果使用单独的子域名作为专用的图床域名的话,可以直接在字段中选择主机名,在运算符中选择等于,然后在值当中输入子域名。

如果图床并不是使用专门的子域名,需要点击编写表达式,并参照Cloudflare文档来编写如何匹配图床的URL地址。

匹配表达式配置完成后,在下面的重写-路径中选择重写到,在选项中选择Dynamic,如果只想在URL中删去/file/存储桶名称的话,在后面填写concat("/file/存储桶名称", http.request.uri.path),如果有其他要求,也可以参照上面的Cloudflare文档来修改。设置完成后点击部署即可启用该规则。现在输入https://img.example.com/桶中的文件路径或是自定义的地址即可加载存储桶中的图片。

以下是用这种方式上传的图片,另外如果有人认得作者是谁可以在评论里回复一下。

P5R的学妹,但是不知道作者是谁

参考

Free Image Hosting With Cloudflare Transform Rules and Backblaze B2

Backblaze B2 + Cloudflare CDN可自定义域名的10G高速免费外链图床

Backblaze+CloudFlare实现0成本简单图床