Amazon-S3

將 CloudFlare 添加到 S3 儲存桶

  • April 10, 2022

我有一個包含數千個 JPG 和類似媒體資產的 Amazon S3 儲存桶。(這是我的論壇的儲存空間。)我不在此儲存桶中託管靜態站點(沒有任何類型的 HTML),它完全開放供公眾閱讀(因此論壇軟體可以連結到圖像)。

但是,我在 S3 上為頻寬付出了代價。有人說我應該把 CloudFlare 放在 S3 儲存桶前面,這樣可以節省很多美元。涼爽的!但我不明白這個過程。CloudFlare 似乎想接管我主站點的所有 DNS,這不是我想要的。

我只需要https://my-bucket.s3.us-east-1.amazonaws.com被 CloudFlare 記憶體/CDN。顯然我不能改變亞馬遜的 DNS ;-)

我認為這並不困難,但我似乎無法找到一個相對簡單的解釋來說明設置它的正確方法。(換句話說:我缺乏“大圖”/主要步驟。)

(這在 CloudFlare 網站上有所介紹,但我對他們的說明感到困惑,而且我的案例也與他們談論的不同。)

以下是讓 Cloudflare 為您的 S3 儲存桶工作必須採取的步驟列表,稍後我將根據需要嘗試詳細說明,但這裡有很多步驟:

第 1 步:設置基於域的儲存桶

注意:此主機名必須稍後加入 Cloudflare(在第 3 步中),因此請根據此選擇它。必須使用整個主機名來為儲存桶提供服務,所以不要選擇已經在使用的東西。我會用static.example.com這個。

進入 S3 並使用此域的名稱創建一個儲存桶,您將需要選擇現有儲存桶以及您的圖像作為儲存桶的複制設置。您將希望儲存桶與步驟 2 的現有儲存桶位於同一區域: 為 static.example.com 創建儲存桶

步驟 1.5(可選):在沒有 Cloudflare 的情況下測試自定義域

將測試圖像添加image.jpg到具有公共查看權限的儲存桶中,將其載入到根目錄中。

將主機名的 DNS 條目 ( static.example.com) CNAME 到您的 Amazon 儲存桶的終端節點。這通常是儲存桶的名稱(在本例中為static.example.com)加上包含區域的標準 S3 URL。對於我們的範例,它將是:static.example.com.s3.us-west-2.amazonaws.com,但替換us-west-2為您的實際區域。

現在查看測試資源是否可用http://static.example.com/image.jpg,請確保使用 http,因為 https 在這裡不起作用。從上述步驟傳播 DNS 可能需要一些時間。

第 2 步:複製舊儲存桶中的所有資源

您需要按照本指南將所有資源從舊儲存桶複製到新儲存桶。該指南的深度足以將您的所有資源複製到新儲存桶中,但如果您有一個非常大的儲存桶,您可能會在此處遇到問題。

驗證預期資源是否位於http://static.example.com/old_image_path.jpg

第 3 步:註冊並設置 Cloudflare

此步驟是將您的域加入 Cloudflare。Cloudflare 對此有一組說明。如果您有任何現有記錄,請確保它們在入職列表中。應該存在的一個條目是在步驟 1 中設置的static.example.com-> CNAME。static.example.com.s3.us-west-2.amazonaws.com

設置完成後,請確保 DNS 條目處於“橙色雲”模式 AKA 代理(和記憶體)。從第 2 步再次發出測試請求,但請查看圖像是否有來自 Cloudflare 伺服器的跡象。這將包括一個Server: cloudflare標頭以及一​​個cf-cache-status標頭,該標頭指示您是否從 Cloudflare 的記憶體中檢索並節省頻寬。這可能需要一些時間,因為上一步需要更改 DNS 才能傳播。

此時您應該可以在請求中使用 https,但如果不能,請轉到 Cloudflare 的 SSL/TLS > Edge Certificates 選項卡並驗證 Universal SSL 是否已啟用,或者其他類型的證書是否已正確配置。 注意:您在 Cloudflare 的 SSL/TLS 選項卡中的 SSL 模式必須是“完整”或“靈活”。這會加密使用者瀏覽器和 Cloudflare 之間的圖像,但不會加密 Cloudflare 和 AWS 之間的圖像。此外,此證書涵蓋的所有請求都將在“完整”或“靈活”模式下受到類似的中間人攻擊。此處概述的方法不能用於通過 https 提供圖像。為此,您需要創建一個Cloudfront 發行版

第四步:切換圖片連結引用

這是特定於原始問題的。所有圖像連結引用都必須從舊的 s3 儲存桶切換到 Cloudflare 中的新主機名,static.example.com.

第 5 步:調整記憶體設置

您可能需要調整記憶體設置以節省頻寬。有兩種主要方法可以實現這一目標。Cloudflare 將使用 Cache-Control 標頭來確定如何確定記憶體多長時間。您可以根據這些說明批量更新 S3 記憶體控制標頭。此外,Cloudflare 為您提供了使用記憶體 > 配置 > 瀏覽器記憶體 TTL 選項覆蓋此標頭的選項。這將有效地修改 Cache-Control: max-age 值修改為兩者中的較大者。較長的 TTL 將使圖像在使用者瀏覽器中記憶體的時間更長,但也會使圖像在 Cloudflare 的邊緣記憶體中保持更長時間,並減少 S3 儲存桶的負載。

免責聲明:

儘管 cloudflare 確實提供了看似免費的頻寬,但它們的慷慨是有限度的。請參閱Cloudflare 條款的第 2.8 節。似乎上述網站可能違反了這些條款,如果 Cloudflare 認為您的使用量過多,則您的網站可能會被刪除。屆時,您將不得不進入僅 DNS 模式並返回為 S3 付費或與 cloudflare 協商一些條款和付款,以繼續使用 Cloudflare 的頻寬。

引用自:https://serverfault.com/questions/1025614