为什么要折腾?
随着博客里面的图片越来越多,图片都放public目录带来的负担越来越大。
一来仓库里图片文件太多太杂不方便管理,二来我也不想把图片都放仓库里,即使是私有仓库。
哈吉米直言还有这些问题:
- Git 仓库变得异常臃肿
- 拖慢构建和部署速度(CI/CD)
- 不利于图片管理和优化
借着这次博客重构,就顺便也把图片全部迁移到对象存储吧。
我的想法是这样
设想
核心诉求是 “国内外分流”:国内要快,国外要省。
根域名elvish.me虽然托管在Cloudflare,只需要把子域名assets.elvish.meNS托管到 腾讯云DNS 就能利用腾讯云灵活的“境内/境外”分流解析
- 境外走R2,虽然只有10GB,但是访问AB类操作都只按次数计费,额度也很高。
即使每张图片都按照现在最大的图片1300KB来计算,也能放下近3.5w张图片,应该管够。
- 国内打算走缤纷云,免费给50GB,有余额就可以设置为公开桶。
实践
先在 Cloudflare 创建了一个R2 存储桶,然后连接到域assets.elvish.me
Cloudflare 创建了一个CNAME记录指向这个存储桶,我一看不给我看CNAME记录值.

于是再添加了一个自定义assets-r2.elvish.me,打算在腾讯DNS把境外通过CNAME指向这个域,希望能正确路由。
结果到 缤纷云 添加域名的时候不认国内CNAME解析。
取消设置腾讯NS,把解析还给Cloudflare才让 缤纷云 验证通过。
然后犯傻了,忘记把子域名NS设置回腾讯云了,折腾了半天没效果 (TTL害了我)
解决Cloudflare路由问题
总之,最终两边存储桶的域名都绑定好了,测速时发现了境外Cloudflare节点全线爆红522

用国外节点访问网址,果然是Cloudflare 522报错页面,看来边缘节点到R2的路由还是不对。
这时我想起之用来优选时折腾过的Cloud Connecter规则,这应该才正解。
- 导航到
Domains→elvish.me→Rules→Cloud Connecter - 选择对应的R2储存桶,选择一个已经与这个R2绑定的域,这里我把
assets.elvish.me与R2解绑了,改为绑定到assets-r2.elvish.me - 编辑规则:
主机名通配符assets.elvish.me

主机名通配符assets.elvish.me

保存这个规则就可以了
最后在 腾讯云DNS把assets.elvish.me来自境外的请求解析到Cloudflare的边缘节点上就行了,这里我填的CNAME assets-r2.elvish.me
总结
现在再进行测速:

所有结果都是200了 国内全深绿,境外到Cloudflare也是非常快的深绿
R2按照次数计算我倒不是很担心,国内的存储对象我很怕把每月的出口流量用完,因此最后又给 缤纷云 套了一层 Edgeone 的CDN。
最终的结构如下:
现在,我的 Git 仓库回归了“纯净文本”状态,图片加载速度也起飞了。善~
Footnotes
- A7M4拍摄 → LR导出为JPG → 裁剪转化为WEBP ↩

评论加载中...