第四章:Nginx与PHP(FastCGI)的安装,配置与优化
Linux + Nginx + Mysql + PHP 架构LNMP
FastCGI简介
FastCGI是与语言无关,可伸缩架构的CGI开放扩展,其主要行为时将CGI解释器进程保持在内存中并因此获得较高的性能.
众所周知,CGI解释器的反复加载时CGI性能低下的主要原因,如果CGI接四起保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能,伸缩性,Fail-Over特性
FastCGI的工作原理
1> FastCGI进程管理器自身初始化,启动多个CGI解释器进程(多个php-cgi进程)并等待来之Web Server的链接.在php中采用PHP-FPM进程管理器启动多个php-cgi FastCGI进程,启动php-cgi FastCGI进程时,可以配置一TCP和UNIX套接字两种方式启动
众所周知,CGI解释器的反复加载时CGI性能低下的主要原因,如果CGI接四起保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能,伸缩性,Fail-Over特性
FastCGI的工作原理
1> FastCGI进程管理器自身初始化,启动多个CGI解释器进程(多个php-cgi进程)并等待来之Web Server的链接.在php中采用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)可以工作