2012-12-20 90 views
3

如果我經常覆蓋S3上的文件,CloudFront會在瀏覽器中爲它們提供緩存。我正在調查Invalidation,但是一次驗證多少驗證的限制似乎不適用於多帳戶的網站。在Amazon S3和CloudFront上處理定期更新的文件

我能看到的唯一解決方案是覆蓋文件,刪除舊文件並更改新文件的名稱(我只是將TIMESTAMP添加到最後),以便CloudFront不會將緩存版。

這是處理這類事情的最明智的方式嗎?

回答

3

這裏的鏈接到的失效限制的細節:http://aws.amazon.com/cloudfront/faqs/#Is_there_a_limit_to_the_number_of_invalidation_requests

您只能在任何給定時間 正在進行3個無效宣告請求。如果超過此限制,進一步的失效請求將會在 之前收到錯誤響應,直到其中一個請求完成。

的AWS的建議是:

建議你要麼實現版本控制系統 您的文件和/或設置一個短保質期。

短期過期很簡單,但有明顯的缺點。爲了實現一個版本控制系統,你可以跟蹤數據庫中的文件版本,並附加版本作爲查詢字符串參數:

file.jpg?v=2

這樣你就可以設置較長的保質期,並且該文件僅無效時您特別上傳新文件並更新版本。

如下面的評論所述,默認行爲是CloudFront在構建緩存鍵時忽略查詢字符串,因此請確保在默認緩存行爲設置下啓用Forward Query Strings以使用此版本方法。

+0

謝謝大衛!使用版本控制系統對使用時間戳重命名文件有什麼優勢? AWS的成本更多嗎?添加/刪除更多文件? –

+0

實際上,覆蓋可以在一次操作中完成,因此比刪除舊文件和上傳新文件更有效率,可維護和可靠。根據原則,如果它真的是相同的文件,只是更新內容,那麼它是名字相同的文件,但不是版本,所以我認爲這在語義上是正確的。 –

+0

默認情況下,Cloudfront會忽略查詢字符串值。通常最好改變文件名:'file-243423352.jpg' – jamieb