概述

CGI,通用网关接口,

用于WEB服务器和应用程序间的交互,定义输入输出规范,

用户的请求通过WEB服务器转发给FastCGI进程,

FastCGI进程再调用应用程序进行处理,如php解析器,应用程序的处理结果如html返回给FastCGI,FastCGI返回给Nginx 进行输出。

假设这里WEB服务器是Nginx,应用程序是 PHP,而 php-fpm 是管理 FastCGI 的,这也就是 php-fpm,FastCGI,和 Nginx 之间的关系。

FastCGI 用来提高 cgi 程序性能,启动一个master,再启动多个 worker,不需要每次解析 php.ini.

而 php-fpm 实现了 FastCGI 协议,是 FastCGI 的进程管理器,支持平滑重启,可以启动的时候预先生成多个进程。

协议模式

协议模式定义用途备注
CGI通用网关接口(Common Gateway Interface)用于WEB服务器和应用程序间的交互,定义输入输出规范用户的请求通过WEB服务器转发给Fast-CGI进程
Fast-CGICGI模式的升级版用来提高 CGI 程序性能启动一个master,再启动多个 worker,不需要每次解析 php.ini
PHP-Cli命令行模式-在控制台输入php xx.php 就能执行php代码
PHP-FPM-Fast-CGI 的进程管理器实现了 Fast-CGI 协议,支持平滑重启,可以启动的时候预先生成多个进程
PHP-应用程序-
NGINX-WEB服务器-

Fast-CGI的工作原理

web服务器fast-cgi进程管理器初始化->预先fork n个进程

用户请求->web服务器接收请求->交给fast-cgi进程管理器->fast-cgi进程管理区接收,给其中一个空闲fast-cgi进程处理->处理完成,fast-cgi进程变为空闲状态,等待下次请求->web服务器接收内容->返回给用户。

PHP-FPM的工作原理

php-fpm启动->生成n个fast-cgi协议处理进程->监听一个端口等待任务

用户请求->web服务器接收请求->请求转发给php-fpm->php-fpm交给一个空闲进程处理->进程处理完成->php-fpm返回给web服务器->web服务器接收数据->返回给用户。