2015-05-27 97 views
2

我們目前正在使用OpsWorks將我們的網站移動到EC2。現在我們使用編碼中的相對URL來引用網站的所有媒體文件......「/images/image1.jpg」等等。有沒有辦法在我們的編碼中將/ images目錄別名來使用S3存儲桶?我們想要做的是將大尺寸圖像輸出到S3上,這樣它就不會與我們每個S3實例一起存儲。AWS S3利用網站靜態圖像

我知道我們可以爲存儲桶本身創建一個別名DNS條目,但是我們必須在我們的編碼中引用完整的URL。例如,http://images.s3-website-us-east-1.amazonaws.com。我們寧願在編碼相對和絕對路徑中保留URL引用。

我們利用AWS Linux爲PHP/Apache前端EC2實例。

+1

您可以編寫自己的處理程序以在應用程序級別使用S3 CLI,並將所有請求路由到S3存儲桶,可以使用Cloudfront(AWS CDN)將S3存儲區放在前面,並指定一個DNS條目,然後使用'images.yoursite.com/images /'作爲它的別名,或者你可以使用類似's3fuse'的東西(從來沒有發現它那麼棒),在你的EC2實例上創建一個安裝到S3 –

回答

1

如果您使用的是Apache,那麼您可以使用Apache的內置代理支持代理所有/ images URL。你會想添加這樣的東西到你的Apache配置:

ProxyRequests Off 

<Proxy *> 
Order deny,allow 
Allow from all 
</Proxy> 

ProxyPass /images/ http://images.s3-website-us-east-1.amazonaws.com/ 

這實際上創建一個反向代理。當Apache服務器看到一個匹配/ images /的請求時,它將訪問S3 URL來獲取對象並將其返回給客戶端。

+1

的OP可能不會實現一個微妙的點 - 它發送通過您的服務器的所有流量,所以你有更多的數據(和更多的點擊)在服務器上。但是,如果你不想引用一個子域名,這是唯一的方法。 – tedder42

+0

我們的想法是爲我們更大的圖像文件提供單點,而不是將它們本地存儲在每個EC2實例的/ images目錄中。利用OpsWorks,我們可以在加載等待時準備好幾個實例,並且需要部署〜1GB的壓縮文件以獲取代碼。如果我們可以將這些映像提取到S3存儲桶中,則該部署的zip文件大約需要200MB並且部署速度更快。 – hiddenicon

+0

除非我遺漏了一些東西,否則我的建議是將S3的/ images/requests(或其他一些URL路徑)代理服務器在這種情況下工作得很好。圖像將駐留在S3上,您可以在您的網站中將它們稱爲「/images/big_image.jpg」,並且代理語句會導致圖像從S3中獲取。正如tedder42指出的那樣,這種方法會導致所有的流量流經OpsWorks實例,但是給出你的描述聽起來不是什麼大不了的事情。 –

0

您可以設置apache以將重定向返回到存儲在S3中的圖像的URL。

+0

你能詳細說一下嗎? –