最近有人建议我将 FastCGI 与 PHP 结合使用。现在我去了 FastCGI 页面并阅读了相关内容,但我真的不明白它有什么优势。
答案1
使用 mod_php,每个 Apache 工作进程都会加载整个 PHP 解释器。由于 Apache 需要为每个传入请求启动一个工作进程,因此您很快就会使用数百个 Apache 工作进程,每个工作进程都加载自己的 PHP 解释器,从而消耗大量内存。
(请注意,这并不完全正确,Apacheworker_mpm
允许您使用单线程 Apache 工作程序来处理许多请求。但是,即使在 2009 年,这也不是部署 PHP 的推荐方式,因为 PHP 扩展可能存在线程问题。)
通过在 fast_cgi 模式下使用 PHP(使用类似spawn-fcgi来自 lighttpd 包)具有以下优点
答案2
FastCGI 意味着 php 位不会与 apache 位在同一个进程中运行,这一点与 mod_php 不同。这种分离在重新启动服务器或处理失控应用程序时具有一些明显的优势 - 在 mod_php 的情况下,这意味着 apache 进程“失控”,但在 fastcgi 下,它只是 apache 正在与之通信的一个进程,因此不必关闭整个服务器。
答案3
另一个尚未提及的优势是,使用mod_fcgid
(这是在 Apache 上使用 FastCGI 的较新实现)和 suexec,您可以实现不同的 vhost 使用不同的 Linux 用户执行的设置,这在共享托管场景中可以带来真正的安全优势。
使用 mod_php,所有 vhost 共享同一个用户,即 Apache 的用户。这可能会导致安全问题。