LNMP架构十八(Nginx解析PHP相关配置)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sj349781478/article/details/84998900

十八、Nginx解析PHP相关配置

Nginx介绍(https://blog.csdn.net/sj349781478/article/details/84953766

PHP的介绍(https://blog.csdn.net/sj349781478/article/details/84879828

Nginx与PHP今天不是独立存在,它们之间需要发生点关系,姿势较丰富,请耐心欣赏。

1、what's FastCGi

     FastCGI是一个可伸缩,高速的在HTTP server和动态脚本语言间通信的接口。FastCGI支持多种脚本语言和HTTP server。
     FCGI是由CGI发展改进而来的。传统的CGI接口方式的性能很差。每次HTTP服务器遇到动态程序时都需要重新启动脚本解释器来执行解析,然后将结果返回给HTTP服务器,这在处理高并发访问时几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在很少使用了。
     FCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解释器分开,同时在脚本解释器上启动一个或者多个脚本解释器守护进程。当HTTP服务器遇到动态程序时,可以将其直接交付给FCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一的处理静态请求或者动态脚本的结果返回给客户端,这就很大程度上提高了响应速度。

2、Nginx + FCGI运行原理

     Nginx 不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FCGI接口来调用。FCGI接口在linux是socket(这个socket是文件socket,也可以是ip socket)。为了调用CGI程序,还需要一个FCGI的wrapper(wrapper可以理解为启动另一个程序的程序)。这个wrapper绑定在某个固定的socket上,如端口或者文件的socket,当Nginx将cgi请求发送给这个socket的时候,通过FCGI接口,wrapper接收到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取数据,接着,wrapper将返回的数据通过FCGi接口,沿着固定的socket传给Nginx,最终,NGinx将返回的数据发送给客户端,这就是Nginx+FCGi的运行流程。如图所示:

3、spawn-fcgi 和 php-fpm

     FCGI接口方式在脚本解析服务器上启动一个或者多个守护进程对动态脚本进行解析,这些进程就是FastCGI进程管理器,或者称为fastCgi引擎,spawn-fcgi 和 PHP-FPM就是支持php的两个Fcgi进程管理器。
     span-fcgi是HTTP服务器lighttpd的一部分,目前是独立的一个项目,一般与lighttpd配合使用来支持PHP,但是lighttpd的spwan-fcgi在高并发访问的时候,会出现内存泄漏甚至自动重启FastCGI的问题
     Nginx是个轻量级的HTTPserver,必须借助第三方的FCGI处理器才可以对PHP进行解析。
     PHP-FPM是一个第三方的FCGI进程管理器,它是PHP的一个补丁来开发的,在安装的时候也需要和PHP源码一起编译,也就是说PHP-FPM被编译到PHP内核中,因此处理性能方面更加优秀,同时PHP-FPM在处理高并发方面也比spawn-fcgi引擎好很多,所以推荐NGINX+PHP-FPM组合。

    FCGI的主要优点是把动态语言和HTTP server分离开来,所以Nginx 与 php、php-fpm经常被部署在不同的服务器上,以分担前端Nginx的服务器压力,让nginx 专一处理静态请求和转发动态请求。而PHP、PHP-fpm服务器专一解析PHP动态请求。

4、重点介绍php-fpm引擎的配置文件

php-fpm配置文件我这里放在/usr/local/php-fpm/etc/php-fpm.conf下面,默认情况下会把/usr/local/php-fpm/etc/fpm.d的配置文件include进去。

vi   /usr/local/php-fpm/etc/fpm.d/www.conf

我们在9001.conf里面看看以下几项:

[9001]
    listen = 127.0.0.1:9001     #监听了本地9001端口
    user = nginx          #运行用户
    group = nginx
    pm.max_children = 50          # 设置fcgi的进程数,官方建议小于2G内存开启64个,4G可以开200个
    request_terminate_timeout = 0     # 用于设置FCGI执行脚本的时间,默认是0秒,可以根据情况改。
    rlimit_files = 1024      #设置PHP-FPM 打开文件描述符的限制,这个值要和linux内核打开文件数关联起来,例如,要
将此值设置为65535,就必须在linux命令上执行ulimit -HSN 65536
    pm.max_requests = 500     #设置处理多少个请求后便会关闭,默认是500

    pm = static
    listen.allowed_clients = 127.0.0.1    # 设置允许访问FCGI进程解析器的IP地址,如果不在IP地址,将无法接受
Nginx转发过来的php解析请求。

了解完上诉配置后,就可以启动FastCGI了,启动命令如下:

 /usr/local/php-fpm/sbin/php-fpm -t

/etc/init.d/php-fpm start

5、配置nginx来支持php
我们切换到nginx虚拟文件配置目录下。

cd  /usr/local/nginx/conf/vhost

vi  first.conf

server {
    listen       80;
    server_name  first.com;
    charset utf8;


    location ~ \.php$ {

        include        fastcgi_params;
        root           /data/www/default;
        fastcgi_pass   127.0.0.1:9001;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /data/www/default/$fastcgi_script_name;
    }
}

参数解释

  • location 正则匹配到以php结尾的到这里解析
  • root 指明了网站目录,配置php程序放置的根目录,这里php程序放在/data/www/default下,php名称info.php , php具体配置  <?php    phpinfo();?>
  • fastcgi_pass 指明了用哪里的php-fpm来解析,指明用来监听php-fpm的地址或者socket
  • fastcgi_index 指明默认首页
  • fastcgi_param 指明的是php动态程序的主目录,我们一般在这里写网站根目录的路径,比如我们的路径是 /data/www/default。

fastcgi_index 语法:fastcgi_index file
默认值:none
使用字段:http, server, location
如果URI以斜线结尾,文件名将追加到URI后面,这个值将存储在变量$fastcgi_script_name中。例如:
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name;
请求"/page.php",参数SCRIPT_FILENAME将被设置为"/home/www/scripts/php/page.php",但是请求"/"则为"/home/www/scripts/php/index.php"

 

6、检查语法错误并且重新加载配置文件:

# /usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[root@lnmp ~]# /usr/local/nginx/sbin/nginx -s reload

检测:

# curl -x127.0.0.1:80  first.com/info.php

出现的就是phpinfo()函数的界面

猜你喜欢

转载自blog.csdn.net/sj349781478/article/details/84998900
今日推荐