个人而言,虽然Lighttpd不错,但如果你选择一个轻量级的web服务器+FastCGI解决方案,我会选择Nginx + FastCGI。我已经运行了基准测试并阅读了所有代码,Nginx在负载下的速度/稳定性比Lighttpd快上一个数量级--非常不错。
但这不是你所问的。基本上,我认为你列出的三个选项中有一个安全性/可伸缩性与速度权衡的光谱,你只需要决定自己想要在哪里。如果你是一个共享主机提供商,有不受信任的用户安装各种PHP应用程序,你会更倾向于安全性;如果这是共享给更受信任的用户使用,你可能会更倾向于性能。以下是我的想法:
CGI + suexec:这是迄今为止最安全、在共享主机环境中对于用户/站点数量最有效/可伸缩的方法。进程仅在请求到来时生成和使用内存。当然,CGI生成使得每个脚本的执行时间变慢。有多慢?好吧,你得进行基准测试,但通常情况下,如果人们运行长时间运行的应用程序(例如需要0.25-0.5秒才能加载其库并在每个请求上初始化的WordPress),那么CGI生成惩罚在这种情况下看起来相当可忽略。
FastCGI: 这里的问题(无论您使用的是Apache、Lighttpd还是Nginx)是确定每个用户可以运行多少FCGI子进程,因为每个进程占用的内存大小等于PHP解释器的大小(在Linux中,其中并非全部都被固定,但我偏离了重点)。而且,与mod_php不同,这些进程不会在用户之间共享,因此必须对每个用户进行限制。例如,Dreamhost为其客户设定了3个上限-现在,对于一个网站每秒获得超过2-5个页面浏览量的客户来说,这实际上是相当糟糕的,因为这些请求只会堆积起来,导致网站挂起。现在,当我在运行应用程序时,我喜欢在专用服务器/集群上使用轻量级web服务器和FastCGI,因为我可以给应用程序提供数百个FCGI子进程(所有这些子进程都具有web服务器特权,当然,就像Apache/prefork + mod_php一样)。但是,在需要为每个用户分配/限制FCGI子进程的共享托管环境中,我认为这并不明智。
Apache + mod_php: 它最不安全,因为所有东西都以web服务器特权运行,但您的PHP进程池是共享的,因此它在性能方面效果最佳。从开发者的角度来看,我无法容忍php_safe模式,而从系统管理员的角度来看,它实际上只是安全的幻象(它可以防止愚蠢的用户,但不能保护免受实际攻击),因此如果我的其他选择必须包括safe_mode,我实际上更希望使用CGI。
Dreamhost采用了一种混合型方法,他们默认使用Apache CGI + suexec,但让他们中小部分更为复杂的用户可以选择使用FCGI(限制并监控其内存使用情况)。这与默认为所有人启用FCGI相比,可以节省大量的内存资源。
如果你在谈论标准商业共享主机,则另一个问题是,Apache是功能齐全的,具有几乎任何模块(包括您可能需要的mod_security等内容),而且用户会喜欢它,因为所有他们的.htaccess配置将起作用等。如果使用其他东西进行安装Drupal或WordPress等操作时,您将遇到支持方面的麻烦(如果我们谈论内部用户,则这不是很大的问题)。
个人建议开始时保持简单,使用CGI + suexec以获得最佳安全性和可扩展性。如果用户想要FCGI或mod_php,并且您与他们保持着良好的沟通,他们会提出要求,但是对于您来说,两者都会带来更大的麻烦,而对于他们来说,仅有微小的性能改进,因此我的建议是最初不要使用它们,但如果用户要求,要及时响应。
我理解您想做一些“有趣”的事情,例如使用Lighttpd + FCGI而不是标准的Apache + CGI + suexec,但实际上我不能推荐它。
如果您运行多个服务器,则可以在某些服务器上放置CGI,而在其他服务器上为高级用户提供其他选择。一定要让cron检查所有www目录中的旧版本phpBB之类的东西!