惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
I
InfoQ
Engineering at Meta
Engineering at Meta
Jina AI
Jina AI
Recent Announcements
Recent Announcements
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
D
Docker
Microsoft Security Blog
Microsoft Security Blog
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
GbyAI
GbyAI
博客园 - Franky
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 叶小钗
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog RSS Feed
WordPress大学
WordPress大学
MyScale Blog
MyScale Blog
月光博客
月光博客
罗磊的独立博客

竹林里有冰的博客

Nuxt SSG 博客的尾斜杠到底怎么加? | 竹林里有冰的博客 小米 Xiaomi Book Pro 14 (Ultra X7) Linux 兼容性实测 | 竹林里有冰的博客 国内(大陆)版小米 FCM 熄屏断连:Rootless 环境下的尝试与可能的解决方案 | 竹林里有冰的博客 我没法访问 dl.google.com —— 记一次 TUN 下的网络 debug | 竹林里有冰的博客 Vercel 的缓存控制,你注意过吗? | 竹林里有冰的博客 小记 —— Caddy 在 Layer 4 上的流量代理实践 | 竹林里有冰的博客 你的域名后缀拖慢你的网站速度了嘛?——再谈 DNS 冷启动 | 竹林里有冰的博客 DNS 冷启动:小型站点的“西西弗斯之石” | 竹林里有冰的博客 HTTP/2 Server Push 已事实性“死亡”,我很怀念它 | 竹林里有冰的博客 Nuxt Content v3 中数组字段的筛选困境与性能优化 | 竹林里有冰的博客 后 OCSP 时代,浏览器如何应对证书吊销新挑战 | 竹林里有冰的博客 初试 Github Action Self-hosted Runner,想说爱你不容易 | 竹林里有冰的博客 DNS 解析延迟毁了我的图床优化 | 竹林里有冰的博客 Vue Markdown 渲染优化实战(下):告别 DOM 操作,拥抱 AST 与函数式渲染 | 竹林里有冰的博客 Vue Markdown 渲染优化实战(上):从暴力刷新、分块更新到 Morphdom 的华丽变身 | 竹林里有冰的博客 node-sass 迁移至 dart-sass 踩坑实录 | 竹林里有冰的博客 前端中的量子力学——一打开 F12 就消失的 Bug | 竹林里有冰的博客 2025 年,如何为 web 页面上展示的视频选择合适的压缩算法? | 竹林里有冰的博客 el-image 和 el-table 怎么就打架了?Stacking Context 是什么? | 竹林里有冰的博客 2025年,前端如何使用 JS 将文本复制到剪切板? | 竹林里有冰的博客 ssh 拯救世界——通过 ssh 隧道在内网服务器执行 APT 更新 | 竹林里有冰的博客 Cudy TR3000 吃鹅(daed)记 | 竹林里有冰的博客 使用 Cloudflare Workers 监控 Fedora Copr 构建状态 | 竹林里有冰的博客 基于 Cloudflare Workers 实现的在线服务状态检测告警系统 | 竹林里有冰的博客 构建部署在 Cloudflare Workers 上的 TG Bot | 竹林里有冰的博客 2024年,Firefox 是唯一还在坚持执行在线的 SSL 证书吊销状态检查的主流浏览器 | 竹林里有冰的博客 小爱课程表适配不完全指北——以 ZJUT 本科正方教务系统为例 | 竹林里有冰的博客 将博客从 waline v2 更新到 waline v3 | 竹林里有冰的博客 给家里云装上 Fedora 41 KDE 后,我是如何配置的 | 竹林里有冰的博客 为 Hexo 添加 follow 认证 | 竹林里有冰的博客
自建图床小记一——图床架构与 DNS 解析 | 竹林里有冰的博客
竹林里有冰 · 2024-08-12 · via 竹林里有冰的博客

一直以来,我使用的都是使用付费的第三方图床,可惜最近几年为了节省成本,境内的稳定性出现了一些问题。过去一年中光是我本人遇到的无法访问的情况就有三四次,其中两次持续时间超过 2 小时,甚至有网友特意来 at 我告知我博客使用的图床出问题了,还有两次是在我作品验收前 24 小时内出现,幸亏我及时切换了资源链接。此外,境外 CDN 也从原先的 Cloudflare 换掉了,目前海外的解析结果似乎只有一个在美国的节点,其余地区(尤其是日本香港新加坡等常用的落地地区)的访问质量不佳,Google 的 page speed test 甚至提示我的图片拖慢了网站加载速度。

基于上述种种原因,我开始选择自建图床,前前后后折腾了快一周后,新图床终于投入使用,目前我的博客已经完成了所有图片资源的切换。

架构设计#

图床架构设计图图床架构设计图

这一套架构使用 Dnspod 免费版实现在境内外的解析分流,将境内的流量导向又拍云 CDN 为境内的访客提供服务,在境外使用量大管饱的 Cloudflare CDN 节省成本,为全球提供加速访问。

为什么是又拍云#

如你所见,我的博客底部挂了又拍云的 logo。又拍云联盟为个人开发者提供了每个月 10GB 存储和 15GB 的免费 CDN 流量,在每年通过申请后会以 67 元无门槛代金券的形式发放到账号,也不用担心某个月超了一点点而付出额外的费用。

相比之下,七牛云虽然控制台的前端 UI 不错,但出了这种事情导致其在我心里印象分极差: 「从山西联通到组播IP:七牛云的奇怪视角(附分析和后日谈)Archived Here

为什么是 Cloudflare R2#

作为自己的图床,必须要保证稳定性,境内访问的稳定性可以先放到一边,最重要的就是保证源文件的稳定性。不同于在自己的 VPS 上存储图片的方案,使用 Cloudflare R2 作为储存不需要关注 VPS 到期以后的图片迁移问题。使用 Cloudflare R2 作为储存,免费用量对于个人站点来说绰绰有余,在 10GB 存储容量超出之前不用考虑别的问题,也不用担心资金支持不下去导致的麻烦。而不使用又拍云提供的 10GB 存储也可以节省这部分的代金券金额,让代金券尽可能多的抵扣境内 CDN 流量带来的费用。

需要的东西#

  • 两个或两个以上的域名(其中一个需要备案)
  • Cloudflare 所支持的境外支付方式(PayPal 账号 / Visa Card / Master Card),用于开通 Cloudflare R2 和 Cloudflare SaaS 接入
  • 很多很多钱(其实没有很多,又拍云联盟每年的 67 元抵用券在我这里看来完全是够用的)
  • 聪明的大脑,能够快速敲击键盘的双手,能够支持你熬夜的心脏

* 在这一套架构中引入了香港 VPS 进行反向代理,一来是防止国内 CDN 与 Cloudflare 的网络连接质量过差导致的回源失败,二来也是方便我在没有国际联网的情况下进行图片的上传,但如果没有条件其实是可以去掉的。

DNS 解析方案 1DNS 解析方案 1

如上图,将图床域名 NS 接入 DnsPod,工具人域名 NS 接入 Cloudflare 即可实现境内外分流的效果。

  1. 图床访问域名在境外 CNAME 解析到工具人域名
  2. 图床访问域名在境内 CNAME 解析到境内 CDN 服务商
  3. 工具人域名在 Cloudflare 上解析到任何站点都行,只需点亮解析时 Cloudflare CDN 代理按钮即可生效。

代理按钮代理按钮

但如果你的备案域名已经通过 NS 接入了 Cloudflare,可以采用下面这套架构。

DNS 解析方案 2DNS 解析方案 2

* 解析方案 2 中的图床访问域名和工具人域名可以是同属于同一二级域名的不同子域名

这种方案要多一步,把图床访问域名 CNAME 解析到用于分流的工具人域名。

Cloudflare SaaS 接入#

SaaS 接入SaaS 接入

SaaS 接入大概就是如图所示,此外还要配置 Cloudflare Workers 的域名访问

Cloudflare Workers 域名访问Cloudflare Workers 域名访问

这样就能保证在境外访问图床域名时将请求打到 Cloudflare Workers 上了,关于使用 Cloudflare Workers 构建图床 Restful API 相关的内容我放在下一篇博客讲。

参见#