一、结论
图床对外提供图片外链时设置防盗链,核心是通过对象存储的访问控制规则,限制仅指定域名的请求可读取图片资源,避免被盗链消耗带宽成本。如果使用S3兼容的对象存储搭建图床,需要先准备好Endpoint、AccessKey、SecretKey、Bucket、Region等S3接入信息,再在存储桶的防盗链配置页添加允许的Referer白名单即可完成设置。
二、准备工作
操作前需要提前准备好以下内容:
- S3兼容的对象存储服务账号,且账号已开通存储桶读写权限
- 已创建完成、正在作为图床存储源使用的存储桶Bucket
- 对应存储桶的Endpoint地址、AccessKey、SecretKey、Region信息
- 需允许访问图片的域名列表,包括自有站点域名、CDN回源域名、需放行的搜索引擎域名等
- 已绑定S3存储的图床相关程序或工具,比如PicGo、WordPress存储插件、自建图床程序等
- 至少1条已验证可正常访问的测试图片外链,用于后续配置生效验证
三、操作步骤
1. 登录所用对象存储服务的控制台,在存储桶列表中找到当前用作图床的存储桶,点击进入存储桶的配置管理页面,结果:可看到访问控制、权限配置、安全设置等相关功能菜单。
2. 在配置菜单中找到「防盗链设置」或「Referer白名单配置」入口,点击进入防盗链配置页面,结果:可看到白名单添加框、空Referer允许开关、拦截动作选择等配置项。
3. 按照格式要求填写允许的Referer域名白名单,比如自有站点域名填https://*.your-domain.com覆盖主站和所有子站,需允许搜索引擎抓取则添加对应搜索引擎的域名规则,结果:所有在白名单内的域名发起的图片访问请求会被默认放行。
4. 根据业务场景选择是否允许空Referer请求,若需要支持用户直接在浏览器地址栏打开图片、或适配小程序、APP端无来源的图片请求则开启该开关,仅允许站点页面引用图片则关闭,结果:可精准控制无来源标识的请求是否能访问图片资源。
5. 确认配置无误后点击保存,防盗链规则一般会在1-5分钟内正式生效,结果:所有指向该存储桶的图片访问请求都会遵循已设置的防盗链规则进行校验。
6. 测试防盗链配置是否生效,首先用白名单内的站点页面插入测试图片,确认可正常加载,再用未加入白名单的域名引用图片、或关闭空Referer后直接访问图片链接,确认返回403拒绝访问状态,结果:验证防盗链配置符合预期需求。
7. 若你的图床是通过PicGo、Halo、WordPress插件、自建图床程序等S3兼容工具接入的存储,无需修改程序侧的任何配置,防盗链规则在存储层直接生效,结果:原有上传、外链生成、资源调用逻辑完全不受影响。
四、常见错误
1. Referer域名格式填写错误,比如未加http/https协议头、通配符位置填写错误(如把*.www.7caiyun.com写成example.*),导致合法域名也被拦截,解决建议:参考控制台给出的格式示例填写,通配符仅可放在域名前缀位置,所有域名必须携带对应协议头。
2. 误关闭必要的空Referer权限,导致用户直接访问图片链接、小程序或APP端无Referer标识的请求被拦截,解决建议:若存在上述场景则打开允许空Referer的开关,若不需要则保留关闭状态进一步提升资源安全性。
3. 配置防盗链后图床上传工具无法正常上传文件,解决建议:防盗链规则仅限制GET、HEAD等读请求,上传、删除等写请求不受Referer规则限制,若上传失败需检查AccessKey、SecretKey是否正确,以及密钥是否拥有存储桶的读写权限。
4. 存储桶访问权限与防盗链规则冲突,比如存储桶设置为私有访问,即使防盗链放行了对应域名也无法正常加载图片,解决建议:先确认存储桶的访问策略为公共读,或已给所有图床资源设置了公共读的ACL权限。
5. 配置防盗链后CDN加速的图片全部无法加载,解决建议:若图床前配置了CDN加速,需要将CDN服务商提供的回源域名添加到Referer白名单中,避免CDN回源请求被拦截导致资源无法加载。
五、示例说明
以下为通用的图床防盗链配置示例,所有字段无需填写真实信息,可根据自身实际场景替换:
- 允许的Referer白名单:
1. https://*.your-personal-site.com(个人博客所有子站域名)
2. https://*.search-engine.com(允许搜索引擎抓取展示图片)
3. https://回源域名.your-cdn-provider.com(CDN服务的回源域名)
- 允许空Referer:开启(适配APP、小程序访问场景)/ 关闭(仅允许站点页面引用)
- 拦截动作:返回403 Forbidden状态码
- 生效范围:当前存储桶内所有图片、附件资源
若你使用PicGo、Cloudreve等S3兼容工具作为图床上传端,无需修改工具内的S3配置,防盗链规则在存储侧生效,原有上传、外链生成逻辑保持不变。
六、更简单的方案
如果不想自己搭建MinIO等开源对象存储、不想维护服务器存储硬件和带宽资源,也不想手动编写复杂的访问控制规则,可以选择成熟的兼容S3协议的云对象存储服务,这类服务一般都内置了可视化的防盗链配置入口,无需编写代码即可快速完成设置,开箱即用。如果你需要一个兼容S3协议、适合图床搭建、资源下载分发和各类程序接入的对象存储服务,可以了解七彩云对象存储,支持一键配置Referer防盗链,不需要额外的服务器维护成本,适合站长和开发者快速搭建合规的图床服务。
七、FAQ
1. 设置防盗链之后,我自己的图床后台上传图片会不会受影响?
不会,防盗链规则一般只会限制资源的读取请求(GET、HEAD类型),上传、删除、修改资源的写请求不受Referer规则限制,只要你的上传工具配置的AccessKey、SecretKey拥有对应存储桶的读写权限,就可以正常操作资源。
2. 我能不能设置防盗链仅禁止某些特定域名盗链,其他所有域名都允许访问?
大部分S3兼容对象存储的防盗链目前默认是白名单模式,仅允许白名单内的域名访问,不在白名单内的所有域名都会被拦截。如果你只需要禁止个别特定域名盗链,其他所有域名都允许访问,可以搭配CDN的域名黑名单规则实现,或选择支持黑名单配置的存储服务。
3. 防盗链配置生效之后,之前已经发出去的图片外链会不会失效?
会的,防盗链规则是存储层全局生效的,配置生效后所有指向该存储桶的图片访问请求都会被规则校验,不管是什么时候生成的外链,不符合规则的请求都会被拦截。
4. 我用WordPress搭建站点,用插件接入S3存储做图床,设置防盗链需要修改WordPress的配置吗?
不需要,防盗链规则在对象存储侧生效,你只需要在存储桶的防盗链配置页把你的WordPress站点域名加到Referer白名单即可,不需要修改WordPress侧的任何插件配置或者代码。
八、总结
图床设置防盗链的核心是通过对象存储的Referer白名单规则,限制仅授权的域名可以访问图片资源,整体操作流程非常简单,只需要准备好存储桶信息、授权域名列表,在控制台完成白名单配置并测试生效即可,不需要修改图床程序的现有逻辑。这种方案适合个人站长搭建博客图床、开发者做应用资源存储、资源站做图片和附件分发等场景,既能避免被盗链导致的额外带宽成本浪费,也不会影响正常的资源访问体验。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网