【问题标题】:One domain to mulitple s3 buckets based on geolocation基于地理位置的一个域到多个 s3 存储桶
【发布时间】:2016-08-11 15:44:43
【问题描述】:

我们希望尽快在我们的应用程序上托管图像。由于我们已经有一个 AWS 设置,我们更喜欢将我们的图像托管在 S3 存储桶上(但对替代方案开放)。

挑战是将请求路由到最近的 S3 存储桶。 现在我们使用带有地理位置路由策略的 Amazon Route 53 来关闭 EC2 实例,并重定向到相应的存储桶。随着请求的进行,我们发现这效率低下: origin->DNS->EC2->S3 并且更喜欢 来源->DNS->S3。是否可以将两个静态网站 S3 存储桶绑定到基于地理位置路由请求的同一域?

Ps:我们已经研究了 cloudfront,但由于许多图像是动态的,并且只有在我们希望原点尽可能靠近用户时才能查看。

【问题讨论】:

  • 我们发现这效率低下 你太理论化了。您可以通过 5 美元的 t2.nano 实例轻松地每天处理数十万个请求,该实例将请求代理到同一区域中的 S3——就像我每天整天做的那样——并且 S3 和实例之间的带宽不收费.这个解决方案没有任何问题。

标签: amazon-web-services amazon-s3 amazon-ec2 dns


【解决方案1】:

这是不可能的。

为了让 S3 存储桶将文件作为静态网站提供服务,存储桶名称必须与正在浏览的域匹配。由于这一限制,同一域不能有多个存储桶为文件提供服务,因为您不能创建多个具有相同名称的存储桶,即使在不同的区域也是如此。

CloudFront 可用于提供来自 S3 存储桶的文件,这些 S3 存储桶的名称不需要与域匹配。因此,乍一看,这可能是一种解决方法。但是,CloudFront 不允许您为同一个域创建多个分配。

不幸的是,在撰写本文时,无法从 S3 存储桶进行地理定位。

编辑以获得更深入的解释:

您的域的 DNS 条目是 CNAME、A 记录还是 ALIAS 无关紧要。限制在 S3 端,与 DNS 无关。

CNAME 记录会将 example.com 解析为 s3.amazonaws.comx.x.x.x,并将连接到 S3。但您的浏览器仍会在 Host 标头中发送 example.com

当 S3 为网页提供文件时,它使用 HTTP 请求中的 Host 标头来确定应从哪个存储桶提供文件。这是因为 S3 有一个 HTTP 端点。因此,就像您自己的 Web 服务器从同一服务器托管多个网站一样,它使用 Host 标头来确定您真正想要的网站。

一旦 S3 获得您想要的 Host,它就会将其与可用的存储桶进行比较。它决定使用存储桶名称来匹配 Host 标头。

【讨论】:

  • 确实不错,bucket的名字与域名匹配
  • 如果对 S3 存储桶使用 CNAME 而不是 ALIAS,然后对所有 CNAME 进行地理定位,它会如何表现?
  • 同样的问题。只有名为“example.com”的 S3 存储桶可以为 example.com 域提供文件。并且在全球范围内只能有一个example.com 存储桶。
  • CNAME 不会更改浏览器请求文件的域。
  • 现在清楚了,所以基本上这是因为 AWS 使用记录名称来检索存储桶名称,而使用 CNAME 的 AWS 将无法检索此存储桶名称。谢谢马特
【解决方案2】:

所以经过大量研究后,我们没有找到问题的答案。然而,我们确实更新了我们的设置。场景是用户单击一个按钮,将在 IOS 应用程序中查看一些图像。用户按下按钮时的请求被重新路由到最近的 EC2 实例以提高性能。我们更新了它,而不是在欧盟和美国返回相同的图像链接,所以当点击美国时,您会获得指向美国 S3 存储桶的链接,而欧洲也是如此。我们还放置了两个云前端分布,一个在每个 S3 存储桶前面,以提高速度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 2011-08-07
    • 2022-06-17
    • 1970-01-01
    • 2015-12-02
    • 2020-11-13
    相关资源
    最近更新 更多