后 jsDelivr 时代,你的下一个免备案免费自建图床该如何白嫖?

cdn.jsdelivr.net 在国内早已被 SNI 阻断,现在看来恢复的可能性渺茫。Github + jsDelivr + PicGo 的薅羊毛方案行不通了。

保守治疗

hexo-filter-jsdelivr-auto-fallback 插件可以自动在网站里添加上 jsdelivr-auto-fallback 代码,自动检测 cdn.jsdelivr.net 是否可用, 如果不可用时,会自动把所有 js, css, image 的地址切换到其他可用的域名。

fastly.jsdelivr.net 在国内的访问速度并没有 Cloudflare CDN 快,而且改个前缀就能解决的事情,fastly 的后续也难说。

Cloudflare + Backblaze 老瓶新酒

这个搭配早就有,但一直不是很流行,因为如果想用 cf 的 CDN,就得由 cf 负责域名的 NS 解析。然而 cf 在国内的 DNS 解析速度实在太拉跨了,我的顶级域名一直放在 DNSPod 解析,尚且不满意于 Netlify 的 CDN 速度,更不可能退步到 cf。

如何只将二级域名接入 Cloudflare,用于访问静态资源,而顶级域名仍保留在 DNSPod 呢?这就是可能在未来相当长的一段时间里,最好用的免备案免费自建图床方案:BackBlaze B2 + Cloudflare for SaaS + picgo-plugin-s3 + picgo-plugin-compress + FileZilla Pro

CNAME 方式接入 Cloudflare for SaaS

前置条件:一个顶级域名,一个可修改 NS 记录的闲置域名

CloudFlare for SaaS 的自主义主机功能可以接入非顶级域名,可修改 NS 记录的域名在 cf 上用作回退跳转域名,原理如图:

image-20221217015128945

以我自己的配置为例,当用户向我的图片资源的域名 static.pil0txia.com 请求访问时,会先由 Dnspod CNAME 转发到位于 cf 上的 fallback.pil0txia.ml,cf 会验证来源域,并确保只有来自 static.pil0txia.com 的流量被响应。然后回退到 fallback.pil0txia.ml,再由 fallback.pil0txia.ml CNAME 转发到 f002.backblazeb2.com 的 Backblaze 存储桶域名。在最后一步中,请求 URL 会被改写,以免暴露存储桶名称。

虽说网上的教程都要求在 DNS 处新增 A 记录,但是我实测用 CNAME 记录指向 Backblaze 的 f002.backblazeb2.com 是完全 OK 的。

操作教程,做到 2.5 即可:CloudFlare 免费 CNAME 和 IP 接入教程 - 无需修改 NS 直接接入 CloudFlare

回退源填写 fallback.pil0txia.ml自定义主机名填写 static.pil0txia.com

另外,使用 Cloudflare for SaaS 接入 cf 时,不可以开启 Hotlink 防盗链功能,否则来自 static.pil0txia.com 的请求会被阻止。

虽然 Partner 后台已经无法再提供以前的 CNAME 接入功能,但如果不熟悉 cf 的话可以看一眼有哪些设置,如梦牛网络

Backblaze B2 配置

带宽联盟中 Backblaze 到 Cloudflare 的所有出口流量完全免费。Backblaze 同时也提供 10G 的免费存储额度、每天 1G 的下载量和无限上传量。

老生常谈的内容,教程很多:使用 Backblaze B2 + Cloudflare CDN + PicGo 实现可自定义域名的 10G 免费图床解决方案

注意:在创建转换规则时,在当传入请求匹配时... 中,需要填写你想要为静态资源分配的域名,如我的 static.pil0txia.com,而不是接入 cf 的 fallback.pil0txia.ml,否则将无法通过 static.pil0txia.com 访问资源。

最后,你需要保存自己的:

  • Endpoint
  • Application keyID
  • applicationKey (secret)

PicGo 插件

picgo-plugin-s3:上传至 AWS S3 兼容的 OSS

没有了 Github 上好用的反应慢的 imgbot,picgo-plugin-compress 插件可以在上传前压缩图片。目前只有 webp 可以正常使用。

设定的自定义域名为 https://static.pil0txia.com

文件管理器

以前用 Github 当图床的时候,可以很方便的用 SourceTree 做 Git 版本管理,传错图片了,本地文件资源管理器可以删,可以 revert 回滚记录,也可以直接 reset 回退多个版本,多端同步非常方便。

现在就只能回归 FTP 时代,在 Backblaze 官网列举的文件管理工具中,我用起来最顺手的还是 FileZilla Pro。批量上传图片后,也只能在 cmd 中 dir /b 出所有文件名,然后批量加上 Markdown 语法的前缀和后缀。

虽说 CloudBerry Explorer 不失为一个好的选择,但它年久失修的图形界面在高分屏上的模糊实在不甚友好,除了同步时可以手动修改单个文件的同步方向外,并没有显著的功能优势。

七牛云 OSS + 多吉云 CDN 新瓶旧酒

新瓶:多吉云 CDN 有 20G 免费额度

旧酒:只是不用七牛云的 CDN 了而已

备案后可以将子域名指向腾讯云的对象存储,挂一个有备案号的单页,定时 curl 一下,是达不到最小计费单位的。

七牛云

没有长期测试域名,绑定域名需备案,OSS 和 CDN 的 HTTPS 流量计费,而且 OSS 的 HTTP 外网流出也是不在免费额度中的。

多吉云

融合 CDN,底层大多是腾讯云。目前提供每月 20G 的免费 HTTPS 流量和 10G 的免费对象存储。

目前也推出了 10G 的免费云存储,但是要使用 S3 兼容的 key 需要向客服申请,否则需要等待 picgo-plugin-dogecloud 更新。

2023-1-15 更新:S3 兼容的两段式密钥已停止发放。picgo-plugin-dogecloud 更新后支持免获取临时密钥上传图片了,但是依然无法通过 Filezilla 管理多吉云的文件。

又拍云

申请加入又拍云联盟可以使用免费 HTTPS 云存储 + CDN,每年都要在原优惠券过期后手动续签。基本上当天申请当天通过,可以使用子域名,但是必须要有实质性内容。

百度云加速

5G / 天免费 HTTPS CDN 流量,也挺好的,但是不再和 cf 合作后没有竞争力了

转投 Netlify ?

当然,把 Git 仓库再套一层 Netlify 也未尝不可,其 CDN 表现至少比 Cloudflare 好,就是得忍受 2 倍的.git 文件夹体积。

你可以用 bfg 清理所有超过 1KB 的文件:

1
java -jar bfg.jar --strip-blobs-bigger-than 1K your-repo.git

如果你遇到了 ! [remote rejected] refs/pull/1/head -> refs/pull/1/head (deny updating a hidden ref) 错误,可以按照这篇 issue 操作。

也可以创建一个新的存储库,然后将历史记录提交上去:

1
git push --mirror example.git

Freenom 免费域名自动续期

luolongfei/freenom: Freenom 域名自动续期。

给接入 cf 的 pil0txia.ml 续期。Koyeb 注册成功后一直没收到下一步邮件,遂部署在了 mogenius 上。

image-20221217004930223