CGI、FastCGI和php-fpm是什么?它们和 Nginx 之间是什么关系?

答案

CGI,通用网关接口,用于WEB服务器和应用程序间的交互,定义输入输出规范。

用户的请求通过WEB服务器(如Nginx)转发给FastCGI进程,FastCGI进程再调用应用程序进行处理(如php解析器),应用程序的处理结果如html返回给FastCGI,FastCGI返回给Nginx 进行输出。

假设这里WEB服务器是Nginx,应用程序是 PHP,而 php-fpm 是管理 FastCGI 的,这也就是 php-fpm,FastCGI,和 Nginx 之间的关系。

FastCGI 用来提高 cgi 程序性能,启动一个master,再启动多个 worker,不需要每次解析 php.ini. 而 php-fpm 实现了 FastCGI 协议,是 FastCGI 的进程管理器,支持平滑重启,可以启动的时候预先生成多个进程。