PHP-FPM的全称是PHPFastCGIProcessManager,即PHPFastCGI进程管理器。要理解PHP-FPM,首先要看CGI和FastCGI的关系。CGI的英文全称是CommonGatewayInterface,即通用网关接口,是Web服务器用来调用外部程序的服务器端应用规范。早期的网络通信只是根据客户端的请求转发存储在网络服务器硬盘中的数据。),并且随着Web的发展,Web能够呈现的内容更加丰富,与用户的交互也越来越频繁,比如博客、论坛、电子商务网站、社交网络等。在这时候,只有静态资源已经不能满足Web通信的要求了。因此引入了CGI,使客户端请求可以触发Web服务器运行另一个外部程序,客户端输入的数据也会传递给这个外部程序。返回客户端(即动态请求,如基于PHP、Python、Java的应用)。CGI可用于响应用户请求,动态返回各种动态变化的信息给客户端。FastCGI,顾名思义,是CGI的升级版。它的诞生是为了提高CGI的性能。CGI会为每个HTTP请求fork一个新的进程来处理(解析配置文件,初始化执行环境,处理请求),然后再处理这个进程。结果通过web服务器转发给用户,刚刚fork出来的新进程也会退出。如果下次用户请求动态资源,web服务器会再次fork一个新的进程,以此类推。FastCGI会先fork一个master进程,解析配置文件,初始化执行环境,然后fork多个worker进程(类似Nginx)。当一个HTTP请求到来时,master进程会传递给一个worker进程,然后可以马上接受下一个请求,这样就避免了重复的初始化操作,效率自然提高了。而且,当worker进程不够时,master进程也可以根据配置预先启动几个worker进程等待;当空闲的worker进程过多时,会关闭一些,这样既提高了性能,又节省了系统资源。这样PHP-FPM就很容易理解了。FastCGI只是一种协议规范,需要在各个语言中实现。PHP-FPM是FastCGI协议的PHP版本的实现。有了它,PHP脚本和Web服务器(通常是Nginx之间的通信),同时也是一个PHPSAPI,从而在PHP解释器和Web服务器之间架起了一座桥梁。PHP-FPM负责管理一个进程池来处理来自Web服务器的HTTP动态请求。在PHP-FPM中,master进程负责与Web服务器通信,接收HTTP请求,然后将请求转发给worker进程进行处理。worker进程主要负责动态执行PHP代码,处理完成后将处理结果返回给Web服务器,然后由Web服务器将结果发送给客户端。这就是PHP-FPM的基本工作原理。PHP-FPM有自己独立的配置文件php-fpm.conf用于配置PHP-FPM。如果你有兴趣,你可以看看。
