Apache and PHP-FastCGI

虽然Nginx加上php有相当优秀的表现,但是有时候,基于业务需要,不得不用ApachephpApache下有两种运行方式,一种是编译成Apache的模块,一种是以cgi方式运行,cgi则可细分为fastcgi,以模块方式运行,无论Apache还是php出现安全漏洞,需要升级软件版本,都需要同时重新编译二者,这是一个很没有统筹科学的态度,以普通cgi方式运行,配置简单,但比之于fastcgi效率不高,每个脚本执行都需要reload script和php.ini,基本上,这个意思就是说,脚本缓存是无效的,所以,我们需要fastcgi。

需要说明的是,在当前php5.3.6版本中,php-fpm已经包含在源代码中,只需要在编译的时候加入相应参数: –enable-fpm,安装完成后,拷贝/src/php-5.3.6/sapi/fpm/init.d.php-fpm 到/usr/local/bin/,然后chmod +x 就可以了

Usage: /usr/local/bin/init.d.php-fpm {start|stop|force-quit|restart|reload}

当然,你知道配置文件默认放在/usr/local/etc/php-fpm.conf,修修改改就可以start了!

php的配置很简单,但Apache的mod_fastcgi是需要单独下载编译的:
1,下载mod_fastcgi:http://www.fastcgi.com/dist/mod_fastcgi-current.tar.gz
解压缩了来安装到Apache里面去,例如,我们把Apache安装在了/usr/local/httpd:

tar zxf mod_fastcgi-current.tar.gz
cd mod_fastcgi-2.4.6
cp Makefile.AP2 Makefile
make install top_dir=/usr/local/httpd

2,在配置文件中启用mod_fastcgi,例如我们可以包含一个配置文件在extra目录中,起个名字叫httpd-fastcgi.conf,这个例子呢,我是把php-fpm的socket放在/tmp目录下的:

LoadModule fastcgi_module modules/mod_fastcgi.so
ScriptAlias /php-bin /usr/local/bin
AddHandler application/x-httpd-php5 php
Action application/x-httpd-php5 /php-bin/php-cgi
FastCgiExternalServer /usr/local/bin/php-cgi -socket /tmp/php.sock

当然,基于安全考虑,可以将配置文件单独放在不同的虚拟主机中。