使用AWS服务创建子域名以在S3上托管网站


Using AWS services to create subdomains on the fly to host a site on S3


信息:我正在开发一个用php构建的应用程序,它可以方便用户创建HTML模板并将其发布到web上。由于模板是静态的,我考虑使用amazonS3来存储它们,因为它可以托管静态网站,并且为应用程序提供了良好的整体基础设施。br/>

查询:我在网上发布时遇到问题。我希望模板在我的域上作为子域发布,例如:我拥有www.ABC.com,我要求用户命名模板,如果他将其命名为mysite,我将他的模板发布为mysite。ABC.com(类似于所有用户)。现在,我可以使用aws S3 api中的putObjectFile将模板存储在S3 bucket中,但我不确定如何创建子域(动态)并在该域上发布它。(我想为用户实现流程自动化)。另外,我可以使用API将bucket制作为hosting static website
早些时候,我与cpanel和cpanel API合作,允许我们创建域并使用内容进行FTP到域,我不清楚如何在这里实现它。

研究:到目前为止,我所取得的成功是,我使用S3控制台托管了一个网站。使用AWS服务,我将文件移动到与用户子域名称相同的bucket。我现在想将bucket端点更改为子域

参考:这个网站也做同样的事情,他们创建了一个类似目录的结构,并在网上发布网站。我不知道他们是否在亚马逊上托管,但我想实现类似的目标。希望我清楚并得到一些指导。

感谢您的关注

我之前研究过类似的场景,但由于S3的限制,我无法使用S3。

要在S3上的自定义域或子域上托管静态网站,您需要创建一个名称与该域匹配的bucket。由于每个S3帐户限制为100个bucket,因此您只能在一个帐户上托管这些多个域或子域。

根据您描述的用例,我怀疑S3的限制也会迫使您找到另一个解决方案。

在我的案例中,解决方案是建立一个EC2实例,在重写请求后将其代理到S3。例如,如果有人请求:

http://mysite.abc.com/file.html

它通过我们的EC2服务器,在那里请求被重写并转发到S3,类似于:

http://ourbucket.s3.amazonaws.com/mysite.abc.com/file.html

更新:

有几个代理服务器可以用于此目的,但我推荐nginx,因为它在我们的情况下工作得很好。要开始,请查看以下nginx文档:

http://wiki.nginx.org/HttpRewriteModule
http://wiki.nginx.org/HttpProxyModule