后 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.echol.cn
请求访问时,会先由 Dnspod CNAME 转发到位于 cf 上的 fallback.echol.ml
,cf 会验证来源域,并确保只有来自 static.echol.cn
的流量被响应。然后回退到 fallback.echol.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.echol.ml
,自定义主机名
填写 static.echol.cn
。
另外,使用 Cloudflare for SaaS 接入 cf 时,不可以开启 Hotlink
防盗链功能,否则来自 static.echol.cn
的请求会被阻止。
虽然 Partner 后台已经无法再提供以前的 CNAME 接入功能,但如果不熟悉 cf 的话可以看一眼有哪些设置,如梦牛网络。
Backblaze B2 配置
带宽联盟中 Backblaze 到 Cloudflare 的所有出口流量完全免费。Backblaze 同时也提供 10G 的免费存储额度、每天 1G 的下载量和无限上传量。
老生常谈的内容,教程很多:使用 Backblaze B2 + Cloudflare CDN + PicGo 实现可自定义域名的 10G 免费图床解决方案
注意:在创建转换规则
时,在当传入请求匹配时...
中,需要填写你想要为静态资源分配的域名,如我的 static.echol.cn,而不是接入 cf 的
fallback.pil0txia.ml,否则将无法通过
static.echol.cn` 访问资源。
最后,你需要保存自己的:
- Endpoint
- Application keyID
- applicationKey (secret)
PicGo 插件
picgo-plugin-s3:上传至 AWS S3 兼容的 OSS
没有了 Github 上好用的反应慢的 imgbot,picgo-plugin-compress 插件可以在上传前压缩图片。目前只有 webp 可以正常使用。
设定的自定义域名为 https://static.echol.cn
文件管理器
以前用 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 的文件:
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 操作。
也可以创建一个新的存储库,然后将历史记录提交上去:
git push --mirror example.git
Freenom 免费域名自动续期
luolongfei/freenom: Freenom 域名自动续期。
给接入 cf 的 pil0txia.ml
续期。Koyeb
注册成功后一直没收到下一步邮件,遂部署在了 mogenius
上。