php-cgi, FastCgi 与 php-fpm 之间的关系 这篇文章的总结:

  • CGI 是 web server 和解释程序间的通信标准, 或者说协议, 包括对 HTTP 请求头和请求数据的标准化处理;
  • php-cgi 是 PHP 的自带 CGI 解释器;
  • FastCGI 是用于提高 CGI 性能的增强协议, 主要改良在于允许一个进程处理多个 HTTP 请求 (而不是对每一个请求 fork 一个进程);
  • php-fpm 一个用 PHP 实现了 FastCGI 协议的解释程序, 目前集成在 PHP 标准安装中;

因此, 对于 PHP 来说, 如果使用 php-cgi 解释器, 那么处理每一个 HTTP 请求需要生成 (new) 一个解释器进程 (process), 专门用于处理这个请求, 该进程在请求结束后会终止 (terminated).

因为 CGI 的瓶颈局限, 当前更常见的是 php-fpm 解释器, php-fpm 是一个实现 FastCGI 的解释程序, 会生成一个主进程常驻内存, 由主进程生成一个主进程 (master), 并以该主进程为基础生成若干子进程 (worker), 每个子进程可以单独处理请求, 并在请求结束后不被终止.

在 PHP 5.4 之前, php-fpm 的工作原理只是对 php-cgi 进程进行调度, 在 PHP 5.4 之后, php-fpm 已经集成了 CGI 解释器, 可以独立于 php-cgi 工作.