0

因此,我的網站託管在運行apache的EC2服務器上。所有的工作都很好,很好。如何在使用Apache的EC2服務器上託管我的網站,但在同一子域下的S3上託管我的圖像?

我遇到的問題是我希望託管在S3上的圖像(可能緩存在CloudFront上),而不是在我的EC2服務器上,但希望在同一個域/子域下都可以訪問這兩個圖像。

例如說我的網站是www.helloworld.com。我想要在www.helloworld.com/images/foobar.png上訪問我的圖像。我希望foobar.png能夠在S3上託管,而不是我的每臺EC2服務器。我怎麼能這樣做呢?

是否有可以在AWS控制檯中執行的配置以及我可以在Apache中使用的任何重寫規則?我知道我總是可以設置一個控制器,從S3下載圖像並將其轉發給用戶,但這對我來說似乎是錯誤的。

回答

1

爲此,您需要在前面放置一個負載均衡器/代理,以攔截所有請求並相應地進行調度。無論如何這可能不是一個壞主意(出於可用性原因),但是圖像的單獨主機名也不應該成爲問題(它不像用戶將不得不看到或鍵入那些URL)。

+0

我很想將圖像放在不同的子域,但那不是一個選項。我重寫一個遺留網站的圖像託管在所有的服務器上,並有外部客戶端訪問圖像基於現有的網址,所以他們需要仍然可以從相同的網址訪問。 – Matt

+1

然後代理似乎是最好的方法。或者您可以將您的EC2實例重定向到S3網址。導致額外的HTTP往返,但仍比「從S3下載並轉發給用戶」更好(並且非常容易設置)。 – Thilo

+0

好吧謝謝,生病了試試看。我的希望是,瀏覽器窗口中的url將是相同的。如果這是一個重定向,網址是否會改變? – Matt

0

使用CloudFront,您可以讓CloudFront接收初始請求,然後根據路徑將請求轉發到您的EC2實例或您的S3存儲桶。

例如,你可以設置如下:

  • 一個CloudFront的行爲在/images/下的路徑,就可以使用S3原點,
  • 一個默認值(一切)會去你的EC2實例來源。
+0

謝謝。這似乎是會降低工作。 – Matt

相關問題