背景說明
使用天翼云CDN加速后,如用戶請求的文件在節點已有緩存,則直接響應給用戶;如用戶請求的文件為首次訪問,或文件過期,則CDN節點會回源站獲取文件,緩存在節點并響應給用戶。
正常情況下,用戶請求CDN節點和直接訪問源站,訪問到的內容相同。本文主要介紹CDN節點和源站文件內容如果不一致時,可能的原因及解決方案。
詳細內容
從天翼云CDN訪問到的文件和直接回源結果如不一樣,可從以下幾方面著手進行分析:
1.CDN節點回源,會在用戶請求基礎上增加部分請求頭,源站如對相應請求頭有處理策略上的差異,可能會導致響應不同內容
用戶請求至CDN節點后,CDN節點會在原始請求頭基礎上增加類似如下的請求頭:
- Via: http/1.1 fj-ningde5-xxx[aff7324a-97b3-46da-af21-ba85e1876868] (ApacheTrafficServer/xxx);該請求頭值為請求進入CDN節點后經過的節點信息。
- Request-Id:9011f7a06787a0fd560cd724dd9989fb;該請求頭值為對應請求的唯一ID。
如果源站針對上述請求頭有做特殊處理,例如,有Via時可能響應不同的值,則會導致CDN和源站響應不同內容。
解決方案:可嘗試通過直接回源請求,并逐個新增攜帶上述請求頭,對比是否與源站獲取的內容一致,直到找到造成響應差異的對應請求頭。此后,可通過調整源站設置,或在CDN節點配置去掉對應請求頭來規避問題。目前,刪除CDN內部請求頭尚不支持自助,需要提交工單給天翼云客服人工處理。
2.源站不支持壓縮,CDN節點開啟壓縮
如果源站不支持壓縮,但CDN節點配置了壓縮,此時客戶端請求頭如有攜帶:Accept-Encoding:gzip,deflate,則源站返回為非壓縮文件,CDN節點返回為gzip壓縮文件,此時會造成客戶端訪問到的文件內容不同。
解決方案:該情況為預期中的正常情況,無需處置。
3.CDN配置了多個源站,且AB源內容不同步
如果CDN配置了多個源站,例如源A和源B,其中A為主源,B為備源;而同個文件在源A和源B之間未進行同步,此時可能會導致CDN節點回A源獲取并緩存的文件,與客戶端直接回B源獲取到的文件不一致。
解決方案:CDN的多個源站之間應保持數據同步,避免出現不一致的情況。
4.CDN節點回源被劫持
如果CDN節點回源使用的是http協議,則在回源過程中可能會被劫持,導致CDN節點緩存的內容與源站內容不一致。
解決方案:CDN節點回源調整為https協議,避免被劫持。
注意https回源的前提是客戶源站有部署對應域名證書,否則可能會導致證書校驗失敗。