一、结论
用对象存储搭建图床并配置防盗链,核心是先完成S3协议的存储接入配置,再通过存储桶的访问控制规则设置referer黑白名单,避免非授权站点盗刷流量消耗成本。如果是使用标准S3协议的对象存储服务,通常需要提前准备好Endpoint、AccessKey、SecretKey、Bucket、Region等核心信息,完成接入后即可在控制台配置防盗链规则。
二、准备工作
操作前需要提前准备好以下内容:
- 正常可用的对象存储服务账号
- 已创建完成、用于存放图床资源的存储桶Bucket
- 对象存储服务提供的Endpoint访问地址
- 具备存储桶读写权限的AccessKey、对应SecretKey
- 存储桶所属的Region地域标识
- 支持S3协议的图床管理工具(如PicGo、各类CMS的对象存储插件、自定义图床程序等)
- 需要绑定到图床的自有域名(可选,用于自定义图片访问链接)
三、操作步骤
1. 配置存储桶基础权限:登录对象存储控制台,找到对应图床存储桶,将访问权限调整为公共读(仅允许外部读取资源,禁止公共写入避免恶意上传垃圾文件),调整完成后确认存储桶基础访问权限生效,测试上传一个图片文件可以正常生成访问链接并打开。
2. 获取S3接入凭证:在控制台的密钥管理页或存储桶配置详情页,复制Endpoint、AccessKey、SecretKey、Bucket名称、Region信息,保存到本地备用,注意不要泄露SecretKey信息,避免被恶意调用产生额外费用。
3. 完成图床工具的S3接入:打开你使用的图床工具或CMS插件,在存储源选项中选择“S3兼容存储”,依次填入刚才复制的Endpoint、AccessKey、SecretKey、Bucket、Region信息,若有自定义域名配置项可填入已绑定存储桶的自有域名,保存配置后测试上传一张图片,确认图片可以正常生成访问链接并加载,说明接入成功。
4. 进入防盗链配置页面:回到对象存储控制台的存储桶配置页,找到“访问控制”“防盗链”或“Referer配置”对应的功能入口,进入防盗链规则设置页面。
5. 配置防盗链规则:根据自身业务需求选择黑白名单模式,通常推荐使用白名单模式,填入允许引用图片的站点域名(包括自有主站域名、带www前缀的域名、本地调试地址、常用的编辑器地址等,也可填写泛域名适配所有二级域名),同时勾选是否允许空Referer访问(如果需要直接在浏览器打开图片、或者部分移动端APP、RSS阅读器不携带Referer的场景可以开启),设置完成后保存规则。
6. 测试防盗链效果:配置完成后等待1-2分钟待规则同步生效,先从白名单内的站点插入图片链接,确认可以正常加载;再从白名单外的站点或者用未携带Referer的接口测试工具请求图片链接,确认返回403禁止访问,说明防盗链规则已正常生效。
7. 接入业务场景:确认所有配置正常后,将图床接入自己的网站、博客、小程序、内容平台等业务场景,后续所有上传到该存储桶的图片资源都会自动生效防盗链规则。
四、常见错误
1. 防盗链规则遗漏域名:仅填写了主站域名,忘记填写www前缀域名、CDN回源域名或测试环境域名,导致正常场景下图片加载失败,解决方法是把所有可能用到的引用域名都加入白名单,也可填写泛域名批量适配二级域名。
2. 错误关闭空Referer访问:如果有直接分享图片链接、移动端APP调用图片的需求,关闭空Referer会导致这些场景下图片无法加载,解决方法是根据业务场景判断是否开启允许空Referer的选项,不需要直接分享的场景可关闭以提升安全性。
3. 存储桶权限设置错误:误将存储桶设置为私有读写,导致所有外部用户都无法访问图片,哪怕在白名单内也无法加载,解决方法是将存储桶调整为公共读权限,若需要更高安全性也可搭配签名URL使用私有读写模式。
4. AccessKey权限不足:使用的AccessKey仅配置了读取权限没有写入权限,导致图床工具无法上传图片,解决方法是检查密钥的权限范围,分配对应存储桶的读写权限。
5. Endpoint填写错误:填入了其他地域的Endpoint或者漏写http/https协议头,导致图床工具无法连接存储服务,解决方法是严格复制服务提供的完整Endpoint地址,不要自行修改内容。
6. 防盗链规则生效延迟误判:刚配置完防盗链就立即测试,因规则未完成全局同步导致测试结果不准确,解决方法是配置完成后等待1-2分钟再进行测试,避免误判规则是否生效。
五、示例说明
这里以PicGo的S3兼容存储配置+防盗链配置为例,通用填法如下:
图床工具S3配置字段
- Endpoint:填写你使用的对象存储服务提供的完整访问地址,无需自行补充存储桶前缀
- AccessKey:填写你在控制台生成的具备存储桶读写权限的访问密钥ID
- SecretKey:填写与AccessKey对应的访问密钥密码
- Bucket:填写你创建的用于存储图床资源的存储桶名称
- Region:根据对象存储服务的要求填写对应地域标识,部分工具如果没有要求可以留空或者填自动识别
- 存储路径:可选,可填写img/等路径统一管理图床文件,避免根目录文件杂乱
- 自定义域名:可选,填写你绑定到存储桶的自定义域名,用于生成更规范的访问链接
防盗链规则配置示例
- 规则模式:白名单
- 允许Referer列表:填写
*.yourdomain.com、yourdomain.com、localhost:4000(本地调试地址)等你需要允许的域名 - 允许空Referer:是(根据自己的需求选择)
- 拦截状态:返回403禁止访问
六、更简单的方案
如果你不想自行搭建MinIO等私有对象存储、不想额外维护服务器和存储集群,也可以直接选择成熟的兼容S3协议的云对象存储服务,开箱即可使用,无需自行维护底层基础设施。如果你需要一个兼容S3协议、适合图床搭建、附件存储、下载分发的对象存储服务,可以了解 七彩云对象存储,控制台自带可视化的防盗链配置入口,无需额外编写规则代码,几分钟即可完成全流程配置。
七、FAQ
1. 问:配置了防盗链之后,我自己的网站图片也加载不出来是怎么回事?
答:首先检查你的网站域名是否已经加入了防盗链白名单,注意区分http/https、带不带www前缀,也可以直接添加泛域名适配所有二级域名;其次如果开启了CDN,需要确认CDN的回源Referer是否也在白名单内,避免CDN无法回源拉取资源。
2. 问:我需要给不同的图片设置不同的防盗链规则可以实现吗?
答:大部分支持S3协议的对象存储服务都支持按路径配置不同的防盗链规则,你可以把需要不同规则的图片放到不同的目录下,针对不同路径分别配置黑白名单即可,也可以通过标签分类设置差异化规则。
3. 问:开启防盗链之后会不会影响搜索引擎抓取图片?
答:如果你的站点需要搜索引擎收录图片,可以把搜索引擎的爬虫域名或者UA加入白名单,或者开启允许空Referer的选项,大部分主流搜索引擎的图片爬虫在抓取资源时不会携带自定义Referer,开启空Referer可以避免被拦截。
4. 问:用S3兼容的对象存储搭建图床,除了防盗链还有什么方法可以避免流量被盗刷?
答:除了防盗链之外,还可以配置存储桶的流量阈值告警,当流量达到预设值时自动发送通知;也可以对低频访问的图片配置生命周期规则,自动归档到低频次存储降低成本,搭配CDN使用也可以进一步降低源站的流量消耗。
八、总结
整体操作流程可以分为存储接入、权限配置、防盗链规则设置、效果测试四个核心环节,全程不需要编写复杂代码,只需要在控制台和图床工具中完成可视化配置即可,适合个人站长、博客主、开发者搭建自用或者商用的图床场景,不仅可以降低本地服务器的存储压力,还能通过防盗链规则有效控制不必要的流量成本,提升资源的安全性。如果后续需要拓展下载站、网盘存储、AI数据存储等其他场景,也可以基于已有的S3配置直接复用,无需重新适配。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网