概述
CDN访问出现403状态码通常情况下可能是由以下几种情况导致的,在排查问题时可以打开浏览器开发者模式,切换到Network标签页后,重新请求异常的URL,复现403的问题,然后在Headers下查看CDN返回的Response Header,通过这个信息可以判断是什么原因引起的403错误。本文会对这些情况进行具体介绍。
加速域名未添加到CDN
当您在CDN上添加了
aliyundoc.com
主域名,且对应的CNAME为
aliyundoc.com.w.alikunlun.com
时,您其他的二级域名,例如
example.aliyundoc.com
、
demo.aliyundoc.com
并没有添加到CDN,但是却直接将这些二级域名解析到
aliyundoc.com.w.alikunlun.com
,这种情况下会导致CDN响应403,具体报错如下。
X-Tengine-Bf-Error: non-existent domain
CDN鉴权问题
CDN鉴权问题通常表现在没有携带鉴权参数、鉴权过期、鉴权计算错误,需要根据 URL鉴权 的文档了解鉴权的原理然后去进一步排查和解决。
X-Tengine-Error:denied by req auth: no url arg auth_key
X-Tengine-Error: denied by req auth: expired timestamp
X-Tengine-Error: denied by req auth: invalid md5hash
如果您不需要CDN的鉴权功能,登录 CDN控制台 ,关闭鉴权即可。
如果鉴权过期,请重新生成鉴权URL。
如果鉴权的MD5计算不正确,建议先使用CDN控制台的地址生成器生成URL来对比自己的鉴权代码,或者参见 鉴权示例代码 。
防盗链问题
开启了防盗链功能,但是实际Request Headers请求头中的Referer头不符合防盗链规则导致出现403。而防盗链问题导致的403,在CDN的Response headers中的X-Tengine-Error会返回denied by Referer ACL。具体防盗链问题请参见 由于防盗链异常导致访问CDN返回403错误的解决方法 。
X-Tengine-Error: denied by Referer ACL
IP黑白名单问题
在CDN控制台配置了 IP黑白名单 ,实际访问的IP不符合配置规则,导致出现403。
X-Tengine-Error: denied by IP ACL = not in whitelist
X-Tengine-Error: denied by IP ACL = blacklist
UA黑白名单问题
X-Tengine-Error: black ua
X-Tengine-Error: not in white ua
URL违规被屏蔽
出现403的URL涉及违法不良信息,违反了相关服务协议和 互联网信息服务管理办法 第十五条规定,这种情况下违法URL会被CDN做屏蔽访问处理。通常这种情况会收到邮件或短信通知,请您确保CDN加速的内容是合法内容,确认是合法内容后 填写信息 申请解封。以下两个报错均是URL违规导致的。
可以绑定Host到源站访问测试是否一样存在403的情况,如果源站就有403的情况,需要先解决源站的403问题。另外还有一点需要注意,CDN的回源Host配置错误也可能导致403错误。回源HOST跟源站的区别就是,源站决定了回源时请求到的具体IP地址,而回源HOST决定了回源请求访问到该IP地址上的具体站点。
如果源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私有Bucket回源授权 。