全部产品
Search
文档中心

CDN:性能优化排障指南

更新时间:Sep 16, 2026

本文按症状汇总 CDN 性能优化场景的排障方法:访问速度慢、Gzip 压缩与页面优化不生效、忽略参数配置异常等。

症状速查

对照下表快速定位排查方向:

症状表现

关键判据

排查章节

某地区或某运营商用户集中访问慢

ping 加速域名延迟大或丢包;用户被调度到距离远的节点

客户端到节点网络质量差或调度异常

访问慢且源站压力大、回源流量高

X-Cache为 MISS、X-Swift-CacheTime为 0

缓存命中率低或频繁回源导致访问慢

API 等动态接口访问慢,静态资源正常

动态请求每次回源,X-Cache持续为 MISS

动态请求访问慢

回源获取内容慢、回源失败率高

源站与主要用户群位于不同国家或地区

跨国或跨境回源慢

首页加载慢,首页返回后静态资源很快加载

首页请求在 Network 中长时间 Pending,Waiting (TTFB) 耗时高

网站首页加载慢

页面资源总体积大、下载耗时长

Timing 中 Content Download 耗时占比最大

大资源加载慢

直连源站返回压缩内容,经 CDN 访问后未压缩(Gzip 或 Brotli)

请求头带Accept-Encoding,响应头无Content-Encoding、仅返回Content-Length

回源后 Gzip 压缩不生效

已开启页面优化,浏览器访问返回的 HTML 未被优化

curl 不带Accept-Encoding时已优化,带该请求头时未优化

同时开启页面优化和 Gzip 压缩,页面优化不生效

开启忽略参数后鉴权失败、用户数据串号或返回错误内容

带不同参数的 URL 返回同一份缓存内容

开启忽略参数后出现业务异常

修改忽略参数配置后仍访问异常或回源流量未降低

节点旧缓存未刷新,或同时启用了自定义 Cache Key

修改忽略参数配置后未生效

OSS 图片处理或视频截帧返回未处理的原始资源

带x-oss-process与不带该参数的 URL 返回相同内容

OSS 图片处理或视频截帧内容错误

已开启忽略参数,但不同客户端缓存命中状态不一致

部分请求X-Cache为 MISS,URL 含保留的动态鉴权参数或客户端请求头存在差异

开启忽略参数后缓存命中状态不一致

说明:如果尚无法确定症状属于上表哪一类,请根据排障前的准备步骤确认问题范围和缓存命中状态;缓存命中率优化等相邻问题的排查入口请参见相关文档。

排障前的准备

性能问题的影响因素较多,排查前先确认请求确实经过 CDN,并建立对照组以缩小根因范围。

确认请求确实经过 CDN

建议收集以下基础信息:

  • 完整 URL、复现时间和时区;

  • 用户国家或地区、运营商和客户端公网 IP;

  • LocalDNS 或其他解析器;

  • CNAME 链、最终 A/AAAA 记录和实际连接 IP;

  • 加速域名、源站类型、加速区域和 ICP 备案情况;

  • 最近 24 小时的 DNS、证书、缓存、回源、压缩和内容发布变更。

说明

仅用 ping 不能证明 HTTPS 请求已正确经过 CDN。ping 测量 ICMP,节点也可能限制 ICMP。应同时核验 DNS、TCP、TLS 和 HTTP。

建立对照组

为便于定位根因,建议建立以下对照:

  • 正常地区与异常地区;

  • 正常运营商与异常运营商;

  • IPv4 与 IPv6(如域名已启用);

  • 访问 CDN 节点的效果对比访问源站的效果;

  • 不同查询参数、不同 Accept-Encoding 的单变量请求;

  • 同一 URL 的连续 GET 请求。

说明

不要只用一个 HEAD 请求断定 GET 的缓存和正文行为,因为某些源站或代理对 HEAD 与 GET 的处理不同。

访问效果采集

一次可复核的排障至少记录以下信息:

  • UTC 时间、客户端地区与运营商、脱敏后的客户端 IP <CLIENT_IP>、LocalDNS;

  • 请求 URL、请求方法、状态码、重定向链;

  • DNS 结果、实际连接节点 IP;

  • X-Cache、X-Swift-CacheTime、Age(如有)、Via;

  • Cache-Control、Pragma、Expires、ETag、Last-Modified、Vary;

  • Content-Type、Content-Length、Content-Encoding、Accept-Ranges、Content-Range;

  • DNS、TCP、TLS、TTFB、下载和总时长;

  • 同一请求的 CDN 首次 GET、重复 GET、指定节点 GET、直连源站 GET 对照结果。

命令行访问

访问耗时分解:优先使用 GET;HEAD 只作辅助,因为 HEAD 的源站处理、WAF 规则或缓存路径可能与 GET 不同。

curl -sS -D /tmp/cdn-headers.txt -o /dev/null \
  -w 'remote_ip=%{remote_ip}\nhttp_code=%{http_code}\ntime_namelookup=%{time_namelookup}\ntime_connect=%{time_connect}\ntime_appconnect=%{time_appconnect}\ntime_starttransfer=%{time_starttransfer}\ntime_total=%{time_total}\nsize_download=%{size_download}\n' \
  "https://<CDN_DOMAIN>/<RESOURCE_PATH>"

耗时分解:

  • DNS:time_namelookup;

  • TCP:time_connect - time_namelookup;

  • TLS:time_appconnect - time_connect;

  • 请求发送、CDN 节点处理、回源和源站:主要反映在 time_starttransfer - time_appconnect;

  • 下载:time_total - time_starttransfer。

TTFB 高只能说明等待首字节时间长,无法直接证明源站慢。还需结合缓存状态、连续请求、CDN 监控和源站日志。

不同指标项对应的问题:

  • DNS 高:检查解析器、CNAME、A/AAAA、TTL 和地域差异。

  • TCP 高:检查路由、丢包、节点距离和运营商链路。

  • TLS 高:检查 SNI、证书链、TLS 版本和协议协商。

  • TTFB 高:检查缓存状态、CDN 处理、回源链路和源站应用。

  • 下载高:检查资源体积、吞吐、压缩、图片或视频编码。

  • 网络阶段正常但页面仍慢:检查浏览器 Queueing、渲染阻塞、LCP、INP、第三方资源和主线程任务。

绑定某个 CDN 节点进行对照:

curl -sS -D - -o /dev/null \
  --resolve "<CDN_DOMAIN>:443:<CDN_NODE_IP>" \
  "https://<CDN_DOMAIN>/<RESOURCE_PATH>"

直连源站进行对照验证访问效果:

curl -sS -D - -o /dev/null \
  --resolve "<CDN_DOMAIN>:443:<ORIGIN_IP>" \
  "https://<CDN_DOMAIN>/<RESOURCE_PATH>"

验证压缩协商:

curl -sS -D - -o /dev/null \
  -H 'Accept-Encoding: gzip, br' \
  "https://<CDN_DOMAIN>/<RESOURCE_PATH>"

验证 Range:

curl -sS -D - -o /dev/null \
  -H 'Range: bytes=0-1023' \
  "https://<CDN_DOMAIN>/<LARGE_RESOURCE_PATH>"

重复执行同一个 GET,比较请求级缓存状态与耗时:

curl -sS -D - -o /dev/null "https://<CDN_DOMAIN>/<RESOURCE_PATH>"
curl -sS -D - -o /dev/null "https://<CDN_DOMAIN>/<RESOURCE_PATH>"

浏览器访问

  1. 在浏览器 Network 中禁用本地缓存后复现。

  2. 按 Time 排序,确认慢 URL 是否真正经过 CDN。

  3. 查看 Timing 的 Queueing、Stalled、DNS、Initial connection、SSL、Waiting (TTFB)、Content Download。

  4. 记录页面主文档与其依赖资源的瀑布关系。

  5. 通过 DNS 查询确认解析结果,通过 MTR/traceroute 观察路径。

  6. 多地区拨测应使用同一URL 与时间窗口。

访问速度慢

客户端到节点网络质量差或调度异常

症状:ping 加速域名延迟大或丢包;某地区、某运营商用户集中访问慢;用户被调度到距离远的节点。

可能原因与排查:

  • 加速区域设置错误:加速区域选择"仅中国内地"时,海外用户会被调度到中国内地节点;选择"全球(不包含中国内地)"时,中国内地用户会被调度到海外节点。请根据用户分布将加速区域设置为正确的范围(如"全球")。

  • 域名未完成 ICP 备案:未备案域名只能选择"全球(不包含中国内地)",中国内地用户通过境外节点访问时链路较长,速度可能不理想。需要为中国内地用户提供加速时,请先完成 ICP 备案;无法备案时可评估使用边缘安全加速 ESA海外跨地域安全加速降低中国内地用户访问海外站点的延迟。

  • 客户端 DNS 设置错误:例如东京用户使用美国的 DNS,会被调度到美国节点而非就近的节点。请指导用户修改为所在地对应运营商的 DNS。

  • 地区运营商网络波动:加速区域和 DNS 均正确但仍慢时,收集 traceroute 和 MTR 信息确认延迟发生的具体链路段;可根据用户请求到的节点 IP 绑定该节点测试,确认节点本身响应是否正常,再结合缓存命中状态和资源体积进一步分析。

缓存命中率低或频繁回源导致访问慢

症状:响应头 X-Cache 为 MISS、X-Swift-CacheTime 为 0;源站压力大、回源流量高;首次访问比直接访问源站还慢。

常见原因与优化方案:

  • 首次访问无缓存:节点首次响应需先回源取数据。推荐使用预热 URL 功能,将源站内容主动预热到 CDN 节点,请参见刷新和预热资源。

  • 流量低、文件热度不够:节点缓存按热度末尾淘汰,访问量低的资源会被提前清除。低流量场景可适当延长缓存时间或使用预热功能保持热度。

  • 缓存配置不合理:

    • 未配置缓存规则且静态文件未返回 ETag 和 Last-Modified 响应头时,该文件无法缓存。请在源站补充这两个响应头,或在 CDN 侧配置缓存规则,请参见配置CDN缓存过期时间。

    • 未配置缓存规则时使用默认缓存策略,缓存时间最长不超过 3600 秒,容易频繁过期回源。请根据业务设置合理的缓存时间。

    • 源站响应头含 s-maxage=0、max-age=0、no-cache、no-store、private、Pragma: no-cache 中任一项时,即使配置了缓存规则也不会缓存。请在源站将响应头修改为可缓存的值(如 public),或在CDN缓存规则中开启忽略源站不缓存标头。

  • URL 携带可变参数:不同参数的 URL 访问同一文件时,CDN 视为不同资源分别回源。请开启忽略参数功能,请参见忽略参数。

  • 大文件回源慢:大文件场景建议开启 Range 回源优化回源效率,请参见配置Range回源。

  • 频繁刷新缓存:频繁刷新 URL 或目录缓存会使节点缓存持续失效,命中率下降。请仅在内容更新时刷新受影响的资源。

验证方法:将用户域名绑定 hosts 到源站 IP 直接访问,与通过 CDN 访问的加载时间对比,可验证加速效果并确认瓶颈在回源还是分发链路。更多命中率优化策略请参见缓存排障指南。

动态请求访问慢

症状:API 接口等动态内容访问慢;静态资源快但页面整体加载慢。

原因:CDN 无法缓存实时变化的动态内容,动态请求每次都会转发回源站服务器,CDN 缓存加速对其无加速效果。如果源站本身响应慢,动态请求会同步变慢。

解决方案:

  • 源站做动静分离:静态资源使用 CDN 加速域名,动态请求使用直接解析到源站的域名访问。

  • 使用边缘安全加速 ESA加速动态请求,通过路由优化、传输优化等技术缩短回源链路。注意动态加速属于链路优化,如果源站服务器本身响应慢,仍需优化源站。

跨国或跨境回源慢

症状:源站与主要用户群位于不同国家或地区时,回源质量波动,回源获取内容慢、回源失败率高,影响缓存和内容分发。

原因:跨境回源受不同国家间海底光缆容量和公网拥塞影响。

解决方案:使用全球加速 GA 对源站做对应国家的定向加速,并配置 CDN 分区域回源策略,提升未命中缓存时的回源质量。GA 支持 ECS、ALB、OSS 等源站类型,并提供GA联动CDN实现回源加速。

网站首页加载慢

症状:首页请求在 Network 中 Pending 状态持续时间长;首页返回后静态资源很快加载出来。

原因:首页通常是动态资源或被设置为不缓存的资源,每次访问都会回源。源站响应慢时,首页请求被阻塞,后续依赖首页 HTML 引用的图片、JS、CSS 等资源无法开始加载。

解决方案:先通过缓存相关响应头确认首页是否命中缓存;未命中时按缓存命中率低或频繁回源导致访问慢排查缓存配置;源站响应慢时优化源站性能或采用动静分离。

大资源加载慢

症状:Timing 中 Content Download 耗时占比大;页面资源总体积大。

解决方案:开启性能优化功能(智能压缩、页面优化等)缩小文件体积,提升加载速度,请参见性能优化概述。智能压缩支持的格式包括:text/xml、text/plain、text/css、application/javascript、application/x-javascript、application/rss+xml、text/javascript、image/tiff、image/svg+xml、application/json、application/xml。

压缩与页面优化不生效

回源后 Gzip 压缩不生效

症状:源站(如 Nginx)开启了 Gzip 压缩,客户端直接访问源站时响应头返回 Content-Encoding: gzip;通过 CDN 访问且请求头带 Accept-Encoding: gzip, deflate 时,响应头只返回 Content-Length,内容未被压缩。

原因:CDN 回源请求中会携带 Via 请求头标识请求来自代理服务器。Nginx 的 ngx_http_gzip_module 模块通过 gzip_proxied 配置控制代理请求是否启用压缩,该配置默认值为 off,导致来自 CDN 的回源请求不返回压缩内容。

解决方案:

  1. 在 Nginx 配置文件(http、server 或 location 段,以实际配置为准)中设置 gzip_proxied any,使所有来自代理服务器的请求都启用压缩。

  2. 执行 nginx -t 确认配置无误后执行 nginx -s reload 重新加载配置。

  3. 通过 CDN 访问并确认响应头含有 Content-Encoding: gzip。

验证方法:使用 curl 直连源站对比测试——不带 Via 头时返回 Content-Encoding: gzip,增加 -H 'Via:xxx' 模拟代理请求后只返回 Content-Length,即可确认是 gzip_proxied 配置导致。

说明:Brotli 压缩不生效时排查思路相同——确认源站是否因 Via 请求头或 gzip_proxied 类配置拒绝对代理请求返回压缩内容,将 Gzip 相关配置替换为 Brotli 对应配置即可。

与页面优化的取舍:如果您同时开启了页面优化功能,请注意源站压缩与页面优化互斥,源站返回压缩内容后 CDN 无法执行页面优化。需要在源站压缩(节省回源带宽)和页面优化(精简 HTML 体积)之间根据业务优先级选择其一。

同时开启页面优化和 Gzip 压缩,页面优化不生效

症状:已开启页面优化功能,curl 不带 Accept-Encoding 请求头时返回的 HTML 已优化;但浏览器访问(请求头默认带 Accept-Encoding: gzip)时返回内容未经页面优化。

原因:

  • 源站返回了 Gzip 压缩内容:浏览器默认携带 Accept-Encoding: gzip 请求头,CDN 回源时转发该请求头,源站开启 Gzip 后返回压缩内容。CDN 节点不会对源站已压缩的内容进行解压后再执行页面优化,因此源站返回压缩内容时页面优化无法生效。

  • CDN 侧智能压缩不阻塞页面优化:CDN 自身的智能压缩在页面优化之后执行,两者不冲突。本症状仅在源站已返回压缩内容时出现——源站预压缩使 CDN 无法对内容做页面优化,与 CDN 侧智能压缩无关。

解决方案:

  • 方案一:确保源站对 CDN 回源请求不返回 Gzip 压缩内容。Nginx 源站可修改 gzip_proxied 参数,使来自代理服务器的请求不返回压缩内容。

  • 方案二:在 CDN 配置删除回源 HTTP 请求头中的 Accept-Encoding,使源站返回未压缩内容,由 CDN 完成页面优化。

说明:源站不返回压缩内容后,CDN 可通过智能压缩功能对客户端响应进行压缩,兼顾页面优化与传输压缩效果。

忽略参数异常

开启忽略参数后出现业务异常

症状:开启忽略参数后出现鉴权失败、用户数据串号、返回错误的缓存内容或图片处理失效。

原因:开启忽略参数后,CDN 将带不同参数的请求视为同一资源缓存。以下类型的 URL 参数不应被全局忽略:

  • 用户身份标识(如 UID、Token、Session ID):忽略后会导致鉴权失败或不同用户数据串号。

  • 动态内容区分(如版本号 ?v=1、分页页码 ?page=2):忽略后会返回错误的缓存内容。

  • 源站处理指令(如 OSS 图片处理参数 x-oss-process):忽略后处理参数失效,返回未处理的原始资源。

排查与解决方法:

  1. 删除或关闭忽略参数配置。

  2. 执行缓存刷新(URL 刷新或目录刷新),清除边缘节点的旧缓存。

  3. 如需保留部分参数,使用保留指定参数模式,将关键参数(如 x-oss-process、token)设置为保留。忽略参数功能详情请参见忽略参数。

修改忽略参数配置后未生效

症状:修改忽略参数配置后,仍出现访问异常或回源流量未降低。

原因:配置修改后,边缘节点上已缓存的文件不会自动更新,旧缓存仍按旧策略响应。

排查步骤:

  1. 确认配置已保存:登录 CDN 控制台,重新进入忽略参数配置页面,确认当前配置状态与预期一致。

  2. 检查是否与自定义 Cache Key 冲突:自定义 Cache Key 会覆盖忽略参数配置。若已启用自定义 Cache Key,忽略参数配置将不生效。请确认两者未同时启用。

  3. 执行缓存刷新:在刷新和预热资源页面执行 URL 刷新或目录刷新,清除旧缓存后新配置才能完全生效。

  4. 验证配置生效:执行 curl -I "完整URL" 检查响应头 X-Cache,确认缓存命中状态符合预期。

OSS 图片处理或视频截帧内容错误

症状:使用 OSS 图片处理(如 x-oss-process=image/resize,w_200)或视频截帧时,访问返回未经处理的原始图片或视频,或不同处理参数的请求返回相同内容。

原因:CDN 域名开启忽略参数后,原图链接与带处理参数的链接被缓存为同一份资源,导致访问内容错误。

解决方案:在 CDN 控制台忽略参数配置中,将 x-oss-process 参数设置为保留指定参数模式,使带图片处理参数的 URL 单独缓存,避免与原图缓存冲突。配置修改后需刷新缓存(参见修改忽略参数配置后未生效)。

开启忽略参数后缓存命中状态不一致

症状:已开启忽略参数,但不同客户端的缓存命中状态不一致,部分请求 X-Cache 显示 MISS。

可能原因:

  1. URL 携带未忽略的动态鉴权参数:如 URL 带有 auth_key 等鉴权参数且被设置为保留,每次请求的鉴权值不同,CDN 仍识别为不同资源。

  2. 首次访问节点无缓存:资源尚未缓存到该边缘节点,首次访问必然显示 MISS。

  3. 客户端请求头差异:如 Accept-Encoding 不同可能触发多副本缓存(如 Gzip 版本和非 Gzip 版本分别缓存),如果源站返回了 Vary: User-Agent,不同 UA 的请求也会分别缓存。

  4. 与自定义 Cache Key 冲突:自定义 Cache Key 会覆盖忽略参数配置,两者同时启用时忽略参数不生效。

排查方法:在客户端执行 curl -I "完整URL",对比响应头 X-Cache 和 X-Swift-CacheTime 确认缓存状态。解决方案:确认忽略参数配置正确(已开启且关键参数已设置为保留),确保客户端请求头策略一致,并确认未与自定义 Cache Key 同时启用。