为博客图片配置七牛云 Kodo 存储,彻底杜绝盗刷流量

记录一次从“公开空间”到“私有空间 + CDN 防盗链”的完整折腾过程

我的博客(blog.nanyu.xin)使用的是 Anheyu 博客框架。随着文章越来越多,本地服务器的存储压力逐渐变大,于是决定把图片搬到云对象存储上。我选择了七牛云的 Kodo 服务,便宜、稳定,而且新用户有免费额度。

但是,对象存储最怕的就是盗刷流量——如果有人把你的图片链接贴到其他网站,或者直接用脚本疯狂请求,一天就能刷掉你几个月的套餐费用。为了避免这种情况,我需要一套比较完善的安全配置。

经过一番摸索(期间也遇到了一些坑),终于配置好了。下面是我的完整过程,希望对你有帮助。

💎 我的部署环境

  • 服务器管理面板:1Panel

  • 博客框架:Anheyu-app(基于 Golang + Vue3 构建)

  • 部署方式:Docker Compose

一、创建存储空间 —— 第一步就选“私有”

进入七牛云控制台 → 对象存储 Kodo → 新建空间。

关键点:访问控制一定要选择 “私有”。如果选了“公开”,任何人都能直接访问你的图片,防盗链效果会大打折扣。

创建完成后,记下你的 空间名称存储区域(比如我的是 my-anheyu-tupian,区域 华南-广东)。

二、绑定自定义域名并配置 HTTPS

七牛云提供的测试域名(如 xxx.clouddn.com)有诸多限制,而且不支持私有空间的高级配置。强烈建议绑定自己的域名

  1. 在七牛云 Kodo 空间管理 → 域名管理 → 绑定你自己的域名,例如 anheyutupian.nanyu.xin

  2. 按照提示去你的域名 DNS 服务商(如阿里云、腾讯云)添加 CNAME 记录,指向七牛云给出的地址。

  3. 申请 SSL 证书:七牛云提供免费的 TrustAsia 单域名证书,有效期为 90 天。在 CDN 域名的 HTTPS 配置 中申请并绑定。

    • 注意:申请时需要添加一条 TXT 解析记录 验证域名所有权。添加后稍等几分钟,验证通过即可签发证书。

    • 证书签发后,务必开启 HTTPS,否则博客(如果用的是 HTTPS)会因为混合内容而拦截图片。

三、CDN 访问控制 —— 防盗链的核心

图片存储的访问路径是:用户 → CDN 域名 → 七牛云私有存储空间。所以防盗链主要在 CDN 层 实现。

进入七牛云 CDN 控制台 → 域名管理 → 找到你绑定的域名(例如 anheyutupian.nanyu.xin)→ 访问控制

1. Referer 防盗链

  • 模式选择 “白名单”

  • 填入你博客的域名:blog.nanyu.xin 以及 *.nanyu.xin(通配符可以匹配所有子域名)。

  • 禁止空 Referer:取消勾选“允许空 Referer”。这样直接粘贴图片链接到浏览器地址栏也会被拒绝(返回 403)。

2. 回源鉴权 —— 必须开启

因为你的存储空间是 私有 的,CDN 必须获得授权才能从空间拉取图片。所以 “回源鉴权” 一定要设置为 “已开启”

如果这一步没开,你博客上的所有图片都会 403。

3. IP 黑白名单(备用)

目前可以不配置。如果以后发现某个 IP 疯狂刷流量,可以直接在这里拉黑。

四、Anheyu 博客存储策略配置

登录 Anheyu 博客后台(地址通常是 https://你的博客域名/login),找到存储策略配置的地方(一般在 后台 -> 系统管理 -> 存储策略,具体路径可参考官方文档)。

注意:由于我部署时使用了 1PanelDocker Compose,因此在 Anheyu 后台填入的配置项与标准部署方式完全相同,具体取决于后台的表单字段。

需要填写的关键项:

配置项 填写内容 说明
存储空间 my-anheyu-tupian 你在七牛云创建的空间名称
存储区域 华南-广东 与创建时一致
AccessKey / SecretKey 从七牛云“密钥管理”获取 注意保密
访问域名 https://anheyutupian.nanyu.xin 绑定的自定义域名,必须带 https://
私有空间 开启 这个开关非常重要!如果不开启,Anheyu 不会生成带签名的链接,导致访问失败
存储根目录 /anheyu 可选,方便管理文件

五、踩坑与解决

坑1:图片一直显示 “This image couldn’t be loaded”

原因:我忘记在 Anheyu 存储策略中开启 “私有空间” 开关。
解决:打开开关,保存,刷新博客 → 图片恢复正常。

坑2:HTTPS 证书验证失败

原因:申请证书时添加的 TXT 记录没有生效,或者主机记录写错了(应该是 _dnsauth.anheyutupian,而不是 _dnsauth.anheyutupian.nanyu.xin)。
解决:去 DNS 管理后台仔细核对记录值,等待生效后重新验证。

坑3:存储空间的 Referer 防盗链要不要开?

不要开。因为你的存储空间已经是私有模式,并且 CDN 已经开启了回源鉴权。如果存储空间再开启 Referer 防盗链,CDN 的回源请求可能会因为没有 Referer 而被拒绝,导致图片 403。CDN 负责防盗链,存储空间只负责私有鉴权,各司其职即可。

坑4:在 1Panel 中如何修改 docker-compose.yml 的环境变量?

原因:修改环境变量后,需要重启容器才能生效,但直接在 1Panel 界面操作有时容易遗漏。
解决:进入 1Panel容器编排,找到你的 anheyu 编排,点击编辑,修改环境变量后保存,1Panel 会自动应用更改并重启服务。或者你也可以直接修改服务器上的 .env 文件,再在 1Panel 界面中重建应用。

六、最终效果验证

配置完成后,你可以做两个测试:

  1. 正常访问:打开你的博客文章,图片应该正常显示。

  2. 盗链测试:复制一张图片的完整 URL,在浏览器的无痕模式中直接打开。此时因为 Referer 为空,且你设置了“禁止空 Referer”,所以应该返回 403 Forbidden

七、总结

现在的安全配置如下:

配置项 状态 作用
存储空间访问控制 私有 杜绝公开访问
CDN 回源鉴权 已开启 允许 CDN 拉取私有空间文件
CDN Referer 防盗链 白名单 + 禁止空 Referer 只允许博客域名访问
CDN HTTPS 已开启 + 有效证书 避免混合内容拦截
Anheyu 存储策略私有空间 已开启 生成带签名的临时链接

这套配置基本可以防止绝大多数恶意刷流量和盗链行为。当然,如果以后遇到更高级的攻击(比如伪造 Referer),还可以考虑开启 时间戳防盗链 或配置 IP 黑白名单,不过对于个人博客来说,目前已经足够安全了。

希望这篇博客能帮你少踩一些坑。如果你也使用 Anheyu + 七牛云,照着配一遍,应该就能安心使用啦。

博客框架:Anheyu-app
我的博客:南夕桥