FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持 在内存中并所以得到较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要缘由, 若是CGI解释器保持在内存中并接受FastCGI进程管理器调度,则能够提供良好的性能、伸缩性、 Fail-Over 特性等。
FastCGI的工做原理是:
(1) FastCGI进程管理器自身初始化,启动多个CGI解释器进程(多个php-cgi进程)并等 待来自Web Server的链接。在本文中,采用PHP-FPM进程管理器启动多个php-cgi FastCGI进 程。启动php-cgi FastCGI进程时,能够配置以TCP和UNIX套接字两种方式启动。
(2) 当客户端请求到达Web服务器(Nginx)时,Web服务器将请求采用TCP协议或UNIX 套接字方式转发到FastCGI主进程,FastCGI主进程选择并链接到一个CGI解释器(子进程)。 Web服务器将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
(3)
FastCGI子进程完成处理后将标准输出和错误信息从同一链接返回Web服务器(Nginx).
当FastCGI子进程关闭链接时,请求便告知处理完成。FastCGI子进程接着等待并处理来自FastCGI 进程管理器的下一个链接。而在通常的普通CGI模式中,php-cgi在此便退出了。
因此,你能够想象普通的CGI模式有多慢。每个Web请求PHP都必须从新解析php.ini、 从新载入所有扩展并从新初始化所有数据结构。使用FastCGI,全部这些都只在进程启动时发生 一次。一个额外的好处是,持续数据库链接(Persistent database connection)能够工做。
PHP FastCGI 的优势:
(1) PHP脚本运行速度更快。PHP解释程序被载入内存而不用每次须要时从存储器读取, 此举极大提高了依靠脚本运行站点的性能。
(2) 需要使用的系统资源更少。因为服务器不用在每次须要时都载入PHP解释程序,你可 以将站点的传输速度提高不少而没必要增长CPU负担。
(3) 不须要对现有的代码做任何改变。运行在Apache+PHP上的程序,无须修改便可适用 于 PHP 的 FastCGI。php