访问CDN加速资源返回403状态码

概述

CDN访问出现403状态码通常情况下可能是由以下几种情况导致的,在排查问题时可以打开浏览器开发者模式,切换到Network标签页后,重新请求异常的URL,复现403的问题,然后在Headers下查看CDN返回的Response Header,通过这个信息可以判断是什么原因引起的403错误。本文会对这些情况进行具体介绍。

image.png

详细信息

加速域名未添加到CDN

当您在CDN上添加了aliyundoc.com主域名,且对应的CNAME为aliyundoc.com.w.alikunlun.com时,您其他的二级域名,例如example.aliyundoc.comdemo.aliyundoc.com并没有添加到CDN,但是却直接将这些二级域名解析到aliyundoc.com.w.alikunlun.com,这种情况下会导致CDN响应403,具体报错如下。

X-Tengine-Bf-Error: non-existent domain

CDN鉴权问题

CDN鉴权问题通常表现在没有携带鉴权参数、鉴权过期、鉴权计算错误,需要根据URL鉴权的文档了解鉴权的原理然后去进一步排查和解决。

  1. 常见的鉴权问题如下:
    • 没有携带鉴权参数:CDN开启了鉴权,但是实际访问URL中没有携带鉴权参数,导致出现如下报错。
      X-Tengine-Error:denied by req auth: no url arg auth_key
    • 鉴权过期:CDN开启了鉴权,并且URL携带了鉴权参数,但是鉴权参数过期。
      X-Tengine-Error: denied by req auth: expired timestamp
    • 鉴权计算错误:鉴权参数的MD5值计算不正确。
      X-Tengine-Error: denied by req auth: invalid md5hash


  2. 解决方案:
    • 没有携带鉴权参数
      如果您不需要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。

  1. IP黑白名单问题现象
    • 配置了IP白名单,但是实际访问的客户端IP不在IP白名单里,导致出现403,具体报错如下。
      X-Tengine-Error: denied by IP ACL = not in whitelist
    • 配置了IP黑名单,且实际访问的客户端IP在IP黑名单里,导致出现403,具体报错如下。
      X-Tengine-Error: denied by IP ACL = blacklist
  2. 根据对应的问题修改IP黑白名单配置,详情请参见配置IP黑白名单

UA黑白名单问题

  1. 配置了UA黑名单,客户端UA命中了黑名单规则,报错如下。
    X-Tengine-Error: black ua
  2. 配置了UA白名单,客户端UA不在UA白名单列表里,报错如下。
    X-Tengine-Error: not in white ua

URL违规被屏蔽

出现403的URL涉及违法不良信息,违反了相关服务协议和互联网信息服务管理办法第十五条规定,这种情况下违法URL会被CDN做屏蔽访问处理。通常这种情况会收到邮件或短信通知,请您确保CDN加速的内容是合法内容,确认是合法内容后填写信息申请解封。以下两个报错均是URL违规导致的。


x-swift-error:request hit url black list  
x-tengine-ban-error: global ban hit

image.png

源站响应403

源站响应了403给CDN,CDN再把403响应给客户端。源站响应的403会报错如下。

X-Swift-Error: orig response 4XX error

  • 源站是用户服务器
    可以绑定Host到源站访问测试是否一样存在403的情况,如果源站就有403的情况,需要先解决源站的403问题。另外还有一点需要注意,CDN的回源Host配置错误也可能导致403错误。回源HOST跟源站的区别就是,源站决定了回源时请求到的具体IP地址,而回源HOST决定了回源请求访问到该IP地址上的具体站点。
  • 源站是阿里云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私有Bucket回源授权

    如果出现如下错误,说明是OSS防盗链鉴权返回的403,则需要检查OSS的防盗链设置。

    You are denied by bucket referer policy

    修改OSS的防盗链配置,详情请参见设置防盗链

    如果出现如下错误,说明是开启私有Bucket回源授权的情况下访问了OSS的静态首页,目前CDN的私有Bucket回源功能和OSS的静态网站托管功能冲突,无法一起使用。

     You are forbidden to list buckets

    您可以根据实际情况选择以下一种解决方法进行处理:

如果问题还是无法解决,请参见售后问题排查工具,在智能在线中输入“CDN网站无法访问”或者“CDN服务诊断”,通过智能在线自动识别常见问题并快速解决。

 

适用于

  • CDN