问题描述当您使用柚子云CDN加速站点访问资源后,客户端的请求将首先发送到CDN的L1节点(一级节点),再回源到L2节点(二级节点),然后再回源到源站。因此如果访问过程中出现问题,可能涉及到多级网络链路的问题。当CDN回源源站异常失败时就会出现5xx的错误,主要包括502 Bad Gateway 、503 Service Temporarily Unavailable 、504 Gateway Time-out 。本文通过以下两种场景进行介绍: 问题原因通过柚子云CDN访问出现5xx错误,在响应的Response Header中X-Swift-Error字段会有相关的错误,例如forward retry timeout 或者orig response 5xx error ,同时用CURL测试,或者浏览器Network开发者模式下可以查看这个请求消耗的时间。 解决方案柚子云CDN(Content Delivery Network)建立并覆盖在承载网上,是由不同区域的服务器组成的分布式网络,也是将源站资源缓存到全国各地的边缘服务器的网站加速产品。当您初次访问或缓存到期后,服务器会透传回到源站,其中源站的响应时间和首字节时间对回源请求的处理非常重要。如果您的网站在CDN回源时出现5xx报错的情况,请参见以下方法进行排查: 场景一:CDN源站是客本地主机或ECS如您的源站是本地主机或ECS,请参见以下步骤进行排查处理: 步骤一:获取HTTP的响应头信息如果访问网站出现5xx报错,可以通过CURL或者wget测试工具获取HTTP的响应头信息。可以参考以下命令,获取HTTP中的响应头信息。 说明:也可以进入指定浏览器,按F12 键,然后单击Network,检测定位请求5xx报错的URL资源。
curl -vo [$File_Name] [$IP] 说明:
系统返回类似如下,X-Swift-Error 返回“orig response 5xx error”信息,这是因为CDN回源站响应超时,或者源站处理超时导致的。 在获取了访问网站的HTTP响应信息后,可以参考以下几个方面,进行问题排查。 步骤二:根据出现报错的区域范围进行测试和分析可以使用Networkbench或者17CE检查网站在各地节点的网络性能。请根据出现报错的区域范围进行以下监测和分析: 单地区访问网站出现5xx报错 可能与节点到源站的运营商链路有关,可尝试多测试几次,检查能否恢复网络。如果出现报错造成的影响较严重,建议保留response header响应头信息后,联系阿里云技术支持进行排查。 大面积地区访问网站出现5xx报错 可以参考以下命令,分别测试客户端到源站以及客户端到CDN节点的通信质量,并作对比。
time telnet [$Test_IP] [$Test_Port]
ping [$Test_IP] 说明:
第一条命令可以获取执行telnet 命令时使用的时间。 第二条命令可以测试网络的连通性。 [$Test_IP]:待检测的IP地址,可以为源站IP地址或CDN节点IP地址。 [$Test_Port]:待检测网站的端口号,可以为源站的端口号或CDN节点的端口号。
步骤三:检查域名整体的业务带宽和QPS检查域名整体的业务带宽和QPS的方法如下: 登录CDN控制台。 在左侧导航栏依次单击监控查询>实时监控,观察近期带宽和QPS指标,检查带宽和QPS是否有突增的情况,如有突增情况发生,可能会导致回源后造成源站带宽压力过高,从而引发源站响应超时。
如果CDN透传回源的带宽有突增情况,则应检查是否有新资源发布,或者检查热点资源是否配置了缓存规则。如果您的游戏类或图片类业务较多,则建议在发布前通过CDN预热功能将资源提前布置到CDN上,避免瞬间回源带宽过高造成源站瓶颈。同时,需要针对热点资源添加长期缓存策略。 检查CDN侧和源站是否配置了缓存规则。如果源站配置了no-cache响应头,则其优先级高于CDN侧。如果源站和CDN侧都没有配置缓存规则,则默认缓存10~3600秒,关于缓存规则的更多信息,请参见缓存概述。 说明:若您刚接入CDN业务,对CDN业务没有缓存经验,则建议您可以登录CDN控制台,单击域名管理,然后单击域名右侧对应的管理>缓存配置>添加。对目录类型的资源配置一个最大的缓存范围。然后针对您不需要缓存的资源,单独配置一条策略,后续可通过优先级来控制匹配顺序。
步骤四:源站不通或源站域名无法解析的排查CDN节点都是公网上的节点,CDN配置的源站必须要连通公网。如果配置的源站IP公网不可达、端口不通或者源站域名没有解析,则会导致CDN回源请求源站失败,报错5XX。常见的几种异常情况如下: 源站网络不通,无法ping通源站IP。测试命令如下。
ping [$IP] 说明:[$IP]为源站IP。 源站端口不通或源站直接返回5XX错误。如下操作所示,telnet端口报Connection timed out 错。 如果源站端口配置的是80,则测试80端口是否通,命令如下。
telnet [$IP] 80 如果源站端口配置的是443,则测试443端口是否通。如果源站端口配置的是自定义端口,则测试自定义端口是否通。 可以在CDN控制台获取配置的源站地址和端口,然后在本地hosts文件中绑定源站,详细请参考域名绑定Host操作步骤,固定源站做七层测试,查看是否是源站无响应或源站直接响应5XX。也可以使用curl 命令测试绑定源站,测试命令如下。
源站配置的是域名,但是源站域名未配置解析,则会导致CDN请求源站失败。可以使用ping 和nslookup 命令检查源站域名的解析是否正常。例如,源站域名为example.aliyundoc.com,ping源站域名example.aliyundoc.com报unknown host 错,使用nslookup域名查询源站域名的DNS记录报server can't find example.aliyundoc.com: NXDOMAIN 错,都表示域名未解析。如何配置域名解析请参见配置CNAME。
步骤五:检查CDN回源配置CDN配置了HTTPS回源,但源站不支持HTTPS也会导致访问资源返回5xx错误,请根据业务参见以下操作排查: 源站端口配置成443,但源站不支持HTTPS。在CDN控制台的源站配置界面,如果源站端口配置成443,则CDN回源的时候是HTTPS回源到源站的443端口。源站需要开放443端口,且配置HTTPS证书。 CDN配置了协议跟随回源,但是源站不支持HTTPS访问。协议跟随回源如果设置成HTTPS,则CDN是以HTTPS回源。协议跟随回源如果设置成跟随,则当客户端是HTTPS访问的时候,CDN是HTTPS回源。源站不支持HTTPS的情况下,会出现访问失败。对于这种情况,需要关闭协议跟随回源功能,或设置为HTTP回源。
可以通过curl 命令绑定源站进行测试,测试命令如下。
curl -voa https://[$Domain] --resolve [$Domain]:443:[$IP] 系统显示类似如下。
也可以修改本地hosts文件绑定到源站,用浏览器发起HTTPS访问。以下案例报错您的连接不是私密连接 ,则表示不支持HTTPS访问。
场景二:使用CDN+OSS的业务架构如果您使用了CDN+OSS的业务架构,可参见以下内容排查问题: 登录对象存储控制台,单击左侧导航栏的常用工具,参考ossutil相关文档,并使用ossutil命令行工具的--probe-item 选项,检查OSS的下行带宽是否超过10GBps,QPS访问是否超过10000次/秒。如果OSS超过限制规则,则会触发OSS的流控,对超过限制的回源请求进入慢速处理。关于OSS的流控规则,请参见使用限制。 说明:
检查CDN回源的下行流量是否超过了源站的带宽限制,源站带宽被打满后会导致连锁的网络反应和应用层的问题。 说明:
检查两个节点间传输的流量可以使用iperf工具。 检查网络连接数可以使用Netstat工具。
检查源站是否有防火墙限制,即源站是否对回源请求做过限速或者IP限制。 若之前的排查结果均正常,可以分析源站Web服务的报错日志,检查日志中是否有5xx报错信息出现。若未在应用层的日志文件中发现报错记录,则可以反向测试源站到CDN节点的链路,检查是否有网络间链路抖动导致的5xx报错,具体以现场实际发生的频率和业务状况为准。 说明:一般情况下,源站带宽如果容易被打满,或者容易发生丢包或延迟的情况,则建议将Nginx的nginx.conf配置文件中的send timeout 或者read timeout 参数调大一些。
|