# 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`