php-fpm 就是fastCGI进程管理器

1、Web Server启动时载入FastCGI​​进程管理器​​(IIS ISAPI或Apache Module)

2、FastCGI进程管理器自身初始化,启动多个CGI​​解释器​​​进程(可见多个​​php​​-cgi)并等待来自Web Server的连接。

3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI​​环境变量​​和标准输入发送到FastCGI子进程php-cgi。

4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI​​进程管理器​​​(运行在Web Server中)的下一个连接。 在CGI模式中,​​php​​-cgi在此便退出了。

在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。


重点:每一个子进程CGI中, 每个进程内部都嵌入了一个PHP解释器

工作流:请求->nginx->php-fpm->fastcgi(worker