我有一个Symfony2 PHP应用程序,其中每个用户都有自己的子域。目前,它只是作为没有虚拟主机的默认Apache主机运行。当有人访问他们的子域时,它显然会调用主应用程序,它看起来就像它在虚拟主机中的安装一样。
现在,应用程序正在发展,一些用户需要其他功能,包括运行自己的域别名和在这些别名上安装SSL证书。我也开始更多地考虑系统中每个用户的子域的安全性。我认为向前迈出的逻辑步骤是为每个用户提供他们自己的虚拟主机。最终,这些虚拟主机应具有对主应用程序的读访问权限,对其自己的文件夹的读/写访问权限以及上载和有限的系统资源。我正在寻找CloudLinux来解决最后一个问题。
我对于运行哪个Web服务器很灵活,只要它运行良好且相对安全。有人能指出我正确的方向来创建一个允许PHP在Web服务器中自动创建和编辑虚拟主机并创建/编辑SSL证书和域别名的设置吗?
这不是一段特定代码的问题,而是一个最佳整体方法的问题。
答案 0 :(得分:2)
我不确定你在说什么类型的应用程序,但是当你提到SSL证书时,我认为有明智的数据。
这是一个棘手的问题,它在很大程度上取决于您希望授予客户的权利(即运行自己的脚本/捆绑包甚至SSH访问权限)或者数据的合理程度。
完整指南不是stackoverflow的用途,并且存在太多方法和工具来解决这种情况。
最好的办法是为所有客户提供自己的(v)服务器。
通过在其他一些小帮手和正确的工作流程中使用厨师或木偶等配置工具......您可以立即设置这些服务器,并且能够像单个服务器一样轻松地维护它们。
您甚至可以动态创建新的服务器实例。
即使您的所有客户端都运行相同的应用程序并且仅具有Web访问权限,但在同一服务器上运行它们时总是存在很高的安全风险。
基本上,如果应用程序存在一个真正的安全问题 - 您的所有客户端很可能会受到影响并且很容易被利用。 (确定在同一IP地址上运行的所有域并不需要太多)
只要您没有针对每个应用程序的不同用户以及每个应用程序的自己的PHP(父)进程/池(即php-fpm
)...就可以轻松访问其他应用程序的配置,文件,数据库(,...)。
会话信息,临时上传目录(,...)很容易在这些应用程序之间公开......
特别是在采用操作码缓存(即Zend Opcache或APC)或用户缓存(即APCu)的情况下,这些应用程序之间可能存在干扰,并且由于PHP(父)进程具有严重的安全问题访问ie即所有其他应用程序的缓存。
在symfony2的上下文中,我正在谈论即暴露容器配置缓存或学说查询缓存。
抛开MySQL(不可能为不同的数据库分离慢查询日志文件,每个应用程序只有一个进程),这些进程需要大量的RAM,客户数量越来越多,而且无数的事情需要考虑。你可以从
开始使用ie-php-fpm,网络服务器只需要访问公共资产,而不需要访问单个php文件。
Web服务器将代理对php进程的请求,该进程本身只需要对大多数文件的读访问权以及对upload-folder,session-save-path,log-folders,cache-dirs(,.. 。))。
我并不是说这是不可能实现的......但这不是一件容易的事,你应该真的知道自己在做什么。
帮自己一个忙:
正如我们所说的symfony2应用程序 - 专业开发人员/自由职业者通常收取80美元/小时以上的费用......向客户收取他们自己(云)服务器实例的少量/月费用!