前言:采用Nginx服务器并以php-fpm的方式跑php,这样就需要以源码编译的方式安装PHP和php-fpm,当然现在成熟的一键安装工具也有很多。本文主要包括三个部分内容:1、概念解析CGI、FastCGI、PHP-CGI与php-fpm;2、源码编译的方式安装PHP与php-fpm;3、使用phpize动态编译安装PHP扩展模块。
一、概念解析CGI、FastCGI、PHP-CGI与php-fpm
CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,(比如Nginx和PHP)其程序须运行在网络服务器上。CGI可以使用多种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等
FastCGI像是一个常驻(long-live)型的CGI,主要行为是管理调度CGI解释器进程并将其保持在内存中,因此获得良好的性能、伸缩性、Fail- Over特性等等。它还支持分布式的运算,即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
FastCGI的工作原理
1、Web Server启动时载入FastCGI进程管理器
2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接
3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器,Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi(因为我们运行的是PHP代码,所以是php-cgi解释器进程)
4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server,一次请求连接完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。而在CGI模式下,cgi完成一次请求即结束进程。
注:显然FastCGI进程在内存中管理着CGI子线程,这种工作模式是比较占用系统内存资源的!但是极大的提高了web server和系统程序的交互效率。
PHP-CGI是PHP自带的CGI,提供web server和php交互的功能,具体说就是提供web server基于php环境解析处理php代码的功能。
PHP-FPM是一个PHP FastCGI管理器,只能用于管理php-cgi子进程。php5.3.3之后的版本中已经集成为一个php扩展,在编译安装php时启用即可,而之前的版本中需要单独下载php-cgi源码。