摘要:

  什么是PHP-FPM

  PHP-FPM是一个PHPFastCGI管理器,是只用于PHP的。
FastCGI是一个可伸缩的,高速地在web server和脚本语言间交互的接口。FastCGI的主要优点是把动态语言和web server分离开来。这种技术允许把web server和动态语言运行在不同的主机上,以大规模扩展和改进安全性而不损失生产效率。

  php-fpm可以和任何支持远端FastCGI的web server工作。  PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。 现在我们可以在PHP 5.4.13的源码树里下载得到直接整合了PHP-FPM的分支,相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼。

  PHP5.4.13已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存​和进程​、可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以被PHP官方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。


什么是apr?

  apr 是apache portable runtime 用上这个后可以有效的提高apahe处理静态页面的能力,将Tomcat线程数开到300以上的水平,然后模拟一大堆并发请求。如果不配APR,基本上300个线程狠快就用满,以后的请求就只好等待。但是配上APR之后,并发的线程数量明显下降,从原来的300可能会马上下降到只有几十,新的请求会毫无阻塞的进来。APR对于apache最大的作用就是socket调度。你在局域网环境测,就算是400个并发,也是一瞬间就处理/传输完毕,但是在真实的Internet环境下,页面处理时间只占0.1%都不到,绝大部分时间都用来页面传输。如果不用APR,一个线程同一时间只能处理一个用户,势必会造成阻塞。所以生产环境下用apr是非常必要的。

本篇博客和我上篇博客有《LAMP+XCache》有类似之处,本篇博客在原有的基础上添加了php-fpm 和 phpMyAdmin,而且使用的mysql版本是最新版本5.6.10的,新版本mysql配置上有些不一样。

国际惯例废话不多说直接切入正题: 

配置环境:

系统版本:  redhat5.8

httpd版本: httpd-2.4.4  下载地址:http://httpd.apache.org/download.cgi#apache24

mysql版本: mysql-5.6.10 下载地址:http://www.mysql.com/downloads/mysql/5.5.html#downloads

XCache版本:xcache-3.0.1 下载地址:http://xcache.lighttpd.net/wiki/Release-3.0.1

php版本: php-5.4.13 下载地址:http://cn2.php.net/manual-lookup.php?pattern=5.4.13&scope=quickref

phpMyAdmin: phpMyAdmin-3.5.1

开发环境包必须先装上:Development Libraries Development Tools


 

本文分为7部分来讲解LAMP+XCache+FastCgi 的配置过程:

 一,安装apr

 二,安装httpd

 三,安装mysql

 四,安装php和php-fpm

 五,配置虚拟主机

 六,安装 XCache

 七,安装 phpMyAdmin 

配置过程:

一、解决依赖关系,安装apr

  httpd-2.4.4需要较新版本的apr和apr-util,因此需要事先对其进行升级。升级方式有两种,
  一种是通过源代码编译安装,一种是直接升级rpm包。这里选择使用编译源代码的方式进行.

 
  
  1. 一、解决依赖关系,安装apr  
  2.  
  3.   httpd-2.4.4需要较新版本的apr和apr-util,因此需要事先对其进行升级。升级方式有两种,  
  4.   一种是通过源代码编译安装,一种是直接升级rpm包。这里选择使用编译源代码的方式进行.  
  5.  
  6. 1、 编译安装apr  
  7.  
  8. # tar xf apr-1.4.6.tar.bz2  
  9. # cd apr-1.4.6  
  10. # ./configure --prefix=/usr/local/apr  
  11. # make && make install  
  12.  
  13. 2、 编译安装apr-util  
  14.  
  15. # tar xf apr-util-1.5.2.tar.bz2  
  16. # cd apr-util-1.5.2  
  17. # ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr    #### 因为这个包依赖上面的包 所以要指定apr 在那个位置,系统上默认也有apr   
  18. # make && make install  
  19.  
  20.  
  21.  httpd-2.4.4编译过程也要依赖于pcre-devel软件包,需要事先安装。此软件包系统光盘自带,因此,找到并安装即可。  
  22. # yum install -y pcre-devel  
  23.  
  24. ###################################  
  25. ################################### 
 

 

二、编译安装httpd-2.4.4
  首先下载httpd-2.4.4到本地,而后执行如下命令进行编译安装过程:

 
  
  1. 二、编译安装httpd-2.4.4  
  2.   首先下载httpd-2.4.4到本地,而后执行如下命令进行编译安装过程:  
  3.     
  4. 1、    
  5. # tar xf httpd-2.4.4.tar.bz2  
  6. # cd httpd-2.4.4  
  7. # ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd   
  8. --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib   
  9. --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util  
  10. --enable-mpms-shared=all --with-mpm=event  
  11. # make && make install  
  12.  
  13.  
  14. 2、修改httpd的主配置文件,设置其Pid文件的路径  
  15.  
  16.   编辑/etc/httpd/httpd.conf,添加如下行即可:  
  17.   PidFile  "/var/run/httpd.pid" 
  18.  
  19. 3、提供SysV服务脚本/etc/rc.d/init.d/httpd,内容如下:  
  20.  
  21. #!/bin/bash  
  22. #  
  23. # httpd        Startup script for the Apache HTTP Server  
  24. #  
  25. # chkconfig: - 85 15  
  26. # description: Apache is a World Wide Web server.  It is used to serve \  
  27. #          HTML files and CGI.  
  28. # processname: httpd  
  29. # config: /etc/httpd/conf/httpd.conf  
  30. # config: /etc/sysconfig/httpd  
  31. # pidfile: /var/run/httpd.pid  
  32.  
  33. # Source function library.  
  34. . /etc/rc.d/init.d/functions  
  35.  
  36. if [ -f /etc/sysconfig/httpd ]; then 
  37.         . /etc/sysconfig/httpd  
  38. fi  
  39.  
  40. # Start httpd in the C locale by default.  
  41. HTTPD_LANG=${HTTPD_LANG-"C"}  
  42.  
  43. # This will prevent initlog from swallowing up a pass-phrase prompt if  
  44. # mod_ssl needs a pass-phrase from the user.  
  45. INITLOG_ARGS="" 
  46.  
  47. Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server  
  48. with the thread-based "worker" MPM; BE WARNED that some modules may not 
  49. work correctly with a thread-based MPM; notably PHP will refuse to start.  
  50.  
  51. # Path to the apachectl script, server binaryand short-form for messages.  
  52. apachectl=/usr/local/apache/bin/apachectl  
  53. httpd=${HTTPD-/usr/local/apache/bin/httpd}  
  54. prog=httpd  
  55. pidfile=${PIDFILE-/var/run/httpd.pid}  
  56. lockfile=${LOCKFILE-/var/lock/subsys/httpd}  
  57. RETVAL=0  
  58.  
  59. start() {  
  60.         echo -n $"Starting $prog: " 
  61.         LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS  
  62.         RETVAL=$?  
  63.         echo  
  64.         [ $RETVAL = 0 ] && touch ${lockfile}  
  65.         return $RETVAL  
  66. }  
  67.  
  68. stop() {  
  69.     echo -n $"Stopping $prog: " 
  70.     killproc -p ${pidfile} -d 10 $httpd  
  71.     RETVAL=$?  
  72.     echo  
  73.     [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}  
  74. }  
  75. reload() {  
  76.     echo -n $"Reloading $prog: " 
  77.     if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/nullthen 
  78.         RETVAL=$?  
  79.         echo $"not reloading due to configuration syntax error" 
  80.         failure $"not reloading $httpd due to configuration syntax error" 
  81.     else 
  82.         killproc -p ${pidfile} $httpd -HUP  
  83.         RETVAL=$?  
  84.     fi  
  85.     echo  
  86. }  
  87.  
  88. # See how we were called.  
  89. case "$1" in 
  90.   start)  
  91.     start  
  92.     ;;  
  93.   stop)  
  94.     stop  
  95.     ;;  
  96.   status)  
  97.         status -p ${pidfile} $httpd  
  98.     RETVAL=$?  
  99.     ;;  
  100.   restart)  
  101.     stop  
  102.     start  
  103.     ;;  
  104.   condrestart)  
  105.     if [ -f ${pidfile} ] ; then 
  106.         stop  
  107.         start  
  108.     fi  
  109.     ;;  
  110.   reload)  
  111.         reload  
  112.     ;;  
  113.   graceful|help|configtest|fullstatus)  
  114.     $apachectl $@  
  115.     RETVAL=$?  
  116.     ;;  
  117.   *)  
  118.     echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}" 
  119.     exit 1  
  120. esac  
  121.  
  122. exit $RETVAL  
  123.  
  124. 4、而后为此脚本赋予执行权限:  
  125. # chmod +x /etc/rc.d/init.d/httpd  
  126.  
  127. 5、加入服务列表:  
  128. # chkconfig --add httpd  
  129.  
  130. 6、加入httpd 配置文件检测。新建 httpd.sh  
  131. #vim /etc/profile.d/httpd.sh     
  132.  加入此行: export  PATH=$PATH:/usr/local/apache/bin    
  133.  
  134.  
  135. 接下来就可以启动服务进行测试了。  
  136.  
  137. ###########################  
  138. ########################### 

 

测试httpd:

 

 

 

三、安装mysql-5.6.10

新建一个逻辑卷,并将其挂载至特定目录即可。创建一个20G的磁盘类型为8e,
使用逻辑卷是考虑到安全方面,也可以不适用,默认目录或者随便一个目录都可以。
这里假设其逻辑卷的挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录。

 
  
  1. 三、安装mysql-5.6.10  
  2.  
  3. 新建一个逻辑卷,并将其挂载至特定目录即可。创建一个20G的磁盘类型为8e,  
  4. 使用逻辑卷是考虑到安全方面,也可以不适用,默认目录或者随便一个目录都可以。  
  5. 这里假设其逻辑卷的挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录。  
  6.  
  7. #partprobe /dev/sda11     
  8. #pvcreate  /dev/sda11  
  9. #vgcreate  myvg /dev/sda11  
  10. #lvcreate -n mydata  -L 5G /dev/myvg  
  11. #mke2fs -j /dev/sda11  
  12. #vim /etc/fstab  
  13.  加入以下行:  
  14.  /dev/sda11     /mydata      ext3     defaults     0 0  
  15. #mount -a  
  16.  
  17.  
  18. 2、新建用户以安全方式运行进程:  
  19.  
  20. # groupadd -r mysql  
  21. # useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql  
  22. # chown -R mysql:mysql /mydata/data  
  23.  
  24. 3、安装并初始化mysql-5.6.10  
  25.  
  26. 首先下载平台对应的mysql版本至本地,这里是32位平台,因此,选择的为mysql-5.6.10-linux2.6-i686.tar.gz  
  27.  
  28. # tar xf mysql-5.6.10-linux2.6-i686.tar.gz -C /usr/local 
  29. # cd /usr/local/  
  30. # ln -sv mysql-5.6.10-linux2.6-i686  mysql  
  31. # cd mysql   
  32.  
  33. # chown -R mysql:mysql  .  
  34. # scripts/mysql_install_db --user=mysql --datadir=/mydata/data  
  35. # chown -R root  .  
  36.  
  37. 4、为mysql提供主配置文件:  
  38.  
  39. # cd /usr/local/mysql/support-file/  
  40. # cp my-default.cnf  /etc/my.cnf      
  41.  
  42. 另外还需要添加如下行指定mysql数据文件的存放位置:  
  43. # vim /etc/my.cnf  
  44.   添加: datadir = /mydata/data  
  45.  
  46.  
  47. 5、为mysql提供sysv服务脚本:  
  48.  
  49. # cd /usr/local/mysql  
  50. # cp support-files/mysql.server  /etc/rc.d/init.d/mysqld  
  51. # chmod +x /etc/rc.d/init.d/mysqld  
  52.  
  53. 添加至服务列表:  
  54. # chkconfig --add mysqld  
  55. # chkconfig mysqld on 
  56.  
  57.  
  58. 为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:  
  59. 6、输出mysql的man手册至man命令的查找路径:  
  60.  
  61. 编辑/etc/man.config,添加如下行即可:  
  62.  MANPATH  /usr/local/mysql/man  
  63.  
  64. 7、输出mysql的头文件至系统头文件路径/usr/include:  
  65.  这可以通过简单的创建链接实现:  
  66. # ln -sv /usr/local/mysql/include  /usr/include/mysql  
  67.  
  68. 8、输出mysql的库文件给系统库查找路径:  
  69. # echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf  
  70.  
  71. 而后让系统重新载入系统库:  
  72. # ldconfig  
  73.  
  74. 9、修改PATH环境变量,让系统可以直接使用mysql的相关命令。具体实现过程这里不再给出。  
  75.   vim /etc/procfile/mysql.sh  
  76.   加入此行:  export  PATH=$PATH:/usr/local/mysql/bin  
  77.     
  78. 此时可以测试mysql了  
  79.  
  80.  
  81. ###############################  
  82. ############################### 

 

 

 四、编译安装php-5.4.13和php-fpm
 

 
  
  1. 四、编译安装php-5.4.13  
  2.  
  3. 1、解决依赖关系:  
  4.  
  5. 请配置好yum源(可以是本地系统光盘)后执行如下命令:  
  6. # yum -y groupinstall "X Software Development"   
  7.  
  8. 如果想让编译的php支持mcrypt、mhash扩展,下载一下四个包安装即可  
  9. libmcrypt-2.5.7-5.el5.i386.rpm  
  10. libmcrypt-devel-2.5.7-5.el5.i386.rpm  
  11. mhash-0.9.9-1.el5.centos.i386.rpm  
  12. mhash-devel-0.9.9-1.el5.centos.i386.rpm  
  13. # rpm -ivh *.rpm  
  14.  
  15. 2、编译安装php-5.4.13  
  16.  
  17. 首先下载源码包至本地目录。  
  18.  
  19. # tar xf php-5.4.13.tar.bz2  
  20. # cd php-5.4.13  
  21. # ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql  
  22.  --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config   
  23.  --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir   
  24.  --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets   
  25.  --enable-fpm --with-mcrypt  --with-config-file-path=/etc   
  26.  --with-config-file-scan-dir=/etc/php.d --with-bz2  
  27.  
  28. 说明:如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。  
  29. # ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd  
  30.  
  31. # make  
  32. # make intall  
  33.  
  34. 3、为php提供配置文件:  
  35. # cp php.ini-production /etc/php.ini  
  36.  
  37. 4、配置php-fpm  
  38.    
  39. 为php-fpm提供Sysv init脚本,并将其添加至服务列表:  
  40. # cp sapi/fpm/init.d.php-fpm  /etc/rc.d/init.d/php-fpm  
  41. # chmod +x /etc/rc.d/init.d/php-fpm  
  42. # chkconfig --add php-fpm  
  43. # chkconfig php-fpm on 
  44.  
  45. 5、为php-fpm提供配置文件:  
  46. # cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf   
  47.  
  48. 6、编辑php-fpm的配置文件:  
  49. # vim /usr/local/php/etc/php-fpm.conf  
  50. 配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):  
  51. pm.max_children = 50  
  52. pm.start_servers = 5  
  53. pm.min_spare_servers = 2  
  54. pm.max_spare_servers = 8  
  55.  
  56.  
  57. 7、接下来就可以启动php-fpm了:  
  58. # service php-fpm start  
  59.  
  60. 使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):  
  61. # ps aux | grep php-fpm  
  62.  
  63. 默认情况下,fpm监听在127.0.0.1的9000端口,也可以使用如下命令验正其是否已经监听在相应的套接字。  
  64. # netstat -tnlp | grep php-fpm  
  65. tcp   0  0 127.0.0.1:9000    0.0.0.0:*    LISTEN     689/php-fpm  

 

测试php-fpm结果:

 

 

 

 

五、配置httpd虚拟主机

1、启用httpd的相关模块

 
  
  1. 五、配置httpd虚拟主机  
  2.  
  3. 1、启用httpd的相关模块  
  4.  
  5. 在Apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,  
  6. 此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载  
  7. LoadModule proxy_module modules/mod_proxy.so  
  8. LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so  
  9.  
  10. vim /etc/httpd/httpd.conf  
  11. 注释掉中心主机:DocumentRoot   
  12. 启用Incude /ect/httpd/extra/httpd-vhosts.conf  
  13. 启用模块:  
  14. LoadModule proxy_module modules/mod_proxy.so  
  15. LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so  
  16.  
  17.  
  18. 2、配置虚拟主机支持使用fcgi  
  19.  
  20. vim /ect/httpd/extra/httpd-vhosts.conf  
  21.  
  22. 在相应的虚拟主机中添加类似如下两行。  
  23.     ProxyRequests Off   关闭正向代理功能  
  24.     ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1  
  25.  
  26.       
  27. 例如:  
  28. <VirtualHost *:80>  
  29.     DocumentRoot "/www/a.com" 
  30.     ServerName www.a.com  
  31.     ProxyRequests Off 
  32.     ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/www/a.com/$1  
  33.     <Directory "/www/a.com">  
  34.         Options none  
  35.         AllowOverride none  
  36.         Require all granted  
  37.     </Directory>  
  38.    ErrorLog "/var/log/httpd/a.com-error_log" 
  39.     CustomLog "/var/log/httpd/a.com-access_log" common  
  40. </VirtualHost>  
  41.  
  42. ProxyRequests Off:关闭正向代理  
  43. ProxyPassMatch:把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://127.0.0.1:9000后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。  
  44.  
  45. 3、创建所需的网页目录,日志目录和index.php  
  46. # makdir /www/a.com -pv  
  47. # makdir /var/log/httpd -pv  
  48.  
  49.  
  50. 4、编辑apache配置文件httpd.conf,让apache能识别php格式的页面,并支持php格式的主页  
  51.    
  52. # vim /etc/httpd/httpd.conf  
  53.  (1)、添加如下二行  
  54.    AddType application/x-httpd-php  .php  
  55.    AddType application/x-httpd-php-source  .phps  
  56.  
  57.  (2)、定位至DirectoryIndex index.html   
  58.    修改为:  
  59.     DirectoryIndex  index.php  index.html  
  60.  
  61. 补充:Apache httpd 2.4以前的版本中,要么把PHP作为Apache的模块运行,要么添加一个第三方模块支持PHP-FPM实现。  
  62.  
  63. ################################  
  64. ################################ 

 

 

测试结果:

 

 

 

六、安装xcache,为php加速:
 

 
  
  1. 六、安装xcache,为php加速:  
  2.  
  3. 1、安装  
  4. # tar xf xcache-3.0.1.tar.gz  
  5. # cd xcache-3.0.1  
  6. # /usr/local/php/bin/phpize  
  7. # ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config  
  8. # make && make install  
  9.  
  10. 安装结束时,会出现类似如下行:  
  11. Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-zts-20100525/  
  12.  
  13. 2、编辑php.ini,整合php和xcache:  
  14.  
  15. 首先将xcache提供的样例配置导入php.ini  
  16. # mkdir /etc/php.d  
  17. # cp xcache.ini /etc/php.d  
  18.  
  19.  
  20. 3,重启php-fpm 加载模块  
  21. #  service php-fpm  restart   
  22.  
  23. 4,刷新页面看 Xcache是否加载进来  
  24.  
  25. ######################################  
  26. ###################################### 

 

 

测试结果:

 

 

 

七、添加网页版数据库管理工具 phpMyAdmin

 
  
  1. 七、添加网页版数据库管理工具 phpMyAdmin   
  2.  
  3. 1,解压安装 phpMyAdmin  
  4. # tar xvf  phpMyAdmin-3.5.1-all-languages  -C /www/a.com   ##这里是网站目录下  
  5. # cd /www/a.com/  
  6. # mv phpMyAdmin-3.5.1-all-languages  pma  
  7. # cd pma  
  8.  
  9.  
  10. 2, 添加配置文件  
  11. # cp config.sample.inc.php  config.inc.php  
  12. # vim config.inc.php  添加随机数 大概在17行  
  13.     
  14.  
  15. 3, 给予密码实现登录  
  16. # mysqladmin  -uroot  password 'redhat' 
  17. # 登陆 www.a.com/pma  
  18.  

 

测试结果:

 

 

 

                             到此结束 配置完毕!!!