摘要:
什么是apr?
apr 是apache portable runtime 用上这个后可以有效的提高apahe处理静态页面的能力,将Tomcat线程数开到300以上的水平,然后模拟一大堆并发请求。如果不配APR,基本上300个线程狠快就用满,以后的请求就只好等待。但是配上APR之后,并发的线程数量明显下降,从原来的300可能会马上下降到只有几十,新的请求会毫无阻塞的进来。APR对于apache最大的作用就是socket调度。你在局域网环境测,就算是400个并发,也是一瞬间就处理/传输完毕,但是在真实的Internet环境下,页面处理时间只占0.1%都不到,绝大部分时间都用来页面传输。如果不用APR,一个线程同一时间只能处理一个用户,势必会造成阻塞。所以生产环境下用apr是非常必要的。
什么是XCache?
XCache 是一个开源的 opcode 缓存器/优化器, 这意味着他能够提高您服务器上的 PHP 性能. 他通过把编译 PHP 后的数据缓冲到共享内存从而避免重复的编译过程, 能够直接使用缓冲区已编译的代码从而提高速度. 通常能够提高您的页面生成速率 2 到5 倍, 降低服务器负载.
安装环境和软件版本:
系统版本: redhat5.8
httpd版本: httpd-2.4.4 下载地址:http://httpd.apache.org/download.cgi#apache24
mysql版本: mysql-5.5.28 下载地址: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
开发环境包必须先装上:Development Libraries Development Tools
本文安装过程大致分为四部分安装:
一,安装apr
二,安装httpd
三,安装mysql
四,安装php
五,安装 XCache
LAMP+ XCache安装过程:
一、解决依赖关系,安装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
- ###初始化参数解释#####
- --prefix=/usr/local/apache 初始化默认安装目录
- --sysconfdir=/etc/httpd 默认配置文件位置
- --enable-so 支持动态共享模块
- --enable-ssl 支持ssl加密功能,支持使用https
- --enable-cgi 支持CGI
- --enable-rewrite 支持URL重写
- --with-zlib
- --with-pcre
- --with-apr=/usr/local/apr 指定apr目录
- --with-apr-util=/usr/local/apr-util 指定apr-util目录
- --enable-mpms-shared=all 编译所有的MPM模块
- --with-mpm=event 设置默认MPM模块为event
- #################
- #################
- 补充:
- (1)构建MPM为静态模块
- 在全部平台中,MPM都可以构建为静态模块。在构建时选择一种MPM,链接到服务器中。如果要改变MPM,必须重新构建。
- 为了使用指定的MPM,请在执行configure脚本 时,使用参数 --with-mpm=NAME。NAME是指定的MPM名称。
- 编译完成后,可以使用 ./httpd -l 来确定选择的MPM。 此命令会列出编译到服务器程序中的所有模块,包括 MPM。
- (2)构建 MPM 为动态模块
- 在Unix或类似平台中,MPM可以构建为动态模块,与其它动态模块一样在运行时加载。
- 构建 MPM 为动态模块允许通过修改LoadModule指令内容来改变MPM,而不用重新构建服务器程序。
- 在执行configure脚本时,使用--enable-mpms-shared选项即可启用此特性。当给出的参数为all时,
- 所有此平台支持的MPM模块都会被安装。还可以在参数中给出模块列表。默认MPM,
- 可以自动选择或者在执行configure脚本时通过--with-mpm选项来指定,然后出现在生成的服务器配置文件中。
- 编辑LoadModule指令内容可以选择不同的MPM。
- ####################
- ####################
- 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
- 接下来就可以启动服务进行测试了。
测试结果截图:
三、安装mysql-5.5.28
- 三、安装mysql-5.5.28
- 1、准备数据存放的文件系统
- 新建一个逻辑卷,并将其挂载至特定目录即可。创建一个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
- # chmod o-rx /mydata/data/
- 3、安装并初始化mysql-5.5.28
- 首先下载平台对应的mysql版本至本地,这里是32位平台,因此,选择的为mysql-5.5.28-linux2.6-i686.tar.gz。
- # tar xf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local
- # cd /usr/local/
- # ln -sv mysql-5.5.28-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
- # cp support-files/my-large.cnf /etc/my.cnf
- 并修改此文件中thread_concurrency的值为你的CPU个数乘以2,比如这里使用如下行:
- thread_concurrency = 2
- 另外还需要添加如下行指定mysql数据文件的存放位置:
- 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
- 6、添加至服务列表:
- # chkconfig --add mysqld
- # chkconfig mysqld on
- 为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:
- 7、输出mysql的man手册至man命令的查找路径:
- 编辑/etc/man.config,添加如下行即可:
- MANPATH /usr/local/mysql/man
- 8、输出mysql的头文件至系统头文件路径/usr/include:
- 这可以通过简单的创建链接实现:
- # ln -sv /usr/local/mysql/include /usr/include/mysql
- 9、输出mysql的库文件给系统库查找路径:
- # echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
- 而后让系统重新载入系统库:
- # ldconfig
- 10、修改PATH环境变量,让系统可以直接使用mysql的相关命令。
- #vim /etc/profile.d/mysql.sh 输入以下内容
- export PATH=$PATH:/usr/local/mysql/bin
- 11、启动mysql,而后就可以启动服务测试使用了。
- #service mysqld restart
测试mysql 结果截图:
四、编译安装php-5.4.13
- 四、编译安装php-5.4.13
- 1、解决依赖关系:
- 请配置好yum源(可以是本地系统光盘)后执行如下命令:
- # yum -y groupinstall "X Software Development"
- 如果想让编译的php支持mcrypt和mhash扩展,四个rpm包并安装之:
- 下载网站:http://rpm.pbone.net/ 直接在此网站搜索下载
- libmcrypt-2.5.7-5.el5.i386.rpm
- libmcrypt-devel-2.5.7-5.el5.i386.rpm
- mhash-0.9.2-6.el5.i386.rpm
- mhash-devel-0.9.2-6.el5.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
- --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt
- --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d
- --with-bz2 --enable-maintainer-zts
- ##############
- ##############
- 说明:
- 1、这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项。
- 2、如果使用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 test
- # make intall
- 3、为php提供配置文件:
- # cp php.ini-production /etc/php.ini
- 4、 编辑apache配置文件httpd.conf,以apache支持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
- 5、修改默认网页路径测试php
- vim /usr/local/apache/htdocs/index.php
- <?php
- phpinfo ()
- ?>
- 如果想查看php是否连接到mysql 那么就加入下面 代码;
- <?php
- $conn=mysql_connect('localhost','root','');
- if ($conn)
- echo "Success...";
- else
- echo "Failure...";
- ?>
- 6、新启动httpd,或让其重新载入配置文件即可测试php是否已经可以正常使用。
- service httpd restart
测试php是否成功:
五、安装xcache,为php加速:
- 五、安装xcache,为php加速:
- 1、安装
- # tar xf xcache-3.0.1.tar.gz
- # cd xcache-3.0.1
- # /usr/local/php/bin/phpize ###这条命令意思是在制定的目录下执行phpize准备php扩展以便编译
- # ./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
- #######注意#######
- 安装xcache-3.0.1的时候下面步骤不用做,在此版本之前的版本下面的步骤要做
- #######注意#######
- 说明:xcache.ini文件在xcache的源码目录中。
- 接下来编辑/etc/php.d/xcache.ini,找到zend_extension开头的行,修改为如下行:
- zend_extension = /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so
- 注意:如果php.ini文件中有多条zend_extension指令行,要确保此新增的行排在第一位。
- 重复httpd 让其生效
- service httpd restart
- 编辑index.php查看xcache 是否生效
- vim /usr/local/apache/htdocs/index.php
- <?php
- phpinfo();
- ?>
- 4、配置虚拟主机
- (1),要使用虚拟主机必须先注销中心主机
- #vim /etc/httpd/httpd.conf
- 注释掉此行 DocumentRoot "/usr/local/apache/htdocs"
- 启用此行 Include /etc/httpd/extra/httpd-vhosts.conf
- 启用 mod_log_config 模块 ,大概在105行
- (2),vim /etc/httpd/extra/httpd-vhosts.conf
- 添加两台虚拟主机
- <VirtualHost *:80>
- ServerName www.a.com
- DocumentRoot "/www/a.com"
- <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" combined
- </VirtualHost>
- <VirtualHost *:80>
- ServerName www.b.com
- DocumentRoot "/www/b.com"
- <Directory "/www/b.com">
- Options none
- AllowOverride none
- Require all granted
- </Directory>
- ErrorLog "/var/log/httpd/b.com-error_log"
- CustomLog "/var/log/httpd/b.com-access_log" common
- </VirtualHost>
- (3)、创建所需要的目录
- mkdir /www/{a.com,b.com} -pv
- mkdir /var/log/httpd -pv
- (4),为虚拟主机准备网页
- cd /www/a.com
- vim index.php
- <?php
- phpinfo()
- ?>
- 配置结束 开始测试吧
xcache-3.0.1 测试结果:
配置结束!!!!!