星图导航
首页 文章 排行榜 申请收录 友链申请 关于
首页 / 文章资讯 / 源码资源 / 自建图床稳不稳:踩过的坑与替代方案

自建图床稳不稳:踩过的坑与替代方案

星图导航配图

自建图床这件事,听着简单,做起来坑不少。我自己折腾过三回,前两次都是用了几个月就出问题,第三次才算稳定。这篇把踩过的坑说清楚,省得你再走一遍。

自建图床的三个死法

第一种死法是磁盘满。图片是只增不减的东西,一万张图看着不多,每张平均 300KB 就是 3GB。加上缩略图、备份,一年下来几十 GB 很常见。小机器 40G 的盘,撑不到一年。

第二种死法是被盗刷。图床的图片地址是公开的,有人把你的图贴到流量很大的地方,带宽直接被跑满。更恶劣的是拿你的图床当免费 CDN 用,一个页面挂几百张你的图。

第三种死法是数据丢。机器到期没续费、误删目录、硬盘坏了,图片全没了。图床上的图往往是你文章里唯一的副本,丢了文章就全是红叉。

这三个死法里,第一个可以靠扩容解决,第二个可以靠防护,第三个只能靠备份。三个都得防,缺一个早晚出事。

存储该怎么规划

别把所有图放在一个目录里。按年月分目录,比如 2026/11/,每个目录下的文件数量控制在几千以内。这样列目录、备份、迁移都不会卡。

文件名不要用原始名字。用户上传的图叫 微信图片_20261108.jpg 这种,重名率极高,也带隐私信息。统一重命名成时间戳加随机串,扩展名保留。

原图和缩略图分开存。原图放一个目录只做备份不对外,对外只提供压缩过的版本。这样既省流量,又保留了将来重新压缩的余地。

定期清理无用图。文章删了但图还在的情况很常见,写个脚本扫一遍数据库,把没被引用的图列出来,确认之后清掉。这一步一年能省下不少空间。

防刷是重点

第一层是防盗链。检查 referer,只允许自己的域名。这招能挡住大部分直接引用,但挡不住伪造 referer 的。

第二层是限速。按 IP 限制每秒的请求数和每天的流量,超过就返回一个占位图。nginx 的 limit_req 和 limit_conn 就能做。

第三层是签名。图片地址带一个有效期和签名参数,过期就失效。这招最狠,但会让图片没法被搜索引擎收录,也不方便分享,看你的取舍。

第四层是监控。统计每个 IP 的流量,发现某个 IP 一天下了几个 GB,直接封掉。这一步要自动化,人工看不过来。

还有一条经常被忽略:上传接口也要防。有人拿你的图床当网盘,传一堆不该传的东西。上传要做类型校验、大小限制、频率限制,最好加个人机验证。

备份怎么做才靠谱

最低要求是异地一份。同机房的备份没用,机房出问题两边一起没。

做法可以很简单:每天凌晨用 rsync 把图片目录同步到另一台机器,或者打包上传到对象存储。增量同步,只传新增的,速度快。

备份要能验证。定期从备份里随机抽几张图打开看看,确认没坏。很多人备份了一年,真要用的时候发现文件全是零字节。

保留策略建议是:最近七天每天一份,最近四周每周一份,更早的每月一份。图床的图变化不频繁,这个粒度够用。

还有一点,备份的目录结构要和原目录一致。不然恢复的时候要重新对应路径,几百个链接手动改,能改到崩溃。

访问速度怎么保证

图片是静态资源,最适合加缓存。nginx 里给图片目录设一个很长的 expires,比如一年,同时加上 immutable,浏览器就不会重复请求。

文件名带版本或者哈希。这样改图的时候换个名字,缓存自动失效,不用去清 CDN。

能上 CDN 就上。图床的流量特点很集中,几张热门图可能占了一半流量,CDN 命中率高,回源压力小。

图片本身要压。上传时就转成 webp,同时生成两三档尺寸,页面按需引用。这一步在服务端做,用户感知不到,但流量能省一大半。

如果服务器在境外,考虑给国内用户单独走一条线路,或者干脆把图放国内的对象存储,源站只做管理后台。

管理界面要有什么

最基础的三样:上传、列表、删除。上传支持拖拽和粘贴,列表能按时间倒序看,删除要二次确认。

再加一样很有用的:显示每张图被引用的文章。这样删图之前能知道会不会把某篇文章搞坏。

还有统计。每天的访问量、流量、热门图排行,这些数据能帮你判断哪些图该优化、哪些 IP 在刷。

管理界面一定要加登录,并且不能放在公开目录。图床后台被人摸进去,等于把服务器交出去了。密码别用默认的,登录加个失败次数限制。

给自己留一条退路

不管自建得多好,都要准备一个“图床挂了怎么办”的预案。最简单的做法是文章里插的图,同时在本地留一份,出了事能快速替换。

再进一步,图片地址用相对路径,不要写死带域名的绝对路径。将来换域名或者换图床,改一处配置就全部生效,不用满库替换字符串。

如果图片已经用了绝对地址,那就写一个批量替换脚本放在手边。真出事的时候,几分钟能跑完,比手动改几十篇强。

什么情况下别自建

如果你一年传不了几百张图,直接用对象存储更省事。自建图床的时间成本,远高于那点存储费。

如果你没有第二台机器做备份,也别自建。没有备份的图床等于把文章配图放在一个随时会消失的地方。

如果你不会做限流和防盗链,还是别自建。公开的图床地址一旦被刷,你的服务器会被拖垮,而且是被别人拖垮。

真要自建,就把上面这四件事做到位:分目录存储、防刷、异地备份、访问缓存。这四样齐了,才算能长期用。