mycpen

Mycpen

记录学习历程与受益知识
github
telegram
bilibili

01_转载-图床搭建 Backblaze B2 + Cloudflare CDN

相关链接#

  1. BlazeB2 - 基于 BackBlazeB2 和 Cloudflare 的图床工具(未使用)

转载文章#

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

  2. 使用 Backblaze B2 + Cloudflare CDN + PicGo 实现可自定义域名的 10G 免费图床解决方案

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

感谢 ReCreyed 的分享。以下内容全文摘自上面 3 篇文章

文章 1:Backblaze B2 + Cloudflare CDN#

本博客其他文章使用的都是 github 图床,无意中发现了 B2+CF+ShareX 的自建图床方案,而且还可以自定义域名,所以就有了这篇文章,本文所有图片全部来自这种方法的图床。

图床指的就是储存图片的服务器,网站管理员为了方便维护和管理,会将图片存放在专门的服务器集群里,通常还会在外层套层 CDN 做分发。市面上的公开图床很多,例如 imgur、sm.ms、imgbox 等等,这些图床都开放了 API 方便开发者调用。不过由于运营成本问题,也有不少图床相继倒闭或者转入收费。

怎么自建图床?如果是有 VPS 主机服务器,安装个 Chevereto 开源图床网站程序即可。但这是 VPS 单纯用来做图床给博客外链图片用,有点浪费且不易长久。图片存储最好是放在大公司的云服务平台上, Backblaze B2 是一个云存储解决方案,类似于 Amazon AWS S3, 但是价格稍微便宜一些. Backblaze 的云存储每个注册用户拥有 10G 免费空间以及每天 1G 的下载流量,上传流量不限。超过免费额度后的价格以及与其他几家主流商家的对比见下图。

img

在 backblaze 存储 1T 的内容也仅需 $5 / 月,不过流量费还是比较贵的 ,上传流量不限。 由于 Bandwidth Alliance (带宽联盟),Backblaze 到 Cloudflare 之间的出口是完全免费的, 所以 Backblaze B2 可以配合 cloudflare CDN 来使用达到无限免费下载流量。

img

Backblaze 宣布与 Cloudflare 合作,免除掉 Backblaze 到 Cloudflare 的流量费用。

因此我们得到如下网盘 / 图床产品:

  • 10G 存储空间免费, 全球最可靠的云存储服务

  • 上行免费

  • 下行免费

  • 可自定义域名

  • 全球最强 CDN 加速

搭建自定义域名图床教程开始#

首先,你需要有一个域名,选择一个子域名作为图床的域名。 关于图床的二级域名命名,一般有以下几种:

  • img
  • images
  • assets
  • static (不仅存放图片,还有存放 css、js)

然后,创建 Backblaze B2 Bucket (存储桶) 。

Backblaze’s B2 storage 注册一个账号,注册好了后,在后台面板选择 “Buckets”(存储桶),然后点击 “Create a Bucket”,创建一个存储桶。选 Public,以便所有人可访问。

img

然后,回到 “Buckets (存储桶)” , 在你刚刚创建的存储桶上,点击 “Upload/Download (上传 / 下载)”. 上传一个临时的测试文件到存储桶中,然后在你刚上传的文件处,点击 “i (information,信息)”. 这是为了获取下一步需要的信息,你的存储桶处于哪台服务器上.

img

img

在上面的截图中,可以看到,我的文件是放在 https://f000.backblazeb2.com/ – 记住这个域名
最后,获取到地址之后就登录 cloudflare,给你的域名添加一个子域名,并新增一条 cname 记录,指向文件地址中的域名,例如将 img.coca.cc 通过 cname 到 f000.backblazeb2.com,效果便是https://img.coca.cc/file/imgsgj/img.jpg 指向 https://f001.backblazeb2.com/file/imgsgj/img.jpg

img

根据上面截图中的记录,我使用这个子域名 img.coca.cc 作为图床的域名,并且指向 f000.backblazeb2.com. 确保 Cloudflare 橙色保护盾是开启的状态,这代表请求是通过了 Cloudflare 的 CDN 代理层. Cloudflare 默认的 TTL 将被设置为 auto (自动).

虽然启用了 CloudFlare CDN,但发现缓存永远不能命中(MISS),我们需要对添加一个缓存指令(默认是不缓存),打开存储桶设置,桶信息设置为 {"cache-control":"max-age=43200"},其中 43200 单位为秒 (s),意思就是说 43200 秒内 CF 不会去从源站重新获取资源。

img

Cloudfalre 的 ssl 设置需要使用 full,因为 backblaze 仅提供 https 访问地址。

img

当然你如果觉得文件链接不好看太长了,你也可以使用 cloudflare 自带的页面规则 301 ,缩短链接地址,比如通过 https://img.coca.cc/img.jpg 直接访问 https://f001.backblazeb2.com/file/imgsgj/img.jpg
例:
匹配规则 https://img.coca.cc/*
重定向网址到 https://f001.backblazeb2.com/file/imgsgj/$1

img

加一条页面缓存规则

img

最后,请注意:Backblaze B2 流出到 Cloudflare 的流量是免费的,也就是说就算 CF 回源 B2 也没有 $0.01/GB 的流出流量费,相当于免费无限流量。不过这并不能阻止坏蛋直接用 B2 的域名(而不是套了 CF 的域名)刷流量。

最后修改:2021 年 03 月 01 日

文章 2:Backblaze B2 + Cloudflare CDN + PicGo#

前言#

近期,由于服务器需要扩展功能,以及阿里云推送日志时有所不便决定重新购买服务器并部署相关网站和服务。决定趁此机会对图片存储进行规范,由于网站未备案,国内的阿里云 OSS + 阿里云 CDN、又拍云、七牛云等厂家提供的服务无法享受,只能将目光转向国外。

原本使用 Github+JSDelivr 是一个很好的免费图床解决方案,且网上教程也很多,但 2020 年 8 月 9 日 JSDelivr 发布的新使用政策中第四条引起讨论

4. Prohibited Use

The following behavior is prohibited:

 1. Hosting or accessing content that:
     - contains malware or harmful code in any form,
     - violates proprietary rights of others,
     - is sexually explicit,
     - is potentially illegal in the EU or the USA.

 2. Abusing the service and its resources, or using jsDelivr as a general-purpose
    file or media hosting service. This includes, for example:
     - running an image hosting website and using jsDelivr as a storage for all
       uploaded images,
     - hosting videos, file backups, or other files in large quantities.

    We recognize that there are legitimate projects that consist of a large number
    of files, and these are not considered abuse. For example: icons packs, apps,
    or games with a large number of assets.Copy

running an image hosting website and using jsDelivr as a storage for all uploaded images这句话有所歧义,因为无法判断个人博客和文章上传的图片数量和访问量是否会被判定为图片存储站,导致封禁或删除数据,只能寻求其余解决方案。

此时发现Cloudflare Bandwidth Alliance 宽带联盟宽带联盟中包含 Backblaze,Backblaze 到 Cloudflare 的所有出口流量完全免费。再加上 Backblaze 对个人用户提供 10G 的免费存储额度,每天 1G 的下载量与无限上传量。我们可以同时使用两者达到 10G 免费额度与不限量上传下载。

3961390e212619b300d72abb1c6d7467-NyquapNRbB

在超过免费存储额度之后,相比其他几家国外主流 OSS 服务提供商,Backblaze 的价格也较为低廉,唯一的缺点是目前只支持信用卡支付。

92f663d63338db8becab34b40760b0c3-i5xUgrOY5D

前置条件#

  1. 一个域名~最好是一级域名,即 xxx.xxx 这种类型的。搜索任意域名供应商即可购买,比较推荐 NameSlio,支持支付宝付款,免费的 Whois 隐私保护,同时价格便宜。.com域名每年仅需要 9.95 美金,如果不是很在乎可以买其他后缀只买首年,2 美金一年。免费域名也有一些可以申请,比较出名的就是 freenom 的域名了,不过听说今年 Cloudflare 的免费服务不再支持免费域名,所以只能自己试试是否能够成功。

Backblaze OSS 部分#

  1. 此处进入,创建 Backblaze 账号并完善相关信息,直接从首页进入可能没有 Sing Up 选项
  2. 此处进入控制台,创建 Buckets 存储桶存储桶
  3. 给存储桶起一个名字方便识别且不易被猜测即可,无需在意生成的图片链接长短,后续可以进行重定向方便识别且不易被猜测即可,无需在意生成的图片链接长短,后续可以进行 301 重定向,并将Files in Bucket are修改为Public
    注意:给存储桶起名时尽量起不易被别人猜测的名字,可在其中增加部分随机字符,如c42rx71-example-winer-website,因为在存储桶的模式为 Public 时,别人只需知道你的 OSS 服务提供商 + 存储桶名称 + 其中一个文件名,即可拼凑出文件真实链接,从而绕过 CDN 刷空你的免费流量,如果有绑定支付方式还会扣费。

80ddd93eafadbb256b763fa1ae4e0757-image-20210914161619618

  1. 点击Upload/Download上传一张图片或临时文件,用于后续获取存储桶所在的服务器地址
  2. 从左侧菜单栏的Browse Files进入刚刚的存储桶并找到上传的文件,点击查看详细信息,记住Friendly URL行的链接内容

a875ac31d761acd0f2d4e23a2c4d500d-image-20210914161911330

  1. Friendly URL的链接可以看到我们的存储桶位于https://f002.backblazeb2.com/,而/file/example-winer-website则是存放文件目录的相对路径,记住这两个值后登陆 Cloudflare 进行设置。

Cloudflare 部分#

  1. 打开Cloudflare 官网并进行注册
  2. 根据提示前往域名注册商修改 DNS 解析服务器到 Cloudflare 提供给你的服务器地址不同用户地址不同不同用户地址不同,个人使用选择免费计划即可

c4693f6f0580b728b9315b2754d10d7d-image-20210911163637613

  1. 添加一条 CNAME 记录到你刚刚得到的存储桶服务器,二级域名可以根据喜好选择,但一般使用这几种

    oss
    img
    images
    assets
    static(不仅存放图片,还存放网站加载时的css、js文件)
    

669afcbfe869f4fb67cee2a9132a87bc-image-20210914162453761

  1. 此时等待 DNS 解析完成后我们就完成了通过 Cloudflare 访问 Backblaze 的设置,可以使用浏览器的开发者工具,访问二级域名下对应网址来查看是否命中 CDN 缓存。cf-cache-status行 HIT 代表命中缓存,MISS 代表没有命中 CDN 缓存,回源到 Backblaze,此时会消耗下载流量。

9dab9b8dededc833583c61fb9615aaa5-image-20210911165431297

  1. 为了避免无法命中缓存或回源次数过多导致加载速度低下,我们需要回到 Backblaze 进行桶信息设置,添加{"cache-control":"max-age=86400"},意味 86400 秒内 Cloudflare 不再返回源站重新获取信息。
    注意,回源时为 CDN 节点回源站重新拉去数据,然后再传递给用户,并不是将源站地址直接转给用户,所以无需担心回源过多导致的免费流量配额消耗完毕。max-age 可以不用太长,太长的话若源文件发生更改,且站点没有主动推送到 CDN 节点时会导致用户不能及时得到最新版本。(书写本文时发现 BackBlaze 也存在免费请求次数显示,B 类 C 类请求每天各 2500 次,暂时未确定 Cloudflare 访问是否计算请求次数,故也不建议太短)

c5aa7f1948a64ce3cd9391ad316ac951-image-20210914162745460

  1. 可选可选不建议使用的重定向方式不建议使用的重定向方式通过 cloudflare 自带的页面规则 301,对于文件连接进行重定向缩短链接地址。按照下图选项根据喜好进行创建即可,* 用于匹配所有的图片路径及名称,$1代表使用星号部分的内容对网址进行补全。
    注意:

1. 匹配 URL 时,地址中的/img是必须的否则被转发过的 URL 会再次匹配到转发规则,造成重定向次数过多或其他位置错误,但是/img可以替换为任意不为/file/example-winer-website(你的存储桶名)的字符串
2. 经过测试后发现,使用该方式进行的重定向在开发者工具 Network 页面可以抓取到重定向后的链接直接新标签打开图片也可以获取直接新标签打开图片也可以获取,从而得到你的存储桶名称以及真是文件名,配合服务器提供商即可拼凑真实地址进行恶意刷流量攻击。故建议使用第 8 步的第二种创建方式。

da954ad89387900fa24ea3a96a9255da-image-20210914163315660

  1. 可选可选在查找资料时,见到有些地方建议在进行 URL 重定向后增加一条页面缓存规则来防止缓存失效。按照下图进行配置即可。但是在我进行测试时发现不增加这条内容,也可以命中 Cloudflare 的 CDN 缓存,故暂时未添加。也可以在此处增加安全级别选项,并设置为本质上为关,来保证主站被攻击在 CDN 环节增加验证时,写在本地的 Markdown 文档能够正常加载图片。
    猜测存在此步骤的可能原因是将缓存级别设置无查询字符串时仅在图片后不跟随参数时使用缓存的内容,部分 OSS 供应商提供追加参数对图片进行处理(如压缩、剪裁、缩放)后发送的功能,若主站缓存级别设置为标准,此处修改部分内容设置后就可以使用那些功能。但 Backblaze 的免费服务并不包含这些,所以暂时用不到。若以后发现在问题或真正的原因会进行补充说明。

5e57fe3d244d67a57ba0e6f1b0b9256b-image-20210914164221363

8. 可选可选建议使用的重定向方式建议使用的重定向方式由于不使用链接重定向和使用页面规则重定向均会暴露桶名称,我们选择通过重写的方式进行解决。这种方式可以在链接不变的情况下改写其中的内容。这次我们使用规则中的转换规则进行页面重写。匹配主机名用于确定请求来源需要进行重写,且再次匹配完整 URI 确认不包含已经重写过的链接,避免出现反复重写的错误。重写路径的 concat 含义为将两字符串拼接,在请求的文件路径前添加存储桶路径,而主机名 example.winer.website 在使用 concat 函数时无需书写,会自动添加为传入请求的主机名。(如一定要在 concat 函数内添加主机名,请不要带http://https://开头,而是在前面添加/进行替代,例如concat("/example.winer.website/file/example-winer-website", http.request.uri.path)
注:如果页面规则剩余不足或不想使用本方法,也可以参考本文创建私有存储桶并使用 Cloudflare Workers 来进行访问。鉴于 Workers 访问方法已存在很久,且有众多其他博主教程,不再进行书写。但 Workers 同样有免费限额,请注意。

de64d3a53e203c221c0969806ad58aa6-image-20210914164843797

搭配 PicGo 更好的进行图床食用#

首先恭喜你,至此你已经完成了图床基本搭建工作!下面是拓展部分

  1. 图床搭建完毕后,若不进行其他操作,每次上传图片都需要打开 Backblaze 的网站并在完成身份验证后进入桶设置页面进行上传,即不便捷也不友好。因此介绍一款跨平台且同时支持命令行与可视化界面的图片上传工具 ——PicGo
    主要功能即为上传图片到你指定的位置,并获取图片链接,搭配 typora 编辑器可以直接在粘贴图片时就自动上传并将链接写入 Markdown 文档,避免图片在其它网站或放在本地后移动文档导致的图片丢失。
  2. 进入项目主页,下载并安装 PicGo
  3. 选择插件设置,搜索s3或进入插件项目主页下载并安装该插件
  4. 安装完毕后左侧的图床设置会多出 “Amazon S3”,对于所有与 S3 API 兼容的云存储均可使用
  5. 打开的Backblaze 官网的 AppKeys 设置页面,添加一个新的 Key 建议不要使用建议不要使用 MasterApplicationKey,按照如下格式设置并申请 Key
    注意:Key 的最长有效时间为 1000 天,即 86400000 秒,过期后请重新申请

209573ceb1bfacd10cfc6d61ae7b43fc-image-20210911203404570

  1. 记录得到的Key ID、applicationKey、桶名称、桶的Endpoint地址分别填写到对应位置。同时将 301 跳转或页面重写的网址填写到自定义域名。其余设置无需变更。保存后即可上传图片,也可以修改文件的命名方式或通过修改配置文件进行设置,详见此页面

注意事项#

到此为止所有工作都已完成,但是有一点需要注意:

  1. 通过这种方式上传文件,文件路径中如果包含空格,在 Backblaze 存储时会将空格换为加号,所以路径中包含空格的文件 PicGo 上传后生成的链接并不正确。
  2. 通过此方法搭建的图床或书写的教程,切记不要泄露存储桶名称,避免刷流量,且建议给所有上传文件的命名规则添加哈希值,使其不可猜测,避免存储桶名称暴露时获取其他文件。

同时本文内建立的存储桶并未使用,教程书写完毕后立刻删除,并创建了及其难以猜测的存储桶名称更改了相关地址,无需尝试使用文中或图中的信息进行访问测试。

最后修改:2022 年 08 月 28 日 10 : 37 AM

评论区

刚下飞机的道士 May 24th, 2022 at 11:48 am

感谢大佬文章,现在 cloudflare 提供了 transform rules,可以不用 worker 进行路径重写了。

sakuya April 9th, 2022 at 02:44 pm

友情提示:
第 8 步的 concat"/example.winer.website/file/example−winer−website",http.requrst.uri.paht),似乎多了个括号,以及 request、path 写错了

winer August 28th, 2022 at 10:36 am

@sakuya

谢谢提醒,括号多的那个其实是因为外面有个中文的括号,只看有代码标记的里面就行
不过 request 和 path 确实是打错了 hhhhh 图片里还没错,这就改掉

文章 3:Backblaze B2 + Cloudflare#

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/桶中的文件路径或是自定义的地址即可加载存储桶中的图片。

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

图片略...

参考#

Free Image Hosting With Cloudflare Transform Rules and Backblaze B2

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

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

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.