增加直接從快取提供的要求比例 ( CloudFront 快取命中率) - Amazon CloudFront

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

增加直接從快取提供的要求比例 ( CloudFront 快取命中率)

您可以增加直接從快取提供的檢視者要求比例,而不是前往原始伺服器 CloudFront 取得內容,藉此提升效能。這就是所謂的改善快取命中率。

下列各節說明如何提高您的快取命中率。

指定物件 CloudFront 快取的時間長度

若要提高快取命中率,您可以設定原始伺服器,將 Cache-Control max-age 指令新增至物件,並為 max-age 指定最長的實際值。快取持續時間越短,就越頻繁地 CloudFront 將要求傳送到您的來源,以判斷物件是否已變更並取得最新版本。您可以以 stale-while-revalidatestale-if-error 指令補充 max-age,以在特定情況下進一步改善快取命中率。如需詳細資訊,請參閱管理內容在快取中停留的時間長度 (到期)

使用原點護 Shield

CloudFront Origin Shield 可以幫助您提高 CloudFront 發行版的緩存命中率,因為它在您的來源前提供了一層額外的緩存。當您使用 Origin Shield 時,來自所有來源快取層的 CloudFront所有要求都來自單一位置。 CloudFront 可以使用來自 Origin Shield 的單一來源要求擷取每個物件,而 CloudFront 快取的所有其他層 (節點位置和區域節點快取) 都可以從 Origin Shield 擷取物件。

如需詳細資訊,請參閱使用 Amazon CloudFront 起源 Shield

根據查詢字串參數快取

如果您設定 CloudFront 為根據查詢字串參數進行快取,您可以在執行下列動作時改善快取:

  • 設定 CloudFront 為僅轉寄您的來源將會傳回唯一物件的查詢字串參數。

  • 對所有相同參數的執行個體使用相同的大小寫 (大寫或小寫)。例如,如果一個請求包含parameter1=A而另一個請求包含parameter1=a,則當請求包含parameter1=A並在請求包含時將單獨的請求 CloudFront 轉發到您的來源。parameter1=a CloudFront 然後分別快取原始碼傳回的對應物件,即使物件相同也是如此。如果您只使用Aa,則將較少的請求CloudFront 轉發到您的來源。

  • 以相同順序列出參數。與大小寫的差異一樣,如果一個對象的請求包含查詢字符串,parameter1=a&parameter2=b而同一對象的另一個請求包含parameter2=b&parameter1=a,則將這兩個請求 CloudFront轉發到您的來源,並單獨緩存相應的對象,即使它們是相同的。如果您始終對參數使用相同的順序,則將較少的請求 CloudFront 轉發到您的來源。

如需詳細資訊,請參閱根據查詢字串參數快取內容。如果您要檢閱 CloudFront 轉寄至來源的查詢字串,請參閱 CloudFront 記錄檔案cs-uri-query欄中的值。如需詳細資訊,請參閱配置和使用標準日誌(訪問日誌)

根據 Cookie 值快取

如果您設定 CloudFront 為根據 Cookie 值進行快取,則可以在執行下列動作時改善快取:

  • 配置 CloudFront 為僅轉發指定的 cookie,而不是轉發所有 cookie。對於您配置轉發 CloudFront 到您的來源的 cookie,請CloudFront 轉發 cookie 名稱和值的每個組合。然後它分別快取原始伺服器傳回的物件,即使它們都是相同的。

    例如,假設檢視者在每個請求中包含兩個 Cookie,每個 Cookie 都有三個可能的值,並且所有 Cookie 值的組合都是可能的。 CloudFront 針對每個物件,將最多六個不同的要求轉寄至您的來源。如果您的來源僅基於其中一個 cookie 返回對象的不同版本,那 CloudFront 麼將比必要的更多請求轉發到您的來源,並且不必要地緩存多個相同版本的對象。

  • 為靜態和動態內容創建單獨的緩存行為,並配置 CloudFront 為僅將動態內容的 cookie 轉發到您的來源。

    例如,假設您的發行版只有一個快取行為,而且您正在針對動態內容 (例如.js檔案) 和很少變更的.css檔案使用該散佈。 CloudFront 根據 Cookie 值快取.css檔案的個別版本,因此每個 CloudFront 節點都會針對每個新 Cookie 值或 Cookie 值組合,將要求轉送至您的來源。

    如果您建立路徑模式所屬的快取行為,*.css且 CloudFront 不會根據 Cookie 值快取,則只會將邊緣位置為指定檔.css案收到的第一個要求,以及.css檔案到期後的第一個要求,將檔案要求 CloudFront 轉送至您的.css來源。

  • 可能的話,每個使用者的 Cookie 值是唯一的 (例如使用者 ID) 時,為動態內容建立個別的快取行為,且動態內容根據較少數量的唯一值而有所不同。

如需詳細資訊,請參閱根據餅乾緩存內容。如果您想查看 CloudFront 轉發到您的來源的 Cookie,請查看 CloudFront 日誌文件cs(Cookie)列中的值。如需詳細資訊,請參閱配置和使用標準日誌(訪問日誌)

根據請求標頭快取

如果您設定 CloudFront 為根據要求標頭快取,您可以在執行下列動作時改善快取:

  • 配置 CloudFront 為僅基於指定的標頭轉發和緩存,而不是基於所有標頭轉發和緩存。對於您指定的標頭, CloudFront 轉發標頭名稱和值的每個組合。然後它分別快取原始伺服器傳回的物件,即使它們都是相同的。

    注意

    CloudFront 始終將以下主題中指定的標題轉發到您的來源:

    當您設定 CloudFront 為根據要求標頭快取時,您不會變更 CloudFront 轉寄的標頭,只有是否根據標頭值 CloudFront 快取物件。

  • 請嘗試避免根據有大量唯一值的請求標頭來快取。

    例如,如果您希望根據用戶的設備提供不同大小的圖像,則不 CloudFront 要根據標題配置緩存,該User-Agent標題具有大量可能的值。而是根據 CloudFront 裝置 CloudFront 類型的標頭CloudFront-Is-Desktop-ViewerCloudFront-Is-Mobile-ViewerCloudFront-Is-SmartTV-Viewer和設定快取。CloudFront-Is-Tablet-Viewer此外,如果您是傳回適用於平板電腦和桌面的影像相同版本,則僅轉送 CloudFront-Is-Tablet-Viewer 標頭,而非 CloudFront-Is-Desktop-Viewer 標頭。

如需詳細資訊,請參閱根據要求標頭快取內容

不需要壓縮時,移除 Accept-Encoding 標頭

如果未啟用壓縮 (因為來源不支援、 CloudFront不支援壓縮或內容無法壓縮),您可以將發行版中的快取行為關聯至設定如下的來源,藉此提高快取命中率:Custom Origin Header

  • Header name (標頭名稱):Accept-Encoding

  • Header value (標頭值):(保留空白)

使用此配置時,請從緩存鍵中 CloudFront 刪除Accept-Encoding標頭,並且不會在原始請求中包含標頭。此配置適用於與該來源發行版一起 CloudFront 提供服務的所有內容。

提供媒體內容 HTTP

如需最佳化隨選視訊 (VOD) 和串流視訊內容的相關資訊,請參閱視頻點播和實時流視頻 CloudFront