我在 AWS S3 上为用户提供无限存储空间
真的吗?我需要免费存储大约 8 TB。我在哪里注册?
对我来说,这听起来像是您计划中的一个相当严重的缺陷,因为我怀疑您是否愿意“免费”放弃那么多存储空间。
除此之外,还有第二个缺陷,这CNAME
对于 DNS 区域的顶点是不可能的。您可以创建一个CNAME
forwww.example.com
但不可能声明example.com
为一个CNAME
.
是的,它可以作为ALIAS
记录来完成,但您必须在 Route 53 上为您客户的域托管 DNS。
第三个问题是这样的:
mybucket/user1folder -> user1folder.mybucket.awsS3.com
那应该是 user1folder.mybucket.s3.amazonaws.com,但我明白了,但这个想法行不通。这种魔法通过配置 DNS 是不可能的,因为在 HTTPHost:
标头中发送的完整主机名必须与存储桶名称完全匹配。 CNAME
(and ALIAS
) 记录只翻译浏览器用来建立连接的 IP 地址,它们不对Host:
标头做任何事情。S3 中也没有提供这种行为的能力。
它在技术上可以通过将一个或多个 EC2 实例添加到组合中来完成您尝试做的事情,运行具有重写和代理功能(如 haproxy、varnish、nginx 或 apache)的 Web 服务器,以将每个传入的主机名/url 重写为不同的,包括替换路径的元素并从“后端”服务器(在本例中为 S3)获取它......这意味着当请求以 user1.com/foo 的身份访问您的 Web 服务器时可以将 URL 请求重写为 mybucket.s3.amazonaws.com/user1.com/foo,从 S3 获取对象并将其返回给用户,但您必须拥有足够容量的 EC2 实例来处理重写并将所有这些字节从 S3 传递回用户的浏览器——所有数据都将流经您的 EC2 实例。
在 Apache 中,从请求中获取主机名并将 if 附加到路径的第一部分的原始重写规则可能如下所示:
RewriteRule ^(.+) http://mybucket.s3.amazonaws.com/%{HTTP_HOST}$1 [P]
如果服务器收到对http://example.com/foo的请求,它将被重写为http://mybucket.s3.amazonaws.com/example.com/foo并且该对象将由 Apache 服务器从 S3 请求,其内容从 apache 返回到浏览器。当然,这会比直接访问 S3 慢一些,但在您描述的情况下这是不可能的。如果“用户名”不是“example.com”(网站的域名),那么您必须为每个用户自定义 apache 配置,因为替换不会是通过插入简单地重建 uri 词干将主机名添加到路径中。
所以,是的,这在技术上是可行的,但实用性和可行性是不同的问题。
更新(来自评论):
我的博客 ondrek.me 是 S3 存储桶的 CNAME,它运行良好
您确实CNAME
在您的区域的顶点使用 a,从而破坏了 DNS 协议,使您不可能或极不可能成功地使用 www.ondrek.me 或任何其他子域,此外还消除了入站的可靠传递您的域的电子邮件。您当前的配置正在运行,但无效,并且会出现意外问题。
这里有什么正确的方法可以为我的用户提供域 customer.com 到 mybloggingplatform.com/customerId 的博客吗?
除了我描述的?不,我会说没有。DNS不行,浏览器不行,S3也不行。
使用 EC2 并为每个博客重定向每个用户的每个请求是巨大的开销。
没错,但重要的是,我没有说redirect。我上面讨论的解决方案不会重定向,因为这意味着将浏览器的地址栏发送到不同的位置,这几乎完全无法使用。我说的是重写和代理——服务器翻译地址并获取对象。所以,是的,这是一些开销,尽管可能比你想象的要少。
需要一些聪明的解决方案,
是的,解决方案是“Web 服务器”。
您需要一个或多个 Web 服务器,由某种存储支持,以从任何位置提供内容;配置根据传入的标头确定内容来自服务器上或其他地方的位置Host:
。
在 AWS 中,我认为更合适的存储是 EBS,尽管 S3 在技术上可以工作,正如我所描述的。我有一个 Web 服务器,其中包含大量非常“新鲜”的文件和大量仍然需要访问的非常古老的文件......我的服务器将新鲜文件存储在其高性能 SAN 阵列上,而古老的东西已迁移到 S3,但仍需要在旧 url 上可用。当对 /foo/bar 的请求进入时,服务器会检查 /var/www/foo/bar 中的本地文件,如果存在则提供它,否则通过后端代理请求以获取 /mybucket/来自 S3 的 foo/bar。如果文件不存在,我的服务器实际上将 403 从 S3 返回到客户端。
我还成功地在一个旧的自定义编写的多租户 Web 服务器前面使用了 HAProxy,由于它的设计,它从Host
标头确定路径名并且无法合理地重新配置,因为它太旧了以至于没有人记得是谁写的或者它是如何工作的。该服务器需要通过网站的新主机名访问,HAProxy 工作出色,将主机名翻译到 HTTP 标头中,因此该服务器始终认为这是请求的目的,即使您在地址中键入了 IP 地址酒吧。在这样的设置中,HAProxy 可以重写 Host 标头和 URL,并很容易地处理数百个并发连接。
github页面具有相同的功能,
我想你会发现 github 有大量的 web 服务器。
s3静态网站也
...当然,托管在 Web 服务器上。