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/profileexport 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.configMANPATH /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.confPidFile "/var/run/httpd.pid"#在配置文件中增加这一行
[root@web ~]# vim /etc/init.d/httpdapachectl=/usr/local/apache/bin/apachectlhttpd=${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

我的这篇博客写了

安装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.confLoadModule php5_module        modules/libphp5.so    #确保这一行没有被注释AddType application/x-httpd-php  .phpAddType application/x-httpd-php-source  .phps   #增加这2行DirectoryIndex index.php index.html   #修改主页文件
[root@web php-5.5.9]# service httpd restartStopping httpd:                                            [  OK  ]Starting httpd:                                            [  OK  ]

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

3. 测试

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

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

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

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

这样就说明测试成功了。

安装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 installInstalling 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"#其它参数暂不修改

查看一下信息

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. 测试

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

方式二: 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.confLoadModule proxy_module modules/mod_proxy.soLoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so  #去掉注释符PidFile "/var/run/httpd.pid"#增加这一行#DocumentRoot "/usr/local/apache/htdocs"   #关闭中心主机DirectoryIndex index.php index.html        #增加index.phpAddType application/x-httpd-php.phpAddType 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.confpid = run/php-fpm.pid    #取消这一行的注释,因为脚本需要根据pid文件确定服务是否正在运行listen = 127.0.0.1:9000pm.max_children = 20pm.start_servers = 5pm.min_spare_servers = 2pm.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.comProxyRequests OffProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache/htdocs/dong/$1ErrorLog "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. 测试