源码搭建LAMP+FastCGI+Xcache加速器(3)

方式二: FastCGI方式
标准的CGI对每个请求都会执行"PHP解析器会解析php.ini文件,初始化执行环境",所以处理每个时间的时间会比较长。而Fastcgi会先启一个master,解析配置文件,初始化执行环境,然后再启动多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是fastcgi的对进程的管理。
我们在进程看到的php-fpm是用来管理php-cgi,php-cgi只是解释PHP脚本的程序。fastcgi是一个协议,php-fpm实现了这个协议,这就是他们之间的关系。

1. 安装apache
[root@web httpd-2.4.7]# ./configure --prefix=/usr/local/apache \
--sysconfdir=/etc/httpd\
--enable-so \
--enable-ssl \
--enable-rewrite \
--with-zlib \
--with-pcre=/usr/local/pcre\
--with-included-apr \
--enable-track-vars  \
--enable-mods-shared=most \
--with-mpm=event

2. 配置httpd参数
[root@web logs]#vim /etc/httpd/httpd.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so  #去掉注释符
PidFile "/var/run/httpd.pid"#增加这一行
#DocumentRoot "/usr/local/apache/htdocs"  #关闭中心主机
DirectoryIndex index.php index.html        #增加index.php
AddType application/x-httpd-php.php
AddType application/x-httpd-php-source.phps  #增加php文件类型
Include /etc/httpd/extra/httpd-vhosts.conf  #开启虚拟主机

3. 安装php
[root@web ~]# yum install libmcrypt-devel mhash-devel libjpeg-devel libpng-devel libxml2-devel
[root@web php-5.5.9]# ./configure --prefix=/usr/local/php \
--with-MySQL=/usr/local/mysql\
--with-mysqli=/usr/local/mysql/bin/mysql_config\
--with-libxml-dir\
--with-png-dir\
--with-jpeg-dir\
--with-zlib-dir\
--with-gd \
--with-pear \
--enable-mbstring \
--enable-fpm        #最后一个参数让php支持fastcig

4. 为php提供配置文件:
[root@web php-5.5.9]# cp php.ini-production /usr/local/php/lib/php.ini

5. 配置php-fpm:
[root@web php-5.5.9]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm      #为php-fpm提供启动脚本
[root@web php-5.5.9]# chmod +x !$
chmod+x /etc/init.d/php-fpm
[root@web php-5.5.9]# chkconfig --add php-fpm
[root@web php-5.5.9]# chkconfig php-fpm on
[root@web php-5.5.9]# mv /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
#为php-fpm提供配置文件

6. 修改php-fpm的配置文件
[root@web php-5.5.9]#vim /usr/local/php/etc/php-fpm.conf
pid = run/php-fpm.pid    #取消这一行的注释,因为脚本需要根据pid文件确定服务是否正在运行
listen = 127.0.0.1:9000
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8    #根据需要修改

7. 配置httpd-vhosts.conf
[root@web ~]# vim /etc/httpd/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/usr/local/apache/htdocs/dong"
ServerName
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache/htdocs/dong/$1
ErrorLog "logs/mylog.err"
CustomLog "logs/mylog.acc"combinedio
</VirtualHost>

在相应的虚拟主机中添加类似如下两行: 
ProxyRequests Off  关闭正向代理功能 
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1 把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://127.0.0.1:9000后指明了路径,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。

8. 测试

源码搭建LAMP+FastCGI+Xcache加速器

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/2373d3f8d7fdd64b65c4c29517b8cc76.html