抽丝剥茧定位一个CDN访问慢的案例

简介: 源站安全策略将CDN回源IP识别为攻击IP进行拦截,CDN回源504触发重试导致访问时间拉长。

问题描述

某客户反馈使用CDN以后下载时间很慢,TTFB很长,需要定位原因。

排查过程

1. 分析CDN日志

根据Network下的信息后台查到CDN的日志信息,发现访问慢是因为中间有过504重试,具体过程如下

(1)客户端请求到L1(cn2620),L1回源到cache18.l2cn2635以后,cache18.l2cn2635回源504,RT时间是5182ms
(2)cache18.l2cn2635响应504以后,触发L1重试到cache12.l2cn2641,回源成功,RT时间是137ms
所以虽然最终现象看起来是访问成功了,只是速度比较慢,实际的过程中是因为有504并发生了重试,耗时主要是第一次回源504的耗时。同时查看但是客户端提供的Network下的响应头也可以进一步确认此问题,当时虽然响应了httpcode 200,但是响应头里响应了x-swift-error:orig response 5xx error

2. 错误日志分析

日志服务SLS查看L2的错误日志分析,504错误基本就是聚焦在l2cn2635节点,且rt时间是5s左右。

3. 听云探测

根据前面的分析,其他L2节点到源站首字节都正常,日志也正常,唯独这个L2节点到源站会504,而且首字节时间是5k ms,因此怀疑是源站做了相关安全策略,或者该节点到源站的网络问题。但是用户的源站是阿里云的SLB,且用户反馈SLB层面并没有做安全策略。由于该L2是唐山的一个L2节点,因此想到用听云到唐山地区用三大运营商探测下源站,发现也一切正常。

4. 为什么会504?

CDN回源源站的时候产生了504,但是客户源站SLB的日志并没有查到504的日志,看起来这个504日志不是源站响应的,那么就有可能CDN回源超时导致的。但是根据rt时间看5s就504了,看起来并没有达到默认CDN约定的回源超时时间,默认CDN回源的超时时间是:建联超时10s (也就是说tcp连接10s超时),读客户端请求头超时时间:30s (也就是说应用层30s超时)。至此,一共有如下几个疑问需要确认:(1)看起来rt时间5s并没有达到超时时间,看起来不是超时导致,那么有可能是源站直接响应504。

(2)回源504日志显示的错误码是"0",也就是CDN认为是正常请求,并不认为是连接不上或超时断开这种情况,这也进一步印证了源站直接响应504的情况。

(3)但是现在的问题是源站查不到504日志,那么有没有可能是客户反馈的源站日志排查的结果不可靠?

5. 源站抓包

为了验证到底是不是源站吐的504,因此考虑让用户在源站侧抓包,然后客户端去访问复现,出现问题以后提供chrome的har文件和源站的抓包文件。根据日志分析,第一次是cache18.l2cn2635回源504,回源的IP是101.x.xx.xx;然后L1重试到cache12.l2cn2641回源成功,回源的IP是115.xx.xx.xx。从源站的抓包文件看,可以看到来自115.xx.xx.xx的报文,但是过滤不到来自101.xx.xx.xx的报文,看起来就是101.xx.xx.xx的请求没有到源站。

6. CDN抓包

目前情况看起来有点复杂了,源站SLB上没有抓到来自CDN回源IP的报文,且源站日志没有记录该504请求的CDN回源IP的日志,看现象就是CDN回源源站的回源链路有问题。为了进一步验证这个问题,只能到发生504的cache18.l2cn2635这台机器上去抓包。从抓包结果来看,的确是源站直接响应了504,而且看响应504的报文里,TTL和SYN握手报文的TTL一致,看起来也不是被劫持导致,也不像是网络问题。而且只有两台CDN机器回源有504问题,其他机器回源一切正常。

7. 源站配置检查

各种证据表明,越来越像是源站有安全策略拦截了,但是源站是SLB,看SLB的一些访问控制的策略,比如IP黑白名单,即使拦截了应该也能查到403的日志,而不会是504。检查配置发现SLB开启了"透明WAF"功能。进一步了解该功能原理,SLB开启透明WAF功能以后不需要更改DNS解析,请求SLB的流量都先走TWAF(透明WAF),TWAF在CDN和SLB之间充当了一个透明代理。TWAF和client建连时借用了SLB的IP,TWAF和SLB建连时借用了client的IP。那么根据这个现象看,极有可能是CDN的请求被TWAF拦截了(在下图中,CDN的回源IP就是client)。

8. TWAF拦截记录

去查了TWAF的拦截记录,发现果然有拦截记录,CDN的tproxy IP(回源IP)被WAF识别成攻击IP,被用户的访问控制策略加入到了WAF的黑名单里。致此,终于可以结案!


问题原因

由于业务请求走了CDN,CDN又通过汇聚式的L2节点回源,而源站配置了透明WAF,WAF配置的安全规则认为这些频繁回源的CDN节点IP是攻击IP,被访问控制策略加入到黑名单,而TWAF通过响应504的形式拒绝了来自CDN的回源请求。根据上面的TWAF实现原理图可以知道,这个504的请求对于SLB来说完全是没有感知的,所以SLB上肯定没有日志,需要查WAF的拦截日志才能发现。

解决方案

从黑名单里移除该CDN的回源IP即可。但是由于目前配置的策略,很有可能还会继续把CDN的回源IP当成攻击IP处理,因此需要调整WAF拦截策略,或者把CDN的回源IP加入到白名单。但是这也有风险,因为CDN回源时会智能分配节点访问源站,回源的节点IP是不固定的,因此不建议将源站的回源策略白名单设置为固定的节点IP列表,这样有可能因为CDN回源IP变更,新增IP由于未在白名单导致被拦截继而发生回源失败的情况。

如果有强诉求,也可以通过调用CDN的DescribeL2VipsByDomain接口获取CDN回源的节点IP列表并添加到源站服务器的白名单中。该接口仅支持日峰值带宽为1Gbps以上的用户调用,如果符合该条件,可以提交工单,申请该接口的调用权限。

适用于

  • CDN
  • 全站加速
目录
相关文章
|
域名解析 缓存 前端开发
前端性能优化 实际应用cdn 加快静态资源访问
前端性能优化 实际应用cdn 加快静态资源访问
前端性能优化 实际应用cdn 加快静态资源访问
|
11月前
|
缓存 边缘计算 网络协议
CDN永远的神!成功解决了困惑我多年的GitHub访问太慢问题
我写技术文章画的图片是保存到 GitHub 的,没别的原因,就是因为免费,但是GitHub 访问的速度大家都懂的,访问的速度很慢。 所以我会用 CDN 来加速图片的访问,也就是我的图床的方案是 GitHub + jsdelivr CDN,使用很简单,只需要把域名地址替换一下就行。
|
CDN
CDN诊断工具与日志的作用——如何利用诊断工具进行问题分析(查看定位到的是否是cdn节点)
CDN诊断工具与日志的作用——如何利用诊断工具进行问题分析(查看定位到的是否是cdn节点)自制脑图
137 0
CDN诊断工具与日志的作用——如何利用诊断工具进行问题分析(查看定位到的是否是cdn节点)
|
监控 CDN
通过资源监控定位CDN域名当前情况
通过资源监控定位CDN域名当前情况自制脑图
75 0
通过资源监控定位CDN域名当前情况
|
缓存 监控 安全
通过资源监控定位 CDN 域名当前情况| 学习笔记
快速学习通过资源监控定位 CDN 域名当前情况。
141 0
|
边缘计算 监控 前端开发
利用阿里云Eventbridge在CDN边缘应用程序中访问日志服务SLS
在Web前端领域,追求极致性能是个永恒的话题。这些年的一些新兴理念都是为了提升站点访问性能而提出,无论是Jamstack技术理念或者或者 ESR (边缘渲染),都是Client侧进行性能优化的基础上,进一步拓展到了网络Infra层面,就是我们现在经常讨论的边缘计算。而阿里云的CDN EdgeRoutine 就是为广大客户提供可自由编程的边缘计算能力,我们可以用他来构建边缘节点的网关应用,来访问静态资源或者后端服务。当这个边缘网关在业务上承担的角色越来越重要的时候,我们就对他内部的业务逻辑产生了可观测的诉求,希望能够记录日志到日志服务上,然而日志服务提供的SDK,在ER的环境中暂时不被支持,这个
285 0
|
存储 CDN
jsdelivr cdn大陆挂了不能访问替代方案
jsdelivr cdn大陆挂了不能访问替代方案
1167 0
jsdelivr cdn大陆挂了不能访问替代方案
|
存储 缓存 负载均衡
什么是CDN:Content Delivery Network内容分发网络(案例详解)
☕️本篇一起入门学习CDN : Content Delivery Network内容分发网络;
269 0
什么是CDN:Content Delivery Network内容分发网络(案例详解)
|
存储 缓存 负载均衡
分布式架构原理--CDN加速静态文件访问
分布式架构原理专题: (演进过程及如何把应用从单机扩展的分布式;CDN加速静态文件访问;系统监控、容灾、存储动态扩容;架构设计及业务驱动分化;CAP\Base理论及其应用)
472 0
分布式架构原理--CDN加速静态文件访问
|
存储 对象存储 CDN
【对象存储OSS/网络分发加速CDN】使用OSS后,如何实现流量访问限制或请求次数的限制
描述使用对象存储OSS后,如何实现流量访问限制或请求次数的限制
2068 2