CDN访问异常篇之403错误

本文涉及的产品
对象存储 OSS,20GB 3个月
.cn 域名,1个 12个月
对象存储 OSS,恶意文件检测 1000次 1年
简介: 使用阿里云 CDN 加速站点访问后出现403错误,通常情况下可能是由域名配置、CDN安全策略以及源站响应403导致。CDN的Response Headers返回的错误字段明确标识了该403是什么原因引起的,本文详细介绍了CDN常见的引发403错误的问题场景。

概述

CDN访问出现403通常情况下可能是由以下几种情况导致的,我们可以打开浏览器开发者模式,切换到Netwrok标签页以后重新请求异常的URL,复现403的问题,然后在Headers下查看CDN返回的Response Header,通过这个信息我们可以判断这个403错误是什么原因引起的。本文会对这些情况做具体讲解,以下是本文概图。
image.png

一.加速域名未添加到CDN

用户在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

image.png

二.CDN鉴权问题

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

1. CDN开启了鉴权,但是实际的访问URL里没有带鉴权参数,导致报错如下

X-Tengine-Error:denied by req auth: no url arg auth_key          

image.png

2. 鉴权参数过期
CDN开了鉴权,并且URL带了鉴权参数,但是鉴权参数过期

 
X-Tengine-Error: denied by req auth: expired timestamp

image.png

3. 鉴权参数的md5计算不正确

X-Tengine-Error: denied by req auth: invalid md5hash

image.png

解决方案:

  1. 如果不需要CDN的鉴权功能,可以在CDN控制台关闭鉴权。
  2. 如果鉴权过期,请重新生成鉴权URL。
  3. 如果鉴权的md5计算不正确,建议先用CDN控制台的地址生成器生成URL来对比自己的鉴权代码,也可以参考官方帮助文档提供的鉴权示例代码

三.防盗链问题

开启了防盗链功能,但是实际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,参考如下案例。
image.png

解决方案:如果希望允许空referer的请求,可以登录CDN控制台,单击对应的加速域名 管理,选择 访问控制 > Refer防盗链 > 修改配置,,勾选“允许通过浏览器地址栏直接访问资源URL”。

注:如将防盗链设置不允许为空Referer访问,这样操作,有被盗链的风险。

image.png

2.设置了防盗链白名单,但是实际请求时,请求头里的referer头不在白名单里。例如如下案例,设置的白名单是www.test.com, 但是实际访问的时候,请求头里的referer头是dc.xxx.cn,未在白名单里,因此403。
image.png

image.png

四.IP黑白名单问题

在CDN控制台配置了IP黑白名单,实际访问的IP不符合配置规则,导致出现403。

1.配置了IP白名单,实际访问的客户端IP不在IP白名单里,导致403,具体报错如下

 
X-Tengine-Error: denied by IP ACL = not in whitelist

image.png

2.配置了IP黑名单,实际访问的客户端IP在IP黑名单里,导致403,具体报错如下


X-Tengine-Error: denied by IP ACL = blacklist

image.png

常见问题

  • 问:为什么配置了IP黑名单,还是可以正常访问,响应200,而不是403?
    答:这种情况一般都是客户端真实出口IP跟IP黑名单里配置的IP不一致导致的。建议获取客户端真实出口IP,可以通过IP工具查询;也可以通过下载CDN的日志,从CDN的日志去查找这条请求,CDN的日志里记录了客户端IP。
  • 问:发现恶意请求的情况,把恶意请求的客户端IP配置到黑名单了,为什么还是不断有请求CDN?
    答:CDN作为一个服务端,无法控制客户端不请求CDN,CDN能做的是当恶意请求到CDN的时候,CDN根据配置的安全规则拒绝不合法的请求,以403的形式拒绝访问。

五.UA黑白名单问题

配置了UA黑白名单,User-Agent名单类型如下:

  • 黑名单:黑名单内的User-Agent字段均无法访问当前资源。
  • 白名单:只有白名单内的User-Agent字段能访问当前资源,白名单以外的User-Agent字段均无法访问当前资源。

黑名单和白名单互斥,同一时间只支持其中一种方式生效。

1. 配置了UA黑名单,客户端UA命中了黑名单规则,报错如下

 
X-Tengine-Error: black ua

image.png

2. 配置了UA白名单,客户端UA不在UA白名单列表里,报错如下

X-Tengine-Error: not in white ua

image.png

六.URL违规被屏蔽

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

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

image.png

image.png

七.源站响应403

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


X-Swift-Error: orig response 4XX error

image.png

  • 源站是用户服务器
    可以绑定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回源授权功能。
image.png

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


You are denied by bucket referer policy

image.png

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

 You are forbidden to list buckets

image.png

相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
域名解析 缓存 前端开发
前端性能优化 实际应用cdn 加快静态资源访问
前端性能优化 实际应用cdn 加快静态资源访问
前端性能优化 实际应用cdn 加快静态资源访问
|
1月前
|
存储 人工智能 缓存
AI助理直击要害,从繁复中提炼精华——使用CDN加速访问OSS存储的图片
本案例介绍如何利用AI助理快速实现OSS存储的图片接入CDN,以加速图片访问。通过AI助理提炼关键操作步骤,避免在复杂文档中寻找解决方案。主要步骤包括开通CDN、添加加速域名、配置CNAME等。实测显示,接入CDN后图片加载时间显著缩短,验证了加速效果。此方法大幅提高了操作效率,降低了学习成本。
5442 16
|
1月前
|
缓存 网络安全 数据安全/隐私保护
使用阿里云国际CDN加速后网站无法访问的排查步骤
使用阿里云国际CDN加速后网站无法访问的排查步骤
|
6月前
|
域名解析 缓存 安全
cdn服务器连接异常怎么办
当遇到CDN服务器连接异常时,可采取以下步骤排查:检查CDN配置,包括域名解析和防火墙设置;清空CDN缓存;测试网络连接;确认源服务器状态;更换CDN服务器;等待恢复;联系服务商;检查本地电脑安全;检查程序代码;保持更新和维护。具体解决步骤需根据实际情况调整。
561 0
|
缓存 边缘计算 网络协议
CDN永远的神!成功解决了困惑我多年的GitHub访问太慢问题
我写技术文章画的图片是保存到 GitHub 的,没别的原因,就是因为免费,但是GitHub 访问的速度大家都懂的,访问的速度很慢。 所以我会用 CDN 来加速图片的访问,也就是我的图床的方案是 GitHub + jsdelivr CDN,使用很简单,只需要把域名地址替换一下就行。
|
边缘计算 监控 前端开发
利用阿里云Eventbridge在CDN边缘应用程序中访问日志服务SLS
在Web前端领域,追求极致性能是个永恒的话题。这些年的一些新兴理念都是为了提升站点访问性能而提出,无论是Jamstack技术理念或者或者 ESR (边缘渲染),都是Client侧进行性能优化的基础上,进一步拓展到了网络Infra层面,就是我们现在经常讨论的边缘计算。而阿里云的CDN EdgeRoutine 就是为广大客户提供可自由编程的边缘计算能力,我们可以用他来构建边缘节点的网关应用,来访问静态资源或者后端服务。当这个边缘网关在业务上承担的角色越来越重要的时候,我们就对他内部的业务逻辑产生了可观测的诉求,希望能够记录日志到日志服务上,然而日志服务提供的SDK,在ER的环境中暂时不被支持,这个
333 0
|
存储 CDN
jsdelivr cdn大陆挂了不能访问替代方案
jsdelivr cdn大陆挂了不能访问替代方案
1409 0
jsdelivr cdn大陆挂了不能访问替代方案
|
Web App开发 监控 网络协议
抽丝剥茧定位一个CDN访问慢的案例
源站安全策略将CDN回源IP识别为攻击IP进行拦截,CDN回源504触发重试导致访问时间拉长。
419 1
|
存储 对象存储 CDN
【对象存储OSS/网络分发加速CDN】使用OSS后,如何实现流量访问限制或请求次数的限制
描述使用对象存储OSS后,如何实现流量访问限制或请求次数的限制
2353 2
|
存储 缓存 负载均衡
分布式架构原理--CDN加速静态文件访问
分布式架构原理专题: (演进过程及如何把应用从单机扩展的分布式;CDN加速静态文件访问;系统监控、容灾、存储动态扩容;架构设计及业务驱动分化;CAP\Base理论及其应用)
550 0
分布式架构原理--CDN加速静态文件访问