# 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

如果出不來`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`