php与web服务器关系

在解析这个问题前,先要讲述一个概念,什么是cgi程序?

1.什么是cgi程序,cgi与fastcgi的区别

       CGI的中文名称是通用网关接口,是外部应用程序与web服务器之间的接口标准。CGI规范允许web服务器执行外部程序,并将它们的输出发送给web浏览器。而fastcgi则是一个常驻型的cgi,它可以一直执行着,不需求每次请求都必须fork进程来处理,此外,它还支持分布式运算,接受来自其他服务器的请求。

       以下表格总结出它们的异同点:

      

  web服务器 处理进程
CGI fork一个新的进程处理 读取参数,处理数据,结束进程
FASTCGI 用tcp或者管道的方式与进程建立连接处理 处理数据后,进入循环,等待新请求

      fastcgi不用fork新的进程处理请求,性能上比cgi程序要优。


2.PHP与web服务器通讯方式
       1)php-fpm模式

       php-fpm是一个php fastcgi管理器,可以视为php-cgi程序的守护进程。该模式下,php-fpm进程负责接收web服务器请求,分发给它的子进程——php-cgi来处理数据。这种模式一般搭配Nginx使用,其配置如下:

location ~ .*\.(php|php5)?$
        {
                try_files $uri =404;
                fastcgi_pass  127.0.0.1:9000;
                fastcgi_index index.php;
                include /etc/nginx/fastcgi.conf;
        }
       php-fpm已经纳入php内核,在编译时通过--enable-fpm来启用改功能。

       2)mod_php模式
       该模式下,一般是作为apache的一个模块启动的,apache在启动时,会读取php.ini文件并加载扩展模块,除非apache重启,php模块不会被重新加载。在该模式下,apache使用prefork模式(非线程型,预派生web服务器),或者worker模式处理(混合多线程多进程,由于使用线程处理请求,系统开销小于prefork模式,但是它既有多进程,因此也能保证prefork模式的稳定性)。由于不需要额外的进程通讯和应用解析,该模式性能要比fastcgi好得多。

       以下,也作了一个表格,来对比fastcgi和mod_php

  fastcgi mod_php
性能 -- 较好
易用性 跟web服务器无关,便于分布式处理,同时支持平滑重启 随apache启动,使用过程中无法重启
内存占用 内存占用较高 内存占用率较低,但每个请求都需求调用该模块,包括静态请求

3.PHP推荐服务器配置方式

      综合以上的对比,可以利用每个模式的特性,一般常用的是nginx处理静态文件,php请求则是通过转发,让apache处理。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。