【CDN 最佳實踐】CDN訪問異常排查思路
當客戶使用 CDN 加速站點訪問後,客戶端的請求將首先發送到 CDN 的 L1 節點,再通過 L1 -> L2 -> 源站的網絡路徑回源獲取資源。因此如果訪問過程中出現問題就可能涉及到多級網絡鏈路的問題。如何盡快定位並解決問題就成為疑難問題,本文將根據係統介紹如何定位 CDN 資源無法訪問的問題點以及處理的思路。
域名配置和解析
當某個站點的資源 URL 訪問出現異常時首先需要查看的即是對應的域名是否有正確配置解析到 CDN 上。如圖 1 所示即是 CDN 加速域名的基本配置截圖,從圖中我們可以查看到該加速域名對應的 CNAME 域名、源站設置等設置。其中需要特別注意的是:
1. 源站設置的地址或者端口是否正確。 CDN 作為訪問鏈路中間的 Proxy ,真實的數據在沒有緩存的情況下是仍然需要回源獲取訪問的數據的,因此用戶需要保證 CDN 節點通過源站設置和回源 Host 設置可以正確的獲取得到資源內容。
圖 1. CDN 域名配置示意圖
2. 源站設置和回源 Host 的區別。源站設置用戶是可以選擇域名和 IP 的。不管是設置為域名還是 IP , CDN 都會將其解析到 IP 的。因此當域名解析的 IP 與直接填寫IP的話兩種設置是沒有區別的。而當該 IP 對應的服務器上配置了多個站點的話就需要根據回源 Host 來決定的,回源 Host 是指 CDN在回源的請求會帶有 Host 字段,而字段帶的是真實需要訪問源站上對應的站點(也就是對應的服務器上對應站點的 server_name)。詳細請參考:回源Host的意義
3. 用戶源站是否支持 CDN 回源到 443 端口或者開啟協議跟隨回源。當 CDN 的源站端口設置為 443 或者開啟協議跟隨回源功能時是需要源站配置證書並提供 https 證書的。因此如果源站不支持 https 的話是需要您設置源站端口為 80 並且不要開啟協議跟隨功能。協議跟隨回源的功能詳細請參考:協議跟隨回源功能介紹
4. DNS 解析是否正確解析到 CNAME 域名上。CDN 加速域名要生效是需要解析能夠正確的解析到 CDN 的 CNAME 域名上的,如果 dns 解析沒有解析或者解析的 CNAME 域名沒有正確對應的話是會產生異常的。例如上圖 1中提供的例子在圖 2 中的主機記錄需要填寫 ali-cdn ,而記錄值則填寫完整的 CNAME 域名(ali-cdn.xxxxx.com.w.alikunlun.com),詳細的域名解析設置請參考:DNS解析設置介紹
圖 2. CDN 域名解析示意圖
** CDN 到源站異常**
在確定 CDN 解析配置正確後仍然訪問異常那麼我就需要按照 CDN 的訪問鏈路來逐項排查。首先我們需要確定的即是訪問異常的情況是全局現象還是局部現象的話,如果是全局情況的話一般問題出現在 CDN 本身的設置以及源站的設置上。可以按照如下的邏輯逐條排查:
1. 請首先核對是僅有 HTTPS 訪問出現問題還是 HTTP 和 HTTPS 出現問題。如果僅是 HTTPS 出現問題一般是 CDN HTTPS 的配置問題,其排查思路建議可以參考下: HTTPS 問題排查思路,如果是 HTTP 和 HTTPS 均有問題請轉 2 。
2、在 HTTP 和 HTTPS 都出現問題時我們需要首先查看 CDN 的源站是否正常。用戶可以通過綁定 host 測試源站的響應情況。由於 CDN 僅是中間的代理服務器,當 CDN 沒有緩存需要回源時就會回到源站訪問,因此源站訪問正常是 CDN 可以訪問的條件。對於 windows 係統可以通過 C:\Windows\System32\drivers\etc\hosts 文件配置 host 綁定,而 mac 和 linux 係統則都可以通過 /etc/hosts 文件進行修改。如果這時測試訪問異常就需要用戶首先排查源站的原因,如果源站響應正常可以轉 3。
3、請查看 CDN 的域名狀態是否在沙箱節點中,可以通過 CDN 控製台上的狀態查看到當前域名是否有在沙箱節點(如圖 3 )。由於 CDN 是不抗任何的 CC 或者DDoS 攻擊的,而您的該域名 XXXXX 由於曆史受到攻擊,所以被切沙箱節點,沙箱節點是不能保證服務的穩定性的,且一旦域名切入沙箱節點不支持切出。建議如果是希望進行安全防護的話可以考慮使用雲盾相關的產品進行安全防護,具體的架構可以參考:高防IP、CDN與WAF的架構設計。如果不是沙箱節點請轉 4。
圖 3. CDN 沙箱狀態示意圖
4.1. 請核對 CDN 返回的狀態碼是否是 503 ,一般 503 是由於源站做了安全控製導致的,請用戶查看下源站的安全防護功能(例如防火牆、安全狗等軟件),建議可以臨時關閉源站的安全防護措施後測試是否恢複。CDN 現在 L2 節點的 IP 段暫時需要通過白名單開放,當前僅支持日峰值帶寬為 1Gbps 以上的用戶申請,詳細請參考:CDN L2回源IP接口申請。
4.2. 請核對 CDN 返回的狀態碼是否是 504,504 錯誤一般為 CDN 回源到源站超時導致的。CDN 回源有嚴格的超時時間(四層 TCP 是 10 秒,七層HTTP / HTTPS是 30 秒),當超過該時間時即使後續源站響應正常也是會返回 504 的。因此建議使用 CDN 的站點都做動靜分離改造,因為部分動態資源可能出現 30 秒仍然無法響應的。
4.3. 請核對 CDN 返回的狀態碼是否是 403 。首先需要核對源站響應是否為403,如果是的話則排查源站的配置,如果是源站正常但是 CDN 訪問出現 403 的話主要是由於 CDN 的安全控製導致的,CDN 提供的安全控製功能包括 IP 黑名單、Referer 防盜鏈以及鑒權功能,詳細的功能介紹請參考:IP 黑名單功能介紹
Referer 防盜鏈功能介紹
鑒權功能介紹
4.4. 請核對 CDN 返回的狀態碼是否是 404 。在保證源站正常時一般是由於CDN 的源站地址和回源 Host 的設置導致回源無法獲取資源內容因此報了 404 的錯誤。建議您可以參考下上述第一部分的第二點內容。
** 客戶端到 CDN L1 網絡異常**
由於 CDN 僅是縮短客戶端到源站的運營商網絡鏈路,但是仍然無法避免需要從客戶端訪問到 CDN L1 節點中間通過運營商網絡訪問。因此客戶端訪問異常仍然是可能受該段鏈路的波動所影響。建議遇到此類問題可以先收集以下信息:
1)具體訪問異常的 URL;
2)訪問 CDN 的節點 IP,您可以通過 ping 加速域名得到;
3)客戶端訪問的報錯信息,請包括 general、request、response 頭信息,您可以通過瀏覽器中的審查元素中的 network 標簽頁中查看到;
4)客戶端訪問 https://cdn.dns-detect.alicdn.com/https/doc.html 的結果;
5)客戶端 ping / mtr 的測試結果。
獲取上述信息後可以按照如下的思路進行排查:
1. 可以根據上述第四條中獲取得到的客戶端的 local dns 和 ip 是否是屬於同一地域的同一運營商的,因為 CDN 的節點調度是根據 local dns 進行調度的,如果客戶配置的 local dns 與本地實際的客戶端運營商不相匹配就會導致 CDN 調度的節點異常導致鏈路出現問題的。建議使用 CDN 的客戶端可以使用自動獲取的 dns 服務器。如果確認 local dns 和 IP 設置正確的轉 2 。
2. 請查看上述第二條中的信息是否與客戶端local dns 對應的運營商匹配,另外地理位置較為接近,如果不接近的話建議可以通過工單反饋給售後工程師進行處理。如果確認正常請轉
3. 請查看上述第五條中的信息核對客戶端到 CDN 該節點訪問是否存在丟包的情況,並且可以 mtr 的測試結果查看到具體丟包的節點,如果這段運營商鏈路出現丟包的話建議可以聯係當地的運營商溝通該丟包情況。另外根據 CDN 的調度原理可以臨時修改客戶端的 local dns 為一些公共的 DNS 服務器(可以考慮修改為 223.5.5.5 或者 223.6.6.6 ),使用別的 CDN 節點以及其對應的鏈路臨時恢複業務。
最後更新:2017-09-08 22:02:37