PHP:FastCGI 相对于 mod_php 有哪些优势?

PHP:FastCGI 相对于 mod_php 有哪些优势?

最近有人建议我将 FastCGI 与 PHP 结合使用。现在我去了 FastCGI 页面并阅读了相关内容,但我真的不明白它有什么优势。

答案1

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

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

通过在 fast_cgi 模式下使用 PHP(使用类似spawn-fcgi来自 lighttpd 包)具有以下优点

  • 分别调整 PHP 工作进程的数量和传入连接的数量
  • 允许你将 PHP 工作程序放在不同的服务器上,或者在不改变 Web 层的情况下跨多台服务器进行扩展
  • 让您可以灵活地选择不同的 Web 服务器,例如nginx, 或者lighttpd
  • 允许您在 Web 服务器上的不同安全域中运行 PHP 应用程序

答案2

FastCGI 意味着 php 位不会与 apache 位在同一个进程中运行,这一点与 mod_php 不同。这种分离在重新启动服务器或处理失控应用程序时具有一些明显的优势 - 在 mod_php 的情况下,这意味着 apache 进程“失控”,但在 fastcgi 下,它只是 apache 正在与之通信的一个进程,因此不必关闭整个服务器。

答案3

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

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

相关内容