2015-12-21 55 views
2

我打算使用Amazon Cloudfront CDN,並且有一個我需要排除的URL。這是一個動態網址(包含查詢字符串)。如何排除Amazon Cloudfront中的URL?

例如,我想每一頁存儲/緩存我的網站上,除了:

http://www.mypage.com/do-not-cache/?query1=true&query2=5 

編輯 - 這是無效「對象」呢?如果是這樣,請舉例說明。

感謝

回答

5

在幫助您解決錯誤的問題,我要指出的是,如果你配置CloudFront的,以查詢字符串轉發到源服務器,那麼響應將針對整個URI緩存的風險 - 也就是說,對路徑+查詢字符串 - 不反對的路徑,而已,所以......

/dynamic-page?r=1 
/dynamic-page?r=2 
/dynamic-page?r=2&foo=bar 

...將是三個不同「頁面」就CloudFront的關注。除非查詢字符串是相同的,否則永遠不會提供緩存中的請求。

如果您將CloudFront配置爲將查詢字符串轉發到您的原點,則CloudFront將在緩存對象時包含URL的查詢字符串部分。 [...]

這是真實的,即使你的出身總是返回相同的[內容]不管查詢字符串。

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/QueryStringParameters.html

所以,應該不是真的有必要明確並刻意避開此頁面上的緩存。如果將CloudFront配置爲轉發查詢字符串,則正確的行爲應該是自動的。

此外,當然,如果你的源服務器設置Cache-Control: private, no-cache, no-store或響應頭相似,既沒有CloudFront的,也不是瀏覽器應該緩存響應。

但如果你是非常堅持的是CloudFront的明確配置不緩存這個頁面,創建一個新的緩存行爲,與path pattern匹配/do-not-cache*,並配置CloudFront的到forward all of the request headers to the origin,即禁用緩存爲路徑模式匹配的頁面請求。

+0

此外,要回答你的問題,關於「使對象無效」 - 不。無效的對象(俗稱「清除緩存」或「吹緩存」)是一次性的操作,刪除匹配你所有的邊緣位置的緩存「現在」指定路徑模式的任何對象(實際上,在一段從發起無效請求的幾分鐘開始)。例如,如果您的原始服務器無意中返回了錯誤的內容並將其緩存到雲端,那麼這很有用。隨後的請求將導致響應被再次緩存;失效沒有永久的影響。 –

+0

感謝您的澄清。這就說得通了。我選擇明確排除緩存的特定路徑。 – user3452136