2009-02-20 100 views
12

我怎樣才能改變Amazon S3的URL從http://bucket.amazons3.com/imagepath.jpghttp://image.mydomain.com/imagepath.jpgAmazon S3的URL重寫

編輯: 基本上整個原因是爲了隱藏我的用戶Amazon S3的URL。

我在想一個HttpModule,它會將請求從image.mydomain.com重定向到bucket.amazons3.com。但是這需要我的服務器先處理所有請求然後轉發。

+1

如果我的回答有用,請標記爲已回答。 – Ramesh 2010-02-28 23:04:48

回答

22

如果我明白了,您需要指定您的域名而不是S3。爲此,您需要編寫一個處理程序,它將作爲亞馬遜服務器的代理。

但是,這實際上會將您的帶寬增加一倍,因爲您需要將圖像發送到客戶端以及爲S3獲取圖像。

我不確定是否有任何S3具體的方式來處理這個問題。

下面是Amazon S3, CNAME record

採取Amazon S3的具體方式一般用戶可以註冊爲 Amazon S3的託管,並開始上傳 文件 - 接受默認URL託管文件 結構:

http://s3.amazonaws.com/your-bucket/some-file.txt 如果您計劃使用S3來託管媒體文件(更具體地說是Flash文件 ),您將會遇到Adobe的跨域安全策略。該修復需要 將您的託管S3文件映射到 ,好像它們是從 服務於您自己的域 - 虛擬主機。該 最簡單,最有吸引力的方法 將是喜歡 此託管文件網址:

http://s3.your-site.com/some-file.txt 首先,創建要作爲根爲您 託管文件上S3 桶。在這個例子中,你 S3存儲是:

s3.your-site.com最重要的 步驟是加入適當的CNAME 記錄您的DNS設置。

名稱類型數據 s3.your-site.com CNAME s3.amazonaws.com。 預計您的新DNS設置需要 長達24-48小時才能解決。

0

我看到它的方式,你有兩個選擇:

  1. 使重定向如你所說,或者
  2. 使從S3的資源請求,然後將它們返回用戶通過你的迴應。

所以,如果用戶希望看到http://image.mydomain.com/imagepath.jpg資源,你可以在內部請求http://bucket.amazons3.com/imagepath.jpg原始資源,在本地保存並返回給發出請求的用戶。

它確實花費了很多帶寬,但如果這是您的關鍵要求,這應該是要走的路。

3

這聽起來像你想生成到期鏈接,

http://www.ioncannon.net/s3/21/creating-s3-urls-that-expire-using-php/

然後,您可以生成這些上的蒼蠅,並提供它們作爲通過您的應用程序重定向。 所以有人請求, http://images.mydomain.com/img123.jpg

你生成一個不錯的,自動到期S3網址, http://mydomain.s3.amazonaws.com/T154456.jpg?AWSAccessKeyId=1ESOMESPECIALIDJJAKJ6RA82&Expires=1241372284&Signature=ddfr%2BlkoSEPAL%2BGbMwlMzj6q%2BCY%3D

,那麼你將用戶重定向到自動生成的URL。這樣,即使用戶查看html源代碼,他們也只能看到返回到您的網站的url,但當他們點擊鏈接時,他們被重定向到亞馬遜,因此您不必擔心代理 請求通過您的服務器和吃不必要的帶寬。

3

如果你有控制你的DNS爲什麼不設置CNAME?

我們有一個cname設置指向js.our-domain.com指向我們的一個桶(足夠奇怪的JavaScript文件),然後我們只需引用js.our-domain.com/jquery.js(例如)我們去。

根據你的主機,也有任意數量的方式來建立CNAME的 - 谷歌搜索reveals many

6

爲了詳細說明TEZ的回答,亞馬遜S3通過Virtual Hosting of Buckets提供了自定義映射域的支持。

要完成這項工作,您的存儲桶的名稱必須是您希望映射的完整主機名。

因此,使用原來的問題的例子,創建一個名爲image.mydomain.com併成立了CNAME它的S3桶:

image.mydomain.com CNAME image.mydomain.com.s3.amazonaws.com. 
9

s3.amazonaws.com創建CNAME。就足夠了。無需預先設置存儲桶名稱。

4

布賴恩的回答是正確的,拉梅什和文森特有錯誤。將CNAME設置爲s3.amazonaws.com會導致我不必要的重定向,正如AWS虛擬主機桶指南here中所警告的那樣。