单用户VPSpipe理教育

试图教育自己,所以我有几个问题的专家在那里。 这个VPS将运行wordpress和drupal站点。

  1. 在一个Debian LAMP堆栈的单用户VPS上,在确保文件/组所有权为user:user?的情况下,从非root用户主目录而不是/ var / www提供服务的最佳方式是什么? 我认为这是避免更改/ var / www的所有者/组的最好方法。

  2. 只有一个非root用户才需要suexec吗? 我应该用它吗?

  3. 是FastCGI的PHP使用这些日子事实上的标准,你什么时候不会?

  4. 我注意到我的VPS从mpm_worker切换到mpm_prefork时内存使用量减less了一半。 这是预期的行为? 两个MPM都在apache.conf中configuration相同的设置

每个人都需要从某个地方开始 – 只有通过尝试才能真正学会如何去做这些事情。 也就是说,仅仅因为服务器可以为您的网站服务,并不意味着它应该 – 大多数安全漏洞在被利用前往往不明显。 另外请记住,如果您的服务器遭到入侵,它不仅会影响到您,还会对互联网的所有其他用户造成不利影响。

我强烈build议从虚拟机开始(例如使用Virtualbox),以便您可以无风险地进行实验。 (另一方面,我意识到这不像把一个“活的”服务器放在一起那么激动人心,但是有一个人可以打电话给你,当事情出错的时候,这是件好事)。

在开始之前,我build议阅读保护LAMP服务器的技巧 。

并不总是只有一个正确的方法,所以,有一些点让你开始:

  1. Apache服务的path在httpd.conf中定义 – 查找DocumentRoot指令,该指令基本上定义了映射到网站根path的文件系统path。 您通常会find一个匹配的Directory块,为匹配的文件定义特定的选项,权限和行为。 我build议将HowToForge上的“完美服务器”文章作为一个很好的起点(然而,最近的文章有大量由ISPConfigconfiguration的设置 – 这对于学习来说并不理想)。

    这就是说,使用/var/www是相当普遍的做法(即使它不太适合正常的文件系统层次结构标准 ,这可能有利于/srv/www )。 您需要限制性权限 – 并拥有由root拥有的包含目录限制了如果某个帐户/站点受到攻击可能发生的损害。 我build议简单地添加/ var / www下的每个网站。 例如,一个可能的布局可能是:

    • /var/www/domain1.com – 受限用户的主目录(由该用户拥有)
      • cgi-bin – cgi脚本的目录(可能包括FastCGI包装)
      • 日志 – 符号链接到特定于站点的日志文件/ var / log /
      • tmp – 临时目录(例如用于上传,会话等)
      • public_html – 网站的文档根目录

    对文件保留权限644,对目录保留755(对可能包含密码的configuration文件使用更严格的权限)。 (您也可以将networking服务器添加到组中,具体取决于您的设置)。

  2. 你提到了多个站点(Wordpress和Drupal站点) – 最好尽可能地分开这些站点,让他们作为不同的用户运行是一个好的开始。 特定用户可以做的越less,如果一个特定的网站受到损害,那么损害就越小(这就是说,在许多这样的折衷之后尝试“修复”事情可能不是一个好主意 – 最好在这一点上重新开始 – build议阅读 )。 suExec是一个好主意,但是如果你使用PHP-FPM,你也许可以不用它(尽pipe你仍然可以在PHP-FPM中使用suExec)。

  3. mod_php比FastCGI快 – 但它不能处理负载(因为每个请求都得到一个专用的PHP解释器,你会得到速度,但内存使用量巨大)。 因此,除了最琐碎的应用程序之外,您应该使用FastCGI路线。 我build议PHP-FPM – 它是一个FastCGI进程pipe理器,具有良好的性能,大大简化了许多基本特性(如suExec)的实现。 它很容易用于5.3.3以上的PHP版本(以前的版本需要使用php-fpm补丁编译)。 在Apache方面,如果使用PHP-FPM,则可以使用mod_fastcgi并使用mod_fastcgi将请求传递到正在运行的PHP-FPM守护程序。

  4. Apache使用线程和进程来响应请求。 multithreading方法更高效,但不是所有的模块都是线程安全的。 启动更多的进程需要更多的内存,但在某些情况下可能更稳定。 每个请求都由一个线程处理。

    • mpm_prefork是旧的进程pipe理器 – 每个进程只有一个线程 – 所以每个请求都需要一个新的进程 – 这需要更多的内存。
    • mpm_worker – 新的进程pipe理器 – 启动less量进程,每个进程都有多个线程。 这应该更好地扩大和消耗更less的资源。

    有几个可能的原因,为什么你的内存可能已经下降了开关。 首先,你可能重新启动了Apache–这会终止任何现有的进程并启动新的进程。 随着时间的推移,进程将会变得越来越大,消耗更多的内存 – 新进程使用更less的内存。 其次,在httpd.conf中设置的值可能为每个进程pipe理器定义了不同的起点(例如,如果mpm_worker有更多的线程,相同数量的正在运行的进程会消耗更多的内存 – 但是,它们也会能够处理更多的请求)。 (每个进程pipe理器指令的含义都在httpd.conf中解释 – 或者你可以看到这个答案 )。

最后,如果你在低内存VPS上运行,我会build议看看Nginx而不是Apache。 Apache被广泛使用, Nginx更容易设置,使用更less的资源,通常提供更好的性能(特别是“开箱即用”)。

无论你采用什么路线,都要考虑到互联网是一个恶劣的环境 – 保持你的软件包保持最新状态(使用你的软件包pipe理器,尽量避免编译)并始终保持安全(例如避免使用FTP,而不要使用SCP)希望最好,但期望最差。