我正在考虑设置一个 AWS 微实例,我可以从中运行许多不同的、不相关的网站。
我在共享主机上遇到的一个问题是,我的一些客户运行 Wordpress 网站,这些网站有时不会像我希望的那样及时更新到最新版本,从而使他们容易受到安全漏洞的攻击。以前,当其中一个 Wordpress 网站遭到入侵时,我共享主机上的所有其他网站都会受到影响,包括非 Wordpress 网站。
如果它再次发生,我至少想控制它。有没有一种方法,在一个 Linux 实例上,我可以拥有多个 PHP“用户”(非常宽松地使用该术语),每个用户都具有不高于网站根级目录的读写权限?
我已经看到了有关OpenVZ的建议,但这似乎会对性能产生很大的影响而收效甚微。
抱歉,如果以前有人问过这个问题 - 这是那些难以简洁地用于谷歌搜索的事情之一,但又足够明显,以至于以前一定有人问过同样的事情。
您可以使用文件权限在单个虚拟机(EC2 实例)上隔离事物。您可以拥有单独的 PHP 池,并且它们可以根据本DO 教程以不同的用户身份运行。该教程几乎是您需要做什么的指南,并且可能会比使用 ECS 更好。
您应该查看t2 instances, t2.micro 可能有点小,有多个池,但小型或中型可能适合您。当然,您必须进行一些测试。您可以将虚拟内存添加到 EC2 实例,但也有缺点,特别是因为磁盘在 t2 实例上跨网络。其他实例类型具有本地磁盘,上一代 M3/C3 实例,但您可能最好使用具有足够 RAM 的 t2 或当前一代实例。
或者查看AWS EC2 容器服务,也就是托管 docker。这将使您将事物完全分开,但代价是运行多个资源密集型应用程序副本,例如使用大量内存的 PHP。微型实例可能不会适用于许多容器,但t2.large或类似的可能是合适的。
更新 - 后续问题 Nginx 是一个快速、高效的 Web 服务器和反向代理,它使用非常少的内存并且相对容易配置。Apache 更大,可用的模块更多,但使用的资源更多。
我在 t2.nano 上托管了 5 个网站和 MySQL,但我偶尔会用完 RAM 进行大的 yum 更新。t2.micro 最初可能适合您,但这取决于您拥有多少 PHP 池 - 它们可能会占用大量内存。我有一个关于如何配置 MySQL 以使用最少 RAM 的指南。从免费层上的 t2.micro 和 RDS 服务开始,这样您的数据库就可以在单独的机器上运行,从而节省 RAM。如果由于 RAM 要求而不得不增加更大的实例大小,请不要感到惊讶。
来自评论 @tero Kilkanen 的更新指出了以下非常有价值的观点