在前一篇博文中介绍了LAMP的安装及配置。这里专门介绍PHP以fastCGI的方式与httpd整合的情况下,具体如何编译及配置。而且假定httpd、mysql均如前一篇博文介绍的安装配置完毕。php也采取一样版本的源码包php-5.6.1.tar.bz2。
1. 编译安装php
# tar xf php-5.6.1.tar.bz2
# cd php-5.6.1
# ./configure --prefix=/usr/local/php --enable-sockets --enable-mbstring
--enable-xml --enable-fpm --with-bz2 --with-openssl --with-freetype-dir
--with-jpeg-dir --with-png-dir --with-zlib --with-mcrypt
--with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config
--with-config-file-path=/etc/php --with-config-file-scan-dir=/etc/php.d# make && make install
注:编译时请确保机器的内存大于1G,或者在./configure
的选项中加上“--disable-fileinfo”,否则可能出现编译失败的情况。
2. 为php提供配置文件
# cp php.ini-production /etc/php.ini
3. 配置php-fpm
a) 为php-fpm提供配置文件
# cp /usr/local/php/etc/php-fpm.conf.default
/usr/local/php/etc/php-fpm.confb) 编辑php-fpm的配置文件,调整相关的运行参数作优化。当然使用默认值也能正常运行。
# vim
/usr/local/php/etc/php-fpm.conf
配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):
pm.max_children =
50
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers =
8
pid = /usr/local/php/var/run/php-fpm.pidc) 为php-fpm提供SysV init脚本,并将其添加至服务列表
# cp sapi/fpm/init.d.php-fpm
/etc/rc.d/init.d/php-fpm
# chmod +x
/etc/rc.d/init.d/php-fpm
# chkconfig --add
php-fpm
# chkconfig php-fpm on
4. 启动php-fpm服务,测试运行状态
# service php-fpm start
# netstat -tnlp | grep php-fpm
默认情况下,fpm监听在127.0.0.1的9000端口
5. 修改httpd的主配置文件httpd.conf
a) 启用httpd的相关模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule
proxy_fcgi_module modules/mod_proxy_fcgi.sob) 在相应的位置添加如下行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
c) 修改DirectoryIndex 的定义为:
DirectoryIndex index.php index.html
6. 配置虚拟主机支持使用fcgi
在相应的虚拟主机中添加类似如下两行:
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$
fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1参数选项含义解释
ProxyRequests
Off:关闭正向代理
ProxyPassMatch:把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://127.0.0.1:9000后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。举例:
<VirtualHost *:80>
DocumentRoot "/www/htdocs/test.com"
ServerName www.test.com
ServerAlias
test.comProxyRequests Off
ProxyPassMatch ^/(.*\.php)$
fcgi://127.0.0.1:9000/www/htdocs/test.com/$1<Directory "/www/htdocs/test.com">
Options
none
AllowOverride none
Require all granted
</Directory>
</VirtualHost>