兰空图床进阶配置:多存储策略与防盗链

兰空图床进阶配置:多存储策略与防盗链

夜影
2026-11-09 / 0 评论 / 7 阅读 / 正在检测是否收录...

兰空图床进阶配置:多存储策略与防盗链

兰空图床进阶配置:多存储策略与防盗链1.png

图床搭起来只是第一步。用上一段时间,真正让人头疼的是两件事:图片越存越多,本地磁盘先扛不住;链接被人到处盗用,流量白白烧掉。本文是兰空图床基础篇的进阶续篇,讲多存储策略怎么配、防盗链怎么做,都是在自家图床上实测过的配置。

一、多存储策略解决什么问题

兰空图床(Lsky Pro)默认只有本地存储:图片存在服务器硬盘上,访问走图床自己的域名。初期够用,跑上几个月就会撞上三堵墙:磁盘满、备份难、被盗链烧流量。

多存储策略就是把"图片存哪"拆开:本地存高频小图,对象存储存大图和冷数据,不同用户组走不同策略。再配上防盗链,链接只能在自己的站上用。

本文基于兰空图床 2.x 实测,部署环境是群晖 + 宝塔上的 Docker 容器。基础安装和粘贴上传插件的用法见旧文:利用兰空图床更加快捷的进行图片传输。

二、先搭好"分流",再谈配置

2.1 兰空支持哪些存储

Lsky Pro 2.x 内置的存储策略分四类:

存储类型适合场景成本参考
本地存储小图、封面、高频访问磁盘成本
S3 兼容存储大图、原图、冷备份R2 有免费额度,OSS/COS 按量
FTP / WebDAV已有现成存储空间看原有空间
其他对象存储七牛、又拍云等按量计费

我的实际分法是:文章配图走本地(访问快、备份跟着整站走),大文件和原图走 S3 兼容存储(不占 VPS 磁盘)。这样 VPS 磁盘常年保持在安全水位,图片丢了也能从对象存储侧找回。

2.2 新增一条 S3 兼容存储策略

以 Cloudflare R2 为例(免费额度对个人站很友好):

  1. 登录兰空后台,进入「管理 → 存储策略 → 添加策略」。
  2. 存储类型选「AWS S3」(R2 兼容 S3 协议,用这个类型)。
  3. 按 R2 后台给的参数逐项填写:Access Key / Secret Key(在 R2 的「管理 R2 API 令牌」里创建,只给当前 Bucket 的读写权限,不要用账号级密钥)、Endpoint(形如 https://<account-id>.r2.cloudflarestorage.com)、Bucket(提前建好的桶名)、Region(填 auto)、自定义域名(绑自己的子域名,如 img.yeyhome.com,并在 R2 侧开启公共访问;不要直接用 *.r2.dev 默认域名,它有访问频率限制)。
  4. 保存后点「测试连接」,返回成功再启用。测试失败先看 Endpoint 和密钥有没有多打空格,这是最常见的错。
实测提醒:自定义域名一定要走 HTTPS。R2 侧绑定域名后要等证书签发完成再测,否则图片能上传、打不开,排错会绕大弯。

2.3 策略怎么分流

  • 默认策略:后台「设置 → 上传配置」里指定,所有不指定策略的上传都走它。我把默认策略设为本地,保证博客配图的速度。
  • 按用户组分配:给不同用户组绑定不同策略,比如管理员走本地、普通访客走对象存储,避免公开上传把本地磁盘灌满。
  • 上传时指定:API 上传可带 strategy_id,Typecho 粘贴上传插件的设置里也有这个字段(见旧文),需要分流的场景直接填策略 ID 即可。

兰空图床进阶配置:多存储策略与防盗链2.png

三、防盗链:三道防线,别只靠一道

防盗链没有银弹,我的实测结论是:图床后台鉴权 + Nginx Referer 校验 + 对象存储侧防盗链,三道一起上,单道被绕过也不至于裸奔。

3.1 第一道:开启 URL 签名

兰空支持图片 URL 签名(后台「设置 → 图片鉴权」相关选项,不同版本位置略有差异):开启后链接带有效期签名,过期自动失效。代价是 CDN 缓存命中率会下降,我的做法是博客正文配图不签名(需要长期稳定、被 CDN 缓存),临时分享的大文件链接才签名,分场景取舍。

3.2 第二道:Nginx Referer 白名单(最常用)

图床前面如果有 Nginx 反代(我的图床就是宝塔 Nginx 反代到容器),加一段 Referer 校验最直接:

location ~* \.(jpg|jpeg|png|gif|webp)$ {
    valid_referers none blocked server_names
                   *.yeyhome.com yeyhome.com;
    if ($invalid_referer) {
        return 403;
    }
}

注意两点:none 允许直接访问(浏览器地址栏打开、RSS 阅读器等场景需要),不要把 none 去掉,否则自己的 RSS 订阅和微信里点开图片都会 403;白名单要写全,通配符 *.yeyhome.com 别漏。改完重载 Nginx(nginx -s reload 或宝塔面板点重载),用无痕模式测一遍。

验证方法,用 curl 模拟盗链:

# 模拟自己站引用,应返回 200
curl -I -e "https://www.yeyhome.com/" https://lsky.yeyhome.com:8666/i/2026/11/09/xxx.png
# 模拟外站盗链,应返回 403
curl -I -e "https://evil.example.com/" https://lsky.yeyhome.com:8666/i/2026/11/09/xxx.png

3.3 第三道:对象存储侧防盗链

走 S3 兼容存储的图片,Nginx 那道防线管不着(流量直接走对象存储域名),要在对象存储侧再设一道:R2 在 Bucket 设置里配 Referer 白名单或用 Worker 做鉴权;阿里云 OSS / 腾讯云 COS 控制台直接有「防盗链」设置,填白名单域名即可。注意:对象存储侧的白名单要把图床域名和博客域名都加上,否则图床后台预览图自己都打不开——这个坑我踩过,排查了半小时才发现是白名单漏了图床自己的域名。

四、实测结果:盗链前后对比

场景开启前开启三道防线后
本站文章内图片正常显示正常显示
外站直接引用图片链接正常显示(被白嫖)403,显示破图
微信内点开图片正常显示正常显示(空 Referer 放行)
RSS 阅读器加载图片正常显示正常显示
盗链者伪造空 Referer 抓取正常显示仍能打开(已知局限)

最后一行是实话:Referer 防盗链防的是"随手引用"的君子,防不住刻意伪造 Referer 的爬虫。真要防死,得上 URL 签名 + 短期有效期,但那会牺牲 CDN 缓存和 RSS 体验。个人小站做到"随手引用打不开"这个程度,性价比最高。

五、避坑清单

  1. 删策略不等于删图片:后台删除存储策略只删配置,对象存储桶里的文件还在。换策略前先确认图片已迁移或不再需要。
  2. 密钥只给最小权限:R2 / OSS 的 API 密钥只授权当前 Bucket 的读写,别用账号级密钥,泄露了别人能清空整个桶。
  3. 自定义域名先配 HTTPS 再启用:对象存储绑定域名后证书签发要几分钟,证书没好就启用策略,图片能传不能看,报错还不直观。
  4. 签名和 CDN 缓存冲突:开了 URL 签名又套了 CDN,缓存键要包含签名参数,否则 CDN 会把带旧签名的图片缓存下来,过期后全站破图。
  5. 插件里的策略 ID 要同步改:Typecho 粘贴上传插件里填了 strategy_id 的,换策略、删策略后记得同步更新,否则上传会报策略不存在。
  6. 本地磁盘也要留监控:多策略不等于不用管本地盘。本地策略的图片继续增长,配合群晖的存储空间告警设个阈值,备份思路见旧文:群晖 3-2-1 备份方案:Hyper Backup + 快照 + 异地备份一次配好。

六、怎么回退与卸载

进阶配置都是可逆的,不用怕改坏:切回单策略,把默认策略改回本地,新上传就走本地,已存对象存储的图片链接不受影响;删除多余策略,后台直接删,文件保留在对象存储桶里,之后手动清理桶即可;关掉防盗链,Nginx 那段配置注释掉并重载,对象存储侧白名单清空,立刻恢复开放访问;彻底停用图床,先导出图片清单(后台图片管理可按策略筛选),再把各策略桶里的文件下载备份,最后停容器、删目录——图片外链会随之失效,博客正文要批量替换回本地路径,所以大图上对象存储之前,先想好这一步。

写在最后

多存储策略和防盗链,本质上都是"图床长大之后"的必修课:存储要分流、流量要设防、密钥要最小权限。配置本身不复杂,复杂的是想清楚自己站点的图片分哪几类、每类走哪条路、每条路配什么防线。配好之后,图床就能从"能用"变成"耐用"——磁盘不爆、流量不被白嫖、换策略也不慌。

相关旧文

0

评论 (0)

取消