2017-01-15 61 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的访问。