backblaze+cloudflare+ShareX 实现无成本图床和便捷上传

这次主要就是Cloudflare的流量联盟计划来实现0成本搭建一个自己的图片存储空间。

准备

  • 1.一个cloudflare账号 https://dash.cloudflare.com/
  • 2.一个B2账号 https://www.backblaze.com/b2/cloud-storage.html
  • 3.windows软件ShareX

步骤

1.注册B2账号,点击进入B2 Cloud Storage,点击Buckets创建一个BUcket,设为public,并上传一个图片,记录下下图要用的域名

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

B2验证邮箱

创建容器

1.完成注册与邮箱验证后,登录即可免费创建 B2 云存储的桶

选择 Create a Bucket,在 Bucket Unique Name 一栏填入桶名称,桶名决定了源站的 URL,应尽可能复杂避免被他人猜测到。若源站 URL 泄露,绕过 Cloudflare 的直接访问就会产生额外流量了。其余项如下图保持默认即可:

创建完成后,选择 Upload / Download 尝试在桶中上传一张图片,查看图片的详细信息,其中 Friendly URL 一项就是生成的图片链接。

2.点击App keys,添加一个新的key,bucket就选你刚创建的那个,记录下你的密钥,之后要在ShareX中用

以 f000.backblazeb2.com/file/a-complicated-name/hokciu.jpg 为例,图片链接可以都分成以下几个部分:

主机名后缀桶名图片路径
f000.backblze.comfilea-complicated-namehokciu.jpg

因为 Friendly URL 中包含了桶名,不宜直接引用。假设想要将链接改写为 img.leonis.cc/hokciu.jpg,显然要修改主机名、隐藏固定的后缀和桶名,再拼接上图片路径,URL 的改写就通过 Cloudflare 实现。

CloudFlare解析添加 DNS 记录

改写的目标 URL 必须使用 Cloudflare CDN,打开 Cloudflare 控制台,添加名称为 img 目标为 f000.backblazeb2.com 的 CNAME 记录,并将代理状态设为打开。待 DNS 记录生效后,就实现了 img.leonis.cc → f000.backblazeb2.com 的跳转。

3.来到CF面板,添加一条CNAME记录,记得打开云朵

4.添加CloudFlare规则

配置转换规则

同样在 Cloudflare 控制台中,找到 规则 – 转换规则 页面并创建新规则,填写规则自定义名称后就来处理 URL 的转换问题。

第一次接触 Cloudflare 的转换规则功能时,我被界面上各个选项弄得很迷糊,所以我在这里介绍一下转换规则各个功能的使用方法,读者理解了就能根据自己的想法配置图片链接了。

规则页面上的「传入请求」是指访客对托管站点发起的请求,例如访客所浏览的页面上有一条 img.leonis.cc/hokciu.jpg 链接,该请求先进入到 Cloudflare 的服务器,再根据设定的规则前往 f000.backblazeb2.com/file/a-complicated-name/hokciu.jpg 取出图片资源,最终呈现在页面上。

前文为了表述简单,说的是将 f000.backblazeb2.com/* 改为 img.leonis.cc/*,实则是我们要设定一个规则,让访客能通过 img.leonis.cc/* 到 f000.backblazeb2.com/* 中取得需要的图片。

在规则页面中的设置项可以参考下图:

该规则筛选得到所有主机名为 img.leonis.cc 的请求,将其 URL 重写到 concat("/file/a-complicated-name", http.request.uri.path),也就是把所有对 img.leonis.cc/* 的请求指向 img.leonis.cc/file/a-complicated-name/*。而因为 img.leonis.cc 已经通过 CNAME 指向了 f000.backblazeb2.com,最终请求都到达 f000.backblazeb2.com/file/a-complicated-name/* 并取得图片资源。

上述请求过程可以表示成

GET: https://img.leonis.cc/hokciu.jpg
→ https://img.leonis.cc/file/a-complicated-name/hokciu.jpg
→ https://f000.backblazeb2.com/file/a-complicated-name/hokciu.jpg

需要注意的是,因为这里使用的是重写(rewrite)而非重定向(redirect),请求的改变发生在服务端而非客户端,整个过程中用户都不会看见 URL 发生变化,所以也就达到了隐藏桶名的目的。

若设置全部无误,这时候就可以通过 https://img.leonis.cc/example.jpg 打开先前上传的图片了,由于 Backblaze 只支持 HTTPS,若打开 http://img.leonis.cc/example.jpg 则会弹出无效页面,用户体验不太好,所以接下来我们还需要通过 Cloudflare 页面规则完成 HTTPS 重写和缓存的相关设置。

5.设置页面规则

回到 Backblaze 找到 Bucket Settings 一项,在 Bucket Info 中填入 {"cache-control":"max-age=720000"},该项将 Cloudflare 回到源站获取资源的周期设定为 720000 s,用于避免回源次数过多导致加载速度过慢。当然,该周期过长也会导致源文件更改后不能及时更新,可以按自己的需求更改。

有了重写规则,现在可以直接通过 https://域名/文件名 来访问自己的文件了。

然后在CF的页面规则里设置一下缓存时间。既然是做图床,一般不会去修改。所以这边缓存时间改为7天。

6.新建一条页面规则

在 Cloudflare 中打开 规则 – 页面规则,新建一条页面规则,在 URL 一栏中填入 img.leonis.cc/*,按下图设置设置缓存和 HTTPS 即可。

7.上传图片

图片上传可以直接在Backblaze的网页上上传。Windows的话推荐ShareX,它支持很多容器,其中也包括B2。

配置ShareX.

这个感觉没啥好说的,主页面–目标–上传目标设置–backblaze b2,填上就行了

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注