本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
你可以藉由增加從 CloudFront 快取直接提供的瀏覽者請求比例 (而不是轉送到原始伺服器以取得內容) 的方式提升效能。這就是所謂的改善快取命中率。
下列各節說明如何提高您的快取命中率。
主題
指定 CloudFront 快取物件的時間長度
若要提高快取命中率,您可以設定原始伺服器,將 Cache-Control max-agemax-age
指定最長的實際值。快取持續時間越短,CloudFront 將請求傳送到原始伺服器的頻率越高,該請求旨在確定物件是否更改並獲取最新版本。您可以以 stale-while-revalidate
和 stale-if-error
指令補充 max-age
,以在特定情況下進一步改善快取命中率。如需詳細資訊,請參閱管理內容在快取中停留的時間 (過期)。
使用 Origin Shield
CloudFront Origin Shield 可協助提高您 CloudFront 分佈的快取命中率,因為它會在您的原始伺服器前面提供額外的一層快取。當您使用 Origin Shield 時,從所有 CloudFront 快取層向原始伺服器提出的所有請求都來自單一位置。CloudFront 可以使用來自 Origin Shield 的單一原始伺服器請求擷取每個物件,而 CloudFront 快取的所有其他層 (節點和區域節點快取) 都可以從 Origin Shield 擷取物件。
如需更多詳細資訊,請參閱 使用 Amazon CloudFront Origin Shield。
根據查詢字串參數快取
如果設定 CloudFront 來根據查詢字串參數快取,如果您執行下列操作便可以提升快取:
-
設定 CloudFront 僅轉送查詢字串參數,原始伺服器將回傳唯一物件給該參數。
-
對所有相同參數的執行個體使用相同的大小寫 (大寫或小寫)。例如,如果一個請求包含
parameter1=A
和另一個包含parameter1=a
,則 CloudFront 轉送個別的請求到原始伺服器,當請求包含parameter1=A
以及當請求包含parameter1=a
時。然後,CloudFront 分別快取由原始伺服器回傳的對應物件,即使物件相同。如果只是使用A
或者a
,則 CloudFront 轉送較少的請求到原始伺服器。 -
以相同順序列出參數。就像案例中的差異,如果一個包含查詢字串的物件請求
parameter1=a¶meter2=b
和其他包含parameter2=b¶meter1=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 值快取,則 CloudFront 會轉送.css
檔案的請求到原始伺服器時,僅針對節點收到指定.css
檔案的第一個請求以及在.css
檔案過期後的第一個請求。 -
可能的話,每個使用者的 Cookie 值是唯一的 (例如使用者 ID) 時,為動態內容建立個別的快取行為,且動態內容根據較少數量的唯一值而有所不同。
如需更多詳細資訊,請參閱 根據 Cookie 快取內容。如果您要檢視 CloudFront 轉送至原始伺服器的 Cookie,請參閱 CloudFront 日誌檔案的 cs(Cookie)
欄中的值。如需更多詳細資訊,請參閱 標準記錄 (存取日誌)。
根據請求標頭快取
如果設定 CloudFront 來根據請求標頭快取,如果您執行下列操作便可以提升快取:
-
設定 CloudFront 根據指定的標頭轉送和快取,而不是根據所有標頭轉送和快取。對於您指定的標頭,CloudFront 會轉送標頭名稱和值的每個組合。然後它分別快取原始伺服器傳回的物件,即使它們都是相同的。
注意
CloudFront 一律轉送到原始伺服器,在下列主題指定的標頭:
-
CloudFront 如何處理請求,並將請求轉送至您的 Amazon S3 原始伺服器 > CloudFront 移除或更新的 HTTP 請求標頭
-
CloudFront 如何處理請求,並將請求轉送至您的自訂原始伺服器 > HTTP 請求標頭和 CloudFront 行為 (自訂和 Amazon S3 原始伺服器)
當您設定 CloudFront 根據請求標頭快取時,不要變更 CloudFront 轉送的標頭,只有 CloudFront 是否根據標頭值來快取物件。
-
-
請嘗試避免根據有大量唯一值的請求標頭來快取。
例如,如果您想要根據使用者裝置提供不同大小的影像,則不要設定 CloudFront 根據有大量可能值的
User-Agent
標頭來快取。反之,設定 CloudFront 根據 CloudFront 裝置型標頭CloudFront-Is-Desktop-Viewer
、CloudFront-Is-Mobile-Viewer
、CloudFront-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 提供隨需視訊和即時串流視訊。