威尼斯手机平台登陆-官方网站登录

威尼斯手机平台登陆为您带来世界三大博彩公司最新相关资讯,威尼斯官方网站登录充分考虑到不同地域网民的不同需求,威尼斯手机平台登陆良好的用户界面,人性化的操作,实用的功能设计使其广泛受到欢迎,推动实体出版、影视、动漫、游戏等相关文化产业的发展。

您的位置:威尼斯手机平台登陆 > 最新文章 > 而PHP/PHP-FPM服务器专心剖析PHP动态须要,wrapper再将重临的多寡经过法斯特CGI接口

而PHP/PHP-FPM服务器专心剖析PHP动态须要,wrapper再将重临的多寡经过法斯特CGI接口

发布时间:2020-03-04 19:15编辑:最新文章浏览(113)

    Nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。

    一、什么是 FastCGI

    php与nginx整合

    Nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx

    FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP。

    PHP-FPM也是一个第三方的FastCGI进程管理器,它是作为PHP的一个补丁来开发的,在安装的时候也需要和PHP源码一起编译,也就是说PHP-FPM被编译到PHP内核中,因此在处理性能方面更加优秀;同时它在处理高并发方面也比spawn-fcgi引擎好很多,因此,推荐Nginx+PHP/PHP-FPM这个组合对PHP进行解析。FastCGI 的主要优点是把动态语言和HTTP Server分离开来,所以Nginx与PHP/PHP-FPM经常被部署在不同的服务器上,以分担前端Nginx服务器的压力,使Nginx专一处理静态请求和转发动态请求,而PHP/PHP-FPM服务器专一解析PHP动态请求

    一、首先我们先初步认识下FastCGI和Ngnix+FastCGI的运行原理

    威尼斯正规官网,FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器。这在处理高并发访问时,几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在已经很少被使用了。

    #fastcgi FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP。FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器。这在处理高并发访问时,几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在已经很少被使用了。FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。Nginx+FastCGI运行原理Nginx不支持对外部程序的直接调用或者解析,所有的外部程序必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket,(这个socket可以是文件socket,也可以是ip socket)。为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接纳到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端,这就是Nginx+FastCGI的整个运作过程。

    1、apache+PHP和ngnix+php的区别

    apache一般是把php当做自己的一个模块来启动;而ngnix则是把http请求变量转发给php进程,即php独立进程,与ngnix通信,这种方式叫做FastCGI运行方式。

    所以,apache所编译的php不能用于ngnix。

    先看一个简单的图:

    威尼斯正规官网 1

    以下这段我认为是在网络上找到的最通俗易懂的解释,我将它复制进来方便大家理解:

    FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

    php与nginx整合php.ini:php的主配置文件

    2、什么是FastCGI呢?

    FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等。同时,FastCGI也被许多脚本语言支持,其中就有PHP。

    FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后将结果返回给HTTP服务器。这在处理高并发访问时几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在已经很少使用了。

    FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

    二、Nginx+FastCGI运行原理

    [root@server79 php-5.4.12]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini
    
    [root@server79 fpm]# pwd/root/php-5.4.12/sapi/fpm[root@server79 fpm]# cp init.d.php-fpm /etc/init.d/php-fpm
    

    3、Nginx+FastCGI运行原理

    Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。

    wrapper: 为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,然后Fork(派生)出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据(html页面或者图片)发送给客户端。这就是Nginx+FastCGI的整个运作过程,

    威尼斯正规官网 2

    所以,我们首先需要一个wrapper,这个wrapper需要完成的工作:

    1. 通过调用fastcgi(库)的函数通过socket和ningx通信(读写socket是fastcgi内部实现的功能,对wrapper是非透明的)
    2. 调度thread,进行fork和kill
    3. 和application(php)进行通信

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

    给启动脚本加可执行权限

    二、编译PHP

    首先我们先认识一个概念:php-fpm

    (1)PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在

    (2)PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用

    (3)新版的PHP已经集成了php-fpm,在./configure的时候带 –enable-fpm参数即可开启PHP-FPM

    接下来我们开始安装编译PHP

    1、编译前我们需要先安装一些php需要用到的库(我用的是centos版本的linux系统)

    yum -y install gcc automake autoconf libtool make
    yum -y install gcc gcc-c++ glibc
    yum -y install libmcrypt-devel mhash-devel libxslt-devel 
    libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel 
    zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel 
    ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel 
    krb5 krb5-devel libidn libidn-devel openssl openssl-devel
    

    2、获取php源码包

    wget http://cn2.php.net/distributions/php-5.4.7.tar.gz
    

    3、解压并进入php目录

    tar zvxf php-5.4.7.tar.gz
    cd php-5.4.7
    

    威尼斯正规官网 3

    4、编译并安装

    ./configure --prefix=/usr/local/fastphp --enable-fpm --with-mcrypt 
    --enable-mbstring --disable-pdo --with-curl --disable-debug --disable-rpath 
    --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets 
    --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex 
    --with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli 
    --with-gd --with-jpeg-dir
    make all install
    

    5、将php-fpm复制一份

    威尼斯正规官网 4

    6、将php配置文件复制一份

    威尼斯正规官网 5

    7、修改nginx配置文件以支持php-fpm

    首先打开ngnix配置文件

    vim /usr/local/ngnix/conf/ngnix.conf
    

    在server段里加入以下代码

    威尼斯正规官网 6

    保存

    8、启动php-fpm和ngnix

    /usr/local/ngnix
    /usr/local/ngnix/sbin/php-fpm
    

    9、在根目录下创建测试文件test.php做个简单的测试

    威尼斯正规官网 7

    10、测试成功

    威尼斯正规官网 8

    php-fpm的关闭和重启需要使用信号控制,其实就跟ngnix的关闭重启一样

    php-fpm 关闭:kill -INT `cat /usr/local/fastphp/var/run/php-fpm.pid`

    php-fpm 重启:kill -USR2 `cat /usr/local/fastphp/var/run/php-fpm.pid`

    查看php-fpm进程数:ps aux | grep -c php-fpm

    图1 Nginx+FastCGI运行原理

    [root@server79 fpm]# chmod +x /etc/init.d/php-fpm[root@server79 ~]# vim /usr/local/lnmp/php/etc/php.inicgi.fix_pathinfo=0date.timezone = /Asia/Shanghai[root@server79 ~]# cp /usr/local/lnmp/php/etc/php-fpm.conf.default /usr/local/lnmp/php/etc/php-fpm.conf[root@server79 etc]# vim php-fpm.conf
    

    三、spawn-fcgi与PHP-FPM

    打开注释pid = run/php-fpm.pid

    前面介绍过,FastCGI接口方式在脚本解析服务器上启动一个或者多个守护进程对动态脚本进行解析,这些进程就是FastCGI进程管理器,或者称之为FastCGI引擎, spawn-fcgi与PHP-FPM就是支持PHP的两个FastCGI进程管理器。

    php-fpm.conf文件参数解析PHP的全局配置文件是php.ini,在上面的步骤中,已经将此文件复制到了/usr/local/lnmp/php/etc/php.ini下。可以根据每个应用需求的不同,对php.ini进行相应的配置。下面重点介绍PHP-FPM引擎的配置文件。根据上面指定的安装路径,PHP-FPM的默认配置文件为/usr/local/lnmp/php/etc/php-fpm.conf。php-fpm.conf是一个XML格式的纯文本文件,其内容很容易看明白。这里重点介绍几个重要的配置标签:标签listen_address是配置fastcgi进程监听的IP地址以及端口,默认是127.0.0.1:9000。

    下面简单介绍spawn-fcgi与PHP-FPM的异同。

    listen = 127.0.0.1:9000
    

    spawn-fcgi是HTTP服务器lighttpd的一部分,目前已经独立成为一个项目,一般与lighttpd配合使用来支持PHP,但是ligttpd的spwan-fcgi在高并发访问的时候,会出现内存泄漏甚至自动重启FastCGI的问题。

    标签user和group用于设置运行FastCGI进程的用户和用户组。需要注意的是,这里指定的用户和用户组要和Nginx配置文件中指定的用户和用户组一致。

    Nginx是个轻量级的HTTP server,必须借助第三方的FastCGI处理器才可以对PHP进行解析,因此Nginx+spawn-fcgi的组合也可以实现对PHP的解析,这里不过多讲述。

    user = nginxgroup = nginx
    

    PHP-FPM也是一个第三方的FastCGI进程管理器,它是作为PHP的一个补丁来开发的,在安装的时候也需要和PHP源码一起编译,也就是说PHP-FPM被编译到PHP内核中,因此在处理性能方面更加优秀;同时它在处理高并发方面也比spawn-fcgi引擎好很多,因此,推荐Nginx+PHP/PHP-FPM这个组合对PHP进行解析。

    标签max_children用于设置FastCGI的进程数。根据官方建议,小于2GB内存的服务器,可以只开启64个进程,4GB以上内存的服务器可以开启200个进程。

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

    5
    

    四、安装php与php-fpm

    标签request_terminate_timeout用于设置FastCGI执行脚本的时间。默认是0s,也就是无限执行下去,可以根据情况对其进行修改。

    五、配置Nginx来支持PHP

    0s
    

    Nginx的安装特别简单,前面已经对此进行了详细介绍,这里不再进行讲述。下面重点介绍Nginx如何通过php-fpm的FastCGI进程对PHP进行解析处理。

    标签rlimit_files用于设置PHP-FPM对打开文件描述符的限制,默认值为1024。这个标签的值必须和Linux内核打开文件数关联起来,例如要将此值设置为65535,就必须在Linux命令行执行'ulimit -HSn 65536'。

    由于Nginx本身不会对PHP进行解析,因此要实现Nginx对PHP的支持,其实是将对PHP页面的请求交给fastCGI进程监听的IP地址及端口。如果把php-fpm当做动态应用服务器,那么Nginx其实就是一个反向代理服务器。Nginx通过反向代理功能实现对PHP的解析,这就是Nginx实现PHP动态解析的原理。

    1024
    

    这里假定Nginx的安装目录为/usr/local,则Nginx配置文件的路径为/usr/local/nginx/conf/nginx.conf。下面是在Nginx下支持PHP解析的一个虚拟主机配置实例。

    标签max_requests指明了每个children最多处理多少个请求后便会被关闭,默认的设置是500。

    server {

    pm.max_requests = 500
    

    include port.conf;

    标签allowed_clients用于设置允许访问FastCGI进程解析器的IP地址。如果不在这里指定IP地址,Nginx转发过来的PHP解析请求将无法被接受。

    server_name www.ixdba.net ixdba.net;

    127.0.0.1
    

    location / {

    5.管理FastCGI进程在配置完php-fpm后,就可以启动FastCGI进程了。启动fastcgi进程有两种方式:

    index index.html index.php;

    /usr/local/php/bin/php-cgi --fpm 
    

    root /web/www/www.ixdba.net;

    或者

    }

    /usr/local/php/sbin/php-fpm start 
    

    location ~ .php$ {

    建议采用第二种方式启动FastCGI进程。/usr/local/php/sbin/php-fpm还有其他参数,具体为start|stop|quit|restart|reload|logrotate。每个启动参数的含义如下:

    root           html;

    q start,启动PHP的FastCGI进程。 q stop,强制终止PHP的FastCGI进程。 q quit,平滑终止PHP的FastCGI进程。 q restart,重启PHP的FastCGI进程。 q reload,重新加载PHP的php.ini。 q logrotate,重新启用log文件。 reload是个很重要的参数,它可以在PHP的FastCGI进程不中断的情况下重新加载改动过的php.ini,因此通过php-fpm可以平滑变更FastCGI模式下的PHP设置。

    fastcgi_pass   127.0.0.1:9000;

    [root@server79 etc]# /etc/init.d/php-fpm start
    

    fastcgi_index  index.php;

    配置nginx的主配置文件,打开与php的接口

    fastcgi_param  SCRIPT_FILENAME  html$fastcgi_script_name;

    [root@server79 conf]# pwd/usr/local/lnmp/nginx/conf[root@server79 conf]# vim nginx.confuser nginx;#location ~ .php$ {root html; fastcgi_pass 127.0.0.1:9000; //本地9000端口fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;include fastcgi.conf;}[root@server79 conf]# nginx -t^C[root@server79 conf]# nginx -s reload^C[root@server79 html]# pwd/usr/local/lnmp/nginx/html[root@server79 html]# cat index.php
    

    include        fastcgi_params;

    测试:浏览器中输入192.168.0.179/index.php,出现php页面

    }

    PHP解析Nginx日志nginx日志格式

    }

    access_log日志格式

    通过location指令,将所有以php为后缀的文件都交给127.0.0.1:9000来处理,而这里的IP地址和端口就是FastCGI进程监听的IP地址和端口。

     log_format main '$server_name$remote_addr$remote_user[$time_local]"$request"' '$status$body_bytes_sent"$http_referer"' '"$http_user_agent""$http_x_forwarded_for"'; 
    

    fastcgi_param指令指定放置PHP动态程序的主目录,也就是$fastcgi_script_name前面指定的路径,这里是/usr/local/nginx/html目录,建议将这个目录与Nginx虚拟主机指定的根目录保持一致,当然也可以不一致。

    日志参数

    fastcgi_params文件是FastCGI进程的一个参数配置文件,在安装Nginx后,会默认生成一个这样的文件,这里通过include指令将FastCGI参数配置文件包含了进来。

    server_name : 虚拟主机的主机名称 remote_addr : 远程客户端的ip地址 remote_user : 远程客户端用户名称 time_local : 访问的时间与时区 status : 记录请求返回的http状态码 body_bytes_sent : 发送给客户端的文件主体内容的大小 http_referer : 从哪个页面链接访问过来 http_user_agent : 客户端浏览器信息 http_x_forwarded_for : 客户端的真实ip

    接下来,启动nginx服务。

    日志分割符使用特殊的不可打印字符^A作为日志分割符

    /usr/local/nginx/sbin/nginx

    根据关键字过滤文件内容

    到此为止,Nginx+PHP已经配置完成。

    需求根据http的请求里是否有“weibo”这个关键字提取文件的内容

    六、测试Nginx对PHP的解析功能

     /** * Description:按行读取文件内容进行过滤匹配 * * @return array */ function readFileContent  { $weibo_content = array(); $fh = @fopen; if  { while  { $row = fgets; $row_arr = explode; if  && preg_match('/weibo/', $row_arr[3])) { $weibo_content[] = $row_arr; } } } fclose; return $weibo_content; } 
    

    这里在/usr/local/nginx/html目录下创建一个phpinfo.php文件,内容如下:

    然后通过浏览器访问http://www.ixdba.net/index.html,默认会在浏览器显示“Welcome to Nginx!”表示Nginx正常运行。

    接着在浏览器中访问http://www.ixdba.net/phpinfo.php,如果PHP能够正常解析,会出现PHP安装配置以及功能列表统计信息。

    本文由威尼斯手机平台登陆发布于最新文章,转载请注明出处:而PHP/PHP-FPM服务器专心剖析PHP动态须要,wrapper再将重临的多寡经过法斯特CGI接口

    关键词:

上一篇:没有了

下一篇:PHP中的超全局变量,供大家参考