3
0
0

阿里云 ESA + OSS 搭建个人网站图床

文章摘要
|

阿里云 ESA + OSS 搭建个人网站图床

背景

我的个人网站最开始搭建的时候,文章中图片等附件采用的是 Halo 的本地存储,直接保存在服务器上。当时文章少的时候没问题,上传一张图,Halo 放进 /upload/,正文里引用一下,能显示就行。

但网站慢慢积累到四十多篇文章以后,本地存储的问题开始慢慢浮现了。

首先,图片是流量大户,大量图片直接放在 ECS 上,既占存储空间又消耗带宽,处理图片请求还会占用 CPU 和内存。

其次,现在的存储策略导致,图片“属于 Halo”,Halo 又跑在 ECS 上。文章、附件、CMS、服务器,实际上绑在了一起。以后换服务器要搬附件,换主题要考虑附件兼容,甚至哪天不用 Halo 了,历史文章里还留着一堆依赖旧站点的 /upload/xxx.webp

博客架构迁移对比图

为了解决这些问题,我决定搭建一个图床。

什么是图床

图床是一种专用于存储图片并对外提供访问链接的网络服务。用户将图片上传至图床后,可获得一个对应的 URL,其他用户或应用程序通过该 URL 即可加载或引用该图片。

什么是图床

与将图片直接存放于网站应用服务器(ECS)的做法不同,图床将图片的存储和分发独立出来,使网站业务逻辑与图片资源相分离。图片请求通常占用大量带宽和 I/O 资源,将图片迁移至图床后,ECS 不再需要处理图片的存储、读取和传输,从而释放了 CPU、内存、磁盘 I/O 和网络带宽。ECS 只需专注于处理动态请求和业务逻辑,负载明显降低。

对于需要频繁插入图片的博客、内容管理系统或论坛而言,图床提供了一种标准化的图片托管方式,避免图片与文章内容耦合,也降低了多平台发布时的重复上传成本。

如何搭建图床

传统的图床服务在架构上通常采用“对象存储 + CDN”的双层结构。

存储层是图床的基础,一般由对象存储服务(Object Storage Service,简称 OSS)承担。OSS 的本质是用于存放文件的云存储空间,每个文件在存入后都会获得一个对应的访问 URL。与传统的服务器硬盘存储不同,OSS 采用扁平化的命名空间设计,天然适合存储图片这类非结构化数据,支持海量文件的扩展与高并发访问。但直接通过 OSS 的域名访问图片,流量费用较高。

分发层则用于解决访问速度和成本的问题,由内容分发网络(Content Delivery Network,简称 CDN)承担。CDN 将图片缓存到遍布全球的边缘节点上,当用户请求一张图片时,CDN 会将请求调度到离用户最近的节点,直接从该节点返回图片。如果该节点尚未缓存这张图片,CDN 会回源到 OSS 获取一次,后续请求便不再经过 OSS。

这两层共同构成了图床的核心骨架:OSS 负责存储,CDN 负责加速分发。对于博客网站而言,作者只需将图片上传至 OSS,拿到 CDN 加速后的 URL,在文章中直接插入该链接即可。读者访问博客时,图片从离自己最近的 CDN 节点加载,既不需要经过博客所在的 ECS 服务器,也不需要直接访问 OSS——图片的存储和传输被完全剥离了出去。

使用阿里云 ESA 搭建图床

不同于传统的 CDN 图床搭建方案,我采用了阿里云的 ESA 搭建图床。

阿里云 ESA,全称边缘安全加速(Edge Security Acceleration),是阿里云新一代的云服务产品。它本质上是一个把 CDN 加速、安全和边缘计算打包在一起的东西。它并没有传统 CDN 那种“只管加速、安全另买”的模块化思路,也谈不上像全站加速 DCDN 那样只是老产品的功能叠加。这么看,阿里云 ESA 并不是一个十分强力的传统 CDN 替代方案。

孩子们,喜欢我阿里云官方支持的用量封顶 + 刚出来一年,50 多块钱、比同额度 CDN 还便宜的基础版吗?MAN!

HTTPS 请求、WAF 请求、拦截流量统统不收费——传统 CDN 里不少东西还得另外算钱。自带官方用量封顶,达到阈值直接停站,不怕半夜睡醒喜提天价账单。边缘函数、Pages、免费证书、WAF、Bot 管理也全塞进来了。

别的云产品干一件事收一份钱,ESA 把加速、安全、计算糅在一起。关键是,流量用完了它自己会停——财务熔断,是真的会断。

ESA 基础版价格

个人搭建记录

OSS

搭建图床首先需要一个 OSS,建立一个 Bucket 用于存储图片,原本考虑的是 Cloudflare R2,可以每年白嫖额度,但是卡在付款上了。最终还是选择国内的阿里云 OSS。

OSS 创建很简单,建了一个专门放博客图片的 Bucket,标准存储,设置成 private,禁止公共访问。

创建 OSS Bucket

ESA

我原来打算做传统的 CDN 方案,但是刚好阿里云最近一直在做活动,推广 ESA,于是综合权衡了下直接换到了新一代的 ESA。

ESA 如何和 OSS 联动起来呢?建立一个图片域名,然后 ESA 保护它,用户请求图片的时候,如果缓存未命中,ESA 带授权访问 OSS,拿到图片,缓存命中,ESA 直接返回图片,这样的话图片请求直接和 ECS 解耦。

图床是怎么工作的

ESA 本体的话,设置好用量封顶,这个官方支持的用量封顶,相比于传统 CDN 可能半夜给你干出天价账单,ESA 可以指定一个“用量阈值”,比如 5 分钟/1 天用量大于 x GB,图床直接下线。然后其它的各种安全功能可以开一下。

ESA 用量封顶设置

迁移到图床

迁移很简单:把当前文章真正使用的图片上传到 OSS,然后批量把正文和封面中的 /upload/... 替换成新的图片域名。

迁移完成后,文章图片不再依赖 Halo Attachment。以后本地发布文章时,也直接把图片上传到 OSS,再把图片 URL 写进 Markdown。

结尾

最终网站架构如下:

图片
→ OSS
→ https://图片域名/...

文章
→ Markdown
→ Halo

其实网站搭建之初就考虑过图床,但是当时没做,现在属于是在技术债堆起来之前主动“重构”了一些。现在 Halo 管内容,OSS 管资产,ESA 管图片公网入口。这次图床搭建,不只是减轻了 ECS 的负担,同时也让文章和 Halo 解耦,便于管理和迁移,为后续的升级和探索扫清了障碍。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

阿里云 ESA + OSS 搭建个人网站图床
/archives/aliyun-esa-oss-image-bed
作者
若离
发布于
2026-08-15
许可协议
CC BY-NC-SA 4.0

评论