2016-04-19 19 views
1

我們希望儘可能快地在我們的應用程序上託管圖像。由於我們已經有了AWS設置,我們更傾向於將我們的映像託管在S3存儲桶上(但可以選擇開放)。基於地理位置的多個s3存儲桶的一個域

挑戰在於將請求路由到最近的S3存儲桶。 現在我們使用帶有地理定位路由策略的Amazon Route 53來關閉EC2實例,並重定向到相應的存儲桶。我們發現這個請求的執行效率很低: origin-> DNS-> EC2-> S3,寧願 origin-> DNS-> S3。是否可以將兩個靜態網站S3存儲桶綁定到基於地理位置請求路由的相同域?

Ps:我們已經研究了雲端,但由於許多圖像是動態的,只有在我們希望原點儘可能接近用戶時纔會被查看。

+0

*我們發現這種不足*你太理論了。通過代理向同一區域的S3請求,每天可以通過一個5美元的t2.nano實例輕鬆地爲成千上萬的請求提供服務 - 就像我每天整天都在做的一樣 - 並且S3和實例之間的帶寬不收費。這個解決方案沒有任何問題。 –

回答

0

因此經過大量的研究,我們沒有找到問題的答案。我們確實更新了我們的設置。這種情況是,用戶點擊一個按鈕,將在IOS應用程序中查看一些圖像。當用戶按下按鈕時,請求會被重新路由到最近的EC2實例,以提高性能。我們沒有在歐盟和美國返回相同的圖像鏈接,而是更新了它,因此在美國點擊時您可以獲得美國S3存儲桶的鏈接,而歐洲也是如此。我們還提供了兩個雲前端分佈,一個位於每個S3存儲桶前,以提高速度。

4

這是不可能的。

爲了使S3存儲桶能夠將文件作爲靜態網站提供,存儲桶名稱必須與正在瀏覽的域匹配。由於這種限制,不可能爲同一個域提供多個存儲桶服務文件,因爲即使在不同的地區,您也無法創建具有相同名稱的多個存儲桶。

CloudFront可用於從S3存儲桶提供文件,而這些S3存儲桶不需要使其名稱與域匹配。所以乍一看,這可能是一種解決方法。但是,CloudFront不允許您爲同一個域創建多個發行版。

因此,不幸的是,截至撰寫本文時,從S3存儲桶無法進行地理定位。

編輯進行更深層次的解釋:

無論您是域的DNS條目是CNAME,A記錄,或別名是無關緊要的。限制在S3方面,與DNS無關。

CNAME記錄將解析example.coms3.amazonaws.comx.x.x.x,並且將連接到S3。但是您的瀏覽器仍然會在Host標題中發送example.com

當S3爲網頁提供文件時,它使用HTTP請求中的Host標頭來確定文件應從哪個存儲區提供。這是因爲S3有一個HTTP端點。因此,就像您自己的Web服務器在同一服務器上託管多個網站時一樣,它會使用Host標頭來確定您實際需要的網站。

一旦S3有你想要的Host,它將它與可用的桶進行比較。它決定將桶名稱用於匹配Host標題。

+0

事實上,使用與域名相匹配的存儲桶的名稱 – Tom

+0

的優點如果將CNAME用於S3存儲區而不是ALIAS,然後對所有CNAME進行地理定位,它的行爲如何? – Tom

+0

同樣的問題。只有名爲「example.com」的S3存儲桶可以爲「example.com」域的文件提供服務。全球只能有一個'example.com'存儲桶。 –