如何将子域分配给我的AWS S3 Bucket?

时间:2017-01-15 10:30:18

标签: amazon-web-services amazon-s3 amazon-route53

我的AWS桶中有一个文件:https://s3.amazonaws.com/static.my-company.com/media/my-file.jpg

目前,我正在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.com指向s3.amazonaws.com/static.my-company.com。但那并没有奏效。这是Jay Godse推荐的here

3 个答案:

答案 0 :(得分:3)

您需要将S3存储桶设置为静态网站(这是S3中的一个选项,可以设置您的存储桶)。然后,域名将更改为http://static.my-company.com.s3-website-us-east-1.amazonaws.com.,这是您要在路由53中设置CNAME记录的内容。

请注意,您无法将CNAME记录设置为您当前正在执行的目录,它必须是可解析的域。

答案 1 :(得分:1)

  

因此,我希望将其作为https://s3.amazonaws.com/static.my-company.com/media/my-file.jpg来解决,而不是https://static.my-company.com/media/my-file.jpg。我怎么能这样做?

这里有三个不同的问题。

如果您为存储桶启用了网站托管功能,如@Deif在此处的另一个答案中所示,您可以使用别名或CNAME将路由53中的主机名指向存储桶的网站端点,并且它可以正常工作。但它不支持HTTPS。

HTTPS要求Web服务器使用SSL(TLS)证书向浏览器标识自己,该证书包含与浏览器地址框中的主机名匹配的主机名。 REST端点上的S3证书匹配s3.amazonaws.com的各种排列 - 它们与您的域不匹配。

所以你需要一个SSL证书。如果您已经有一个,请将其上传到us-east-1区域的Amazon Certificate Manager(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是在us-east-1之外管理的,我们需要CloudFront可以访问此证书

答案 2 :(得分:0)

2019年更新:S3中的AWS子域托管

以下步骤对我来说很有效,那就是让一个子域在AWS S3托管的静态网站上运行:

  1. 使用子域名创建存储分区。在下面的示例中,它将是www。 subtest .mysite.com

aws bucket

注意:请确保在以下存储分区的“权限”标签上进行了设置:

1。阻止公共访问(存储桶设置) 2.访问控制列表 3,桶装政策 进行适当设置以确保存储桶是公共的。 (假设您已经为根域存储桶执行了此操作,那么这些设置可以镜像到该子域存储桶上)

S3 bucket permissions

  1. 在存储桶中上传 index.html 文件

index aws bucket

    与您的域名提供商
  1. 创建 CNAME记录 CNAME record in namecheap