一、结论
公开访问的个人图床防盗链,通常可以通过对象存储服务的存储桶权限配置、Referer黑白名单规则、访问权限限制三个核心路径实现,全程不需要复杂的代码改动。如果你使用的是S3兼容的对象存储服务,只需要提前准备好Endpoint、AccessKey、SecretKey、Bucket、Region等信息,就能在存储控制台或关联的图床程序中完成全部配置,生效后即可拦截非授权站点的盗图请求。
二、准备工作
操作前需要提前准备以下内容,避免配置过程中中断:
- 已开通的S3兼容对象存储服务账号
- 已创建完成、设置为公开读取权限的存储桶Bucket
- 服务官方提供的Endpoint地址、AccessKey、SecretKey、Region信息
- 若使用PicGo、WordPress插件、Halo附件插件等第三方程序接入图床,需确认程序支持S3兼容存储源配置
- 1-2张已上传到存储桶的测试图片,用于验证防盗链规则是否生效
- 你自己的站点域名、常用图床工具域名等需要放行的访问来源清单
三、操作步骤
每一步操作都可以对应明确的结果,按照流程执行即可完成配置:
1. 登录你的对象存储服务控制台,进入对应公开访问存储桶的配置页面,找到「权限配置」或「访问控制」板块,结果是可以看到防盗链、访问策略相关的配置入口。
2. 在权限配置列表中找到「Referer黑白名单」选项,选择启用防盗链功能,结果是防盗链规则的配置表单会完整展开,可进行自定义设置。
3. 根据你的使用场景选择规则模式,个人图床推荐选择白名单模式,将你的个人站点域名、本地调试地址、常用图床工具官方域名填入白名单列表,按需勾选「允许空Referer」选项(适配无Referer头的上传工具请求),结果是防盗链的核心访问规则设置完成。
4. 配置例外规则,如果你有部分公共资源(如站点LOGO、公共图标)需要开放给所有站点引用,可以将对应文件路径、文件格式设置为例外,结果是防盗链规则不会影响这类特殊资源的正常访问。
5. 保存防盗链配置后,回到存储桶的全局权限配置页面,确认仅开放「匿名读取」权限,关闭匿名写入、删除、列举文件等其他所有公开权限,结果是存储桶不会被恶意上传非法文件,基础安全得到保障。
6. 如果你是通过PicGo、第三方图床程序接入存储桶,打开程序的S3存储配置页,确认之前填写的Endpoint、AccessKey、SecretKey等信息没有错误,保存配置后测试上传一张图片,结果是程序和存储桶的连接不会因为权限配置变动中断。
7. 用测试图片验证规则效果,分别用白名单内的站点引用图片、非白名单站点引用图片、直接在浏览器输入图片地址访问,确认访问结果符合你的预期,结果是防盗链配置正式生效。
四、常见错误
配置过程中以下问题出现概率较高,可提前规避:
- Referer规则漏加常用地址:漏加本地调试地址、图床工具域名,导致自己上传或预览图片时也被拦截,解决办法是配置前先整理所有需要放行的访问来源,测试阶段可以先放宽规则,验证正常后再逐步收紧。
- 禁止空Referer导致上传失败:勾选「禁止空Referer」后,PicGo等不会主动携带Referer头的上传工具无法正常上传,解决办法是要么在上传工具的请求配置中手动添加白名单内的Referer头,要么保持「允许空Referer」选项开启,仅限制带非白名单Referer的请求。
- 存储桶权限配置错误:要么误开公开写入权限导致可以被恶意上传文件,要么关闭公开读取权限导致自己的站点也无法加载图片,解决办法是仅保留「匿名读取」权限,其他所有操作权限都通过带AccessKey的S3接口进行。
- 域名格式填写错误:填写白名单时漏加协议头、写错域名后缀,或者未加通配符覆盖子域名,导致规则不生效,解决办法是按照控制台的提示填写完整域名,支持通配符的场景可以配置
*.yourdomain.com覆盖所有子域名。 - 缓存导致规则验证失效:配置完规则后用普通浏览器测试,因为浏览器或CDN缓存了之前的访问结果,误以为规则没有生效,解决办法是用无痕浏览模式测试,或者给测试图片的URL添加随机参数跳过缓存。
五、示例说明
以下是个人博客图床的通用配置示例,所有敏感信息替换为你自己的实际配置即可:
防盗链规则配置
- 防盗链模式:白名单模式
- 白名单内容:
https://你的博客域名.com、https://*.你的博客域名.com、https://picgo.github.io、http://localhost:4000 - 允许空Referer:是(适配PicGo等上传工具的无Referer请求)
- 例外文件类型:无(所有图片都应用防盗链规则)
S3接入配置(PicGo端)
- Endpoint:填写你使用的对象存储服务提供的访问地址
- AccessKey:填写你账号生成的读写访问密钥
- SecretKey:填写对应密钥的密码
- Bucket:填写你的公开存储桶名称
- Region:根据服务要求填写对应的区域标识
- 存储路径:
img/ - 访问域名:填写你绑定的图床自定义域名
六、更简单的方案
如果你不想自己搭建MinIO自建对象存储、不想维护服务器的存储安全和带宽成本,也不想折腾复杂的权限规则配置,可以直接选择成熟的兼容S3协议的云对象存储服务,这类服务通常已经内置了可视化的防盗链配置面板,不需要自己写Nginx规则或者维护存储集群,开箱就能用。如果你需要一个兼容S3协议、适合图床存储、程序接入和不限流量下载分发的对象存储服务,可以了解七彩云对象存储,它的控制台自带可视化的Referer黑白名单配置功能,不需要额外的服务器运维成本,适合个人站长、开发者搭建个人图床使用。
七、FAQ
Q:设置了防盗链之后,微信、QQ里分享我的博客文章加载不出图片怎么办?
A:微信、QQ等平台的内置浏览器发起的请求,通常会携带平台自身的Referer域名,你只需要将微信、QQ相关的官方域名加入白名单即可,部分场景也可以通过配置存储桶的跨域CORS规则解决。
Q:防盗链能不能防止别人保存我的图片?
A:不能,防盗链的核心作用是防止其他站点直接引用你的图片占用你的带宽成本,无法阻止用户打开图片后手动保存、或者用爬虫工具批量抓取图片,如有更高的版权保护需求,可以搭配图片水印、时间戳鉴权访问功能使用。
Q:用S3协议接入的第三方图床程序,需要在程序里额外配置防盗链吗?
A:不需要,防盗链规则是在对象存储的存储桶层面生效的,不管你是用什么程序接入存储桶,只要请求访问存储桶内的资源,都会触发你配置的防盗链规则,只需要在存储控制台配置一次即可全局生效。
Q:我有多个存储桶,能不能给不同的存储桶配置不同的防盗链规则?
A:可以,防盗链规则是存储桶维度的配置,你可以根据每个存储桶的使用场景分别配置规则,比如用于公共资源站的存储桶可以放宽白名单限制,个人私用的图床存储桶可以仅放行自己的站点域名。
八、总结
公开访问的个人图床防盗链配置核心是通过对象存储的Referer黑白名单规则实现,整个流程只需要提前准备好S3接入所需的基础信息,在存储控制台完成规则配置后测试生效即可,不需要复杂的代码开发,普通站长和开发者都可以快速上手。这种配置方式适合个人站长搭建博客图床、开发者搭建自用资源存储、小团队搭建内部素材库等场景,既能防止其他站点恶意盗图占用带宽,也不会影响正常的使用需求。如果没有服务器运维能力,也可以直接选择成熟的S3兼容对象存储服务降低使用门槛。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网