CDN加速為OSS提供全球分布式緩衝能力。當網站或應用需要向全球使用者分發儲存在OSS中的靜態資源(如圖片、音視頻、文檔)時,通過配置CDN加速,可以顯著提升訪問速度、降低網路延遲,並削減流量成本。
工作原理
CDN加速OSS採用分布式緩衝架構,將儲存在OSS Bucket(來源站點)中的靜態內容主動分發並緩衝到遍布全球的CDN邊緣節點上,通過就近訪問機制實現加速效果。
請求路由:使用者首次請求資源時,請求通過智能DNS解析被路由到地理位置最近且網路狀況最優的CDN節點。
回源擷取:該CDN節點檢測到本地無此資源緩衝,隨即向OSS來源站點發起回源請求擷取資源內容。
緩衝儲存:OSS響應資源內容後,CDN節點根據預設緩衝規則將資源儲存在本地,同時向使用者返回資源內容。
快取命中:後續使用者請求相同資源時,CDN節點直接從本機快取響應,無需回源擷取。這一機制大幅縮短訪問路徑,降低網路延遲,實現訪問加速的同時減少來源站點負載。
快速使用
前提條件
步驟一:添加CDN加速網域名稱並配置來源站點
前往CDN控制台,單擊添加域名。
選擇加速区域和业务类型,填寫加速域名。加速網域名稱支援主網域名稱(如
example.com)或自訂的子網域名稱(如oss.example.com),建議使用子網域名稱以便於管理和擴充。單擊新增來源站點資訊,選擇源站信息為OSS域名,並選擇目標Bucket網域名稱,單擊確定,添加OSS來源站點。
單擊下一步,完成CDN加速網域名稱添加。
CDN加速網域名稱添加完成後,可按照推薦配置的引導流程來添加緩衝到期時間、Range回源、HTTPS認證等基礎配置,或單擊跳過,暫不配置,直接進入CNAME配置。
步驟二:配置CNAME解析規則
通過DNS CNAME記錄將加速網域名稱指向CDN分配的CNAME地址,實現網域名稱解析到CDN節點的路由功能。以阿里雲DNS解析為例進行介紹:
前往DNS控制台,在目標網域名稱操作列單擊解析设置。
單擊添加记录,填寫以下記錄資訊,其餘配置項可保持預設設定。
配置項
說明
记录类型
選擇CNAME。
主机记录
填寫
@(主網域名稱)或子網域名稱首碼(如oss),根據CDN加速網域名稱填寫。记录值
填寫嚮導頁或加速網域名稱列表頁的CNAME值,如
oss.example.com.w.cdngslb.com。單擊确定,按頁面提示完成解析記錄添加。
DNS解析的生效時間取決於記錄的TTL(存留時間)設定,完全生效通常需要幾分鐘到幾小時。配置後立即訪問無效屬於正常現象,請耐心等待或嘗試清除本地DNS緩衝。
步驟三:設定私人Bucket回源
預設情況下,新建立的Bucket讀寫權限為私人,通過CDN訪問時需要開啟私人Bucket回源功能,授權CDN節點訪問私人資源。如果Bucket讀寫權限設為公用讀取,CDN可直接存取,無需開啟此功能。
在CDN控制台單擊目標網域名稱,然後在左側導覽列單擊回源配置。
在私有Bucket回源部分開啟私人Bucket回源,回源類型選擇同帳號回源。
開啟私人Bucket回源後,CDN將獲得訪問私人Bucket的授權,並自動在回源請求中添加簽名資訊。因此,用戶端必須使用不包含簽名參數的URL(如http://example.com/example.jpg)進行訪問。若URL中仍攜帶Expires、Signature等簽名參數,將導致OSS鑒權失敗,返回403錯誤。
步驟四:驗證加速效果
配置完成後,通過對比測實驗證CDN加速網域名稱的效能提升效果。
擷取檔案訪問URL:
URL類型
擷取方式
OSS預設訪問URL
前往Bucket列表,單擊目標Bucket,在目標檔案操作列單擊詳情,然後單擊復制文件 URL。
CDN加速訪問URL
使用CDN加速網域名稱和檔案名稱構造URL,如
http://example.com/example.jpg(不包含簽名資訊)。驗證加速效果:使用專業的測速平台或工具(如CloudMonitor一次性撥測工具),對比兩個URL訪問同一檔案的載入時間。
說明首次檢測時,因CDN節點無緩衝需回源擷取資源,加速效果可能不明顯。請於首次檢測後,待CDN緩衝生效後再次測試。
檢查快取命中狀態:通過瀏覽器的開發人員工具(F12),查看資源請求的回應標頭中
X-Cache欄位的值:欄位值
含義
以
HIT開頭成功命中CDN緩衝,實現了加速效果。
以
MISS開頭未命中CDN緩衝,請求已回源至OSS擷取資源。
情境樣本
視頻和大檔案加速
對於ApsaraVideo for VOD、大檔案下載等情境,需要特殊配置以確保良好的使用者體驗。
必要配置
視頻碼率建議
視頻載入速度與碼率密切相關。如果使用者反饋視頻播放卡頓,請檢查視頻碼率:
碼率範圍 | 適用情境 | 說明 |
500kbps~2000kbps | 移動端、普通畫質 | 推薦範圍,載入流暢。 |
2000kbps~4000kbps | PC端、高清畫質 | 需確保使用者頻寬充足。 |
>6000kbps | 超高清/4K | 可能導致載入緩慢,建議提供多碼率版本。 |
如果視頻碼率過高(>10Mbps),即使開啟CDN加速也可能出現載入緩慢的問題。建議使用視頻轉碼服務降低碼率,或提供多碼率自適應播放。
多Bucket回源配置
當業務架構依賴於多個OSS Bucket儲存不同類型或歸屬的資源時,可通過以下兩種方案配置多源回源。
方式一:獨立子網域名稱架構
為不同功能或資源類型的Bucket分配獨立的、語義化的子網域名稱,並為每個子網域名稱配置單獨的CDN加速。
資源類型 | 子網域名稱樣本 | 配置建議 |
圖片資源 |
| 配置長期緩衝策略以提升訪問速度 |
音視頻資源 |
| 啟用Range回源支援斷點續傳 |
敏感文檔 |
| 單獨啟用URL鑒權保障安全 |
使用獨立子網域名稱架構具備以下優勢:
語義化子網域名稱便於Team Dev識別和維護。
在DNS層面實現流量分流,避免單一網域名稱的並發串連限制。
各Bucket的緩衝策略、安全配置、監控警示可獨立設定。
獨立的監控體系能夠精確定位效能瓶頸和異常流量。
方式二:統一網域名稱路徑路由
當多個Bucket分屬不同業務或應用,卻希望對外提供統一訪問入口時,可配置單一CDN加速網域名稱,利用規則引擎將不同訪問路徑的請求回源至指定Bucket。以加速網域名稱oss.example.com回源兩個Bucket(cdn-bucket1、cdn-bucket2)為例:
添加來源站點資訊:將
cdn-bucket1和cdn-bucket2添加到加速網域名稱的源站信息中,並為網域名稱配置CNAME解析規則。添加路徑規則:在加速網域名稱的中,添加兩條URL路徑規則,分別匹配
http://oss.example.com/bucket1/*和http://oss.example.com/bucket2/*。規則名稱
類型
匹配運算子
匹配值
bucket1(可自訂)
URI
包含其中任意一個
/bucket1/*bucket2(可自訂)
URI
包含其中任意一個
/bucket2/*添加條件來源站點:在加速網域名稱的基本配置中新增條件來源站點,按路徑規則匹配來源站點。
規則條件
來源站點地址
bucket1
cdn-bucket1.oss-<region-id>.aliyuncs.combucket2
cdn-bucket2.oss-<region-id>.aliyuncs.com指定來源站點回源HOST:在加速網域名稱的回源配置中添加指定來源站點回源HOST,確保回源請求正確到達目標Bucket。
來源站點類型
來源站點地址
回源HOST類型
回源HOST
規則條件
基礎來源站點地址
cdn-bucket1.oss-<region-id>.aliyuncs.com基礎來源站點網域名稱
cdn-bucket1.oss-<region-id>.aliyuncs.combucket1
基礎來源站點地址
cdn-bucket2.oss-<region-id>.aliyuncs.com基礎來源站點網域名稱
cdn-bucket2.oss-<region-id>.aliyuncs.combucket2
重寫回源URL:在加速網域名稱的回源配置中添加重寫回源路徑,在回源時自動剝離虛擬路徑(如
/bucket1),使回源請求路徑與Bucket內對象的實際儲存路徑一致。待重寫的Path
目標Path
执行规则
^/bucket1/(.*)$/$1break
^/bucket2/(.*)$/$1break
效果驗證:配置完成後,即可使用單一CDN加速網域名稱根據不同路徑訪問不同的OSS Bucket資源。如訪問
http://oss.example.com/bucket1/example.jpg,將回源到cdn-bucket1根目錄下的example.jpg檔案。
跨帳號私人回源配置
當業務需要跨帳號回源私人Bucket時,如使用A帳號的CDN加速網域名稱回源B帳號的Bucket,可在CDN加速網域名稱中開啟私有Bucket回源時選擇跨帳號回源實現。
添加跨帳號Bucket來源站點:建立CDN加速網域名稱添加來源站點資訊時,網域名稱選擇OSS自訂來源站,並輸入需要回源的Bucket網域名稱。
開啟跨帳號私人Bucket回源:在CDN加速網域名稱的回源配置中,開啟私有Bucket回源,回源類型選擇跨帳號回源或同帳號回源,並輸入具有目標Bucket存取權限的AccessKey ID和AccessKey Secret。
應用於生產環境
最佳實務
安全傳輸:啟用HTTPS
為加速網域名稱配置HTTPS認證,並啟用強制HTTPS跳轉,實現用戶端到CDN節點間的資料加密傳輸。HTTPS不僅能有效防止資料在傳輸過程中被竊取或篡改,還能避免瀏覽器地址欄出現不安全警告,提升使用者信任度與品牌形象。
認證配置位置說明
訪問方式 | 認證配置位置 | 說明 |
直接存取OSS網域名稱 | OSS控制台 | 在Bucket的中配置 |
通過CDN加速網域名稱訪問 | CDN控制台 | 在加速網域名稱的HTTPS配置中配置 |
泛網域名稱認證(如
*.example.com)只能匹配次層網域,第三層網域名(如img.cdn.example.com)需要單獨申請認證。OSS不支援HTTP/2協議,如需使用HTTP/2,請通過CDN加速訪問。
效能最佳化:配置綜合緩衝策略
緩衝策略是CDN效能的核心要素,應包含緩衝有效期間和參數處理兩個維度。
設定緩衝有效期間
通過配置CDN緩衝到期時間,最大化快取命中率:
檔案類型 | 建議緩衝時間 | 說明 |
不常更新的靜態檔案(圖片、音視頻、安裝包) | 1個月以上 | 減少不必要的回源請求 |
頻繁更新的靜態檔案(JS、CSS) | 數小時~數天 | 配合版本號碼(如 |
動態檔案或API(PHP、JSP) | 0秒(不緩衝) | 確保每次請求擷取最新內容 |
配置參數處理以啟用圖片處理
OSS的圖片處理(如縮放、裁剪、浮水印)是高頻使用功能。預設情況下,CDN為最大化快取命中率會過濾全部參數,這會導致?x-oss-process類的圖片處理指示失效。為正常使用此功能,需在CDN控制台加速網域名稱的性能优化中修改忽略參數配置。
業務情境 | 忽略參數配置 | 說明 |
純靜態資源分發 | 過濾全部參數 | 最大化快取命中率 |
使用OSS圖片處理 | 保留全部參數或保留指定參數 | 確保圖片處理指示生效 |
帶版本號碼的資源 | 保留指定參數 | 支援版本號碼更新緩衝 |
可用性保障:使用資源預熱與自動重新整理
啟用緩衝後,來源站點檔案的更新將無法立即同步到CDN邊緣節點。建議採用以下策略:
資源預熱:在版本發布或營運活動前,使用CDN的重新整理和預熱資源功能將熱點資源提前分發至全球節點,避免上線瞬間大量回源請求衝擊來源站點。
緩衝自動重新整理:在Bucket的中為綁定的網域名稱開啟CDN緩衝自動重新整理。當通過API更新OSS檔案時,OSS會自動觸發CDN重新整理任務。
緩衝自動重新整理僅在CDN加速與OSS Bucket歸屬同一阿里雲帳號時有效,且不保證絕對的及時性。對於時效性要求極高的情境,建議在更新檔案後主動使用CDN的重新整理功能。
跨域訪問:配置CORS策略
當前端應用需要跨域訪問CDN加速的OSS資源時,僅在OSS Bucket上配置CORS規則可能因CDN緩衝機制而失效。最佳實務是在CDN層面直接配置CORS相關回應標頭:
在CDN控制台單擊加速網域名稱或操作列的管理。
在中配置回應標頭參數和回應標頭值。
自定义响应头参数
响应头值
跨域驗證
Access-Control-Allow-Origin
*
開啟
Access-Control-Allow-Methods
POST,GET, HEAD, PUT, DELETE
不涉及
Access-Control-Max-Age
3600
不涉及
說明參數設定僅供參考,請結合實際業務情境進行調整。
效能最佳化:提升大檔案與資料轉送效率
開啟Range回源:對於音ApsaraVideo for VOD、大檔案分發等情境,配置Range回源功能至關重要。它允許CDN節點按需分區請求大檔案,可實現視頻拖動播放等進階功能,並顯著減少回源流量和首屏等待時間。
開啟頁面最佳化或Gzip壓縮功能會改變檔案的
Content-Length和Content-MD5值。如果商務邏輯依賴這些值進行校正,請謹慎開啟。若同時開啟頁面最佳化和Gzip壓縮功能,頁面最佳化功能將失效,CDN只會對檔案進行Gzip壓縮。
平滑上線:零停機網域名稱切換
在將現有業務從OSS Bucket網域名稱切換至CDN加速網域名稱時,應採用分階段切換策略:
準備階段:完成CDN加速網域名稱的所有配置,並在測試環境中充分驗證其功能和效能表現。
灰階發布階段(建議在業務低峰期):採用灰階發布的方式將部分業務流量切換至CDN加速網域名稱,通過逐步放量降低切換風險。
驗證階段:密切監控業務訪問日誌和錯誤率,分析回應時間、成功率等關鍵計量,確保服務正常。
全量發布階段:經過充分驗證後,將全量業務流量切換至CDN加速網域名稱。
復原預案:如遇問題,立即復原至Bucket網域名稱,並詳細分析問題根因後重新部署。
風險防範
流量盜用防護:配置Referer防盜鏈與URL鑒權
為防止資源被非法網站盜用,產生不必要的流量費用和頻寬消耗,必須配置安全防護策略:
Referer防盜鏈:配置Referer黑/白名單,通過校正HTTP要求標頭中的Referer欄位,僅允許來自指定網域名稱的訪問。
URL鑒權:針對私人許可權的OSS Bucket,開啟CDN的私人Bucket回源後,CDN節點即獲得訪問授權,這使得原本需要簽名的私人資源能通過CDN網域名稱被公開訪問。為恢複對私人資源的安全控制,建議在CDN層面啟用配置URL鑒權。
配置CDN加速後,盜鏈請求可能直接命中CDN緩衝而不回源到OSS,從而繞過OSS的防盜鏈驗證。為確保防護有效,必須在CDN層面也配置防盜鏈規則。
流量異常監控與警示
建議在CloudMonitor中為CDN加速網域名稱設定警示規則,當CDN流量異常增長時及時發現。
回源鏈路保障:配置回源SNI與回源HOST
確保CDN與OSS之間的回源通訊穩定且安全,是服務可用性的關鍵保障。
配置回源SNI
為避免不帶SNI(Server Name Indication)的CDN回源請求導致OSS訪問異常,需在CDN中配置預設回源SNI,並設定其與回源HOST相同(回源HOST預設為加速網域名稱)。當回源請求攜帶SNI時,OSS能夠在TLS握手階段精準識別業務網域名稱,從而返回匹配的認證。若OSS接收到不攜帶SNI的請求,將無法進行業務網域名稱的精準識別,可能觸發更嚴格的流量限制。
隱藏來源站點資訊
預設情況下,CDN使用Bucket網域名稱回源。當回源出錯時(如檔案不存在),錯誤資訊中可能暴露OSS Bucket網域名稱,存在安全風險。為隱藏來源站點資訊,可按以下步驟將回源HOST修改為CDN加速網域名稱:
在Bucket列表頁面單擊目標Bucket名稱,然後在中將CDN加速網域名稱綁定到Bucket。
在CDN控制台單擊目標加速網域名稱,然後在中單擊修改配置,將域名类型修改為加速域名。
行為審計與排障:啟用訪問日誌
生產環境必須具備完善的日誌記錄能力,以便進行安全審計、效能分析和故障排查。建議在CDN控制台配置即時日誌推送,將訪問日誌投遞到Log ServiceSLS。通過SLS,可以對訪問行為、流量分布、熱門資源、錯誤請求等進行深度分析和監控警示。
計費說明
費用類型 | 說明 |
CDN費用 | 配置CDN加速訪問OSS會產生CDN流量費用,詳見CDN計費概述。 |
OSS費用 | CDN節點緩衝未命中時回源到OSS擷取資源,會產生CDN回源流出流量費用,詳見CDN回源流出流量。 |
常見問題
為什麼CDN回源時出現5xx報錯?
5xx錯誤表示CDN無法成功從OSS來源站點擷取資源,需要從以下方面排查:
排查方向 | 檢查內容 |
來源站點配置 | 檢查CDN控制台配置的OSS來源站點地址是否正確。 |
回源協議 | 如果CDN配置了HTTPS回源或協議跟隨回源,請確保來源站點支援HTTPS訪問且SSL認證配置正確。 |
網路鏈路 | 測試CDN節點或本地到OSS來源站點的網路連通性。CDN節點是公網節點,來源站點必須連通公網。 |
來源站點壓力 |
為什麼配置靜態頁面後通過CDN加速訪問報錯403 Forbidden或You are forbidden to list buckets?
原因分析:此問題通常發生在為配置了靜態網站託管的私人Bucket開啟CDN加速後。根本原因在於兩種訪問機制的衝突:
CDN私人回源時會攜帶簽名資訊進行身分識別驗證。
OSS靜態網站託管的預設首頁功能(如訪問
/時自動返回index.html)要求訪問請求必須是匿名的。
當使用者訪問加速網域名稱的根目錄時,CDN發起帶簽名的請求訪問Bucket根目錄。OSS收到簽章要求後不會觸發靜態網站託管邏輯,轉而嘗試執行ListObjects操作,最終導致403錯誤。
解決方案:繞過OSS的靜態網站託管機制,直接在CDN層面通過重寫訪問URL實現同樣效果:
參數 | 配置值 |
待重寫的Path |
|
目標Path |
|
执行规则 | Redirect |
是否可以通過CDN網域名稱上傳檔案到OSS?
出於安全考慮,不建議通過CDN網域名稱上傳檔案到OSS。如果CDN被設定為公用寫入,任何人無需身分識別驗證即可通過CDN上傳檔案到OSS,容易受到惡意上傳和資料篡改的攻擊。建議在限制最小許可權的前提下,使用OSS網域名稱上傳檔案。
使用CDN加速後OSS下行流量是否會變少?
如果CDN緩衝的檔案被頻繁命中,OSS的公網流出流量會顯著降低,從而減少OSS流量成本。
CDN快取檔案被頻繁命中的前提是,業務情境中的部分資料在某段時間內被頻繁訪問,例如網站訪問、圖片檔案下載、遊戲發行等情境。快取命中率越高,回源流量越少,成本節省效果越明顯。
如何統計檔案的真實訪問次數?
啟用CDN加速後,OSS的訪問日誌將無法記錄由CDN緩衝直接響應的終端使用者訪問請求,可通過以下方式統計:
資料範圍 | 擷取方式 |
30天內的日誌資料 | 通過下載CDN的離線日誌進行查看和分析。 |
超過30天的日誌資料 | 在CDN中配置即時日誌推送後,在CDN即時日誌資料統計頁面查看和分析。 |
訪問報錯403 Forbidden如何排查?
403錯誤可能來自OSS或CDN的許可權攔截,建議直接存取OSS預設網域名稱觀察是否正常。
正常:問題在CDN側,需排查CDN的Referer防盜鏈、URL鑒權、私人Bucket回源是否開啟等配置。
也報403錯誤:問題在OSS側,需要排查OSS的Bucket ACL、Referer防盜鏈、Bucket Policy等配置。
為什麼業務切換到CDN後OSS仍產生下行流量費用?
可能原因:
存在直接存取OSS的請求:檢查業務代碼或第三方系統整合中是否有未替換為CDN加速網域名稱的OSS網域名稱。
CDN緩衝未命中導致回源:回源會產生OSS的CDN回源流出流量。檢查CDN快取命中率,如果較低請最佳化緩衝配置。
Bucket為公用讀取被惡意訪問:如果Bucket許可權為公用讀取,可能被惡意訪問。建議在業務允許的情況下將Bucket設為私人並開啟CDN私人回源。