本文按癥狀匯總 CDN 效能最佳化情境的排障方法:訪問速度慢、Gzip 壓縮與頁面最佳化不生效、忽略參數配置異常等。
癥狀速查
對照下錶快速定位排查方向:
癥狀表現 | 關鍵判據 | 排查章節 |
某地區或某電訊廠商使用者集中訪問慢 | ping 加速網域名稱延遲大或丟包;使用者被調度到距離遠的節點 | |
訪問慢且來源站點壓力大、回源流量高 |
| |
API 等動態介面訪問慢,靜態資源正常 | 動態請求每次回源, | |
回源擷取內容慢、回源失敗率高 | 來源站點與主要使用者群位於不同國家或地區 | |
首頁載入慢,首頁返回後靜態資源很快載入 | 首頁請求在 Network 中長時間 Pending,Waiting (TTFB) 耗時高 | |
頁面資源總體積大、下載耗時間長度 | Timing 中 Content Download 耗時佔比最大 | |
直連來源站點返回壓縮內容,經 CDN 訪問後未壓縮(Gzip 或 Brotli) | 要求標頭帶 | |
已開啟頁面最佳化,瀏覽器訪問返回的 HTML 未被最佳化 | curl 不帶 | |
開啟忽略參數後鑒權失敗、使用者資料串號或返回錯誤內容 | 帶不同參數的 URL 返回同一份緩衝內容 | |
修改忽略參數配置後仍訪問異常或回源流量未降低 | 節點舊緩衝未重新整理,或同時啟用了自訂 Cache Key | |
OSS 圖片處理或視頻截幀返回未處理的原始資源 | 帶 | |
已開啟忽略參數,但不同用戶端快取命中狀態不一致 | 部分請求 |
說明:如果尚無法確定癥狀屬於上表哪一類,請根據排障前的準備步驟確認問題範圍和快取命中狀態;快取命中率最佳化等相鄰問題的排查入口請參見相關文檔。
排障前的準備
效能問題的影響因素較多,排查前先確認請求確實經過 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>"瀏覽器訪問
在瀏覽器 Network 中禁用本機快取後複現。
按 Time 排序,確認慢 URL 是否真正經過 CDN。
查看 Timing 的 Queueing、Stalled、DNS、Initial connection、SSL、Waiting (TTFB)、Content Download。
記錄頁面主文件與其依賴資源的瀑布關係。
通過 DNS 查詢確認解析結果,通過 MTR/traceroute 觀察路徑。
多地區撥測應使用同一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加速動態請求,通過路由最佳化、傳輸最佳化等技術縮短回源鏈路。注意動態加速屬於鏈路最佳化,如果來源站點伺服器本身響應慢,仍需最佳化來源站點。
跨國或跨境回源慢
癥狀:來源站點與主要使用者群位於不同國家或地區時,回源品質波動,回源擷取內容慢、回源失敗率高,影響緩衝和內容分發。
原因:跨境回源受不同國家間海底光纜容量和公網擁塞影響。
解決方案:使用Global Acceleration 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 要求標頭標識請求來自Proxy 伺服器。Nginx 的 ngx_http_gzip_module 模組通過 gzip_proxied 配置控制代理請求是否啟用壓縮,該配置預設值為 off,導致來自 CDN 的回源請求不返回壓縮內容。
解決方案:
在 Nginx 設定檔(http、server 或 location 段,以實際配置為準)中設定
gzip_proxied any,使所有來自Proxy 伺服器的請求都啟用壓縮。執行
nginx -t確認配置無誤後執行nginx -s reload重新載入配置。通過 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參數,使來自Proxy 伺服器的請求不返回壓縮內容。方案二:在 CDN 配置刪除回源 HTTP 要求頭中的 Accept-Encoding,使來源站點返回未壓縮內容,由 CDN 完成頁面最佳化。
說明:來源站點不返回壓縮內容後,CDN 可通過智能壓縮功能對用戶端響應進行壓縮,兼顧頁面最佳化與傳輸壓縮效果。
忽略參數異常
開啟忽略參數後出現業務異常
癥狀:開啟忽略參數後出現鑒權失敗、使用者資料串號、返回錯誤的緩衝內容或圖片處理失效。
原因:開啟忽略參數後,CDN 將帶不同參數的請求視為同一資源緩衝。以下類型的 URL 參數不應被全域忽略:
使用者身份標識(如 UID、Token、Session ID):忽略後會導致鑒權失敗或不同使用者資料串號。
動態內容區分(如版本號碼
?v=1、分頁頁碼?page=2):忽略後會返回錯誤的緩衝內容。來源站點處理指示(如 OSS 圖片處理參數
x-oss-process):忽略後處理參數失效,返回未處理的原始資源。
排查與解決方案:
刪除或關閉忽略參數配置。
執行緩衝重新整理(URL 重新整理或目錄重新整理),清除邊緣節點的舊緩衝。
如需保留部分參數,使用保留指定參數模式,將關鍵參數(如
x-oss-process、token)設定為保留。忽略參數功能詳情請參見忽略參數。
修改忽略參數配置後未生效
癥狀:修改忽略參數配置後,仍出現訪問異常或回源流量未降低。
原因:配置修改後,邊緣節點上已緩衝的檔案不會自動更新,舊緩衝仍按舊策略響應。
排查步驟:
確認配置已儲存:登入 CDN 控制台,重新進入忽略參數配置頁面,確認當前配置狀態與預期一致。
檢查是否與自訂 Cache Key 衝突:自訂 Cache Key 會覆蓋忽略參數配置。若已啟用自訂 Cache Key,忽略參數配置將不生效。請確認兩者未同時啟用。
執行緩衝重新整理:在重新整理和預熱資源頁面執行 URL 重新整理或目錄重新整理,清除舊緩衝後新配置才能完全生效。
驗證配置生效:執行
curl -I "完整URL"檢查回應標頭X-Cache,確認快取命中狀態符合預期。
OSS 圖片處理或視頻截幀內容錯誤
癥狀:使用 OSS 圖片處理(如 x-oss-process=image/resize,w_200)或視頻截幀時,訪問返回未經處理的原始圖片或視頻,或不同處理參數的請求返回相同內容。
原因:CDN 網域名稱開啟忽略參數後,原圖連結與帶處理參數的連結被緩衝為同一份資源,導致訪問內容錯誤。
解決方案:在 CDN 控制台忽略參數配置中,將 x-oss-process 參數設定為保留指定參數模式,使帶圖片處理參數的 URL 單獨緩衝,避免與原圖緩衝衝突。配置修改後需重新整理緩衝(參見修改忽略參數配置後未生效)。
開啟忽略參數後快取命中狀態不一致
癥狀:已開啟忽略參數,但不同用戶端的快取命中狀態不一致,部分請求 X-Cache 顯示 MISS。
可能原因:
URL 攜帶未忽略的動態鑒權參數:如 URL 帶有
auth_key等鑒權參數且被設定為保留,每次請求的鑒權值不同,CDN 仍識別為不同資源。首次訪問節點無緩衝:資源尚未緩衝到該邊緣節點,首次訪問必然顯示 MISS。
用戶端要求標頭差異:如
Accept-Encoding不同可能觸發多副本緩衝(如 Gzip 版本和非 Gzip 版本分別緩衝),如果來源站點返回了Vary: User-Agent,不同 UA 的請求也會分別緩衝。與自訂 Cache Key 衝突:自訂 Cache Key 會覆蓋忽略參數配置,兩者同時啟用時忽略參數不生效。
排查方法:在用戶端執行 curl -I "完整URL",對比回應標頭 X-Cache 和 X-Swift-CacheTime 確認緩衝狀態。解決方案:確認忽略參數配置正確(已開啟且關鍵參數已設定為保留),確保用戶端要求標頭策略一致,並確認未與自訂 Cache Key 同時啟用。