使用 Bucketname 时的 S3 静态网站托管?

Posted

技术标签:

【中文标题】使用 Bucketname 时的 S3 静态网站托管?【英文标题】:S3 Static Website Hosting when Bucketname is taken? 【发布时间】:2014-05-13 02:28:36 【问题描述】:

我正在尝试使用 S3 从我的 AWS 账户托管一个简单的静态网站。多年来,我有一个尘土飞扬的旧帐户,其中包含许多奇怪的设置,我还有一个带有“mypersonaldomain.com”和“www.mypersonaldomain.com”存储桶的 S3 帐户。无论如何,我想重新开始,所以我取消了帐户以重新开始。

现在,当我创建一个“mypersonaldomain.com”和“www.mypersonaldomain.com”时,它显示存储桶名称已被占用,即使该帐户已被删除。我曾假设亚马逊会将存储桶名称重新公之于众。但是,当我删除帐户时,我没有事先明确删除存储桶。

我的印象是使用 S3 来托管静态网站,存储桶名称需要与域名匹配才能使 DNS 正常工作。但是,如果我无法创建具有正确名称的存储桶,我是否可以使用 S3 进行静态托管?它只是一个简单的低流量网站,不需要在 EC2 实例中。

仅供参考,我将 Route 53 用于我的 DNS。

[注意 'mypersonldomain.com' 不是实际域名]

【问题讨论】:

【参考方案1】:

我终于找到了适合我的解决方案。对于我的***域名,我使用的是 CloudFront,这不是某人已经拥有我的存储桶名称的问题。问题是 www 重定向。我需要一个服务器来重写 URL 并发出永久重定向。由于我将 Elastic Beanstalk 用于我的 API,因此我利用 nginx 来完成重定向。您可以在此处阅读我帖子中的所有详细信息:http://brettmathe.com/aws/aws-apex-redirect-using-elastic-beanstalk/

【讨论】:

【参考方案2】:

解决问题的一种方法是将您的网站存储在 S3 上,但通过 CloudFront 提供服务:

    您可以使用您喜欢的任何名称在 S3 上创建一个 存储桶(无需将存储桶的名称与您的域名相匹配)。 您在 CloudFront 上创建了一个分发版。 您将 origin 添加到指向您的存储桶的分配中。 您将分发的默认行为设置为从上一步创建的源中获取内容。 您通过添加 CNAME 更改您的分配设置以使其响应您的域名 您在 Route 53 上创建了一个托管区域,并创建了指向您的分布的 ALIAS 条目

应该可以。通过这样做,您可以获得潜在提高最终用户性能的额外好处。

另请注意,CloudFront 几个月前已包含在免费套餐中 (http://aws.amazon.com/free)。

【讨论】:

这是一个有效的解决方案,也在 Linux Academy CSA 课程中演示过。非常愚蠢,甚至需要解决方法恕我直言! 非常有用,但存在令人难以置信的设计缺陷【参考方案3】:

在我看来,这是一个巨大的设计缺陷,因为 S3 要求存储桶名称在所有用户中都是唯一的。

例如,我可以为任何知名公司名称创建存储桶(假设它们没有被占用),然后这些域的合法用户将被阻止使用它们来创建静态 s3 网站,如果他们曾经想要。

我从不喜欢 s3 存储桶名称在所有用户中都是唯一的这一要求——这是一个主要的设计缺陷(我确信在最初设计它时有正当理由),但无法想象 AWS 是否可以回到绘图板上,他们现在不会重新考虑。

在您的情况下,使用删除帐户,可能值得向 s3 技术支持人员发送说明 - 他们可能会很容易地为您提供帮助。

【讨论】:

是的,我在想关于邪恶用例的完全相同的事情。我想我会向 AWS 发送一条消息。 这有什么结果吗(联系 AWS 团队)?我也一直在想:“存储桶名称必须与域名匹配”+其他人可能已经抢占了您的域的组合绝对是一个问题。因为除了这些小问题,S3 非常适合静态托管! 这对我来说是个问题。我拥有一个域名,但有人已经为其创建了存储桶 :((( 就我而言,我使用的是 CloudFront,因此顶点地址工作正常,但我无法设置 www 重定向。不高兴。 我认为可以公平地说,因为 S3 是 AWS 最古老的服务之一,因此它是最受黑客攻击的服务之一。我想所有 AWS 区域的独特性是其中之一,因为没有人从这项服务开始就预料到所有潜在的副作用,但必须以某种方式保持向后兼容性。我很高兴在两者之间使用 Cloudfront 进行了修复。

以上是关于使用 Bucketname 时的 S3 静态网站托管?的主要内容,如果未能解决你的问题,请参考以下文章

AWS S3 GetObjectAsync挂起/超时

在 CloudFront/S3 中托管 Angular 应用程序 *无需* S3 静态网站托管

静态 S3 网站端点未通过 HTTPS 重定向

使用 CloudFront 和目录重定向的 AWS S3 静态网站托管

限制对云端分发背后的 s3 静态网站的访问

使用 S3、CloudFront 和源路径的静态网站托管的子文件夹重定向问题