tuio
发布于 2026-11-04 / 1 阅读
0
0

图床的防盗链、缓存和清理怎么做?

前言

我们在上篇文章《通过对象存储搭建图床》里把图床搭建好了,但是图床能用起来只是开始,真正用上一段时间,有三件事一定会找上门:

  • 防盗链:图片被陌生网站直接引用,流量账单在替别人买单;

  • 缓存:规则没配对,该省的流量省不下来,更新图片还会出岔子;

  • 清理:测试图、废弃图越攒越多,存储空间和目录结构一起失控。

本文就来讲一下如何处理这三件事。思路和操作都以图床这个场景为准,保证我们的图床基本就能长期稳定地跑下去。

图床防盗链.png

防盗链

图片有固定的外链 URL,任何网站拿到这条 URL 都能直接展示这张图——图片流量从你的对象存储流出,账记到你头上。这种"内容在他站、成本在你这"的引用就是盗链。发现的渠道通常有两个:一是上篇成本监控里说的流量曲线突然冒尖刺;二是有天你在别的网站或公众号里刷到了自己的图。

最常见的防线是 Referer 防盗链。浏览器每次请求图片,都会带上一个 Referer 头,标明这次请求从哪个页面发起。在 CDN 或对象存储的控制台里配置 Referer 白名单,只允许自己博客的域名,名单外的请求直接拒绝,这里补几个实际用下来才知道的细节:

  • 白名单把域名形态写全:裸域名、www 开头的都加上,别只写一条,免得自己的页面反而加载不出图;

  • 想清楚要不要允许空 Referer:访客把图片链接直接粘到地址栏打开、聊天工具里生成预览,这类请求不带 Referer。如果一刀切拦截,图单独打开就是 403,看起来像"图坏了"。个人图床一般建议允许空 Referer,拦的只是"别的网站成规模地引用";

  • 知道白名单的边界:Referer 可以被伪造,白名单防的是顺手牵羊,防不了故意绕过。真有需要保护的内容,用带时效的签名 URL,链接过期自动失效——代价是图床没法长期外链,公开的博客图床一般用不上这一档。

配完别急着关页面,自测一下再收工。curl 是命令行里发 HTTP 请求的工具,-I 表示只看响应头,-e 可以指定一个来源:

curl -I -e "https://你的博客域名" https://图床域名/photo.webp 

返回 200 说明白名单放行正常。把 -e 后面换成一个陌生域名再跑一遍,返回 403 就说明拦截生效了。最后不带 -e 跑一次(相当于空 Referer),结果和你控制台里的设置对得上,防盗链这块就算闭环了。

缓存

图片这种文件,传上去之后几乎不会变,天生适合缓存。缓存分两层:一层在访客的浏览器里,靠响应头里的 Cache-Control 控制,告诉浏览器这张图可以放心存多久;另一层在 CDN 的边缘节点上,离访客近的节点把热门图片存一份,请求在节点就结束了,不用每次都回到源站取。

衡量缓存有没有干活,看的是命中率:命中一次,节点直接把图返回给访客,不用回源;未命中才会回源站取一次图。CDN 面板里都有命中率曲线,图床这种场景跑起来命中率通常相当高,如果长期偏低,多半是缓存规则没覆盖到图片的真实路径,去核对一下规则里的目录写法。

缓存配上之后,最常遇到的尴尬是"图明明更新了,访客看到的还是旧图"。解法有两条,优先级很明确:

  • 版本化文件名是正路:文件名带上版本号或哈希(比如 photo-v2.webp),内容一变文件名就变,天然绕开旧缓存,上篇提过的哈希命名就是这个用途;

  • 控制台手动刷新是兜底:改了内容又不想替换文章里的 URL 时,才去 CDN 控制台提交缓存刷新,等它生效。

CDN控制台里缓存策略可以按目录自己配。命中率高的时候,同样的流量额度能服务更多访客;命中率低,回源那部分就是纯开销,额度自然经不起花。缓存这一层配好了,账单会自己告诉你值不值。

清理

图床的存储是安静膨胀的:写到一半弃稿的截图、同一张图传了三次只有一次被引用、随手传上去的表情包和测试图——单张都不大,架不住数量多。治理可以从三步入手:

  • 传之前定规范:按年份或按文章建目录,文件名保持可读(工具自动加的哈希没关系,让哈希前面有能看懂的前缀就行),将来排查和清理全靠它;

  • 删之前查引用:清理旧图前,先在博客后台全站搜索图片文件名或 URL,确认没有文章还在引用,不然图床这边删得干净利落,文章那边就变成一屏裂图了;

  • 长期靠规则:对象存储普遍支持生命周期规则,自动清理符合条件的前缀或旧版本。上篇文章给备份桶配的 30 天自动过期就是这一招;图床桶不能这么激进——图要长期在线——但可以给"临时测试"这类目录单独配一条短期过期规则,测试图就不用手动惦记了。

容量方面倒不用太焦虑。VMRack 的对象存储每月送 5GB 存储和 10GB 下行流量,按压缩后的单图 200KB 算,5GB 能放两万多张图,正常写博客很难用满。真正吃掉空间的从来不是正常配图,是没人管的测试图和重复上传,把清理的口子收住,额度就一直够用。

总结

图床从"能用"到"省心",就是把这三件事做扎实:

  • 防盗链:Referer 白名单配全域名形态、想清楚空 Referer,配完用 curl 自测一遍;

  • 缓存:长缓存交给 CDN,更新靠版本化文件名,命中率去面板里看;

  • 清理:目录命名立规范,删图先查引用,临时目录交给生命周期规则。

配完这一轮,图床就可以放心长期跑,流量账单基本不会再有意外。

sou-jest-QgpCKUzivIM-unsplash.jpg


评论