什么是CGI
CGI(Common Gateway Interface),中文全称为 “通用网关接口”,用于HTTP服务器与其他机器上的程序服务通信交流的一种工具,CGI程序须运行在网络服务器上。 传统的CGI性能较差,应对高并发几乎不可用,所以就诞生了FastCGI。
什么是FastCGI
FastCGI是一个可伸缩、高速地在HTTP服务器和动态脚本语言间通信的接口,主要优点是把动态语言与HTTP服务器分离开来。
FastCGI特点:
- FastCGI是HTTP服务器和动态脚本语言间通信的接口或者工具
- 可把动态语言解析和HTTP服务器分离开来
- Nginx、Apache、Lighttpd以及多数动态语言都支持FastCGI
- FastCGI接口方式采用C/S结构,分为客户端(HTTP服务器)和服务器端(动态语言解析服务器)
- PHP动态语言服务器端可启动多个FastCGI的守护进程(如php-fpm)
- HTTP服务器通过FastCGI客户端(如Nginx fastcgi_pass)和动态语言服务器端(如php-fpm)通信
Nginx FastCGI运行原理
Nginx结合PHP FastCIG运行流程:
- Nginx将通过Socker将CGI请求发送给PHP服务器的wrapper
- PHP服务器wrapper接到请求后,派生出一个新的线程负责调用解释器或者外部程序处理脚本来读取返回的数据
- PHP服务器wrapper将将返回的数据通过FastCGI接口沿固定Socket传递给Nginx
- Nginx将FastCGI返回的数据发送给客户端
Nginx结合PHP FastCGI运行原理图: