【问题标题】:Is it possible to do dynamic static mass hosting by subdomain on S3?是否可以在 S3 上通过子域进行动态静态海量托管?
【发布时间】:2019-03-19 09:10:26
【问题描述】:

假设我需要托管 1000 个静态网站。它们中的每一个都是父域的子域:

foo.parent.com
bar.parent.com
baz.parent.com
...

由于每个 AWS 账户有 100 个存储桶的限制,每个静态内容都将位于父存储桶的文件夹中:

https://s3.amazonaws.com/parent.com/foo/index.html
https://s3.amazonaws.com/parent.com/bar/index.html
https://s3.amazonaws.com/parent.com/baz/index.html
...

有没有办法将每个子域指向正确的文件夹?也许使用 53 号公路?

使用 Apache 可以将所有子域自动重写到所需的文件夹,如下所示:

RewriteCond %{HTTP_HOST} ^([^.]+)\.parent.com$ [NC]
RewriteRule ^(.*) folder/%1/

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-route53


    【解决方案1】:

    在此处停止阅读,转而参阅 Serving a multitude of static sites from a wildcard domain in AWS,它描述了如何使用单个 S3 存储桶、单个 CloudFront 分配和 Lambda@Edge 源请求触发器来完成此操作。


    更新:在最初发布此答案后不久,AWS 放宽了每个账户 100 个存储桶的硬性限制,将其改为默认限制,可以通过向 AWS 支持描述您的用例来增加。

    提高存储桶限制:您现在可以提高每个 AWS 账户的 Amazon S3 存储桶限制。所有 AWS 账户的默认存储桶限制为 100 个存储桶,从今天开始,您现在可以通过访问 AWS Service Limits 请求更多存储桶。

    https://aws.amazon.com/about-aws/whats-new/2015/08/amazon-s3-introduces-new-usability-enhancements/


    单独使用 S3,没有。

    使用 S3,在 Route 53 的重写帮助下,不 - DNS 不会重写路径。永远。

    将 S3 与根据传入的 Host: 标头重写路径的代理结合使用...嗯,是的。与您的 Apache 配置示例类似,您可以将 Apache 配置为重写 URL,然后将 [P] 代理(不是重定向 -- 代理)请求到 S3,并重写路径。 Nginx 或 HAProxy 或其他几种产品也可以这样做……而且,如果一个或多个代理与存储桶位于同一区域,则 EC2 和 S3 之间不存在数据传输费用。我整天提供内容,“主机名 A”从“存储桶名称 B”中提取内容,HAProxy 将传入的 Host: 标头重写为 S3 期望的内容,以便从预期的存储桶中提供服务。奖励:使用我的证书在我的域上使用 SSL。

    或者...如果您不喜欢冒险,可以使用 CloudFront。这消除了主机名与存储桶匹配的需要,并为您提供了一些与路径相关的额外灵活性。

    当您指定 CloudFront 分配的来源 - Amazon S3 存储桶或您存储原始内容版本的自定义来源时 - 您现在可以指定目录路径以及域名。

    http://aws.amazon.com/about-aws/whats-new/2014/12/16/amazon-cloudfront-now-allows-directory-path-as-origin-name/

    这对您来说意味着为每个网站配置 CloudFront 分配,将其配置为使用适当的 S3 存储桶以及该存储桶中的路径。 (当然,您可以自动化)。

    AWS 不对分发本身收费,所以这个似乎有点简单。每个 AWS 账户有一个 limit of 200 CloudFront distributions,但与 S3 中的 100 个存储桶限制不同,这个限制似乎是一个可协商的默认限制,就像现在的 S3 限制一样。

    【讨论】:

      【解决方案2】:

      抱歉,目前不可能。域记录需要映射到同名的bucket,bucket有100个限制。

      您需要使用多个 AWS 账户才能获得 1000 个存储桶,我不确定他们是否对此感到不满。

      探索另一种方法可能更好,例如使用 EC2 实例托管 1000 个网站,并从 s3 提供尽可能多的 css/js/images 等以卸载流量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-14
        • 2023-03-09
        • 2017-03-23
        • 1970-01-01
        • 2020-07-24
        • 1970-01-01
        • 1970-01-01
        • 2011-07-27
        相关资源
        最近更新 更多