PHP:FastCGI 与 mod_php 相比有哪些优势?

cle*_*tus 31 php performance fastcgi mod-php apache-2.2

最近有人建议我在 PHP 中使用 FastCGI。现在我去了 FastCGI 页面并阅读了它,但我真的不明白它的优点是什么。

Dav*_*ney 38

使用 mod_php,每个 Apache 工作人员都将整个 PHP 解释器加载到其中。由于 Apache 每个传入请求需要一个工作进程,因此您很快就会使用数百个 Apache 工作进程,每个工作进程都加载了自己的 PHP 解释器,从而消耗大量内存。

(注意,这并不完全正确,Apacheworker_mpm允许您使用一个单线程的 Apache 工作线程处理多个请求。但是,即使在 2009 年,这也不是部署 PHP 的推荐方式,因为 PHP 扩展可能存在线程问题。)

通过在 fast_cgi 模式下使用 PHP(使用lighttpd 包中的spawn-fcgi 之类的东西)有以下好处

  • 根据传入连接数分别调整 PHP 工作线程数
  • 允许您将 PHP 工作人员放在不同的服务器上,或者在不更改 Web 层的情况下跨多个服务器进行扩展
  • 使您可以灵活地选择不同的 Web 服务器,例如nginxlighttpd
  • 允许您在 Web 服务器上的不同安全域中运行 PHP 应用程序


pjz*_*pjz 5

FastCGI 意味着 php 位与 apache 位不在同一进程中运行,与 mod_php 不同。当涉及到重新启动服务器或处理失控的应用程序时,这种分离可以有一些明显的优势——在 mod_php 的情况下,这意味着它是“失控”的 apache 进程,但在 fastcgi 下,它只是一个 apache 正在与之交谈的进程,所以不必关闭整个服务器。


Mar*_* C. 5

尚未提及的另一个优点是,使用mod_fcgid(这是在 Apache 上使用 FastCGI 的较新实现)和 suexec,您可以实现不同虚拟主机使用不同 Linux 用户执行的设置,这在共享托管场景中可能是真正的安全优势。

使用 mod_php,所有虚拟主机共享同一个用户,即 Apache 的用户。这可能会导致安全问题。