nginx如何解析php?

nginx本身不支持对外部程序的直接调用或者解析,所有的外部程序包括php必须通过FastCGI接口来调用(FastCGI接口在Linux下是socket)
为了调用CGI程序,还需要FastCGI的wrapper,当nginx将cgi请求发送给这个socket的时候,通过fastcgi接口,wrapper接收到请求,然后派生出一个线程,这个线程调用外部程序处理并返回数据;
接着,wrapper再将返回的数据通过fastcgi接口,socket传递给nginx;
最后,nginx将返回的数据发送给客户端

一、Nginx解析PHP

nginx如何解析php?

PHP-FRM是管理FastCGI的一个管理器

1.php-frm自身初始化,启动进程php-frm,监听9000端口;FastCGI子进程等待来自web服务器的连接
nginx如何解析php?
2.当客户端request到达nginx时,nginx通过location指令,将所有以.php结尾的文件都交给127.0.0.1:9000(本地php解析服务器)进行处理

        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;  #表示nginx通过fastcgi_pass将用户请求的资源发给9000端口进行解析
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;  #脚本文件请求的路径
            include        fastcgi.conf;  #表示nginx会调用fastcgi.conf这个配置文件
        }

ngx_http_fastcgi_module

3.nginx将请求fastcgi客户端,通过fastcgi_pass将用户的请求发送给php-fpm
nginx如何解析php?

4.wrapper收到php-fpm的请求后,会生成一个新的线程调用php动态程序解析服务器(如果请求是mysql数据的读取,将会触发读库操作,如果是图片、文件等,将会触发查询后端存储服务器)

5.php将查询到的结果通过fastcgi返回给nginx

6.nginx将数据返回给用户

二、如何配置nginx支持php

1.在编译安装时添加--enable-fpm 参数即可开启php-fpm

./configure --prefix=/usr/local/php/  …… --enable-fpm

2.生成php-fpm的配置文件,并修改参数

#cd /usr/local/php/etc/
cp -a php-fpm.conf.default php-fpm.conf
#vim php-fpm.conf
pid = run/php-fpm.pid
#取消注释
user = nginx
group = nginx
pm.start_servers = 2
#启动时开启的进程数(默认值)
pm.min_spare_servers = 1
#最少空闲进程数(默认值)
pm.max_spare_servers = 3
#最多空闲进程数(默认值)

2.修改nginx的配置文件,使其识别.php后缀的

#vim /usr/local/nginx/conf/nginx.conf
#取消以下几行的注释,并修改include选项的后缀位fastcgi.conf
#65行-71行
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;
        }