nginx 与php是怎样交互的

要想了解是怎么交互的,首先需要了解几个概念,什么是cgi,fastcgi,php-fpm.

cgi 是一个网关接口协议,你就认为就是web server 交互的一种协议,和http协议一样,就是规定某些东西怎么交互,fast-cgi也是一种协议,是对cgi协议的升级,你可以按上边的说法理解!php-fpm你简单理解就是对fast-cgi协议的实现!

下边首先看下nginx 和php-fpm进程是怎样的

nginx的进程 是master-work的工作模式:

php的进程也是master-work的进程模式

两个服务启动之后是怎么发送直接的数据的呢?

nginx的配置文件中有一段配置php的代码,大家应该都看到过:

这里会看到好多fastcgi开头的配置,这里都是配置与php交互用的参数和信息,fastcgi_pass 这里指定了与php-fpm交互的地址和端口,有两种交互方式,一个ip+端口,一个是文件方式,下边的fastcgi_params 是包含php与nginx交互的所有变量,nginx中默认了很多,另外,你也可以自己添加,例如最后两行!看看nginx中内置的fastcgi_params变量:

这些是nginx内置的,在两个交互的时候,nginx就会发送这些变量给php,他俩的交互就是tcp连接的交互一样,按着协议的格式封装成流,从nginx 发送到php-fpm中,php-fpm接收到参数进行解析,找到对应的php入口函数进行后续的处理,php处理完成之后,原路发会给nginx,nginx返回客户端,流程完毕!