CGI(Common Gateway Interface)通用网关接口
一个HTTP POST请求,从web浏览器,发送到web服务器(nginx),请求携带的URL paths、HTTP header、POST等数据,通过CGI转化为进程的环境变量,好让PHP取到。
缺点:每个请求一个新进程,进程间通信地址空间无法共享,限制了数据库连接、内存缓存等资源的重用。
FastCGI(Fast Common Gateway Interfac)快速通用网关接口
独立常驻进程,使用了master/worker模式,可专门处理web服务器转发过来的动态请求直接返回,解放了Web服务器。
master作为进程管理器,初始化环境、解析php.ini配置文件。由于只需要启动一次,数据库连接可以长连接了。
worker作为CGI解释进程,处理实际的HTTP请求,可以根据并发量动态的增减worker数量。
PHP-FPM(PHP-FastCGI Process Manager)PHP专门的快速通用网关接口进程管理
先说下PHP-CGI,它是官方按FastCGI的标准协议实现的,不过功能不完善,性能太差(没有进程管理等),一个叫Andrei Nigmatulin开发的第三方的PHP-FPM吊打了PHP-CGI,于是5.4之前他俩合作了,5.4之后新增内核补丁加入了PHP-FPM,顺便加了自己的解释器。
他俩的关系 | php-cgi |
php-fpm
|
<5.4版本 | 解释器 | 进程管理 |
>=5.4版本 | 解释器 | 进程管理+解释器 |
PHP-FPM主要是把FastCGI进程管理器整合到PHP中,其中还对PHP增加一些:平滑更新php.ini、慢日志、fastcgi_finish_request(web页面在服务器挂起)等特性。
参考文章: