我想在S3上托管静态网站,即.. abcd.com。它需要一个与#34; abcd.com相同的桶名称"
然后我发现abcd.com被其他人占用了。这就是我的问题,为什么存储桶名称必须与网站名称相同。因为路由53将网站映射到桶端点,所以没有必要进行此限制。
这有什么理由吗?
答案 0 :(得分:5)
简短的回答是,“这就是亚马逊设计它的方式。”
如果存储桶名称与域名不同,S3将如何知道用于为给定域提供请求的存储桶?
您不能说“Route 53”,因为S3是在Route 53之前创建的,即使您没有将Route 53用于DNS,S3中的网站托管也是如此。
同样,它不能是存储桶上的配置选项,因为这只会产生一系列新问题 - 如果域的前任所有者仍然使用您的域配置了其存储桶,那么您确实和你一样的问题,现在。
您仍然可以在S3上托管您的站点,但是如果桶名不匹配,则需要在同一区域的EC2中使用反向代理服务器,以在每个请求中重写主机头以匹配存储桶名称,或者,可以使用CloudFront来实现类似的目的,因为存储桶名称不需要匹配 - CloudFront也会重写Host标头。
答案 1 :(得分:2)
有一个很简单的原因:当Amazon从您的浏览器收到请求时,可用的主要信息是URL中的域,还不足以弄清楚它。
假设您的站点为example.com
,但是使用了存储桶名称,因此您将存储桶设为my-example
。然后,您将获得一个类似于http://my-example.s3-website.us-east-1.amazonaws.com/
的URL。这将在您的浏览器中正常工作,因为它可以解析到某些AWS Web服务器,该服务器查看Host
HTTP header,提取存储桶名称,并获取存储桶内容。
现在,假设您向Route53添加了一些内容以使example.com
工作。您可以添加A记录,使您的浏览器将example.com
直接转换为某些AWS S3 Web服务器的IP地址。或者,您可以输入一个CNAME,它从example.com指向完整的my-example主机名。无论哪种方式,您的浏览器都将查找IP地址,联系Amazon网络服务器,并发送一个Host
标头,上面写着example.com
。因此,如果这不是存储桶名称,它就不知道该怎么办。
诚然,它可以走得更远。毕竟,当您设置用于服务网站的存储桶时,请告诉它的主机名。因此,乍一想,如果也使用它,那似乎很好。但是,那也不能真正解决您的问题,因为设置example.com
存储桶的人都可以将其设置为托管。
解决此问题的最佳方法似乎是Cloudfront,它可以将域名与任意存储桶相关联。
答案 2 :(得分:2)
我认为AWS就是这样设计的,就是这样:Check this
我已经完成了我公司网站的工作,效果很好!
创建一个S3存储桶并将其配置为托管网站
Amazon S3允许您从以下位置存储和检索数据: 互联网。要整理数据,请创建存储分区并上传 使用AWS管理控制台将数据存储到存储桶中。您可以使用 S3将一个静态网站托管在存储桶中。以下步骤 介绍了如何创建存储桶并将其配置为用于网站托管。
要创建S3存储桶并将其配置为托管网站
注意 控制台显示有关对存储桶进行公共访问的消息。在此过程的后面,您将添加一个存储桶策略,以限制对该存储桶的访问。
注意 您将创建一个HTML文件,并将其上传到存储桶中。
复制以下存储桶策略并将其粘贴到文本编辑器中。此策略授予互联网("Principal":"*")
上每个人的权限,以获取与您的域名("Action":["s3:GetObject"])
关联的S3存储桶中的文件("arn:aws:s3:::your-domain-name/*")
:
{
"Version":"2012-10-17",
"Statement":[{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal":"*",
"Action":[
"s3:GetObject"
],
"Resource":[
"arn:aws:s3:::your-domain-name/*"
]
}]
}
创建另一个S3存储桶,用于www。您的域名
在上述过程中,您为域名创建了一个存储桶,例如example.com。这样,您的用户可以使用您的域名(例如example.com)访问您的网站。
如果您还希望用户能够使用www.your-domain-name(例如www.example.com)访问示例网站,则可以创建第二个S3存储桶。然后,您将第二个存储桶配置为将流量路由到第一个存储桶。
注意 网站通常会将您的域名重定向到www。您的域名,例如,从example.com重定向到www.example.com。由于S3的工作方式,您必须以相反的方向设置重定向,从www.example.com到example.com。
要为www。您的域名创建S3存储桶