CDN回源时网站出现5xx报错的排查方法

CDN回源时网站出现5xx报错的排查方法

更新时间:2020-08-26 17:27:52

概述

内容分发网络CDN(Content Delivery Network)建立并覆盖在承载网上,是由不同区域的服务器组成的分布式网络,也是将源站资源缓存到全国各地的边缘服务器的网站加速产品。当您初次访问或缓存到期后,服务器会透传回到源站,其中源站的响应时间和首字节时间对回源请求的处理非常重要。如果您的网站在CDN回源时出现5xx报错的情况,请参考本文进行排查。

详细信息

当您的网站在CDN回源时出现5xx报错时,可能分为以下两种场景,请根据实际情况进行排查。

CDN源站是客户主机或ECS

如果访问网站出现5xx报错,可以通过cURL或者wget测试工具获取HTTP的响应头信息。可以参考以下命令,获取HTTP中的响应头信息。

说明:也可以进入指定浏览器,按F12键,然后单击Network,检测定位请求5xx报错的URL资源。

curl -vo [$File_Name] [$IP]

说明

  • [$File_Name]:在当前目录新建文件的文件名,访问网站的输出会存放于该文件中。
  • [$IP]:访问网站的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

  1. 登录CDN控制台
  2. 在左侧导航栏依次单击监控查询>实时监控,观察近期带宽和QPS指标,检查带宽和QPS是否有突增的情况,如有突增情况发生,可能会导致回源后造成源站带宽压力过高,从而引发源站响应超时。
  3. 如果CDN透传回源的带宽有突增情况,则应检查是否有新资源发布,或者检查热点资源是否配置了缓存规则。如果您的游戏类或图片类业务较多,则建议在发布前通过CDN预热功能将资源提前布置到CDN上,避免瞬间回源带宽过高造成源站瓶颈。同时,需要针对热点资源添加长期缓存策略。
  4. 检查CDN侧和源站是否配置了缓存规则。如果源站配置了no-cache响应头,则其优先级高于CDN侧。如果源站和CDN侧都没有配置缓存规则,则默认缓存10~3600秒,关于缓存规则的更多信息,请参见配置资源缓存规则设置CDN缓存规则
    说明:若您刚接入CDN业务,对CDN业务没有缓存经验,则建议您可以登录CDN控制台,单击域名管理,然后单击域名右侧对应的管理>缓存配置>添加。对目录类型的资源配置一个最大的缓存范围。然后针对您不需要缓存的资源,单独配置一条策略,后续可通过优先级来控制匹配顺序。

使用CDN+OSS的业务架构

如果您使用了CND+OSS的业务架构,可参考以下内容排查问题。

  1. 登录对象存储控制台,单击左侧导航栏的常用工具,参考ossutil相关文档,并使用ossutil命令行工具的--probe-item选项,检查OSS的下行带宽是否超过10GBps,QPS访问是否超过10000次/秒。如果OSS超过限制规则,则会触发OSS的流控,对超过限制的回源请求进入慢速处理。关于OSS的流控规则,请参见使用限制
    说明
    • 关于如何使用ossutil命令行工具的--probe-item选项,请参见查看选项
    • 慢速处理不是直接返回不可用的状态,仅是对超过限制的请求处理进行降速处理。
  2. 检查CDN回源的下行流量是否超过了源站的带宽限制,源站带宽被打满后会导致连锁的网络反应和应用层的问题。
    说明
    • 检查两个节点间传输的流量可以使用iperf工具。
    • 检查网络连接数可以使用Netstat工具。
  3. 检查源站是否有防火墙限制,即源站是否对回源请求做过限速或者IP限制。
  4. 若之前的排查结果均正常,可以分析源站web服务的报错日志,检查日志中是否有5xx报错信息出现。若未在应用层的日志文件中发现报错记录,则可以反向测试源站到CDN节点的链路,检查是否有网络间链路抖动导致的5xx报错,具体以现场实际发生的频率和业务状况为准。
    说明:一般情况下,源站带宽如果容易被打满,或者容易发生丢包或延迟的情况,则建议将Nginx的nginx.conf配置文件中的send timeout或者read timeout参数调大一些。

适用于

  • CDN
  • 对象存储OSS