什么是CGI?
早期的web server只可以处理简单的静态web文件,但是随着技术的发展出现动态语言如PHP,Python。PHP语言交给PHP解析器进行处理,但是处理之后如何和web server进行通信呢?
为了解决不同的语言处理器与web server之间的通讯,出现了CGI协议。只要按照CGI协议编写程序,就可以实现与语言解析器与web server之间的通讯。
CGI协议虽然解决了语言解析器和seb server之间通讯的问题,但是它的效率很低。因为web server每收到一个请求都会创建一个CGI进程,PHP解析器都会解析php.ini文件,初始化环境,请求结束的时候再关闭进程。对于每一个创建的CGI进程都会执行这些操作。所以效率很低。

什么是FastCGI?
FastCGI是用来提高CGI性能的,FastCGI每次处理完请求之后不会关闭掉进程。而是保留这个进程,使这个进程可以处理多个请求。这样的话每个请求都不用再重新创建一个进程了。大大提升了处理效率。

什么是PHP-FPM?
PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)是一个实现了Fastcgi的程序,并且提供进程管理的功能。进程包括master进程和worker进程。master进程只有一个,负责监听端口,接受来自web server的请求。worker进程一般会有多个,每个进程中会嵌入一个PHP解析器,进程PHP代码的处理。