CGI就是一套接口规则,它用于HTTP服务器和动态处理程序之间的通讯方式的确立。FastCGI可以算是CGI的一种实现,它通过让CGI处理程序常驻进程,让一个CGI进程可以处理多个请求,减少了反复启动CGI程序的时间和资源的消耗。 php-cgi就是一个用来提供PHP程序处理的FastCGI。php-fpm(FastCGI Process Manager)则是在FastCGI程序之上来管理FastCGI进程的管理工具。php-cgi是单进程的,开启一个php-cgi来处理请求时,一次只能处理一个请求,其余请求时排队的。php-fpm则管理多个FastCGI进程,让请求可以并行发送到多个FastCGI进程同时处理。可以简单的理解为php-fpm管理着多个php-cgi 举个简单的例子,一个请求从客户端发送到Nginx服务器再由PHP程序处理的过程: 请求发送到Nginx服务器,Nginx服务器根据配置将其发送到php-fpm,然而Nginx和php-fpm是两家公司的产品,他们如果确保相互之间能读懂对方发送的信息内容的?这就是因为他们在设计时都遵循了CGI的规则。 php-fpm收到请求后,会在自己所管理的FastCGI进程中找到一个空闲的进程,来处理这个请求 另外Nginx也可以对接php-cgi,不过php-cgi没有进程管理模块,而就是单进程的。
这里也有讨论:尹川 总结来说:Fastcgi是CGI的升级版,一种语言无关的协议,用来沟通程序(如PHP, Python, Java)和Web服务器(Apache2, Nginx), 理论上任何语言编写的程序都可以通过Fastcgi来提供Web服务。 Fastcgi的特点是会在一个进程中依次完成多个请求,以达到提高效率的目的,大多数Fastcgi实现都会维护一个进程池。 用go语言简单实现下fastcgi(没有进程管理): 配置nginx
CGI就是一套接口规则,它用于HTTP服务器和动态处理程序之间的通讯方式的确立。
FastCGI可以算是CGI的一种实现,它通过让CGI处理程序常驻进程,让一个CGI进程可以处理多个请求,减少了反复启动CGI程序的时间和资源的消耗。
php-cgi就是一个用来提供PHP程序处理的FastCGI。
php-fpm(FastCGI Process Manager)则是在FastCGI程序之上来管理FastCGI进程的管理工具。
php-cgi是单进程的,开启一个php-cgi来处理请求时,一次只能处理一个请求,其余请求时排队的。
php-fpm则管理多个FastCGI进程,让请求可以并行发送到多个FastCGI进程同时处理。
可以简单的理解为php-fpm管理着多个php-cgi
举个简单的例子,一个请求从客户端发送到Nginx服务器再由PHP程序处理的过程:
请求发送到Nginx服务器,Nginx服务器根据配置将其发送到php-fpm,然而Nginx和php-fpm是两家公司的产品,他们如果确保相互之间能读懂对方发送的信息内容的?这就是因为他们在设计时都遵循了CGI的规则。
php-fpm收到请求后,会在自己所管理的FastCGI进程中找到一个空闲的进程,来处理这个请求
另外Nginx也可以对接php-cgi,不过php-cgi没有进程管理模块,而就是单进程的。