菜鸟学习php过程中在nginx服务器配置中看到fastcgi,本着追根求底的态度查询相关资料终有所获。分享此文,希望学习路上与君共勉。
什么是CGI
1.当server收到一个php的请求时,会启动一个程序去处理当前的请求,而这个程序就是CGI。
2.CGI会查看phpini的配置并载入、初始化进程并处理请求,这个过程在每一次处理php请求时都会发生,所以会造成严重的资源开销
3.CGI的中文含义是通用网关接口,也就是说只要能够返回标准html数据的服务都可以叫做CGI。所以CGI不单单是php才有的东西
什么是PHP-CGI
php-cgi只是解释PHP脚本的程序而已
什么是fastCGI
因为上面第一条的问题,当请求量过大时CGI程序会严重浪费系统资源的。PHP解析器会解析php.ini文件初始化执行环境,因为每个CGI程序都会去请求执行初始化,这样浪费了大量的时间。
这样fastcgi就是为了解决这个问题。fastcgi会提供这样的功能:
首先fastcgi会先开启一个master解析配置文件,初始化执行环境,然后启动多个worker。当请求过来时master会传递给一个worker去处理然后继续接受下一个请求。这样就避免了每次请求过来都需要初始化配置环境的这个过程,效率大大提高。
而且在worker不够用时,master会根据服务器配置多创建几个worker用来处理请求。当worker闲置时也会对应的回收几个worker。在提升效率的同时也提升服务器的利用率。
什么是php-fpm
用来实现fast-cgi的操作
“php-fpm是fastcgi进程的管理器,用来管理fastcgi进程的”,这句话可以理解成php-fpm就是能够实现fastcgi功能的程序,他目前由php官方集成到php内核中。所以就是如果要实现cgi的进程池功能就需要使用php-fpm