背景信息
OSS源站上存儲的靜態資源包括靜態腳本、圖片、附件和音頻/視頻。當終端用戶請求訪問或下載靜態資源時,CDN對OSS源站上的靜態資源進行加速,源站上的資源緩存到CDN的加速節點,系統自動調用離終端用戶最近的CDN節點上已緩存的資源。加速OSS架構如下圖所示。具體操作可以參考CDN加速OSS最佳實踐。
架構優勢
CDN加速OSS的優勢如下
(1)用戶訪問網站資源,全部通過CDN,降低源站壓力。
(2)使用CDN流量,單價低於OSS直接訪問外網流量。
(3)資源從距離客戶端最近的CDN節點獲取,減少網絡傳輸距離,保證靜態資源質量。
常見問題
一. 如何設置緩存自動刷新
CDN加速OSS的場景下,在OSS的Bucket中修改了Object,使用CDN加速域名訪問得到的Object仍是更新前的舊版本,必須在CDN中手動刷新後才能訪問到新版本的Object。
這是因為Bucket中的Object更新了,但是CDN中該Object的緩存未到期,所以訪問的時候還是老的資源。用戶可以開啟CDN緩存自動刷新功能。開啟此功能後,若Object有更新,OSS會自動刷新CDN上的緩存,從而實現文件更新時緩存自動刷新。具體可以登錄OSS控制檯,在對應Bucket下選擇【傳輸管理】>【域名管理】界面,設置開啟CDN緩存自動刷新。
二. 如何解決靜態文件強制下載
出於安全考慮,從2019年9月23日起,針對之後新建的Bucket,直接使用OSS提供的默認域名,從互聯網訪問OSS上該Bucket的圖片類型文件,即mimetype為以下值:
image/jpeg、image/gif、image/tiff、image/png、image/webp、image/svg+xml、image/bmp、image/x-ms-bmp、image/x-cmu-raster、image/exr、image/x-icon、image/heic,擴展名包括:jpg、jpeg、jpe、png、tif、tiff、gif、svg、bmp、ico、ras、dib、svgz、webp、bm、jfif、x-png、exr和heic時,Response Header中會自動加上 Content-Disposition:'attachment=filename;'。即從瀏覽器訪問圖片類型文件時,會以附件形式進行下載。用戶使用自有域名訪問OSS的請求,Response Header中不會加上此信息。解決方案如下:
(1)檢查並設置Bucket是否綁定CDN加速域名,詳情請參見綁定CDN加速域名。
(2)檢查並配置CDN配置的回源Host為用戶的加速域名,而不是源站域名。如果設置源站域名(也就是OSS的域名),則CDN回源的時候所帶的Host就是OSS域名,這樣會導致OSS返回強制下載的HTTP頭最終導致資源直接下載。
注:
如果訪問URL仍然為強制下載,則可能是CDN緩存了強制下載的HTTP頭,需要在CDN控制檯刷新URL。另外需要檢查OSS源文件的HTTP頭內Content-Type的值是否正確,詳情請參見OSS如何設置Content-Type。
三. CDN加速導致OSS配置的CORS跨域失效
使用CDN加速OSS跨域訪問失敗,原因是可能存在這樣的場景:
第一個用戶訪問CDN時,沒有發起跨域訪問,然後CDN回源到OSS的時候OSS返回了不帶跨域頭的Respons Headers信息,並且被CDN緩存下來了。 當第二個用戶訪問時,發起了跨域請求,但是由於CDN有緩存,直接把之前緩存下來的不帶跨域頭的Respons Headers信息返回了,導致本次跨域請求失敗。因此建議使用CDN加速OSS時,直接在CDN上去配置跨域規則,具體請參考CDN如何配置跨域資源共享(CORS)。
四. CDN加速OSS資源返回403狀態碼
為了防止OSS被盜鏈,保護OSS的資源安全,用戶把OSS的Bucket權限設置為私有權限,這樣就需要帶了簽名參數的URL去訪問。如果CDN加速OSS的訪問URL,不帶OSS簽名參數的話,就會導致403。這種情況下可以開啟阿里雲OSS私有Bucket回源授權。當開啟私有OSS Bucket回源授權後,即表示開啟CDN對所有Bucket的只讀權限,CDN在回源的時候會計算OSS的簽名參數,從而可以從OSS上正常獲取資源。
五. CDN加速OSS訪問靜態託管頁面返回403
可以通過Network下獲取403請求的Response Headers信息去查看對應的錯誤信息,如果出現如下錯誤,說明是開啟私有Bucket回源授權的情況下訪問了OSS的靜態首頁。需要注意,目前CDN的私有Bucket回源功能和OSS的靜態網站託管功能衝突,無法一起使用。
You are forbidden to list buckets