CDN访问异常篇之502/503/504错误
(1)源站端口配置成443,但源站不支持HTTPS
在CDN控制台的源站配置界面,如果源站端口配置成443,则CDN回源的时候是HTTPS回源到源站的443端口。源站需要开放443端口,且配置HTTPS证书。如果源站不支持HTTPS访问,则CDN回源失败,报错5xx。对于这种情况,可以把回源端口改成80;如果业务需要443回源的话,那么需要在源站配置HTTPS证书。
(2)CDN配置了协议跟随回源,但是源站不支持HTTPS访问。
协议跟随回源如果设置成“HTTPS”,则CDN是以HTTPS回源;协议跟随回源如果设置成“跟随”,则当客户端是HTTPS访问的时候,CDN是HTTPS回源。源站不支持HTTPS的情况下,会出现访问失败。对于这种情况,需要关闭协议跟随回源功能,或设置为HTTP回源。
可以通过curl命令直接绑定到源站去测试,测试命令:curl -voa -- :443:a.a.a.a (是CDN加速域名,a.a.a.a是源站IP)
也可以修改本地etc/hosts文件绑定到源站,用浏览器发起HTTPS访问。以下案例报错“您的连接不是私密连接”,则表示不支持HTTPS访问。
三.源站开启了SNI校验,但是CDN没有开启“回源SNI”
CDN回源默认是不带SNI信息的,如果您的源站IP绑定了多个域名,当CDN节点以HTTPS协议访问您的源站时,由于没有带SNI信息,会导致源站无法正确响应HTTPS证书,导致回源失败。因为这个问题导致的错误,一般是503 错误,而且很快就会返回这个错误。您可以在CDN控制台设置开启回源SNI,指明具体访问域名。具体SNI的介绍以及配置方法参考这里。
四.源站存在安全防护规则
源站的相关安全防护规则导致的CDN回源异常,通常会在10秒以内就返回5xx错误,大部分情况会返回503 的错误,具体的排查方法和解决方案可以参考文档源站安全策略导致5xx。
(1)源站服务器开启了安全组限制,限制了CDN节点的访问
(2)源站服务器配置了单IP访问次数限制,把CDN的回源IP当成了异常IP
(3)源站存在云锁、安全狗、防火墙等安全策略,拦截了CDN的回源IP
(4)源站Web服务异常或服务器超载
例如下图就是一种比较典型的TCP超时,每次访问到10秒的时候就超时断开了,响应504。
五. 源站超时无响应导致CDN回源超时
CDN 回源有严格的超时时间,四层 TCP 是 10 秒超时,七层HTTP / HTTPS是 30 秒超时,当超过该时间时即使后续源站响应正常也是会返回 5xx错误,通常因CDN回源超时导致的问题,会响应 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” Time-out"错误
适用于
CDN
DCDN