Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用AWS服务动态创建子域以承载S3上的站点_Php_Api_Amazon Web Services_Amazon S3_Amazon - Fatal编程技术网

Php 使用AWS服务动态创建子域以承载S3上的站点

Php 使用AWS服务动态创建子域以承载S3上的站点,php,api,amazon-web-services,amazon-s3,amazon,Php,Api,Amazon Web Services,Amazon S3,Amazon,信息:我正在开发一个内置于php的应用程序,它可以帮助用户创建HTML模板并将其发布到web上。由于模板是静态的,我考虑使用amazon S3来存储它们,因为它可以承载静态网站,并且具有良好的应用程序整体基础设施。br/> 查询:我在将其发布到web时遇到了一个问题。我希望将模板发布为我域上的子域,例如:我拥有www.ABC.com,我要求用户命名模板,如果他将其命名为mysite,我将其模板发布为mysite.ABC.com(适用于所有用户)。现在,我可以使用aws S3 api中的putOb


信息:我正在开发一个内置于php的应用程序,它可以帮助用户创建HTML模板并将其发布到web上。由于模板是静态的,我考虑使用amazon S3来存储它们,因为它可以承载静态网站,并且具有良好的应用程序整体基础设施。br/>

查询:我在将其发布到web时遇到了一个问题。我希望将模板发布为我域上的子域,例如:我拥有www.ABC.com,我要求用户命名模板,如果他将其命名为mysite,我将其模板发布为mysite.ABC.com(适用于所有用户)。现在,我可以使用aws S3 api中的
putObjectFile
将模板存储在S3 bucket中,但我不确定如何创建子域(动态)并将其发布到该域中。(我想为用户自动化该过程)。另外,我可以使用API将bucket设置为托管静态网站吗?
早些时候,我使用了cpanel,cpanel API允许我们创建域并使用内容对域进行FTP,我不清楚如何在这里实现

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

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


感谢您的关注

我不久前研究了一个类似的场景,但由于S3的限制,我无法使用S3

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

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

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

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

这将通过我们的EC2服务器,在那里请求被重写并转发到S3,如下所示:

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

更新:

有几种代理服务器可以用于此目的,但我建议使用nginx,因为它在我们的案例中工作得非常好。要开始,请查看以下nginx文档:



您正在寻找路由53()?我有路由53的基本知识,但我希望能够创建域。路由53允许我创建域吗?我没有找到任何与之相关的API。可能是这样:?路由53的PHP2 SDK参考如下:顺便说一句,您不必使用AWS进行DNS操作。如果您的主机允许您更改域的DNS设置,则您可以改为使用该设置。你所需要做的似乎就是将你的域名指向bucket。谢谢你指出了它的局限性!正如你所说的,我需要做一个代理,但是你能详细说明我是如何实现它的吗?我还是一个在云和aws方面工作的新手!我更新了我的原始答案,添加了nginx文档的链接,因为您可以使用此服务器代理请求。此设置不特定于云或aws,代理和重写任何后端服务器的请求也是一样的。这些文档将帮助您入门,但您可能需要对此进行更多研究,并在此处或服务器故障上发布其他特定问题,如果您在某个特定问题上遇到困难。为了确保我的做法是否正确,早些时候我使用cpanel及其服务(API)创建子域(动态)通过FTP传输文件。你强调的方法更好还是我可以用这个方法?当然,我还没有在Amzon上的cpanel,bt,这可能是另一个问题!在你的情况下,我建议的方法未必更好。这取决于你的需要和经验。每种方法都有优缺点。作为将数据直接存储到S3和使用此代理方法的优势,我要提到的是,您的EC2实例不需要连接到它的持久性存储(EBS),S3具有出色的数据持久性和可靠性,您的服务器上的负载可能会比使用cPanel时更小,因此您可能会使用更便宜的实例,并且与使用cPanel相比,在多台服务器之间更容易实现负载平衡。我正在仔细阅读您的建议,但是这个功能在速度上会很快吗?因为创建子域需要时间,我不希望用户等待结果传播!!你说这是使用AWS和AmazonEC2的最佳方式吗?我已经接受了你的回答,并将在需要帮助时发布任何具体问题(我相信我肯定会需要它)