首页 >后端开发 >php教程 >FastCGI和php-fpm之间的区别详解

FastCGI和php-fpm之间的区别详解

小云云
小云云原创
2018-03-02 09:13:492620浏览


CGI是什么?CGI是个协议,跟进程什么的没关系。web server(比如说 nginx)只是内容的分发者。

比如,    1)如果请求的是/*.html静态数据,那么web server会去文件系统中找到这个文件,发送给浏览器。2)如果请求的是/*.php动态数据,nginx根据配置文件,需要去找PHP解析器来处理,那么他会把这个请求简单处理后交给PHP解析器。

nginx会传哪些数据给PHP解析器呢?url、查询字符串、POST数据、HTTP header都会有。所以,CGI就是规定要传哪些数据、以什么样的格式传递给后方处理这个请求的协议。

当web server收到/*.php这个请求后,会启动对应的CGI程序,这里就是PHP的解析器。接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程。web server再把结果返回给浏览器。2、FastCGI是什么?

从根本上来说,FastCGI是用来提高CGI程序性能的。类似于CGI,FastCGI也可以说是一种协议。

FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。

FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。



FastCGI的工作原理    1) Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)    2) FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。    3) 当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。    4) FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。



在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的 好处是,持续数据库连接(Persistent database connection)可以工作。3、php-cgi是什么?

php-cgi是 PHP的解释器,它只是个 CGI 程序,只能解析请求,返回结果,不会进程管理。4、php-fpm是什么?

php-fpm是FastCGI 进程管理器,对于FastCGI协议的具体实现,他负责管理一个进程池,来处理来自Web服务器的请求。目前,PHP5.3版本之后,php-fpm是内置于PHP的。

php-fpm的启动:

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

php-fpm的关闭:

pkill php-fpm



kill -INT `cat /usr/local/php/var/run/php-fpm.pid`

php-fpm的重启:

kill -USR2 `cat /usr/local/php/var/run/php-fpm/pid`

查看php-fpm是否启动成功:

netstat -tunpl | grep 90001或

ps aux | gerp php-fpm

开机启动php-fpm:

打开/ect/rc.local加入/usr/local/php/sbin/php-fpm

信号:INT、TERM 立刻终止
QUIT 平滑终止

USR1 重新打开日志文件

USR2 平滑重载所有worker进程并重新载入篇日志和二进制模块

相关推荐:

php中实现FastCGI协议及深入理解

比较CGI,FastCGI,PHP-CGI与PHP-FPM的区别

PHP FastCGI进程管理器PHP-FPM的架构

以上是FastCGI和php-fpm之间的区别详解的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn