什么是CGI服务:
HTTP服务和其机器上的其他应用服务进行通信交流的工具。
缺点:性能较差,每次HTTP服务器遇到动态程序需要重新启动解析器来执行解析,然后返回给HTTP服务器。
什么是FastCGI:
HTTP服务器和动态脚本语言间通信的接口(FastCGI接口在Linux下是socket,可以是文件socket,也可以是ip socket)。主要优点是:动态语言和HTTP服务器分离开来。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,可以提高性能。
FastCGI的应用:
如上:
FastCGI使用的是C/S架构,Nginx作为客户端,PHP程序作为服务端。
php-fpm守护进程可在php-fpm.conf中配置,php解析器在php.ini中配置。
过程:
用户通过浏览器向nginx发送后缀名为php的请求,Nginx fastcgi_pass(
FastCGI客户端)发送FastCGI请求到PHP程序(服务端),为了调用CGI程序,
需要FastCGI的 wrapper(可理解为启动另一个程序的程序),wrapper绑定
在某个固定的socket上,如unix socket和tcp scoket. Nginx将CGI请求发
送给这个socket时,通过FastCGI接口,wrapper接收到请求,派生一个新的
线程,这个线程调用解释器或外部程序处理脚本并读取返回数据,接着wrapper
将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx,Nginx再将返回
的数据发送给客户端.
什么是PHP-FPM
FastCGI管理器:
在此之前,FastCGI进程是由操作系统管理的,一旦某个FastCGI进程发生故障,就
可能危机操作系统的正常运行,FastCGI的作用就是在操作系统和FastCGI之间建立
一道围墙,从而阻断了FastCGI的故障向操作系统的传播.
PHP-FPM能够调度PHP-CGI进程:
PHP的解析器是PHP-CGI.PHP-CGI只是个CGI程序,他自己本身只能解析请求,返回结果,
不会进程管理,所以就出现里一些能够调度PHP-CGI进程的程序,而PHP-FPM就是能够调
度PHP-CGI进程的程序中的一种.