天天看点

【CDN 最佳实践】CDN访问异常排查思路

当客户使用 cdn 加速站点访问后,客户端的请求将首先发送到 cdn 的 l1 节点,再通过 l1 -> l2 -> 源站的网络路径回源获取资源。因此如果访问过程中出现问题就可能涉及到多级网络链路的问题。如何尽快定位并解决问题就成为疑难问题,本文将根据系统介绍如何定位 cdn 资源无法访问的问题点以及处理的思路。

当某个站点的资源 url 访问出现异常时首先需要查看的即是对应的域名是否有正确配置解析到 cdn 上。如图 1 所示即是 cdn 加速域名的基本配置截图,从图中我们可以查看到该加速域名对应的 cname 域名、源站设置等设置。其中需要特别注意的是:

源站设置的地址或者端口是否正确。 cdn 作为访问链路中间的 proxy ,真实的数据在没有缓存的情况下是仍然需要回源获取访问的数据的,因此用户需要保证 cdn 节点通过源站设置和回源 host 设置可以正确的获取得到资源内容。

【CDN 最佳实践】CDN访问异常排查思路

                                                                        图 1. cdn 域名配置示意图

【CDN 最佳实践】CDN访问异常排查思路

                                                                        图 2. cdn 域名解析示意图

在确定 cdn 解析配置正确后仍然访问异常那么我就需要按照 cdn 的访问链路来逐项排查。首先我们需要确定的即是访问异常的情况是全局现象还是局部现象的话,如果是全局情况的话一般问题出现在 cdn 本身的设置以及源站的设置上。可以按照如下的逻辑逐条排查:

2、在 http 和 https 都出现问题时我们需要首先查看 cdn 的源站是否正常。用户可以通过绑定 host 测试源站的响应情况。由于 cdn 仅是中间的代理服务器,当 cdn 没有缓存需要回源时就会回到源站访问,因此源站访问正常是 cdn 可以访问的条件。对于 windows 系统可以通过 c:windowssystem32driversetchosts 文件配置 host 绑定,而 mac 和 linux 系统则都可以通过 /etc/hosts 文件进行修改。如果这时测试访问异常就需要用户首先排查源站的原因,如果源站响应正常可以转 3。

【CDN 最佳实践】CDN访问异常排查思路

                                                                        图 3. cdn 沙箱状态示意图

4.2. 请核对 cdn 返回的状态码是否是 504,504 错误一般为 cdn 回源到源站超时导致的。cdn 回源有严格的超时时间(四层 tcp 是 10 秒,七层http / https是 30 秒),当超过该时间时即使后续源站响应正常也是会返回 504 的。因此建议使用 cdn 的站点都做动静分离改造,因为部分动态资源可能出现 30 秒仍然无法响应的。

<a href="https://help.aliyun.com/document_detail/27135.html?spm=5176.doc27134.6.584.1htixk">referer 防盗链功能介绍</a>

<a href="https://help.aliyun.com/document_detail/27138.html?spm=5176.doc27135.6.585.1i3xsa">鉴权功能介绍</a>

4.4. 请核对 cdn 返回的状态码是否是 404 。在保证源站正常时一般是由于cdn 的源站地址和回源 host 的设置导致回源无法获取资源内容因此报了 404 的错误。建议您可以参考下上述第一部分的第二点内容。

由于 cdn 仅是缩短客户端到源站的运营商网络链路,但是仍然无法避免需要从客户端访问到 cdn l1 节点中间通过运营商网络访问。因此客户端访问异常仍然是可能受该段链路的波动所影响。建议遇到此类问题可以先收集以下信息:

   1)具体访问异常的 url;

   2)访问 cdn 的节点 ip,您可以通过 ping 加速域名得到;

   3)客户端访问的报错信息,请包括 general、request、response 头信息,您可以通过浏览器中的审查元素中的 network 标签页中查看到;

   5)客户端 ping / mtr 的测试结果。

获取上述信息后可以按照如下的思路进行排查:

可以根据上述第四条中获取得到的客户端的 local dns 和 ip 是否是属于同一地域的同一运营商的,因为 cdn 的节点调度是根据 local dns 进行调度的,如果客户配置的 local dns 与本地实际的客户端运营商不相匹配就会导致 cdn 调度的节点异常导致链路出现问题的。建议使用 cdn 的客户端可以使用自动获取的 dns 服务器。如果确认 local dns 和 ip 设置正确的转 2 。

请查看上述第二条中的信息是否与客户端local dns 对应的运营商匹配,另外地理位置较为接近,如果不接近的话建议可以通过工单反馈给售后工程师进行处理。如果确认正常请转

请查看上述第五条中的信息核对客户端到 cdn 该节点访问是否存在丢包的情况,并且可以 mtr 的测试结果查看到具体丢包的节点,如果这段运营商链路出现丢包的话建议可以联系当地的运营商沟通该丢包情况。另外根据 cdn 的调度原理可以临时修改客户端的 local dns 为一些公共的 dns 服务器(可以考虑修改为 223.5.5.5 或者 223.6.6.6 ),使用别的 cdn 节点以及其对应的链路临时恢复业务。

继续阅读