手记

以fastCGI的方式与httpd整合

    在前一篇博文中介绍了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.conf

b) 编辑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.pid

c) 为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.so

b) 在相应的位置添加如下行

    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.com

   ProxyRequests 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>




0人推荐
随时随地看视频
慕课网APP