一、概念
首先,还得来点官方的解释。
CGI:common gateway interface 通用网关接口,它描述了客户端与程序之间传输数据的一种标准。简单来说它就是一种协议。
FastCGI:也是一种协议,是CGI的一种改进升级,实现上是一个常驻型进程,可以一直执行,在请求到来的时候不会重新fork进程去处理。
PHP-CGI:是一个程序,用来解释PHP脚本。
PHP-FPM:是一个进程管理器,只用作PHP,是PHP源码的一个补丁,将FastCGI进程整合到php包中,PHP-FPM提供了更好的PHP进程管理方式,可以有效地控制进程,平滑加载PHP配置。
明白不,一个是协议,一个是程序,一个是进程管理器,都有各自的职责,别老把人家往一起混。
二、来张图解,说说他们之间说的清道的明的关系
1,使用CGI时候的流程,为啥使用CGI会慢,就是因为它每次都要重新fork进程去处理数据,每次启动都要重新加载php.ini、重新初始化环境,每次都做费时费力的工作,能不慢么。
image.png
2,看看fastcgi是怎么改进的
人家就不像CGI进程那么傻,每次都重新开始,人家一开始就起一堆放在那,你来数据了我就让这些进程处理,处理完了就让进程呆在那等着,除了会占用内存多点,但人家效率高啊。
image.png
三、作用
1.fastcgi主要是把php语言和http server分开,所以nginx和php常常部署在不同机器上,以减轻nginx和后端的压力。
2.可以在进程不终止的情况下重新加载修改过的配置文件php.ini。
四、总结
如CGI,FastCGI也具有语言无关性。
如CGI, FastCGI在进程中的应用程序,独立于核心web服务器运行,提供了一个比API更安全的环境。(API是把应用程序的代码与核心的web服务器链接在一起,这意味着在一个错误的API的应用程序可能会损坏其他应用程序或核心服务器; 恶意的API的应用程序代码甚至可以窃取另一个应用程序或核心服务器的密钥。)
3.FastCGI技术目前支持语言有 PHP、C/C++、Java、Perl、Tcl、Python、SmallTalk、Ruby、Aardio等。相关模块在Apache,IIS, Lighttpd,Nginx等流行的服务器上也是可用的。
4.如CGI,FastCGI的不依赖于任何Web服务器的内部架构,因此即使服务器技术的变化, FastCGI依然稳定不变。