聊一聊CGI、FastCGI及FPM

CGI是什么

CGI全称通用网关接口。通用网关接口(Common Gateway Interface)是一种重要的互联网技术,可让一个客户端,从网页浏览器向服务器上的程序请求数据。CGI描述了服务器和请求处理程序之间传输数据的一种标准。— 维基百科php

说的简单点,所谓CGI其实就是定义了服务器(如nginx)和处理程序(如PHP)之间该如何进行数据交互的标准。若是没有这个标准,服务器按照本身的方式把数据传给处理程序,那处理程序该如何识别,因此提供了一种各种服务器和各个处理程序都认同的的协议,规定了哪些数据该传递,以什么样的方式传递。nginx

那所谓的数据,又是什么?web

这里的数据我认为应该分红两部分。第一部分是:服务器传递给处理程序,这个时候会传递如urlrequest bodyrequest header等信息,PHP解析器(php-cgi)拿到这些信息,进行程序内部的处理。第二部分是:处理程序把响应数据回传给服务器,这个时候的数据就会是response等响应信息、服务器拿到数据后,经过cgi解析,处理完成后,返回给客户端。浏览器

CGI就那么完美吗?服务器

答案固然是否认的,每一次的web请求,实现了CGI的进程都会fork一个进程进行处理,当请求处理完以后,就要关闭,这样频繁的对进程进行建立销毁,效率低、处理速度慢,并且当链接数一多,过多的进程就会消耗更多的资源和内存。url

FastCGI是什么

FastCGI从根本上来讲其实相似于cgi,也是与语言无关的一种协议。是为了解决cgi的频繁建立销毁形成的资源浪费、才孕育而生了FastCGI。code

FPM又是什么

FPM或者说是PHP-FPM,官方对FPM的解释是Fastcgi Process Manager(Fastcgi 进程管理器)。在说FPM以前就不得不先说一下,PHP官方推出的php-cgi.cdn

php-cgi虽然是官方出品,可是当修改php.ini文件后,须要重启php-cgi,并且php-cgi不支持平滑重启。blog

PHP-FPM是非官方出品的,是从php5.3以后加入的,它是对FastCGI协议的具体实现,负责一个进程池来管理web服务器的请求。接口

CGI、FastCGI、PHP-CGI和PHP-FPM关系图

CGI、FastCGI、PHP-CGI和PHP-FPM关系图

相关文章
相关标签/搜索