尝试将路由53中的别名目标设置为S3时,没有可用的目标

Modified on: Sun, 20 Oct 2019 18:40:02 +0800

我正在尝试设置一个简单的基于Amazon AWS S3的网站,如此处

我已经设置了S3存储桶(simples3websitetest.com),给了它(希望)正确的权限:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPerm", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::simples3websitetest.com/*" ] } ] }

我上传了index.html,设置了网站访问权限,可通过访问http://simples3websitetest.com.s3-website-us-west-2.amazonaws.com/index.html

到目前为止一切顺利,现在我想设置Amazon Route53访问权限,这就是我遇到的问题。

我在我拥有的域(resourcesbox.net)上设置了托管区域,然后单击“创建记录集”,然后进入“设置别名”步骤,但我在S3网站下获得“无目标”我尝试设置别名目标时的端点。

我错过了什么?

最佳答案

您创建的A记录别名必须与存储桶的名称相同,因为S3中虚拟托管存储桶需要浏览器发送的Host:标头与存储桶名称匹配。实际上还没有另一种可以实现桶的虚拟托管的实用方法......必须通过某种机制来识别存储桶,并且该机制是http头。

为了在“example.com”域内为存储桶创建别名,存储桶名称也必须是您可以在该域内合法声明的主机名... Route 53 A-Record“ testbucket.example.com,“例如,只能将 别名为名为”testbucket.example.com“的存储桶...而且没有其他存储桶。

在你的问题中,你打破了这个约束......但是你只能在“simples3websitetest.com”域内(以及顶点)创建一个名为“simples3websitetest.com”的存储桶的别名。 / p>

这是设计上的,并不完全是Route 53和S3的限制。他们只会阻止你做一些无法工作的事情。 Web服务器不知道DNS中的任何别名或CNAME或其他任何操作 - 它们只接收浏览器认为它正在尝试连接的原始主机名,在浏览器发送的http标头中...并且S3使用此用于标识虚拟托管请求适用的存储桶名称的信息。

  

Amazon S3要求您为存储桶指定与域名相同的名称。这样,当用户从您的网站请求内容时,Amazon S3可以正确解析Web浏览器发送的主机标头。因此,我们建议您在付费注册域名之前在Amazon S3中为您的网站创建存储桶。

  
  

http://docs.aws.amazon .COM / gettingstarted /使用最新/ SWH / gettingstarted创建-bucket.html#铲斗要求

但请注意,此限制仅适用于您未在存储桶前使用CloudFront的情况。

使用CloudFront,可以提供更大的灵活性,因为在将请求传递到S3之前,可以重写Host:标头(由CloudFront本身重写)。您可以将CloudFront分配中的“源主机”配置为your-bucket.s3-website-xx-yyyy-n.amazonaws.com,其中xx-yyyy-n是S3的AWS区域,其中斗已创建。此端点显示在每个存储桶的S3控制台中。


相关问答

添加新评论