胡夫
2020-03-11
2964浏览量
CDN访问出现403通常情况下可能是由以下几种情况导致的,我们可以打开浏览器开发者模式,切换到Netwrok标签页以后重新请求异常的URL,复现403的问题,然后在Headers下查看CDN返回的Response Header,通过这个信息我们可以判断这个403错误是什么原因引起的。本文会对这些情况做具体讲解,以下是本文概图。
用户在CDN上添加了主域名test.com,对应的CNAME是test.com.alikunlun.com,然后用户的一些其他的二级域名比如a.test.com、b.test.com等域名并没有添加到CDN上,但是却直接将这些二级域名解析到test.com.alikunlun.com,这种情况会导致CDN响应403,具体报错如下。
注意:主域名的CNAME不能被二级域名使用,如果需要加速这些二级域名,需要把二级域名单独都添加到CDN上,并解析到对应的CNAME地址上。或者考虑使用泛域名的方式,泛域名的CNAME是可以被二级域名使用的。
X-Tengine-Bf-Error: non-existent domain
CDN鉴权问题通常表现在没有带鉴权参数、鉴权过期、鉴权计算错误,需要根据URL鉴权的文档了解鉴权的原理然后去进一步排查和解决。
1. CDN开启了鉴权,但是实际的访问URL里没有带鉴权参数,导致报错如下
X-Tengine-Error:denied by req auth: no url arg auth_key
2. 鉴权参数过期
CDN开了鉴权,并且URL带了鉴权参数,但是鉴权参数过期
X-Tengine-Error: denied by req auth: expired timestamp
3. 鉴权参数的md5计算不正确
X-Tengine-Error: denied by req auth: invalid md5hash
解决方案:
开启了防盗链功能,但是实际Request Headers请求头里的Referer头不符合防盗链规则导致失败,因防盗链问题导致的403,在CDN的Response headers里的X-Tengine-Error会返回denied by Referer ACL。防盗链配置请参考配置文档。
X-Tengine-Error: denied by Referer ACL
Referer防盗链类型如下:
黑名单和白名单互斥,同一时间只支持其中一种方式生效。
1.请求头里没有带referer头,也就是说该HTTP请求是一次空referer的请求的。而CDN控制台又设置了不允许空referer,因此该请求会被403,参考如下案例。
解决方案:如果希望允许空referer的请求,可以登录CDN控制台,单击对应的加速域名 管理,选择 访问控制 > Refer防盗链 > 修改配置,,勾选“允许通过浏览器地址栏直接访问资源URL”。
注:如将防盗链设置不允许为空Referer访问,这样操作,有被盗链的风险。
2.设置了防盗链白名单,但是实际请求时,请求头里的referer头不在白名单里。例如如下案例,设置的白名单是www.test.com, 但是实际访问的时候,请求头里的referer头是dc.xxx.cn,未在白名单里,因此403。
在CDN控制台配置了IP黑白名单,实际访问的IP不符合配置规则,导致出现403。
1.配置了IP白名单,实际访问的客户端IP不在IP白名单里,导致403,具体报错如下
X-Tengine-Error: denied by IP ACL = not in whitelist
2.配置了IP黑名单,实际访问的客户端IP在IP黑名单里,导致403,具体报错如下
X-Tengine-Error: denied by IP ACL = blacklist
常见问题
配置了UA黑白名单,User-Agent名单类型如下:
黑名单和白名单互斥,同一时间只支持其中一种方式生效。
1. 配置了UA黑名单,客户端UA命中了黑名单规则,报错如下
X-Tengine-Error: black ua
2. 配置了UA白名单,客户端UA不在UA白名单列表里,报错如下
X-Tengine-Error: not in white ua
403的URL涉及违法不良信息,违反了相关服务协议和《互联网信息服务管理办法》第十五条规定,这种情况下违法URL会被CDN做屏蔽访问处理。通常这种情况会收到邮件或短信通知,请注意确保CDN加速的内容是合法的内容。以下两个报错均是URL违规导致的
x-swift-error:request hit url black list
x-tengine-ban-error: global ban hit
源站响应了403给CDN,CDN再把403响应给客户端。源站响应的403会报错如下
X-Swift-Error: orig response 4XX error
源站是阿里云OSS
如果源Bucket的访问权限是私有权限,但是访问URL里没有带上OSS的私有签名参数(Signature、Expires、OSSAccessKeyId),就会导致CDN回源请求OSS的时候通不过OSS的鉴权导致403,报错如下
You have no right to access this object because of bucket acl 。
这种情况建议开启CDN的阿里云OSS私有Bucket回源授权功能。
如果出现如下错误,说明是OSS防盗链鉴权返回的403,则需要检查OSS的防盗链设置。
You are denied by bucket referer policy
如果出现如下错误,说明是开启私有Bucket回源授权的情况下访问了OSS的静态首页,目前CDN的私有Bucket回源功能和OSS的静态网站托管功能冲突,无法一起使用。
You are forbidden to list buckets
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
云服务技术课堂,各类技术课程、最佳实践输出,来好好听课吧!