2017-01-15 60 views
1

我在我的AWS存儲桶中有一個文件:https://s3.amazonaws.com/static.my-company.com/media/my-file.jpg如何將子域分配給我的AWS S3存儲桶?

當前我在訪問該文件我的index.html文件www.my-company.com。我有my-company.com作爲AWS Route 53中的託管區域。

但是在那index.html中,我不希望它顯而易見此資產位於AWS存儲桶中。我希望它看起來好像它託管在我自己的域服務器上。因此,而不是https://s3.amazonaws.com/static.my-company.com/media/my-file.jpg,我希望它被解決爲https://static.my-company.com/media/my-file.jpg。我怎樣才能做到這一點?

我嘗試在路線53中插入一條CNAME記錄,指向static.my-company.coms3.amazonaws.com/static.my-company.com。但那並不奏效。這就是Jay Godse推薦的here

回答

2

您需要將S3存儲桶設置爲靜態網站(這是S3中用於設置存儲桶的選項)。然後,域名將更改爲http://static.my-company.com.s3-website-us-east-1.amazonaws.com.,這是您希望將CNAME記錄設置爲Route 53中的內容。

請注意,您不能將CNAME記錄設置爲像您當前正在執行的目錄,它具有成爲可解決的領域。

+1

正確,除了這不支持HTTPS和'us-east-1'將隨着創建存儲區的區域而變化。 [在控制檯中]找到存儲桶的正確端點(http://docs.aws.amazon.com/AmazonS3/latest/dev/HowDoIWebsiteConfiguration.html)。 –

1

因此,而不是https://s3.amazonaws.com/static.my-company.com/media/my-file.jpg,我希望它被解決爲https://static.my-company.com/media/my-file.jpg。我怎樣才能做到這一點?

這裏有三個不同的問題。

如果您爲存儲桶啓用網站託管功能,正如@Deif在此處的另一個答案中所述,您可以使用別名或CNAME將Route 53中的主機名指向存儲區的網站端點,並且可以工作。但它不支持HTTPS。

HTTPS要求Web服務器使用包含與瀏覽器地址欄中的主機名匹配的主機名的SSL(TLS)證書向瀏覽器標識自己。 REST端點上的S3證書匹配s3.amazonaws.com的各種排列 - 它們與您的域不匹配。

所以你需要一個SSL證書。如果您已有,請將其上傳到us-east-1地區的亞馬遜證書管理器(ACM)。 ¹如果不是,ACM可以免費爲您創建一個。

接下來,創建一個新的CloudFront分配,使用您的子域作爲備用域名,使用上面的ACM證書,並使用您的網站端點主機名作爲源服務器。

然後,將Route 53中的子域指向CloudFront分配。

現在,https://subdomain.example.com/pics/funny/cat.jpg轉到CloudFront,它提供SSL並從適當的存儲區獲取內容。

爲什麼需要CloudFront?這是使用S3啓用了SSL的自定義域名的官方解決方案。 S3本身不支持該功能。使用CloudFront需要付費,但它顯着降低了S3本身的成本。當通過CloudFront進行下載時,S3會針對用於下載的帶寬收費$ 0,而CloudFront會爲帶寬收取相應的費用。許多情況下,CloudFront的帶寬價格較低(可能是因爲CloudFront可以水平擴展以緩解擁塞,而S3只能垂直擴展 - 它受位置限制)。


¹在ACM中,us-east-1區域總是用於我在這裏描述的設置,不管桶的位置,因爲CloudFront的是管理出來的我們 - 東 - 1,我們需要這個證書是CloudFront的訪問。