2014-01-29 62 views
0

我使用S3來存儲一堆圖像和CloudFront來緩存它們。我得到的問題是我的圖像沒有正確緩存。如何正確設置Amazon CloudFront緩存

如果我通過CloudFront鏈接檢查圖像的標題,它將在第一次嘗試中顯示MISS,並在所有後續嘗試中顯示HIT。這很正常,但如果我關閉瀏覽器,請離開幾個小時再試一次,它會顯示一個MISS。因此表明它只能在短時間內緩存。

下面是對CDN的樣本圖像:http://d711ds9nsj32q.cloudfront.net/static/8e1f8567e229e24e0782ed_1e994b9dc56ba092ecd2_5.jpg

一個奇怪的現象是,如果你試圖用web-sniffer.net嗅出頭,你會看到一個MISS每一次。儘管緩存控制是public, max-age=315360000,並且它將在10年後過期。

在cloudfront上緩存10年的正確方法是什麼?是否有任何額外的標題我錯過了?

編輯:這裏的對比是the same image imgur。他們使用cloudflare,但我看到的行爲是正確的。一旦緩存,我再也不會從我的任何電腦或附近的地點再次發現任何錯過。除了一些(不重要的)區別之外,我的標題和他們的標題都是相似的。任何幫助表示讚賞。

回答

1

這可能是因爲您的TTL最小值設置爲非默認值,並且它將緩存該時間段而不是緩存控制標頭中的內容。我認爲這不太可能,因爲你可能已經想到了它,並且因爲它看起來分配方面是Cache-Control:no-cache(並且如果最小TTL是非默認的,它不會)。

更可能的是,CloudFront的只是趕走你的項目了一段時間後:

如果在邊緣位置的對象不頻繁請求, CloudFront的可能驅逐其 到期前的對象刪除對象日期 - 爲更受歡迎的物體騰出空間。

- 從this article

至於web-sniffer.net,你會發現,它會發送的Cache-Control:no-cache標題,這將使CloudFront的從源頭獲取。

+0

感謝您的幫助。我不認爲驅逐正在發生,因爲我正在測試相對較新的文件。看起來CF在做這樣的事情之前至少要等一段時間(幾個月?)。 **另外**:如果你嘗試[這個來自Squre的圖像](https://dl6rt3mwcjzxg.cloudfront.net/assets/redesign/home/hero.large-2df3c88fdbe4801dcd2704ccb1fcc162.jpg)在web-sniffer上,你會發現它是每次HIT。似乎我的標題和他們的標題是相似的,並且都在CloudFront上。 – steve

+0

你說得對,我正在通過cf提供的自己的文件上嘗試它,並註冊了一個命中。你能發佈源對象的URL嗎? –

+0

Alex,這裏是[source url](http://flexurl.com/rtlu)。如果你需要,我可以給你更多的信息。當我上傳文件時,我將「Cache-Control」和「Expires」設置爲10年。謝謝。 – steve