PHP cgi fastcgi & php-fpm 的关系以及理解

时间:2022-10-26 16:18:40

1. cgi 是什么?

cgi 一个协议,通过这个协议可以规范指定传输的内容 (比如需要有 header post body 这些数据吧,就是规范这个传输的数据的协议)
然后 web server 如果收到的是 .html 静态文件,Apache/Nginx 会直接去寻找文件然后就返回
但是如果是一个 .php 文件,Apache/Nginx 就会知道这个不是一个静态的而是动态的,那么就回去启动对应的 cgi 程序( php 解析器 ),然后解析器会解析 php.ini 文件 ,初始化执行环境,处理请求,再以规定的 cgi 协议规范返回结果,退出进程。 web server 再把结果返回浏览器。

2.那么fastcgi是什么呢?

Fastcgi是用来提高CGI程序性能的,以上已经说了要解析 php.ini 文件初始化环境,每次这样不感觉很累么?(不闲累啊!启动进程很累的说!)所以fastcgi 就是解决这个问题的。 首先 fastcgi 会先启动一个 master 解析配置文件,初始化执行环境,然后再启动多个worker ,请求来是分配一个worker ,然后立即接受下一个请求, 忙碌是多创建一些worker 空闲时删除一些~

3.那php-fpm又是什么呢?

其实是实现fastcgi的程序,php的解析器是php-cgi 大家都知道,php-cgi只是cgi的一个程序,他自己本身只能解析请求,返回结果,但是不会进程管理,所以就出现了一些能够去管理调用php-cgi进程的程序,php-fpm也是其中一个~

小提示:更详细参考