nginx本身不支持对外部程序的直接调用或者解析,所有的外部程序包括php必须通过FastCGI接口来调用(FastCGI接口在Linux下是socket)
为了调用CGI程序,还需要FastCGI的wrapper,当nginx将cgi请求发送给这个socket的时候,通过fastcgi接口,wrapper接收到请求,然后派生出一个线程,这个线程调用外部程序处理并返回数据;
接着,wrapper再将返回的数据通过fastcgi接口,socket传递给nginx;
最后,nginx将返回的数据发送给客户端
一、Nginx解析PHP
PHP-FRM是管理FastCGI的一个管理器
1.php-frm自身初始化,启动进程php-frm,监听9000端口;FastCGI子进程等待来自web服务器的连接
2.当客户端request到达nginx时,nginx通过location指令,将所有以.php结尾的文件都交给127.0.0.1:9000(本地php解析服务器)进行处理
ngx_http_fastcgi_module
3.nginx将请求fastcgi客户端,通过fastcgi_pass将用户的请求发送给php-fpm
4.wrapper收到php-fpm的请求后,会生成一个新的线程调用php动态程序解析服务器(如果请求是mysql数据的读取,将会触发读库操作,如果是图片、文件等,将会触发查询后端存储服务器)
5.php将查询到的结果通过fastcgi返回给nginx
6.nginx将数据返回给用户
二、如何配置nginx支持php
1.在编译安装时添加--enable-fpm 参数即可开启php-fpm
2.生成php-fpm的配置文件,并修改参数
2.修改nginx的配置文件,使其识别.php后缀的