一、结论
用S3搭建个人图床并配置防盗链的核心思路是先完成S3存储的基础接入配置,再通过存储桶的防盗链规则设置允许的引用域名、拦截非法请求,通常需要提前准备Endpoint、AccessKey、SecretKey、Bucket、Region等S3基础接入信息,搭配PicGo、uPic等支持S3的图床客户端完成配置后即可投入使用。
二、准备工作
- 已开通的S3兼容对象存储服务有效账号
- 已创建完成的、用于存储图床资源的存储桶Bucket
- 对应存储桶的官方Endpoint访问地址
- 拥有该存储桶读写权限的AccessKey和SecretKey
- 存储桶所属的Region地域标识
- 支持S3协议的图床客户端、建站程序插件(如PicGo、WordPress S3插件等)
- 允许引用图床资源的白名单域名列表(即需要加载图片的个人站点、笔记工具等域名)
- 用于测试的JPG、PNG等格式的图片文件
三、操作步骤
1. 创建并配置基础存储桶:登录对象存储控制台创建存储桶,将存储桶的公共访问权限设置为「允许匿名读、禁止匿名写」,完成后得到一个可对外访问的S3存储桶。
2. 获取S3接入凭证:在控制台的存储桶配置页或密钥管理页,获取对应存储桶的Endpoint、AccessKey、SecretKey、Bucket名称、Region这五个核心配置信息,保存到本地备用。
3. 完成图床客户端S3接入配置:打开你常用的图床客户端,找到S3兼容存储的配置入口,选择S3存储类型,依次填入上一步获取的五个核心配置信息,可自定义设置图片存储的前缀路径(如img/2024/),保存后点击测试连接,确认客户端可正常连接到存储桶。
4. 测试基础上传功能:在图床客户端上传一张测试图片,确认上传成功后复制生成的直链,在浏览器无痕窗口打开可以正常加载图片,说明基础图床配置完成。
5. 进入防盗链配置页:回到对象存储控制台的存储桶设置页面,找到「防盗链配置」(部分服务商也叫Referer白名单)的功能入口,进入规则编辑页面。
6. 配置防盗链规则:首先开启防盗链功能,将你提前整理的白名单域名按照控制台要求的格式填入允许列表,根据自己的需求选择是否允许空Referer(允许的话直接访问图片直链可正常打开,不允许的话仅白名单域名可引用),设置未授权请求的响应状态码为403,保存后规则立即生效。
7. 测试防盗链效果:先从白名单域名的页面引用测试图片,确认可以正常加载;再用未授权的本地HTML文件或其他站点引用该图片,确认返回403无法加载,说明防盗链配置符合预期,即可将图床接入到日常使用的博客、笔记等工具中。
四、常见错误
1. Endpoint填写错误:常见问题是自行拼接存储桶前缀、写错HTTP/HTTPS协议、填写了全局Endpoint而非对应存储桶的专属Endpoint,解决办法是直接复制控制台提供的对应存储桶的Endpoint字符串,不要自行修改。
2. 防盗链白名单格式错误:比如未加HTTP/HTTPS前缀、填写了带路径的域名、泛域名格式错误,解决办法是严格按照控制台提示的格式填写,仅保留协议和域名部分,泛域名使用*前缀(如*.www.7caiyun.com),不要添加路径后缀。
3. 存储桶权限设置错误:要么未开启公开读权限导致白名单域名也无法加载图片,要么误开了公开写权限导致恶意用户可上传非法文件,解决办法是将存储桶的匿名用户权限仅设置为「对象读」,写入权限仅分配给AccessKey对应的子账号。
4. 未允许空Referer导致直链无法访问:如果有直接分享图片链接、在APP内打开图片的需求,未开启空Referer允许会导致这些场景下图片返回403,解决办法是根据使用场景勾选允许空Referer的选项即可。
5. 浏览器缓存导致测试结果不准:配置防盗链之前已经加载过的图片会被浏览器缓存,即使防盗链生效后仍可能正常显示,解决办法是用无痕模式测试,或者用curl命令自定义Referer头测试接口返回值,避免缓存干扰。
五、示例说明
S3图床基础配置示例
- Endpoint:填写对象存储服务商提供的对应存储桶专属访问地址,无需自行拼接存储桶前缀
- AccessKey:填写拥有该存储桶读写权限的子账号访问密钥ID
- SecretKey:填写与AccessKey配对的密钥字符串
- Bucket:填写你创建的用于存储图床资源的存储桶名称
- Region:填写存储桶所属的地域标识,按照服务商提供的规范填写即可
- 存储路径:可自定义填写如img/2024/,所有上传的图片都会存储到该路径下
- 文件访问权限:选择「公开读」
防盗链配置示例
- 防盗链状态:开启
- 允许的Referer列表:https://yourblog.com、https://*.notion.site、https://note.www.7caiyun.com
- 是否允许空Referer:是(若无需直链访问可选择否)
- 拦截响应状态码:403 Forbidden
六、更简单的方案
如果你不想自行搭建MinIO、维护服务器上的对象存储服务,也不想折腾复杂的底层权限和缓存配置,完全可以选择成熟的兼容S3协议的云对象存储服务,不需要自己维护存储硬件和网络资源,开箱即可使用。如果你需要一个兼容S3协议、适合图床搭建、程序接入、下载分发的对象存储服务,可以了解七彩云对象存储,支持不限流量的下载分发,低门槛接入,很适合个人站长和开发者搭建图床、存储网站附件等场景使用。
七、FAQ
Q:配置防盗链之后会不会影响我在图床客户端上传图片?
A:不会,防盗链限制的是资源访问环节的Referer来源,上传操作是通过带签名密钥的S3接口完成的,不受防盗链规则的影响,只要你的AccessKey权限正常就可以正常上传。
Q:我有多个子站点需要引用图床的图片,是不是都要加到白名单里?
A:是的,所有需要引用图片的域名都需要添加到Referer白名单中,同一根域名下的所有子站点可以用泛域名匹配,比如填写*.www.7caiyun.com就可以覆盖a.www.7caiyun.com、b.www.7caiyun.com等所有二级域名,不需要逐个添加。
Q:开启防盗链之后还能不能临时分享图片给其他人?
A:如果你在防盗链配置中开启了允许空Referer,那么直接把图片直链发给其他人就可以正常访问;如果没有开启空Referer,也可以通过对象存储服务的临时签名链接功能生成有时效的访问链接,不受防盗链规则限制。
Q:个人图床用S3存储会不会产生很高的成本?
A:个人图床的存储量通常只有几GB到几十GB,大部分对象存储服务的存储费用很低,只要合理配置防盗链避免被恶意盗刷流量,整体成本远低于自己维护服务器存储,性价比更高。
八、总结
用S3搭建个人图床并配置防盗链的整体流程分为基础接入配置和防盗链规则配置两个核心环节,先完成S3存储桶和图床客户端的对接,确保可以正常上传和访问图片,再根据自己的使用场景配置Referer白名单拦截未授权的盗链请求,既能保证个人站点、笔记等场景可以正常加载图片,又能避免被恶意盗刷流量产生额外成本。这种方案兼容所有支持S3协议的图床工具和建站程序,配置灵活、稳定性高,非常适合个人站长、博客作者、笔记爱好者使用。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网