博客图床方案:BackBlaze + Cloudflare

对文章中图片的处理一直令我感到头痛。从最开始的放在本地,到使用 Github 图床,到使用七牛云 Kodo 图床

Github 图床的缺点是访问速度慢,Kodo 倒是配好之后一直很稳定,我已经使用很长一段时间了,因为一些特殊原因,还是决定忍痛对 Kodo 图床进行迁移,长痛不如短痛

在网上寻找合适的图床方案时,我发现了 BackBlaze + Cloudflare 这一解决方案

1 创建 Public Bucket

首先创建一个 BackBlaze 账号,之后在 B2 Cloud Storage 中创建 Bucket

需要修改两个地方:

  • 一个是填写一个 Bucket Name,这个很重要,可以在 这里 创建一个短密码填到这个地方
  • 另一个地方是将 Files in Bucket are 这里选择 Public

其他的地方不用动

第一次使用时,这里需要充 1 美元,充值方式支持 Visa 卡,但不支持 Paypal,使用国内办理的 Visa 卡也是可以的

image-20240719205540713

2 获取 Bucket 信息

创建好 Bucket 后,上传一张图片,点击图片后,在弹出的 Details 框中找到 Friendly URL:

1
https://f005.backblazeb2.com/file/a-unique-bucket-name/test.jpg

之后使用自己域名访问时需要用到上面的东西:

  • f005.backblazeb2.com(这个可能会有差异,以自己的为准)
  • file/a-unique-bucket-name(这个就是固定的 file 和之前设置的 Bucket 名)

3 配置 Cloudflare

想要配置 Cloudflare 之前,首先要有一个 CF 账号,注册账号无需赘言

3.1 添加站点

将之前购买的域名添加到 CloudFlare 中,以 SpaceShip 为例,在购买域名后,只需要将 SpaceShip 中域名的 Nameserver 改成从 CF 得到的就可以了

之后就等待站点激活即可

3.2 设置 SSL 加密模式

将 SSL 加密模式设置为 完全(严格)

😉 这个设置是必要的,以下设置让 CF 服务器通过 HTTPS 与 BackBlaze 发送请求,若不做该设置,将会出现返回 404 的情况

image-20240719205144253

3.3 配置二级域名访问图片

3.3.1 添加域名解析记录

首先,在 DNS 解析中,添加一条 CNAME 记录,将一个二级域名(例如 img.jmingz.top)指向之前获取的 Bucket 信息中的主机名 f005.backblazeb2.com,并开启 CF 代理(开启橘色小云朵)

3.3.2 添加转换规则

添加转换规则可以实现图片的访问路径缩短,隐藏 Bucket 名:

https://f005.backblazeb2.com/file/a-unique-bucket-name/test.jpg ==> https://img.jmingz.top/test.jpg

首先进入转换规则的编辑页面:规则 => 转换规则 => 重写 URL

image-20240719212446662

下面填写的是 concat("/file/a-unique-bucket-name",http.request.uri.path)

image-20240719212546371

3.4 防盗链设置

😄 实现可在本地正常显示图片并且在白名单站点中正常显示

进入防火墙的自定义规则编辑中:安全性 => WAF => 自定义规则

创建第一条规则:

image-20240719214700679

创建第二条规则:

image-20240719214821991

3.5 设置页面规则

进入页面规则设置界面:规则 => 页面规则

URL 中填写 https://your-second-domain/file/a-unique-bucket-name/*

image-20240719215407025

进入到 BackBlaze 的 Bucket 设置中,在 Bucket info 中填写 {"cache-control":"max-age=720000"}

4 去除不必要的响应 Header

TODO

5 PicGo 设置

PicGo 需要安装一个插件

image-20240719220546982

另外,需要配置的项有:

  • 应用密钥 ID(在 BackBlaze 中的 Application Keys 生成)
  • 应用密钥(在 BackBlaze 中的 Application Keys 生成)
  • 桶名
  • 文件路径(默认值就可以了)
  • 自定义节点(endpoint)
  • 自定义域名(填之前做过解析的二级域名)

注意:自定义节点前要加 https:// 否则会报错

6 参考