🗒️Cloudflare + Backblaze私有桶 实现免费的图床
2024-3-29
| 2024-9-28
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password

前言

网上很多免费的图床,但每天都要担心会不会跑路,用大厂的OSS,又不符合白嫖的精神。在网上找了很久,发现了cloudflare+Backblaze的无限流量的免费图床方案。但网上的方案都是创建Backblaze公开存储桶,可能Backblaze被薅秃了,现在创建公共桶需要支付一美元或者有历史的付款记录,卡了很多人,似乎无法白嫖了。但正所谓,道高一尺魔高一丈,方法总比困难多。有大佬精心分析BackBlaze官方文档,发现私有桶携带签名参数也是可以进行外网访问的。由此,cloudflare+Backblaze的免费图床方案得以继续,也让我们能继续白嫖。longsays大佬教程可自行查看,本文仅做详细步骤记录,以便后续查看。
notion image

注册Backblaze

注册很简单,点这里注册,只需要填写邮箱和密码。注册完后登陆帐号,在 我的设置 里验证一下邮箱
notion image

创建存储桶

创建一个桶,名称随便起一个,至少要6位字符,其他默认即可,创建好存储桶后,随便上传个文件(只是为了获取到Backblaze的文件链接),上传文件后,查看文件的信息,把Friendly URL复制记录下
notion image
notion image
notion image

cloudflare解析隐藏真实地址

添加cname记录

f004.backblazeb2.com/file/20240329test/1.webp为例,其中f004.backblazeb2.com
是主机名,file是后缀,20240329test是刚才创建的存储桶名,1.webp是文件名。
虽然是私有桶,但也需要尽量隐藏真实信息。cloudflare配置cname替换原本的主机名,记得打开小云朵
notion image
现在访问链接可以变成https://img.3k.gay/file/20240329test/1.webp,但这个还暴露了桶名称,还需要修改规则

重写 URL 路径

点击Cloudflare 仪表板左侧的规则,然后转换规则重写URL,点击创建规则,可参考以下示例,这个规则就是将所有img.3k.gay/*的请求,转换为img.3k.gay/file/20240329test/*,又因为上面配置了cname,所以现在的访问就是下面这个过程了,到此,就实现了隐藏真实URL的目的。
👉
GET https://img.3k.gay/1.webp → https://img.3k.gay/file/20240329test/1.webp → https://f004.backblazeb2.com/file/20240329test/1.webp
notion image
notion image

配置workers添加token

完成上述步骤后,访问https://img.3k.gay/1.webp,会出现这个界面,这是因为私有桶需要携带token认证了才能访问
notion image
声明:后续步骤完全参考大佬教程,如有侵权,请邮件联系删除

workers变量

需要的变量如下:
变量名
说明
B2KeyID
Backblaze 的 keyID
B2AppKey
Backblaze 的 applicationKey
B2BucketName
Backblaze 的存储桶名
CfAuthKey
创建的 CloudFlare API 令牌
CfHostname
CloudFlare CNAME好的二级域名
CfZoneID
域名的区域 ID
CfRulesetID
规则集 ID
CfRuleID
规则 ID
先获取Backblaze变量B2KeyID和B2AppKey,点击生成application key,生成后,保存好
notion image
notion image
因为需要workers来修改规则,重写url,所以需要cloudflare API令牌。点击右上角的账号图标,点开个人资料,API令牌,创建自定义令牌,创建好后,保存好
notion image
域名的区域ID,复制保存好
notion image
之后需要获取规则ID和规则集ID,修改下之前写的重新URL规则(随便改什么,改名称也行),然后在【管理账号】—【审核日志】就可以看到规则ID和规则集ID
notion image
notion image
notion image

创建worker

Workers 和 Pages创建一个新的workers,到设置-变量里把所有的变量填写好
变量名
说明
B2KeyID
Backblaze 的 keyID
B2AppKey
Backblaze 的 applicationKey
B2BucketName
Backblaze 的存储桶名
CfAuthKey
创建的 CloudFlare API 令牌
CfHostname
CloudFlare CNAME好的二级域名
CfZoneID
域名的区域 ID
CfRulesetID
规则集 ID
CfRuleID
规则 ID
notion image
然后点右上角的编辑代码,把原本的代码全部删除,复制以下代码,之后点保存并部署
访问worker的地址,能看到如下界面就是大功告成了,现在就可以用自己的域名+文件名直接访问私有桶的文件了,示例:演示链接
notion image

设置定时任务

worker获取的token有效期并不是永久,所以需要定时更新下,这里就直接用大佬的配置了,如果你想修改其他时间,可以自行修改。设置-触发器,添加Cron触发器
notion image

后续优化设置

删除响应中的敏感信息

上面的操作只修改了请求URL,但响应中还有部分b2的字段,需要再写下规则,修改响应头
notion image
规则-转换规则-修改响应头
notion image
notion image
现在刷新界面,就看不到x-bz相关的响应了
notion image

优化缓存

缓存控制默认是不缓存的。查看响应头中Cache-Control字段,会发现它的值是max-age=0(资源缓存的有效期限为0,也就是不缓存)
这样每次Cloudfare都会直接到Backblaze源服务器去取数据,因为Cloudfare在自己的CDN服务器上找不到缓存数据。
但得益于带宽联盟,借由Cloudfare去向Backblaze取数据,有相应折扣或免除数据传输费用,如果开启缓存,那么额度消耗还可以降到更低,甚至全免。
点击桶设定,配置Bucket Info为{"cache-control":"max-age=720000"},该项将 Cloudflare 回到源站获取资源的周期设定为 720000 s,用于避免回源次数过多导致加载速度过慢。当然,该周期过长也会导致源文件更改后不能及时更新,可以按自己的需求更改。
对于图床数据来说,图片文件不是新增就是删除,一般不会去修改一个图片文件,所以缓存有效期限可以设置更长,没必要让服务器那边频繁更新缓存数据。
notion image
notion image
缓存设置完成后,现在再通过Cloudfare链接去测试多次请求同一资源的话,只要CDN服务器上已经缓存了数据,那么后续请求就都是零消耗。

最后

B2的存储是免费10G,而和cloudflare之间的流量是免费的,所以通过这个方法搭建的图床不需要花钱的,10G的存储做个图床也是足够了,有cloudflare的加持,呈现的速度也是可以的。
资源分享
  • 知识分享
  • 什么人大概率会一事无成?Serv00免费搭建Go-proxy-bingai
    目录