2011-07-14 219 views
26

我們當前的網站計劃是將Amazon的Cloudfront服務用作資產文件(如CSS,JavaScript和圖像)以及任何其他靜態文件的CDN。Amazon S3 Cloudfront部署最佳實踐

我們目前在S3中有1個桶包含所有這些靜態文件。這些文件分爲不同的文件夾,具體取決於它們是什麼,「腳本」是JS文件,「圖像」是圖像等等yadda yadda yadda。

因此,我從一開始就沒有意識到,一旦您將存儲段從S3部署到Cloudfront分配,那麼對該存儲桶的後續更新將不會再部署到同一分配。因此,每當您進行靜態文件更新時,您似乎都必須重新部署存儲區到另一個Cloudfront實例。

這對圖像來說很好,因爲我們可以很容易地確定如果圖像發生了變化,那麼我們只是創建一個新圖像。但是,這對CSS和JS來說很難做到。

所以,這讓我對最佳實踐的問題:

  1. 是它創建爲每個生產部署其他的Cloudfront分配最佳做法?這裏的問題會導致CNAME記錄出現問題。
  2. 由於這些文件的性質以及需要輕鬆修改它們,是不是最好的做法是不要在Cloudfront中存儲CSS和JS?似乎答案是否定的,因爲這是CDN的目的。
  3. 有沒有其他的方法與我不知道的Cloudfront?
+0

你好,你能告訴我你是如何將CDS部署到CDN的?你是怎麼把css,js文件發送到你的CDN的?你在使用卡皮斯特拉諾嗎? – tcgumus

+0

去使用cloudflare,它是免費的:D – rocketspacer

回答

17

您可以向CloudFront發出無效請求。

http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html

取而代之的S3存儲的,不過,我們用自己的服務器作爲一個自定義的原點。我們有.htaccess別名style_*.cssstyle.css,我們在HTML中注入文件修改時間style.css。由於CloudFront看到完全不同的URL,它將獲取新版本。

(注:有些的CDN讓你做到這一點通過查詢字符串,但CloudFront的忽略緩存所有的查詢字符串數據,因此.htaccess解決方案。)

編輯: CloudFront的可以(可選)配置爲使用現在查詢字符串。

+4

這兩個都是很好的解決方案,但我認爲你的第二個是完美的。在CDN之前,我們將「?v = 2.0.x」(無論版本號是什麼)附加到用於緩存清除的所有資產URL,但如果使用我們的CloudFront將其更改爲「stylesheet-v2.0.x.css」服務器作爲原點,我認爲這會很好。謝謝! –

+0

很高興能幫到你!在我們提醒之前,我們被CF下降了幾次查詢字符串。 :-) – ceejayoz

+3

失效對可同時處理的文件數量有限制,速度可能會很慢,所以第二種解決方案肯定會更好。 –

8

CloudFront已經開始支持查詢字符串,您可以使用它來使緩存失效。 http://aws.typepad.com/aws/2012/05/amazon-cloudfront-support-for-dynamic-content.html

+0

您是如何使用它來使特定文件上的緩存無效的?也許它在某個環節,但它不是很清楚。當您激活查詢字符串時, – gMale

+0

cloudfront緩存每個參數組合的資源。所以你可以附加一個版本。 img.jpg?version = 1和?version = 2瞭解更多詳情,請查看手冊http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/QueryStringParameters.html – Dukeatcoding