type
status
date
slug
summary
tags
category
icon
password
前言
网上很多免费的图床,但每天都要担心会不会跑路,用大厂的OSS,又不符合白嫖的精神。在网上找了很久,发现了cloudflare+Backblaze的无限流量的免费图床方案。但网上的方案都是创建Backblaze公开存储桶,可能Backblaze被薅秃了,现在创建公共桶需要支付一美元或者有历史的付款记录,卡了很多人,似乎无法白嫖了。但正所谓,道高一尺魔高一丈,方法总比困难多。有大佬精心分析BackBlaze官方文档,发现私有桶携带签名参数也是可以进行外网访问的。由此,cloudflare+Backblaze的免费图床方案得以继续,也让我们能继续白嫖。longsays大佬教程可自行查看,本文仅做详细步骤记录,以便后续查看。
注册Backblaze
注册很简单,点这里注册,只需要填写邮箱和密码。注册完后登陆帐号,在 我的设置 里验证一下邮箱
创建存储桶
创建一个桶,名称随便起一个,至少要6位字符,其他默认即可,创建好存储桶后,随便上传个文件(只是为了获取到Backblaze的文件链接),上传文件后,查看文件的信息,把Friendly URL复制记录下
cloudflare解析隐藏真实地址
添加cname记录
以f004.backblazeb2.com/file/20240329test/1.webp为例,其中
f004.backblazeb2.com
是主机名,
file
是后缀,20240329test
是刚才创建的存储桶名,1.webp
是文件名。虽然是私有桶,但也需要尽量隐藏真实信息。cloudflare配置cname替换原本的主机名,记得打开小云朵
现在访问链接可以变成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
配置workers添加token
完成上述步骤后,访问https://img.3k.gay/1.webp,会出现这个界面,这是因为私有桶需要携带token认证了才能访问
声明:后续步骤完全参考大佬教程,如有侵权,请邮件联系删除
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,生成后,保存好
因为需要workers来修改规则,重写url,所以需要cloudflare API令牌。点击右上角的账号图标,点开个人资料,API令牌,创建自定义令牌,创建好后,保存好
域名的区域ID,复制保存好
之后需要获取规则ID和规则集ID,修改下之前写的重新URL规则(随便改什么,改名称也行),然后在【管理账号】—【审核日志】就可以看到规则ID和规则集ID
创建worker
到Workers 和 Pages创建一个新的workers,到设置-变量里把所有的变量填写好
变量名 | 说明 |
B2KeyID | Backblaze 的 keyID |
B2AppKey | Backblaze 的 applicationKey |
B2BucketName | Backblaze 的存储桶名 |
CfAuthKey | 创建的 CloudFlare API 令牌 |
CfHostname | CloudFlare CNAME好的二级域名 |
CfZoneID | 域名的区域 ID |
CfRulesetID | 规则集 ID |
CfRuleID | 规则 ID |
然后点右上角的编辑代码,把原本的代码全部删除,复制以下代码,之后点保存并部署
访问worker的地址,能看到如下界面就是大功告成了,现在就可以用自己的域名+文件名直接访问私有桶的文件了,示例:演示链接
设置定时任务
worker获取的token有效期并不是永久,所以需要定时更新下,这里就直接用大佬的配置了,如果你想修改其他时间,可以自行修改。设置-触发器,添加Cron触发器
后续优化设置
删除响应中的敏感信息
上面的操作只修改了请求URL,但响应中还有部分b2的字段,需要再写下规则,修改响应头
规则-转换规则-修改响应头
现在刷新界面,就看不到x-bz相关的响应了
优化缓存
缓存控制默认是不缓存的。查看响应头中Cache-Control字段,会发现它的值是max-age=0(资源缓存的有效期限为0,也就是不缓存)
这样每次Cloudfare都会直接到Backblaze源服务器去取数据,因为Cloudfare在自己的CDN服务器上找不到缓存数据。
但得益于带宽联盟,借由Cloudfare去向Backblaze取数据,有相应折扣或免除数据传输费用,如果开启缓存,那么额度消耗还可以降到更低,甚至全免。
点击桶设定,配置Bucket Info为{"cache-control":"max-age=720000"},该项将 Cloudflare 回到源站获取资源的周期设定为 720000 s,用于避免回源次数过多导致加载速度过慢。当然,该周期过长也会导致源文件更改后不能及时更新,可以按自己的需求更改。
对于图床数据来说,图片文件不是新增就是删除,一般不会去修改一个图片文件,所以缓存有效期限可以设置更长,没必要让服务器那边频繁更新缓存数据。
缓存设置完成后,现在再通过Cloudfare链接去测试多次请求同一资源的话,只要CDN服务器上已经缓存了数据,那么后续请求就都是零消耗。
最后
B2的存储是免费10G,而和cloudflare之间的流量是免费的,所以通过这个方法搭建的图床不需要花钱的,10G的存储做个图床也是足够了,有cloudflare的加持,呈现的速度也是可以的。