我的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
答案 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)