是否可以在S3上通过子域进行动态静态群发托管?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否可以在S3上通过子域进行动态静态群发托管?相关的知识,希望对你有一定的参考价值。
假设我需要托管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
...
有没有办法将每个子域指向正确的文件夹?也许使用Route 53?
使用Apache,可以将所有子域自动重写为所需的文件夹,执行以下操作:
RewriteCond %{HTTP_HOST} ^([^.]+).parent.com$ [NC]
RewriteRule ^(.*) folder/%1/
请停止阅读此处,而是查看Serving a multitude of static sites from a wildcard domain in AWS,其中介绍了如何使用单个S3存储桶,单个CloudFront分配和Lambda @ Edge Origin Request触发器完成此操作。
更新:在最初发布此答案后不久,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”从“Bucket Name B”中取出内容整天提供内容,HAProxy将传入的Host:
标头重写为S3期望的,以便从预期的存储桶中提供服务。奖励:使用我的证书在我的域名上使用SSL。
或者......如果你感觉不那么冒险,那就是CloudFront。这消除了主机名与存储桶匹配的需要,并允许您提供一些与路径相关的额外灵活性。
当您指定CloudFront分配的原点 - Amazon S3存储桶或存储原始内容版本的自定义源时 - 您现在可以指定除域名之外的目录路径。
这对您来说意味着,为每个网站配置CloudFront分配,将其配置为使用适当的S3存储桶以及该存储桶中的路径。 (当然,你可以自动化)。
AWS不会对分发本身收费,所以这个看起来有点不费吹灰之力。每个AWS账户都有一个limit of 200 CloudFront distributions,但是 与S3中的100个桶限制不同, 此限制似乎是可协商的默认限制,因为S3限制现在也是。
对不起,目前不可能。域记录需要映射到具有完全相同名称的存储桶,并且存在100个存储桶限制。
您需要使用多个AWS账户才能获得1000个桶,我不确定他们是否对此表示不满。
可能更好地探索另一种方法,例如使用EC2实例来托管1000个网站,并从s3提供尽可能多的css / js / images等来卸载流量。
以上是关于是否可以在S3上通过子域进行动态静态群发托管?的主要内容,如果未能解决你的问题,请参考以下文章
静态网站托管中子域的 AWS S3 存储桶重定向与 DNS CNAME
关于aws-s3-bucket-静态网站托管相关的查询-S3.Client.get_bucket_website(**kwargs)