CGI(Common Getway Interface)
HTTP服务器与后端服务器或其他机器上的程序进行通信的一种工具,CGI程序必须运行在网络服务器上
缺点:性能较差(每次HTTP服务器遇到动态程序都需要重新启动脚本解析器来执行解析,然后返回结果给HTTP服务器),安全性能也表较差
FastCGI
可伸缩的,高速地在HTTP服务器和动态脚本语言通信的接口,主要优点就是把动态语言(php)和HTTP Server(nginx)分离开
FaseCGI接口采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后得到结果返回给浏览器。这种方式让HTTP服务器专一的处理静态请求或者将动态脚本服务器的结果返回给客户端
1.HTTP server和动态脚本语言间的通信的接口
2.FastCGI有点是把动态语言和HTTP server分离开来
3.Nginx以及其他多数动态语言都支持FastCGI
4.FastCGI接口方式采用C/S
5.PHP可以启动多个FastCGI的守护进程(php-fpm)
PHP-CGI
PHP自带的FastCGI管理器
PHP-FPM
FastCGI管理器,只用于PHP
其实是PHP源代码的一个补丁,目的在于将FastCGI进程管理整合到PHP包中,PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程,可以平滑重载PHP配置
nginx,FastCGI运行原理
nginx不支持外部程序的直接调用或者解析,所有外部程序必须通过FastCGI接口来调用,FastCGI在linux下是socket(socket可以是文件socket也可以是ip socket),为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另外一个程序的程序),这个wrapper绑定在某个固定socket上,当nginx将CGI请求发送给socket的时候,通过FastCGI接口,wrapper接纳到请求,然后派生出一个新的线程,这个线程调用解析器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给nginx;最后,nginx将返回的数据发送给客户端