目的:定位“访问通过 CDN 加速的资源时出现慢、超时、404/502/524/522 等异常”的根因。
准备:一台能复现问题的客户端(浏览器或命令行)、一台在其他网络环境的测试机(可用云主机)、管理员权限或可安装工具权限。
工具:ping、traceroute/tracert、dig/nslookup、curl/wget、mtr、tcpdump/tshark、Wireshark、openssl、iperf3、CDN 提供商控制台及日志访问权。
步骤1:在客户端执行 ping 和 traceroute(Windows 用 tracert)。示例:ping example-cdn-domain.com;traceroute -w 2 example-cdn-domain.com。
步骤2:观察返回的 IP 是否为 CDN 边缘节点(通常是 CNAME 指向的域名解析到 CDN 提供 IP)。用 dig 查看解析链:dig +short example-cdn-domain.com;dig +trace example-cdn-domain.com。
步骤3:在另一网络(手机数据或云主机)重复上述命令,比较是否为区域性或普遍性问题。若只有某网段异常,优先考虑本地 ISP、防火墙或路由问题;若多地异常,多为 CDN 或源站问题。
步骤1:查看 CNAME 链:dig example-cdn-domain.com CNAME +short,确认是否指向 CDN 的域名。
步骤2:核对 TTL 和是否存在 DNS 污染或解析不一致:使用不同 DNS 解析器(如 8.8.8.8、1.1.1.1、本地运营商)比较:dig @8.8.8.8 example-cdn-domain.com +short。
步骤3:检查 CDN 的地域解析是否正常(有些 CDN 会根据源站/配置返回不同的边缘 IP):用 dig +short @resolver ipinfo.io 或使用 CDN 提供的“区域测试”工具。
步骤1:使用 curl 查看响应头与耗时:curl -I -v https://example-cdn-domain.com/path。关注 status、server、age、cache-control、x-cache 等头部。
步骤2:若需要查看完整请求流程与重定向:curl -v --trace-ascii trace.txt https://example-cdn-domain.com/path。
步骤3:浏览器中打开 DevTools(F12)Network 面板,勾选 Disable cache,刷新查看资源的请求时序、DNS、TCP、SSL、TTFB、Content-Length、响应码与请求 initiator。记录哪个阶段耗时最长。
步骤1:用 openssl 检查证书链与 SNI:openssl s_client -connect
步骤2:若证书不匹配或链不完整,可能是 SNI 未发送或边缘节点证书配置错位。可用 curl --resolve example-cdn-domain.com:443:
步骤3:检查证书到期、OCSP 状态、TLS 协议/密码套件是否被客户端或中间设备限制。
步骤1:使用 traceroute/mtr 查找丢包/延迟突增节点:mtr -rw example-cdn-domain.com。标记首次出现丢包或 RTT 激增的跳点。
步骤2:在出现问题的跳点上,若属于运营商网络,联系 ISP 并提供 traceroute 输出与时间窗口;若是 CDN 的中间骨干或到边缘节点的链路,联系 CDN 支持并附上 mtr/traceroute。
步骤3:为了更精确,抓包:sudo tcpdump -i any host
步骤1:确认边缘到源站连通性:在 CDN 提供的边缘或用 curl --resolve 指定边缘 IP(或用 CDN 控制台的回源调试工具)请求源站资源,观察是否返回 502/504/523 等回源错误。
步骤2:检查源站响应时间、并发限制、防火墙或 WAF 是否拒绝来自 CDN 的 IP。确保源站允许 CDN 的 IP 列表访问(白名单)。
步骤3:查看源站日志(access/error),筛选请求时间窗内与边缘节点 IP 对应的日志,定位 5xx 错误或超时原因(如应用崩溃、数据库慢查询)。
步骤1:检查缓存命中率与响应头中的 x-cache / age,若为 MISS,确认 Cache-Control、Vary、Cookie 等配置是否导致未命中。
步骤2:必要时执行缓存刷新/清除(Purge):在 CDN 控制台使用按 URL 或按路径清理,或通过 API:curl -X POST -H "Authorization: Bearer
步骤3:如发现边缘节点有配置错误(错误的回源域名、证书或路由),在 CDN 控制台修改并下发配置,观察变更生效后再次验证。
问:为什么有的用户能访问正常,而有的用户访问缓慢或报错?(地域/运营商差异、DNS 缓存、路由影响)
答:原因通常是地域性解析或网络路径差异。排查步骤:1) 在不同地域使用 dig/@不同解析器对比 CNAME 与返回 IP;2) 在多个位置执行 traceroute/mtr 定位首次出现差异的节点;3) 使用 CDN 的地域回放或第三方工具(如 online curl/GTMetrix/Uptrends)验证差异;4) 如果发现特定 ISP 或节点问题,将 traceroute、mtr、tcpdump 输出提供给 CDN/ISP 支持进行处理。
问:在抓包后,我如何分辨问题出在 TCP(三次握手/重传)还是 SSL 握手或 HTTP 层超时?
答:先在 pcap 中按时间轴查看:1) 若没有完整三次握手(SYN、SYN/ACK、ACK),为 TCP 层问题(网络丢包、防火墙丢弃或中间设备重置);2) 若三次握手完成但没有 ClientHello 或 ServerHello,说明 TLS 层问题(可能是中间设备拦截、SNI 未发送或证书问题);3) 若 TLS 握手完成但没有 HTTP 请求/响应或请求后长时间等待,属应用/回源慢或边缘阻塞。根据不同层级采取相应动作(调整路由、放行端口、修复证书、优化源站)。
问:当发现大量用户出现 CDN 5xx 或长时间超时,我可以立即采取哪些措施来快速恢复用户访问?
答:紧急措施包括:1) 在 CDN 控制台启用“回退到另一个源”或切换至备用源;2) 临时提高缓存 TTL,减少回源压力并缓存成功响应;3) 使用 CDN 的“静态化页面”或自定义错误页缓解用户体验;4) 若是证书问题,临时上载有效证书或调整回源规则;5) 通知 CDN 支持并附上 traceroute、curl 输出、边缘日志和时间窗,以便快速定位并告知客户预计恢复时间。
