摘要:
什么是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包。这里选择使用编译源代码的方式进行.
- 一、解决依赖关系,安装apr
- httpd-2.4.4需要较新版本的apr和apr-util,因此需要事先对其进行升级。升级方式有两种,
- 一种是通过源代码编译安装,一种是直接升级rpm包。这里选择使用编译源代码的方式进行.
- 1、 编译安装apr
- # tar xf apr-1.4.6.tar.bz2
- # cd apr-1.4.6
- # ./configure --prefix=/usr/local/apr
- # make && make install
- 2、 编译安装apr-util
- # tar xf apr-util-1.5.2.tar.bz2
- # cd apr-util-1.5.2
- # ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr #### 因为这个包依赖上面的包 所以要指定apr 在那个位置,系统上默认也有apr
- # make && make install
- httpd-2.4.4编译过程也要依赖于pcre-devel软件包,需要事先安装。此软件包系统光盘自带,因此,找到并安装即可。
- # yum install -y pcre-devel
- ###################################
- ###################################
二、编译安装httpd-2.4.4
首先下载httpd-2.4.4到本地,而后执行如下命令进行编译安装过程:
- 二、编译安装httpd-2.4.4
- 首先下载httpd-2.4.4到本地,而后执行如下命令进行编译安装过程:
- 1、
- # tar xf httpd-2.4.4.tar.bz2
- # cd httpd-2.4.4
- # ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd
- --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib
- --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
- --enable-mpms-shared=all --with-mpm=event
- # make && make install
- 2、修改httpd的主配置文件,设置其Pid文件的路径
- 编辑/etc/httpd/httpd.conf,添加如下行即可:
- PidFile "/var/run/httpd.pid"
- 3、提供SysV服务脚本/etc/rc.d/init.d/httpd,内容如下:
- #!/bin/bash
- #
- # httpd Startup script for the Apache HTTP Server
- #
- # chkconfig: - 85 15
- # description: Apache is a World Wide Web server. It is used to serve \
- # HTML files and CGI.
- # processname: httpd
- # config: /etc/httpd/conf/httpd.conf
- # config: /etc/sysconfig/httpd
- # pidfile: /var/run/httpd.pid
- # Source function library.
- . /etc/rc.d/init.d/functions
- if [ -f /etc/sysconfig/httpd ]; then
- . /etc/sysconfig/httpd
- fi
- # Start httpd in the C locale by default.
- HTTPD_LANG=${HTTPD_LANG-"C"}
- # This will prevent initlog from swallowing up a pass-phrase prompt if
- # mod_ssl needs a pass-phrase from the user.
- INITLOG_ARGS=""
- # Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
- # with the thread-based "worker" MPM; BE WARNED that some modules may not
- # work correctly with a thread-based MPM; notably PHP will refuse to start.
- # Path to the apachectl script, server binary, and short-form for messages.
- apachectl=/usr/local/apache/bin/apachectl
- httpd=${HTTPD-/usr/local/apache/bin/httpd}
- prog=httpd
- pidfile=${PIDFILE-/var/run/httpd.pid}
- lockfile=${LOCKFILE-/var/lock/subsys/httpd}
- RETVAL=0
- start() {
- echo -n $"Starting $prog: "
- LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
- RETVAL=$?
- echo
- [ $RETVAL = 0 ] && touch ${lockfile}
- return $RETVAL
- }
- stop() {
- echo -n $"Stopping $prog: "
- killproc -p ${pidfile} -d 10 $httpd
- RETVAL=$?
- echo
- [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
- }
- reload() {
- echo -n $"Reloading $prog: "
- if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
- RETVAL=$?
- echo $"not reloading due to configuration syntax error"
- failure $"not reloading $httpd due to configuration syntax error"
- else
- killproc -p ${pidfile} $httpd -HUP
- RETVAL=$?
- fi
- echo
- }
- # See how we were called.
- case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- status)
- status -p ${pidfile} $httpd
- RETVAL=$?
- ;;
- restart)
- stop
- start
- ;;
- condrestart)
- if [ -f ${pidfile} ] ; then
- stop
- start
- fi
- ;;
- reload)
- reload
- ;;
- graceful|help|configtest|fullstatus)
- $apachectl $@
- RETVAL=$?
- ;;
- *)
- echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
- exit 1
- esac
- exit $RETVAL
- 4、而后为此脚本赋予执行权限:
- # chmod +x /etc/rc.d/init.d/httpd
- 5、加入服务列表:
- # chkconfig --add httpd
- 6、加入httpd 配置文件检测。新建 httpd.sh
- #vim /etc/profile.d/httpd.sh
- 加入此行: export PATH=$PATH:/usr/local/apache/bin
- 接下来就可以启动服务进行测试了。
- ###########################
- ###########################
测试httpd:
三、安装mysql-5.6.10
新建一个逻辑卷,并将其挂载至特定目录即可。创建一个20G的磁盘类型为8e,
使用逻辑卷是考虑到安全方面,也可以不适用,默认目录或者随便一个目录都可以。
这里假设其逻辑卷的挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录。
- 三、安装mysql-5.6.10
- 新建一个逻辑卷,并将其挂载至特定目录即可。创建一个20G的磁盘类型为8e,
- 使用逻辑卷是考虑到安全方面,也可以不适用,默认目录或者随便一个目录都可以。
- 这里假设其逻辑卷的挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录。
- #partprobe /dev/sda11
- #pvcreate /dev/sda11
- #vgcreate myvg /dev/sda11
- #lvcreate -n mydata -L 5G /dev/myvg
- #mke2fs -j /dev/sda11
- #vim /etc/fstab
- 加入以下行:
- /dev/sda11 /mydata ext3 defaults 0 0
- #mount -a
- 2、新建用户以安全方式运行进程:
- # groupadd -r mysql
- # useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
- # chown -R mysql:mysql /mydata/data
- 3、安装并初始化mysql-5.6.10
- 首先下载平台对应的mysql版本至本地,这里是32位平台,因此,选择的为mysql-5.6.10-linux2.6-i686.tar.gz
- # tar xf mysql-5.6.10-linux2.6-i686.tar.gz -C /usr/local
- # cd /usr/local/
- # ln -sv mysql-5.6.10-linux2.6-i686 mysql
- # cd mysql
- # chown -R mysql:mysql .
- # scripts/mysql_install_db --user=mysql --datadir=/mydata/data
- # chown -R root .
- 4、为mysql提供主配置文件:
- # cd /usr/local/mysql/support-file/
- # cp my-default.cnf /etc/my.cnf
- 另外还需要添加如下行指定mysql数据文件的存放位置:
- # vim /etc/my.cnf
- 添加: datadir = /mydata/data
- 5、为mysql提供sysv服务脚本:
- # cd /usr/local/mysql
- # cp support-files/mysql.server /etc/rc.d/init.d/mysqld
- # chmod +x /etc/rc.d/init.d/mysqld
- 添加至服务列表:
- # chkconfig --add mysqld
- # chkconfig mysqld on
- 为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:
- 6、输出mysql的man手册至man命令的查找路径:
- 编辑/etc/man.config,添加如下行即可:
- MANPATH /usr/local/mysql/man
- 7、输出mysql的头文件至系统头文件路径/usr/include:
- 这可以通过简单的创建链接实现:
- # ln -sv /usr/local/mysql/include /usr/include/mysql
- 8、输出mysql的库文件给系统库查找路径:
- # echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
- 而后让系统重新载入系统库:
- # ldconfig
- 9、修改PATH环境变量,让系统可以直接使用mysql的相关命令。具体实现过程这里不再给出。
- vim /etc/procfile/mysql.sh
- 加入此行: export PATH=$PATH:/usr/local/mysql/bin
- 此时可以测试mysql了
- ###############################
- ###############################
四、编译安装php-5.4.13和php-fpm
- 四、编译安装php-5.4.13
- 1、解决依赖关系:
- 请配置好yum源(可以是本地系统光盘)后执行如下命令:
- # yum -y groupinstall "X Software Development"
- 如果想让编译的php支持mcrypt、mhash扩展,下载一下四个包安装即可
- libmcrypt-2.5.7-5.el5.i386.rpm
- libmcrypt-devel-2.5.7-5.el5.i386.rpm
- mhash-0.9.9-1.el5.centos.i386.rpm
- mhash-devel-0.9.9-1.el5.centos.i386.rpm
- # rpm -ivh *.rpm
- 2、编译安装php-5.4.13
- 首先下载源码包至本地目录。
- # tar xf php-5.4.13.tar.bz2
- # cd php-5.4.13
- # ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql
- --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config
- --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir
- --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets
- --enable-fpm --with-mcrypt --with-config-file-path=/etc
- --with-config-file-scan-dir=/etc/php.d --with-bz2
- 说明:如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。
- # ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd
- # make
- # make intall
- 3、为php提供配置文件:
- # cp php.ini-production /etc/php.ini
- 4、配置php-fpm
- 为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
- 5、为php-fpm提供配置文件:
- # cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
- 6、编辑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
- 7、接下来就可以启动php-fpm了:
- # service php-fpm start
- 使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):
- # ps aux | grep php-fpm
- 默认情况下,fpm监听在127.0.0.1的9000端口,也可以使用如下命令验正其是否已经监听在相应的套接字。
- # netstat -tnlp | grep php-fpm
- tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 689/php-fpm
测试php-fpm结果:
五、配置httpd虚拟主机
1、启用httpd的相关模块
- 五、配置httpd虚拟主机
- 1、启用httpd的相关模块
- 在Apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,
- 此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载
- LoadModule proxy_module modules/mod_proxy.so
- LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
- vim /etc/httpd/httpd.conf
- 注释掉中心主机:DocumentRoot
- 启用Incude /ect/httpd/extra/httpd-vhosts.conf
- 启用模块:
- LoadModule proxy_module modules/mod_proxy.so
- LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
- 2、配置虚拟主机支持使用fcgi
- vim /ect/httpd/extra/httpd-vhosts.conf
- 在相应的虚拟主机中添加类似如下两行。
- ProxyRequests Off 关闭正向代理功能
- ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1
- 例如:
- <VirtualHost *:80>
- DocumentRoot "/www/a.com"
- ServerName www.a.com
- ProxyRequests Off
- ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/www/a.com/$1
- <Directory "/www/a.com">
- Options none
- AllowOverride none
- Require all granted
- </Directory>
- ErrorLog "/var/log/httpd/a.com-error_log"
- CustomLog "/var/log/httpd/a.com-access_log" common
- </VirtualHost>
- ProxyRequests Off:关闭正向代理
- ProxyPassMatch:把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://127.0.0.1:9000后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。
- 3、创建所需的网页目录,日志目录和index.php
- # makdir /www/a.com -pv
- # makdir /var/log/httpd -pv
- 4、编辑apache配置文件httpd.conf,让apache能识别php格式的页面,并支持php格式的主页
- # vim /etc/httpd/httpd.conf
- (1)、添加如下二行
- AddType application/x-httpd-php .php
- AddType application/x-httpd-php-source .phps
- (2)、定位至DirectoryIndex index.html
- 修改为:
- DirectoryIndex index.php index.html
- 补充:Apache httpd 2.4以前的版本中,要么把PHP作为Apache的模块运行,要么添加一个第三方模块支持PHP-FPM实现。
- ################################
- ################################
测试结果:
六、安装xcache,为php加速:
- 六、安装xcache,为php加速:
- 1、安装
- # tar xf xcache-3.0.1.tar.gz
- # cd xcache-3.0.1
- # /usr/local/php/bin/phpize
- # ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
- # make && make install
- 安装结束时,会出现类似如下行:
- Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20100525/
- 2、编辑php.ini,整合php和xcache:
- 首先将xcache提供的样例配置导入php.ini
- # mkdir /etc/php.d
- # cp xcache.ini /etc/php.d
- 3,重启php-fpm 加载模块
- # service php-fpm restart
- 4,刷新页面看 Xcache是否加载进来
- ######################################
- ######################################
测试结果:
七、添加网页版数据库管理工具 phpMyAdmin
- 七、添加网页版数据库管理工具 phpMyAdmin
- 1,解压安装 phpMyAdmin
- # tar xvf phpMyAdmin-3.5.1-all-languages -C /www/a.com ##这里是网站目录下
- # cd /www/a.com/
- # mv phpMyAdmin-3.5.1-all-languages pma
- # cd pma
- 2, 添加配置文件
- # cp config.sample.inc.php config.inc.php
- # vim config.inc.php 添加随机数 大概在17行
- 3, 给予密码实现登录
- # mysqladmin -uroot password 'redhat'
- # 登陆 www.a.com/pma
测试结果:
到此结束 配置完毕!!!