CDN访问异常篇之502/503/504错误

简介: 当客户使用阿里云 CDN 加速站点访问后,客户端的请求将首先发送到 CDN 的 L1 节点(一级节点),再回源到L2节点(二级节点),然后再回源到源站。因此如果访问过程中出现问题就可能涉及到多级网络链路的问题。当CDN回源源站异常失败时就会出现5xx的错误,主要包括502 Bad Gateway、503 Service Temporarily Unavailable、504 Gateway Time-out。很多情况下是因为一些细节被忽略了导致了错误的发生,本文介绍了一些常见的引发5xx错误的问题场景。

问题分析

通过阿里云CDN访问出现5xx错误,在响应的Response Header里的X-Swift-Error字段会有相关的错误,例如forward retry timeout或者orig response 5xx error,同时用curl测试或者浏览器Network开发者模式下可以看这个请求消耗的时间。
遇到这类问题可以初步分析,如果是全局都是5xx的错误,通常就是CDN的配置错误或者源站错误导致的,比如“源站不通或源站域名无法解析”“CDN配置了HTTPS回源,但源站不支持HTTPS”、“源站开启了SNI校验,但是CDN没有开启回源SNI”等,这些配置会导致CDN必然会回源失败,响应5xx错误。如果只是部分区域有问题,或者问题是偶发出现的,那么有可能跟部分地区回源网络或其他因素有关。比如源站的安全策略把部分CDN节点IP屏蔽了,就会导致对应区域的用户访问CDN异常;比如源站侧网络不稳定或者回源跨境链路不稳定或者源站动态接口响应速度不稳定,就会有偶发出现5xx的情况。image.png

nginx对于502/503/504的错误解释如下
image.png

详细信息

一. 源站不通或源站域名无法解析
CDN 都是公网上的节点,CDN配置的源站必须要公网可达。如果配置的源站IP公网不可达、端口不通或者源站域名没有解析,则会导致CDN回源请求源站失败,报错5xx。
常见的几种异常情况如下:
(1)源站网络不通,测试无法ping通源站IP。ping测试命令:ping 源站IP
(2)源站端口不通或源站直接响应5xx错误。例如以下案例,telnet端口报错Connection timed out
i)如果源站端口配置的是80,则测试80端口是否通:telnet 源站IP 80
ii)如果源站端口配置的是443,则测试443端口是否通。如果源站端口配置的是自定义端口,则测试自定义端口是否通。
iii)可以在CDN控制台获取配置的源站地址和端口,然后本地host绑定到源站,固定源站做七层测试,查看是否是源站直接无响应或源站直接响应5xx,具体可以参考这里
(3) 源站配置的是域名,但是源站域名未配置解析,会导致CDN请求源站失败。可以用ping和nslookup命令检查源站域名的解析是否正常。例如以下案例,配置源站域名www.a.com,ping www.a.com报错unknown host,nslookup unknown host报错server can't find www.a.com: NXDOMAIN,表示域名未解析。
image.png
image.png

二.CDN配置了HTTPS回源,但源站不支持HTTPS

(1)源站端口配置成443,但源站不支持HTTPS
在CDN控制台的源站配置界面,如果源站端口配置成443,则CDN回源的时候是HTTPS回源到源站的443端口。源站需要开放443端口,且配置HTTPS证书。如果源站不支持HTTPS访问,则CDN回源失败,报错5xx。对于这种情况,可以把回源端口改成80;如果业务需要443回源的话,那么需要在源站配置HTTPS证书。
image.png

(2)CDN配置了协议跟随回源,但是源站不支持HTTPS访问。
协议跟随回源如果设置成“HTTPS”,则CDN是以HTTPS回源;协议跟随回源如果设置成“跟随”,则当客户端是HTTPS访问的时候,CDN是HTTPS回源。源站不支持HTTPS的情况下,会出现访问失败。对于这种情况,需要关闭协议跟随回源功能,或设置为HTTP回源。
image.png
可以通过curl命令直接绑定到源站去测试,测试命令:curl -voa http://dc.xxx.cn --resolve dc.xxx.cn:443:a.a.a.a (dc.xxx.cn是CDN加速域名,a.a.a.a是源站IP)
image.png
也可以修改本地etc/hosts文件绑定到源站,用浏览器发起HTTPS访问。以下案例报错“您的连接不是私密连接”,则表示不支持HTTPS访问。
image.png

三.源站开启了SNI校验,但是CDN没有开启“回源SNI”
CDN回源默认是不带SNI信息的,如果您的源站IP绑定了多个域名,当CDN节点以HTTPS协议访问您的源站时,由于没有带SNI信息,会导致源站无法正确响应HTTPS证书,导致回源失败。因为这个问题导致的错误,一般是503 Service Temporarily Unavailable错误,而且很快就会返回这个错误。您可以在CDN控制台设置开启回源SNI,指明具体访问域名。具体SNI的介绍以及配置方法参考这里

image.png

四.源站存在安全防护规则
源站的相关安全防护规则导致的CDN回源异常,通常会在10秒以内就返回5xx错误,大部分情况会返回503 Service Temporarily Unavailable的错误,具体的排查方法和解决方案可以参考文档源站安全策略导致5xx
(1)源站服务器开启了安全组限制,限制了CDN节点的访问
(2)源站服务器配置了单IP访问次数限制,把CDN的回源IP当成了异常IP
(3)源站存在云锁、安全狗、防火墙等安全策略,拦截了CDN的回源IP
(4)源站Web服务异常或服务器超载

例如下图就是一种比较典型的TCP超时,每次访问到10秒的时候就超时断开了,响应504。
image.png

五. 源站超时无响应导致CDN回源超时

CDN 回源有严格的超时时间,四层 TCP 是 10 秒超时,七层HTTP / HTTPS是 30 秒超时,当超过该时间时即使后续源站响应正常也是会返回 5xx错误,通常因CDN回源超时导致的问题,会响应504Gateway Time-out错误。可以绑定源站去测试源站的响应速度,如果超过30秒,需要检查源站服务,优化源站的响应速度,确保源站返回请求时间控制在一个较短的时间内,另外也可以申请延长CDN域名的默认超时时长,详细请参考配置回源请求超时时间

请注意这个回源超时时间的配置是设置HTTP层面的超时时间,如果TCP层面就已经超时,那么这个设置是不生效的。

通常这类回源超时的问题发生在一些动态请求上,比如请求源站的程序、数据库、接口等,源站处理需要一些时间。这类情况建议源站使用 CDN 的站点都做动静分离改造,静态资源用CDN加速域名,动态资源直接用源站域名,因为如果源站响应慢,部分动态资源可能出现 30 秒仍然无法响应的情况。

六. 跨境回源或源站侧网络异常

回源存在跨境链路导致的CDN回源超时,响应5xx错误。例如源站在境外,中国大陆的用户访问的时候,是先访问到中国大陆的CDN节点,然后中国大陆的CDN节点走跨境链路,回源到境外的源站;亦或者源站在中国大陆,境外用户访问的时候先请求到境外的CDN节点,境外的CDN节点走跨境链路,回源到中国大陆的源站。由于CDN回源走的都是公网,这种情况涉及到跨境链路,需要走国际互联网出口以及境外运营商的链路,本身就存在一定的不稳定因素。还有一种情况是源站侧机房的网络差,或源站侧网络不稳定。

通常这两类问题CDN层面的优化难度比较大,因为CDN只是提供了节点,做缓存服务,很难去控制公网的网络以及源站侧的网络。对于源站侧网络的问题,建议优化源站;对于跨境回源的问题,建议优化CDN的缓存命中率,尽量减少回源,降低5xx比率。或者考虑使用海外源站+国内源站的双源站架构。

在一些静态加速没有命中缓存,回源又一直超时的情况,可以考虑使用全站加速的动态加速,动态加速通过智能路由技术为动态内容,进行路由决策,选择最佳回源路径,会有一定的优化效果,但是不一定能完全解决此类问题。

相关文档

域名绑定Host操作
源站存在安全防护等原因导致访问CDN域名报503错误
回源请求超时时间
使用CDN后访问域名提示“504”Gateway Time-out"错误

适用于

CDN
DCDN

目录
相关文章
|
域名解析 缓存 前端开发
前端性能优化 实际应用cdn 加快静态资源访问
前端性能优化 实际应用cdn 加快静态资源访问
前端性能优化 实际应用cdn 加快静态资源访问
|
缓存 开发者 CDN
CDN访问异常篇之重定向的次数过多
用户配置了阿里云CDN或者全站加速后,使用浏览器进行访问,出现重定向的次数过多的错误。
12392 0
CDN访问异常篇之重定向的次数过多
|
边缘计算 监控 前端开发
利用阿里云Eventbridge在CDN边缘应用程序中访问日志服务SLS
在Web前端领域,追求极致性能是个永恒的话题。这些年的一些新兴理念都是为了提升站点访问性能而提出,无论是Jamstack技术理念或者或者 ESR (边缘渲染),都是Client侧进行性能优化的基础上,进一步拓展到了网络Infra层面,就是我们现在经常讨论的边缘计算。而阿里云的CDN EdgeRoutine 就是为广大客户提供可自由编程的边缘计算能力,我们可以用他来构建边缘节点的网关应用,来访问静态资源或者后端服务。当这个边缘网关在业务上承担的角色越来越重要的时候,我们就对他内部的业务逻辑产生了可观测的诉求,希望能够记录日志到日志服务上,然而日志服务提供的SDK,在ER的环境中暂时不被支持,这个
282 0
|
存储 CDN
jsdelivr cdn大陆挂了不能访问替代方案
jsdelivr cdn大陆挂了不能访问替代方案
1134 0
jsdelivr cdn大陆挂了不能访问替代方案
|
存储 缓存 负载均衡
分布式架构原理--CDN加速静态文件访问
分布式架构原理专题: (演进过程及如何把应用从单机扩展的分布式;CDN加速静态文件访问;系统监控、容灾、存储动态扩容;架构设计及业务驱动分化;CAP\Base理论及其应用)
468 0
分布式架构原理--CDN加速静态文件访问
|
Web App开发 监控 网络协议
抽丝剥茧定位一个CDN访问慢的案例
源站安全策略将CDN回源IP识别为攻击IP进行拦截,CDN回源504触发重试导致访问时间拉长。
328 0
|
域名解析 缓存 运维
简谈 CDN “调度异常” 导致的系列问题
## 背景 为什么要谈这个话题?缘由于现在 CDN 的广泛应用在企业客户,但是很多甲方的运维或者工程师对 CDN 的调度以及 DNS 的调度原理并不清楚,基本遇到问题也无法判断到底是否问题在 CDN 。甚至用户自己的使用规范不对也会埋怨是 CDN 的问题。今天简单根据几个案例聊下所谓 “调度不准” 的一系列疑问。 ## 购买 CDN 加速服务后的解析流程 先了解几个概念,我们在通过一张
1303 0
简谈 CDN “调度异常” 导致的系列问题
|
网络协议 Linux Android开发
|
存储 缓存 边缘计算
最佳实践:使用阿里云CDN加速OSS访问
用户直接访问OSS资源,访问速度会受到OSS的下行带宽以及Bucket地域的限制。如果通过CDN来访问OSS资源,带宽上限更高,并且可以将OSS的资源缓存至就近的CDN节点,通过CDN节点进行分发,访问速度更快,且费用更低。如果采用动静分离的网站架构,就能够解决海量用户访问的性能瓶颈问题。
1666 0
最佳实践:使用阿里云CDN加速OSS访问