# apache的概述 [TOC] ### apache的特点和应用场合   apache功能强大、配置简单、速度快、应用广泛、性能稳定可靠,并可做代理服务器或负载均衡来使用。 ### apache的应用场合   使用apache运行静态HTML页、图片(处理静态小文件能力不及nginx);   使用apache结合PHP引擎运行PHP、Perl等程序,LAMP被称之为经典组合;   使用apache结合tomcat/resin运行JSP、JAVA等程序,成为中小企业的首选;   使用apache做代理、负载均衡、rewrite规则过滤等。 * * * * * # apache的编译安装 ## 卸载系统默认自带的apache软件包   一般而言,操作系统默认自带或者使用rpm方式安装的apache软件版本都比较低且更新不及时,因此我们需要卸载掉安装在操作系统默认的apache软件。 ### 查询当前系统中已经安装的apahce软件包 ~~~ # rpm -qa |grep httpd # 如果机器没有查找到表示没有安装,则不用卸载 httpd-2.2.15-29.el6.centos.x86_64 httpd-tools-2.2.15-29.el6.centos.x86_64 参数说明: -q 等同于-query 查询的意思 -a 等同于-all 表示范围是系统所有软件 ~~~ ### 卸载查询到的apache   通过 `rpm -e -nodeps`后面分别是查询到的apache软件包名称即可卸载当前系统通过rpm安装方式安装的apache软件包,具体卸载操作过程如下: ~~~ #rpm -e -nodeps httpd-2.2.15-29.el6.centos.x86_64 # rpm -e -nodeps httpd-tools-2.2.15-29.el6.centos.x86_64 #rpm -qa |grep httpd* # 检查是否卸载完成 ~~~ ## [开始安装apahce](http://httpd.apache.org/docs/2.2/install.html) ### apache的安装 #### 安装依赖 `yum install zlib-devel -y` #### 具体步骤 ~~~ [root@curder-CenOS-6.5 ~] # mkdir /application # 创建目录存放编译后的文件 [root@curder-CenOS-6.5 ~] # cd /usr/local/src/ [root@curder-CenOS-6.5 /usr/local/src] # wget -O /usr/local/src/httpd-2.2.31.tar.gz http://mirrors.cnnic.cn/apache/httpd/httpd-2.2.31.tar.gz [root@curder-CenOS-6.5 /usr/local/src] # tar xf httpd-2.2.31.tar.gz # 解压操作 [root@curder-CenOS-6.5 /usr/local/src] # cd httpd-2.2.31 # 进入到apache的目录 [root@curder-CenOS-6.5 /usr/local/src/httpd-2.2.31] # ./configure --prefix=/application/apache2.2.31 \ --enable-deflate \ --enable-expires \ --enable-headers \ --enable-modules=most \ --enable-so \ --with-mpm=worker \ --enable-rewrite ~~~ > **参数说明** `--prefix=/application/apache2.2.31`表示指定安装路径为/applicaiton/apache2.2.31,如果不指定安装路径默认安装在`/usr/local/apache2` **`--enable-deflate`** 提供对内容的压缩传输编码支持,一般html,css,js等内容的站点,使用此参数功能会大大提高传输速度,提升用户体验。**在生产环境中,这是apache调优的一个重要选项之一。** **`--enable-expires`**激活允许通过配置文件控制HTTP的“Expries:”和“Cache-Control:”头内容,即对站点图片、js、css等内容提供在客户端浏览器缓存设置**在生产环境中,这是apache调优的一个重要选项之一。** `--enable-headers` 提供允许对http请求头的控制 `--enable-modules=most` 安装模块 `--enable-so`激活apahce服务的DSO(动态共享对象)支持,即在以后可以以DSO的方式编译安装共享模块,这个模块本身不能以DSO方式编译 `--with-mpm=worker` 选择apache mpm的模式为worker模式,因worker模式原理是更多的使用线程来处理请求,所以可以处理更多的并发请求,而系统资源的开销小于基于MPM prefork。如果不指定此参数,默认的模式为prefork进程模式; **`--enable-rewrite`** 提供基于URL规则的重写功能,提供伪静态功能使用该模块实现 **接下来的命令** ~~~ [root@curder-CenOS-6.5 /usr/local/src/httpd-2.2.31] # make && make install # 执行编译 # ln -s /application/apache2.2.31/ /usr/local/apache # 创建软连接 ~~~ 至此,apache的安装工作完成。 #### 查看编译的内容和模块 ~~~ [root@curder-CenOS-6.5 /usr/local] # /usr/local/apache/bin/apachectl -l Compiled in modules: core.c mod_authn_file.c mod_authn_dbm.c mod_authn_anon.c mod_authn_dbd.c mod_authn_default.c mod_authz_host.c ... ... [root@curder-CenOS-6.5 /usr/local] # /usr/local/apache/bin/apachectl -M Loaded Modules: core_module (static) authn_file_module (static) authn_dbm_module (static) authn_anon_module (static) authn_dbd_module (static) authn_default_module (static) authz_host_module (static) authz_groupfile_module (static) authz_user_module (static) [root@curder-CenOS-6.5 /usr/local] # /usr/local/apache/bin/apachectl -V Server version: Apache/2.2.31 (Unix) Server built: Oct 29 2015 07:00:52 Server's Module Magic Number: 20051115:40 Server loaded: APR 1.5.2, APR-Util 1.5.4 Compiled using: APR 1.5.2, APR-Util 1.5.4 Architecture: 64-bit Server MPM: Worker threaded: yes (fixed thread count) forked: yes (variable process count) ... ... ~~~ ## 启动apache并检查 ### apache的启动流程 apache安装完成后并不能直接提供服务,需要先启动apache服务,操作如下: ~~~ [root@curder-CenOS-6.5 /usr/local/apache] # /usr/local/apache/bin/apachectl start [root@curder-CenOS-6.5 /usr/local/apache] # ps aux |grep httpd root 21593 0.0 0.1 34428 2172 ? Ss 07:08 0:00 /application/apache2.2.31/bin/httpd -k start daemon 21594 0.0 0.0 34160 1300 ? S 07:08 0:00 /application/apache2.2.31/bin/httpd -k start [root@curder-CenOS-6.5 /usr/local/apache] # netstat -tunpl|grep :80 tcp 0 0 :::80 :::* LISTEN 21593/httpd ~~~ ### 检验apache安装成功 打开浏览器访问服务器的80端口,看到如下内容表示安装成功且正常启动了apache ![](https://box.kancloud.cn/2015-12-13_566c5c7fc26eb.png) 如果出不来`It works!`的内容页面,可从下列原因中一次排查: 1. iptables 和SELinux 防火墙是否关闭。 非正式生产环境下使用`/etc/init.d/iptables stop`命令关闭iptables,同时通过临时setenforce=0命令和`sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config`命令永久关闭SELinux。 2. 查看端口是否存在 `netstat -tunpl|grep 80` 3. 查看进程是否存在 `ps -ef |grep httpd` 4. 在服务器本地使用wget命令测试 `wget http://192.168.0.200` 5. 使用curl命令测试 `curl -I http://192.168.0.200` 6. 查看apache服务器的错误日志是否有特殊异常 `tail -100 /application/apache2.2.31/logs/access_log`