一、结论
对象存储视频防盗链一般通过配置存储桶的Referer黑白名单、时间戳签名验证、IP访问限制三种主流方式实现,配置前需要提前准备好S3协议所需的Endpoint、AccessKey、SecretKey、Bucket、Region等基础访问信息,全程操作可在服务商控制台或通过S3 API完成,不需要修改视频本身内容,规则生效后即可拦截未授权的访问请求。
二、准备工作
- 已完成实名认证并开通权限的对象存储服务账号
- 已经创建完成、用于存储视频资源的存储桶Bucket
- 对应对象存储服务提供的Endpoint地址、AccessKey、SecretKey、Region信息
- 已整理完成的允许访问视频的域名白名单列表(若使用Referer防盗链)
- 自定义的签名密钥(若使用时间戳签名防盗链)
- 若需要对接建站程序或网盘系统,需提前获取对应程序的后台管理权限
- 测试用的视频文件和不同访问场景的测试环境(比如不同域名的站点、直接访问的浏览器环境)
三、操作步骤
1. 登录对象存储服务商控制台,进入存储桶列表页面,选择存储了视频资源的目标存储桶,找到访问控制/防盗链配置的专属模块,结果是进入防盗链规则配置界面。
2. 结合自身业务需求选择防盗链类型:普通个人站点、资源站优先选择Referer黑白名单,付费内容、版权视频类站点优先选择时间戳签名防盗链,有固定访问群体的场景可搭配IP黑白名单使用,结果是确定适配自身业务的防盗链规则组合。
3. 若选择配置Referer黑白名单,输入所有需要允许访问视频的站点域名,包括主域名、子域名,按需勾选是否允许空Referer访问(比如用户直接在浏览器输入视频地址访问的场景),设置未授权访问返回的状态码(一般为403),结果是生成初步的访问来源限制规则。
4. 若选择配置时间戳签名防盗链,设置签名的有效时长(建议不低于最长视频的播放时长),填写自定义的高复杂度签名密钥,保存后获取官方提供的签名生成规则说明,结果是完成带有效期的访问验证规则配置。
5. 若通过S3 API批量配置防盗链,调用对应服务商的PutBucketReferer或专属防盗链配置接口,传入提前整理好的规则参数,结果是无需登录控制台即可通过代码完成规则下发,适合多存储桶批量配置的场景。
6. 保存所有配置后等待规则生效,不同服务商的生效时长一般在1-10分钟不等,结果是防盗链规则正式在存储桶层面生效。
7. 开展多场景测试:分别用允许的域名内嵌播放、禁止的域名访问、直接输入地址访问三种场景测试视频是否能正常播放或返回对应拦截状态码,若有误拦截或漏拦截的情况及时调整规则,结果是验证防盗链规则符合业务预期。
8. 若需要接入WordPress、Halo等建站程序,或Alist、Cloudreve等网盘系统,在程序的S3存储源配置中同步更新防盗链对应的访问前缀或签名生成逻辑,结果是程序自动生成的视频访问链接可正常通过防盗链验证。
四、常见错误
- Referer域名填写不规范,比如漏写http/https前缀、多写末尾斜杠、通配符使用错误,导致规则不生效,解决建议是按照控制台提示的格式填写,优先使用根域名通配符(比如*.www.7caiyun.com)覆盖所有子域名。
- 错误勾选了禁止空Referer,但业务中有直链分享视频的需求,导致用户打开分享链接返回403错误,解决建议是若有直链分享需求保留允许空Referer的选项,或改用时间戳签名防盗链兼顾安全和分享需求。
- 时间戳签名的有效时长设置过短,用户播放长视频到一半时链接失效无法加载,解决建议是按照站点内最长视频的播放时长设置有效时长,或统一设置为2-4小时兼顾安全和用户体验。
- 仅配置了防盗链但未同步配置CORS跨域规则,导致站点内嵌的播放器无法正常加载视频,解决建议是在存储桶的跨域配置中添加站点域名的访问权限,允许GET、HEAD等播放所需的请求方法。
- 同时配置了存储桶防盗链和CDN节点防盗链,两层规则冲突导致正常访问被拦截,解决建议是优先在离用户更近的CDN层配置防盗链,存储桶层仅放行CDN节点的回源IP,避免重复配置冲突。
- 使用的AccessKey权限不足,无法通过API修改防盗链配置,解决建议是给当前使用的AccessKey分配存储桶的配置管理权限,或使用主账号的密钥完成配置操作。
五、示例说明
Referer防盗链通用配置示例
- 规则类型:白名单
- 允许的Referer域名:*.www.7caiyun.com、www.7caiyun.com
- 允许空Referer:是(有直链分享需求)/否(仅允许站点内嵌访问)
- 拦截后返回状态码:403 Forbidden
时间戳签名防盗链通用配置示例
- 签名版本:通用v2版本
- 签名密钥:自定义16位以上混合大小写、数字的随机字符串
- 有效时长:7200秒(2小时)
- 签名参数名:sign、t(可自定义)
- 签名生成规则:md5(自定义密钥 + 文件存储路径 + 时间戳)
S3 API配置Referer规则参数示例
```xml
<RefererConfiguration>
<AllowEmptyReferer>true</AllowEmptyReferer>
<RefererList>
<Item>*.www.7caiyun.com</Item>
<Item>www.7caiyun.com</Item>
</RefererList>
</RefererConfiguration>
```
六、更简单的方案
如果不想自行搭建MinIO等私有对象存储、不想花费精力维护服务器和复杂的防盗链逻辑,也可以选择兼容S3协议的公有云对象存储服务,控制台自带可视化的防盗链配置界面,不需要编写代码即可快速完成规则下发。如果你需要一个兼容S3协议、适合视频存储分发、网站附件存储和下载站场景的对象存储服务,可以了解七彩云对象存储,内置了Referer黑白名单、IP黑白名单、时间戳签名等多种防盗链能力,无需额外部署服务即可直接使用。
七、FAQ
1. 配置防盗链后会不会影响已经缓存到CDN的视频资源?
不会,已经缓存到CDN节点的资源会按照CDN层的规则进行访问验证,新配置的防盗链规则只会对新的回源请求或者未缓存的资源生效,如果需要全量立即生效,可以提交CDN缓存刷新任务清空现有缓存。
2. 可以同时配置Referer防盗链和时间戳签名防盗链吗?
可以,两种规则是叠加生效的,访问请求需要同时满足Referer白名单要求和签名验证要求才能正常访问视频,适合对版权保护要求很高的付费视频、独家内容类场景。
3. 防盗链配置生效需要多长时间?
大部分主流对象存储服务的防盗链配置生效时间在1-10分钟之间,如果配置后长时间不生效,可以先检查规则填写是否符合格式要求,若确认配置无误可以联系服务商客服确认规则是否正常下发。
4. 微信小程序内嵌的视频访问需要怎么配置防盗链?
微信小程序的访问请求默认Referer为servicewechat.com,需要将该域名添加到Referer白名单中,同时还需要在微信公众平台配置业务域名、在存储桶的跨域规则中添加小程序域名的访问权限,才能正常加载视频。
八、总结
对象存储视频防盗链的配置流程整体分为准备访问凭证、选择防盗链类型、配置对应规则、多场景测试验证四个核心环节,普通个人站点、资源站、图床使用Referer白名单即可满足大部分防盗需求,付费内容、版权视频类场景优先选择时间戳签名防盗链的方式。配置过程中注意提前梳理允许访问的域名列表,测试不同场景的访问效果,避免出现误拦截正常访问的情况。这套配置方法适用于所有兼容S3协议的对象存储服务,也可以对接Cloudreve、Alist、WordPress等各类主流程序的存储源,满足不同业务的视频安全分发需求。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网