存储与 CDN
存储与 CDN(302 卸带宽)
imgli 支持 本地盘、S3 兼容对象存储、WebDAV。生产推荐:对象存储存原图,应用做鉴权门禁,公开图 302 到 CDN 域名,把带宽从应用节点卸掉。
概念
| 概念 | 说明 |
|---|---|
| 存储策略 | 后台配置的一组驱动参数;可切换默认策略 |
| 对象键 | 按可见性使用 public/ / private/ 等前缀(表面迁移后) |
| 应用门禁 | 浏览器先打到你的 base_url(如 /i/{key}),再决定 302 或回源 |
| CDN 域 | 策略上的公网加速域名;只应服务可公开的对象 |
| 预签名 | 私有图可短时预签名直连对象存储,或经应用流式输出 |
本地存储
- 文件落在
IMGLI_DATA_DIR - 适合个人/内网;公网大流量时磁盘与出口带宽会成为瓶颈
- 备份 = 拷贝 data 目录(含 DB 与对象)
S3 兼容
后台填写(名称因 UI 可能略有差异):
- Endpoint、Region、Bucket
- Access Key / Secret
- Path-style 强制(MinIO 常见需要)
- (可选)CDN 域名、
presign相关域名
桶必须默认私有:关闭匿名 GetObject / ListBucket。
已验证与社区矩阵见 S3 兼容。
WebDAV
独立驱动,适合已有 WebDAV 的网盘/NAS。能力与预签名模型与 S3 不同,按后台字段配置即可。
CDN 302 推荐拓扑
用户浏览器
→ https://img.example.com/i/{key} # 应用门禁(鉴权、计量、私有检查)
→ 302 https://cdn.example.com/... # 仅公开对象
→ 源站对象存储 / 回源
要点:
- CDN 不要匿名暴露
private/*。 - 应用层已保证:CDN URL 不会为 private 键生成(纵深防御仍要求桶 ACL 正确)。
- 私有图:短 TTL 预签名或走应用;勿把完整私有 URL 贴到公共 Issue。
匿名探测
部署后对私有对象跑:
./scripts/probe-private-object-anon.sh 'https://your-bucket-or-cdn/private/.../object.ext'
期望 非 2xx。若 200,说明桶/CDN 层 S4 失败。
月流量计量(若版本已启用)
- 在应用门禁放行时按属主记账(自然月,时区以实现为准,当前产品默认 Asia/Shanghai 语义)。
- 用户组可配置月配额;用尽后直链返回超限(上传策略另见组限)。
quota=0表示不限制。
自托管可按用户组自由配置;公共实例运营默认值见 公共实例。
切换 / 迁移存储
- 新策略可在后台添加并切换默认;存量对象是否搬迁取决于版本是否提供
storage-migrate与运维剧本。 - 切换前备份 DB;确认旧桶在迁完前不要删。