通過阿里云CDN系列產品訪問與直接訪問源站得到的結果不一樣
更新時間:
問題描述
啟用CDN系列產品(CDN、DCDN、SCDN)加速后,客戶端請求經過CDN節點與直接訪問源站的結果不同。
問題原因
當客戶端請求達到CDN節點后,會進行下列判斷:
- 命中緩存
CDN節點直接返回結果給客戶端。 - 未命中緩存
CDN節點轉發客戶端請求,同時在HTTP Request Header請求頭中追加一些特定的參數,最終請求源站,也就是俗稱的“回源”。示意圖如下。
某些情況下,源站對于HTTP Request Header請求頭中追加的特定參數會有不同的處理方式,導致客戶端請求被處理后的結果與直接訪問源站不一致。例如:源站會判斷請求頭中是否含有Via參數,以此確認請求是否來自代理服務器,然后做出不同的響應。
解決方案
通過下列兩個步驟進行處理:
步驟一:定位導致此問題的請求頭參數
由于源站只針對特定的請求頭參數返回不同的結果,所以需要先定位該特定的參數。定位步驟如下:
- 在本地通過以下curl命令直接訪問源站,并記錄返回結果。
curl -voa 'http://[$Your_Wesbite]' -x [$Source_Server_IP]:[$Source_Server_Port]
說明:
- [$Your_Wesbite]:指您的網站域名。
- [$Source_Server_IP]:指源站服務器的公網IP地址。
- [$Source_Server_Port]:指源站服務器的網站端口,通常該端口為80或443。
- 在本地通過以下curl命令,附加阿里云CDN節點的特定請求頭參數,然后請求源站,并記錄返回結果。
curl -voa 'http://www.[$Your_Wesbite].com' -x [$Source_Server_IP]:[$Source_Server_Port] -H 'Via:example.aliyundoc.com'
說明:此處以“Via:example.aliyundoc.com”為例,現場可以自定義請求頭參數及值,關于阿里云CDN附加的請求頭參數,請參見更多信息。
- 對比步驟1和步驟2的結果,檢查是否存在不一致的情況。
- 結果一致。
請循環步驟1和步驟2,同時替換步驟2中的請求頭參數,直到返回結果不一致。 - 結果不同。
記錄結果不同時的請求頭參數,然后繼續下一步驟。
- 結果一致。
步驟二:修改源站配置或者刪除問題參數
當定位到具體的請求頭參數時,可參考下面兩種方式進行處理:
- 修改源站配置
請檢查源站的Web服務器配置,是否存在根據不同的請求頭有不同響應的配置。如果存在,請根據實際需求進行調整。 - 在CDN控制臺刪除追加的請求頭參數
如果定位到的請求頭參數對您的業務沒有實際作用,您可以在CDN控制臺配置刪除該請求頭參數。關于如何刪除請求頭參數,請參見配置回源HTTP請求頭。說明:目前僅阿里云CDN產品支持刪除HTTP請求頭,SCDN和DCDN暫不支持。如果業務需要,請提交工單聯系阿里云技術支持。
更多信息
下面舉例介紹CDN節點追加的特定參數。
Via: cn2XXX6.l1, vcache10.cnXXX36, l2cnXXX5.l2, cache28.lXXX35
Eagleeye-Traceid: 24689aa4XXXX58162753e
Ali-Swift-Log-Host: example.aliyundoc.com
Ali-Swift-Stat-Host: demo.example.aliyundoc.com
X-Forwarded-For: 58.XX.XX.41
X-Client-Scheme: http
Ali-Cdn-Real-Ip: 58.XX.XX.41
Ali-Swift-5Xx-No-Retry: on
Cdn-Src-Ip: 127.0.0.1
Ali-Swift-Range-Cache: on
說明:下面列舉重要的參數說明。
- Via:請求經過的CDN節點信息。
- Ali-Cdn-Real-Ip:客戶端真實IP地址。
- Ali-Swift-Range-Cache:如果您啟用了Range回源,CDN節點就會追加該參數,詳情請參見配置Range回源。
- X-Forwarded-For:標準的HTTP XFF字段。
適用于
- CDN
- DCDN
- SCDN
文檔內容是否對您有幫助?