开发者社区> 问答> 正文

OSS防盗链配置及常见错误排查方法?

OSS防盗链配置及常见错误排查方法?

展开
收起
请回答1024 2020-03-26 18:52:41 1635 0
2 条回答
写回答
取消 提交回答
  • 本回答引用自以下KB文档:https://help.aliyun.com/knowledge_detail/44198.html

    更多帮助请访问以下站点:

    2021-04-30 17:49:27
    赞同 展开评论 打赏
  • 什么是Referer

    Referer是HTTP Header的一部分,当浏览器向Web服务器发送请求时,一般会带上Referer,告诉服务器从哪个页面链接过来的。

    Referer的作用

    防盗链。比如,网站访问自己的图片服务器,图片服务器取到Referer来判断是不是自己的域名,如果是就继续访问,不是则拦截。 数据统计。比如,统计用户是从哪里链接过来访问的。

    Referer为空

    空Referer指的是HTTP请求中Referer头部的内容为空,或者HTTP请求中不包含Referer头部。如果有下面两种情况则Referer为空。 当请求并不是由链接触发产生。比如,直接把地址输入地址栏里打开页面。 从https页面上的链接访问到非加密的http页面时,在http页面上是检查不到Referer的。 在防盗链设置中,允许空Referer和不允许空Referer的区别如下。 在防盗链的白名单设置中,如果指明白名单中包含空的Referer,那么通过浏览器地址栏直接访问该资源URL是可以访问到的。 如果不指明需要包含空的Referer,那么通过浏览器直接访问也是被禁止的。

    OSS防盗链

    OSS防盗链是通过Referer来实现的,所以也简称为Refer或refer。

    OSS防盗链配置 提示:Referer详细的介绍及配置请参见防盗链。

    OSS防盗链通过在控制台或SDK设置Bucket属性来配置。

    OSS防盗链配置内容包括以下两部分内容。 是否允许Referer字段为空的请求访问。 Referer字段白名单。 OSS防盗链配置中需要注意以下几点。 用户只有通过URL签名或者匿名访问Object时,才会做防盗链验证。如果请求Header中有Authorization字段时,不会做防盗链验证。 一个Bucket可以支持多个Referer参数,这些参数之间由,分隔。 Referer参数支持通配符*和?,详细解释可参考通配符说明。 用户可以设置是否允许Referer字段为空的请求访问。 白名单为空时,不会检查Referer字段是否为空(不然所有的请求都会被拒绝)。 白名单不为空,且设置了不允许Referer字段为空的规则,则只有Referer属于白名单的请求被允许,其它请求(包括Referer为空的请求)会被拒绝。 如果白名单不为空,但设置了允许Referer字段为空的规则,则Referer为空的请求和符合白名单的请求会被允许,其它请求都会被拒绝。 Bucket的三种权限(private、public-read、public-read-write)都会检查Referer字段。 通配符说明。

    星号*:代替0个或多个字符。如果正在查找以AEW开头的一个文件,但不记得文件名其余部分,可以输入AEW*,查找以AEW开头的所有文件类型的文件,如AEWT.txt、AEWU.EXE、AEWI.dll等。要缩小范围可以输入AEW*.txt,查找以AEW开头,并以.txt为扩展名的文件,如AEWIP.txt、AEWDF.txt。 问号?:代替一个字符。如果输入love?,查找以love开头的一个字符结尾文件类型的文件,如lovey、lovei等。要缩小范围可以输入love?.doc,查找以love开头,任意一个字符结尾,并以.doc为扩展名的文件,如lovey.doc、loveh.doc。 典型配置说明如下。 所有请求都可以访问。

    空Referer:允许Referer为空。 Referer列表:空。 带有规定的Referer请求或不带Referer的请求才能访问。

    空Referer:不允许Referer为空。 Referer列表:http://.oss-cn-beijing.aliyuncs.com,http://.aliyun.com。

    常见错误及排除

    错误一:配置防盗链后用curl命令还是能获取到视频文件 错误原因 可能开启了CDN并且没有配置CDN中的Referer。

    解决方法 检查是否开启了CDN。CDN的Referer设置不能为空,且防盗链名单需与OSS一致。 调试OSS的Referer时,请先排除CDN的影响。且优先调试OSS的Referer,再调试CDN的Referer。

    错误二:当Referer配置错误时HTTP提示”403“错误且OSS提示“You are denied by bucket referer policy.”错误 错误原因 通常有以下两种主要原因。

    Referer为空,请求Header中没有Referer字段或者Referer字段为空。 Referer不在规定范围或者格式错误。

    解决方法

    建议您清空浏览器缓存后再进行调试。如果仍然存在异常错误,则参考如下步骤进行解决。

    Referer为空时,通过在OSS控制台选择 Bucket > Bucket属性 > 防盗链 中配置Referer。需要注意OSS的Referer只支持白名单,暂时不支持黑名单。 Referer不在规定范围或者格式错误时,需要确认是否配置http://或者https://,并更正Referer的配置范围,比如a.aliyun.com和b.aliyun.com,匹配于http://.aliyun.com或http://?.aliyun.com。domain.com匹配于http://domain.com,而不是http://.domain.com。 Referer报错一般是站点类应用,浏览器中可以查看Header的Referer。如Chrome浏览器,按键盘F12打开 开发者工具,在 Network 中查看相应元素的Header。 OSS返回的错误可以通过抓包获取。如抓包工具Wireshark,筛选器可以指定为host bucket-name.oss-cn-beijing.aliyuncs.com。

    2020-03-26 18:53:54
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
OSS运维进阶实战手册 立即下载
《OSS运维基础实战手册》 立即下载
OSS运维基础实战手册 立即下载