Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。

方式一:模块化的方式

安装apache

一、安装条件

1. 确保linux上已经安装apr和apr-util

2. 确保linux上已经安装了PCRE

3. 确保linux上已经安装了gcc

4. 确保linux上没有安装rpm包的httpd

[root@web ~]# rpm -qa | grep httpd

我安装的是httpd-2.4.7,它所依赖的apr的版本是1.4.0,而用yum安装的最高是1.3.9。所以索性将apr、apr-util和pcre都使用源码。

apr:http://apache.fayea.com/apache-mirror/apr/apr-1.5.0.tar.bz2

apr-util:http://apache.fayea.com/apache-mirror/apr/apr-util-1.5.3.tar.bz2

pcre:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.32.tar.bz2


二、安装

1. 解压各个软件包

[root@web ~]# tar xf httpd-2.4.7.tar.bz2
[root@web ~]# tar xf apr-1.5.0.tar.bz2
[root@web ~]# tar xf apr-util-1.5.3.tar.bz2
[root@web ~]# tar xf pcre-8.32.tar.bz2


2. 解决apr和apr-util的依赖关系

[root@web ~]# mv apr-1.5.0 ~/httpd-2.4.7/srclib/apr
[root@web ~]# mv apr-util-1.5.3 ~/httpd-2.4.7/srclib/apr-util
#移动到httpd解压后的文件srclib目录中,注意不要写版本号


3. 解决pcre的依赖关系

[root@web ~]# cd pcre-8.32
[root@web pcre-8.32]# ./configure --prefix=/usr/local/pcre
[root@web pcre-8.32]# make && make install


4. 安装apache软件

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

--prefix=/usr/local/apache #指定httpd的安装路径

--sysconfdir=/etc/httpd  #指定安装后配置文件的路径
--enable-so #这项是关键:支持动态模块装卸载,如果不写的话,php没办法以模块的方式编译成apache的模块了
--enable-ssl #支持https

--enable-rewrite #支持url重写
--with-zlib #支持使用zlib库将数据发送到客户端之前进行压缩

--enable-mpms-shared=most #构建MPM为动态模块,将所有的模块都设为动态共享,可以在系统运行时加载

--with-included-apr   #和依赖的apr和apr-util软件相关

--with-pcre= /usr/local/pcre  #依赖于pcre告知pcre的安装路径


5. 完善安装

[root@web apache]# vim /etc/profile
export PATH=$PATH:/usr/local/apache/bin
[root@web apache]# . !$
#在PATH变量中添加apache的可执行文件
[root@web apache]# vim /etc/ld.so.conf.d/apache-x86_64.conf
/usr/local/apache/lib
[root@web lib]# ldconfig -v
#让系统可以找到apache的库文件
[root@web lib]# vim /etc/man.config
MANPATH /usr/local/apache/man
#让系统可以找到apache的帮助文档
[root@web apache]# ln -sv /usr/local/apache/include /usr/include/apache
`/usr/include/apache' -> `/usr/local/apache/include'
#让系统可以找到apache的头文件


6. 启动添加启动脚本

这个脚本不需要手动写,只需要把rpm安装的那个/etc/init.d/httpd文件稍做修改就可以了。

[root@web logs]# vim /etc/httpd/httpd.conf
PidFile "/var/run/httpd.pid"
#在配置文件中增加这一行
[root@web ~]# vim /etc/init.d/httpd
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
pidfile=${PIDFILE-/var/run/httpd.pid}
#只需修改这3行即可

脚本已上传到附件里,将.txt后缀去掉即可


7. 设置开机自启动

[root@web logs]# chkconfig --add httpd
[root@web logs]# chkconfig httpd on


安装mysql

http://svenman.blog.51cto.com/6867097/1359467我的这篇博客写了


安装php

1. 安装php主程序

[root@web ~]# tar xf php-5.5.9.tar.bz2
[root@web ~]# cd php-5.5.9
[root@web php-5.5.9]# ./configure --prefix=/usr/local/php \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-libxml-dir  \
--with-zlib-dir  \
--enable-mbstring
[root@web php-5.5.9]# make && make install
[root@web php-5.5.9]# cp php.ini-production /usr/local/php/lib/php.ini


2. 配置apache使其可以调用php

注意:apache调用php有3种方式,CGI、FastCGI和模块,这里选择的调用方式就是将php作为apache的一个模块。

[root@web php-5.5.9]# vim /etc/httpd/httpd.conf
LoadModule php5_module        modules/libphp5.so    #确保这一行没有被注释
AddType application/x-httpd-php  .php
AddType application/x-httpd-php-source  .phps   #增加这2行
DirectoryIndex index.php index.html   #修改主页文件
[root@web php-5.5.9]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]


[root@web ~]# vim /etc/profile
export PATH=$PATH:/usr/local/php/bin

3. 测试

[root@web ~]# cd /usr/local/apache/htdocs/
#源码安装的apache的网站根目录就在这里,可以通过配置文件修改为熟悉的/var/www/html/下
[root@web htdocs]# vim index.php

×××LAMP+FastCGI+xcache加速器_第1张图片

看到这个页面就说明的apache可以成功调用php了,继续测试php到mysql的连接

[root@web htdocs]# vim index.php
[root@web htdocs]# service mysqld start
Starting MySQL.                                            [  OK  ]


wKiom1MPTrTilUNlAACFstsm2bo363.jpg

[root@web htdocs]# service mysqld stop
Shutting down MySQL..                                      [  OK  ]

wKioL1MPTruz3oGeAACAkwXThkE463.jpg

这样就说明测试成功了。


安装php加速器xcache

下载地址:xcache.lighttpd.net/pub/Releases/3.0.4/xcache-3.0.4.tar.bz2

1. 解压并安装

[root@web ~]# tar xf xcache-3.1.0.tar.bz2
[root@web ~]# mv xcache-3.1.0 /usr/local/xcache
[root@web ~]# cd !$
[root@web xcache]# phpize
#如果没有在PATH中声明需使用/usr/local/php/bin/phpize这个路径
[root@web xcache]# ./configure --enable-xcache --enable-xcache-coverager
[root@web xcache]# make && make install
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-zts-20121212/
#把安装结束的这个信息复制下来

注意:如果使用/usr/local/php/bin/phpize的路径, 并且他不是 $PATH 内第一个可以找到 phpize 的, 那么记得 使用./configure --with-php-config=/usr/local/php/bin/phpize


2. 配置xcache

[root@web xcache]# cat xcache.ini >> /usr/local/php/lib/php.ini
[root@web xcache]# echo -n "123456" | md5sum
[root@web xcache]# vim /usr/local/php/lib/php.ini
[xcache-common]
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20121212/"   #添加这一行,指定共享库路径
[xcache.admin]
xcache.admin.user = "xcache"
xcache.admin.pass = "e10adc3949ba59abbe56e057f20f883e"
#web方式访问xcache的用户名和密码,可以随便自己怎么设置
[xcache]
xcache.shm_scheme = "mmap"
xcache.mmap_path = "/tmp/xcache"
#其它参数暂不修改


×××LAMP+FastCGI+xcache加速器_第2张图片

查看一下信息


3. 拷贝web管理的文件到网站根目录

[root@web xcache]# mkdir /usr/local/apache/htdocs/xcache-admin
[root@web xcache]# cp -a htdocs/* /usr/local/apache/htdocs/xcache-admin


4. 测试

×××LAMP+FastCGI+xcache加速器_第3张图片

×××LAMP+FastCGI+xcache加速器_第4张图片


[root@oracle ~]# ab -c 500 -n 1000 http://192.168.2.91/index.php

×××LAMP+FastCGI+xcache加速器_第5张图片


方式二: 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

DocumentRoot "/usr/local/apache/htdocs/dong"
ServerName www.luntan2.com
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

在相应的虚拟主机中添加类似如下两行:  
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加速器_第6张图片