目錄:
Apache簡介
安裝Apache HTTP Server軟體
配置檔案解析
應用案例
Apache HTTP Server項目是在Windows與Unix等平台上都可以運作的跨平台開源HTTP伺服器軟體,該項目的目标是提供安全、高效、可擴充的HTTP服務。Apache httpd自從1996年釋出以來,如今已經成為世界排名第一的Web伺服器軟體。Apache httpd最新的穩定版本為2.4.4。安裝Apache httpd軟體可以選擇源碼安裝或二進制包安裝,但由于源碼安裝是可以定制的一種安裝方式,這種安裝方式靈活性比較大,可以滿足企業對這種環境的不同需求。二進制包安裝在CentOS 6.3系統中可以選擇RPM包安裝,這種安裝的最大好處就是簡單快捷。本書采用的是源碼安裝軟體包,由于源碼安裝需要大量的依賴包,需要先安裝這些依賴軟體包。
Apache HTTP Sever非常重要的特性是她采用了子產品化設計模型,Apache子產品分為靜态子產品與動态子產品,靜态子產品是Apache最基本的子產品,是無法随時添加與解除安裝的子產品,靜态子產品在編譯軟體時設定。動态子產品是可以随時添加删除的子產品,這樣的設計使得企業部署Apache時可以獲得最大的靈活性,每個企業都可以根據自己的平台以及實際需求,安裝使用不同的子產品功能。Apache子產品将被編譯為動态共享對象(DSOs),這些動态共享對象獨立于httpd程式,DSO子產品可以在編譯Apache是添加,也可以後期随時通過Apache Extension Tool(apxs)工具編譯添加子產品。Apache HTTP Server軟體安裝完成後可以使用httpd –M檢視子產品加載清單。
安裝Apache軟體
1. 下載下傳軟體包
[root@centos6 ~]# wget http://mirror.bit.edu.cn/apache/httpd/httpd-2.4.4.tar.gz
[root@centos6 ~]# wget http://mirror.bjtu.edu.cn/apache/apr/apr-1.4.6.tar.gz
[root@centos6 ~]# wget http://mirror.bjtu.edu.cn/apache/apr/apr-util-1.5.2.tar.gz
2. 安裝軟體
[root@centos6 ~]# yum –y install gcc autoconf automake make \
> pcre pcre-devel openssl openssl-devel
[root@centos6 ~]# tar –xzf httpd-2.4.4.tar.gz –C /usr/src/
[root@centos6 ~]# tar –xzf apr-1.4.6.tar.gz –C /usr/src/
[root@centos6 ~]# tar –xzf apr-util-1.5.2.tar.gz –C /usr/src/
[root@centos6 ~]# cd /usr/src/apr-1.4.6/
[root@centos6 apr-1.4.6]# ./configure --with-apr=/usr/local/apr/
[root@centos6 apr-1.4.6]# make && make install
[root@centos6 apr-1.4.6]# cd /usr/src/apr-util-1.5.2/
[root@centos6 apr-util-1.5.2]# ./configure --with-apr=/usr/local/apr/
[root@centos6 apr-util-1.5.2]# make && make install
[root@centos6 apr-util-1.5.2]# cd /usr/src/httpd-2.4.4/
[root@centos6 httpd-2.4.4]# ./configure –prefix=/usr/local/apache2 –enable-so \
> --enable-ssl --enable-rewrite –with-mpm=worker –with-suexec-bin \
> --with-apr=/usr/local/apr/
[root@centos6 httpd-2.4.4]# make && make install
configure腳本用來檢查系統環境、查找依賴檔案、設定安裝路徑等操作,configure擁有很多參數,讀者可以通過./configure --help檢視該腳本支援的所有參數。
下面是configure常用參數說明:
參數 描述
--prefix 指定Apache httpd程式的安裝主目錄
--enable-so 開啟子產品化功能,支援DSO(動态共享對象)
--enable-ssl 支援SSL加密
--enable-rewrite 支援位址重寫
--with-mpm 設定Apache httpd工作模式
--with-suexec-bin 支援SUID、SGID
--with-apr 指定apr程式絕對路徑
3. 啟動服務
[root@centos6 ~]# /usr/local/apache2/bin/apachectl start
[root@centos6 ~]# netstat -ntulp |grep http
[root@centos6 ~]# iptables -I INPUT -p tcp -dport 80 -j ACCEPT
安裝完成後Apache會提供名為apachectl啟動腳本,該腳本提供了Apache httpd的啟動、關閉以及測試功能,沒有修改配置檔案的情況下使用start啟動httpd程式,可能會傳回錯誤提示:”Could not reliably determine the server’s fully qualified domain name”,提示說明httpd無法确定伺服器域名稱,可以修改主配置檔案的ServerName項來解決。該提示也可以忽略,通過netstat指令檢視httpd已經啟動成功。
在用戶端使用浏覽器通路該Web伺服器,看到”IT works!”說明伺服器可以被正常通路了。
apachectl具體參數如下:
start 啟動httpd程式,如果已經啟動過該程式則報錯
stop 關閉httpd程式
restart 重新開機httpd程式
graceful 啟動httpd,不中斷現有的連接配接
graceful-stop 關閉httpd,不中斷現有的連接配接
status 檢視httpd程式目前狀态
configtest 檢查httpd主配置檔案文法
Apache配置檔案預設位于/usr/local/apache2/conf目錄下,在該目錄下最主要的配置檔案是httpd.conf檔案,還有一些位于extra目錄下的附加配置檔案。此外original目錄中存有所有這些配置檔案的副本。Apache HTTP Sever主配置檔案主要由指令以及容器組成,容器使用<容器名稱>開始,</容器名稱>結尾,容器的指令一般僅在局部有效。下面是對主配置檔案重點指定的具體描述。
SeverRoot指令
ServerRoot指令設定Apache軟體的安裝主目錄,如果采用源碼安裝則預設路徑為/usr/local/apache2。
Listen指令
Listen指令設定伺服器監聽的IP以及端口号,預設監聽伺服器本機所有的IP位址的80端口。文法格式為Listen [IP位址:]端口 [協定],其中IP位址與協定為可選項,預設監聽所有IP,使用TCP協定。一個配置檔案中可以多次使用Listen指令來開啟多個端口。
LoadModule指令
Apache HTTP Server的特色之一就是她的功能多數是以子產品方式加載的,但如果希望Apache動态加載子產品,需要在編譯Apache時通過--enable-so将mod_so以靜态方式編譯到Apache核心子產品中,LoadModule指令的作用就是加載子產品。文法格式為LoadModule 子產品 子產品檔案名稱,子產品檔案一般位于ServerRoot指定目錄下的modules目錄中。
LoadFile指令
LoadFile指令功能類似于LoadModule,差別在于LoadFile可以通過絕對路徑加載modules目錄以為的子產品檔案。
ServerAdmin指令
當網站出現故障時,需要為客戶提供一個可以幫助解決問題的郵件位址,ServerAdmin指令的作用就是提供這樣的郵件位址。
ServerName指令
ServerName指令設定伺服器本機的主機名稱以及端口,對于URL位址的重定向很重要。
DocumentRoot指令
該指令設定Web服務對用戶端開放可見的文檔根目錄,也就是用戶端通路網站的根路徑,預設為/usr/local/apache2/htdocs。
ErrorLog指令
ErrorLog定位伺服器錯誤日志的位置,預設使用相對路徑,為ServerRoot指定目錄下的”logs/error_log”檔案。
ErrorLogFormat指令
設定錯誤日志的格式,Apache HTTP Server事先定義了很多格式字串 可以直接引用。
CustomLog指令
該指令設定用戶端的通路日志檔案名以及日志格式,預設為”logs/access_log”,文法格式為CustomLog 檔案名 格式。
LogFormat指令
描述使用者日志檔案格式,可以直接使用Apache預先設定的格式字串,一般我們會為LogFormat指令設定的日志格式建立别名,然後可以再通過CustomLog指令調用該日志格式别名。
Include指令
Include指令允許Apache在主配置檔案中加載其他的配置檔案,該指令文法比較簡單,Inclde指令後直接跟上其他附加配置檔案路徑即可。
Options指令
為特定目錄設定選項,文法格式為Options [+|-]選項 [[+|-]選項]。選項可以設定為None,代表不啟用任何額外功能,也可以使用如下常用選項。
All:開啟出來MultiViews之外的所有選項。
ExecCGI:允許執行CGI腳本。
FollowSymlinks:允許目錄下通過連結檔案連結到目錄外的檔案或目錄。
Indexes:如果與URL對應的目錄下,沒有DirectoryIndex指定的首頁文檔,則Apache
将會把目前目錄的所有檔案索引出來。
Order指令
控制預設通路狀态以及Allow與Deny次序,如果使用Order deny,allow,則先檢查拒絕,沒有拒絕則預設允許。如何使用Order allow,deny,則先檢查允許,沒有允許則預設拒絕。
以下為具體案例:
Order deny,allow
Deny from all
先檢查拒絕規則,再檢查允許規則,預設為允許。這裡Deny From all代表拒絕所有,是以最終結果為拒絕所有。
Order Allow,Deny
allow from All
先檢查允許規則,再檢查拒絕規則,allow from all代表允許所有,是以最終結果為允許所有。
allow from 192.168.0.1
先檢查允許規則時允許192.168.0.1,其餘為預設值,預設為拒絕所有,最終除192.168.0.1外拒絕所有。
Deny from All
先檢查允許規則時允許192.168.0.1通路,但檢查拒絕規則時為拒絕所有,而192.168.0.1也包含在all之中,當Allow與Deny有沖突時,以Order最後的規則覆寫其他的規則,本案例将使用Deny規則覆寫Allow規則,最終效果為拒絕所有人通路。
Order Deny,Allow
先檢查拒絕規則,再檢查允許規則,拒絕規則為拒絕所有,允許規則為允許192.168.0.1,拒絕與允許規則有沖突的部分本案例将采用Allow的規則,最終本案例可以實作僅允許192.168.0.1通路,其他任何主機均無法通路Apache服務。
IfDefine容器
IfDefine容器封裝的指令僅在啟動Apache時測試條件為真才會被處理,測試條件需要在啟動Apache時通過httpd -D定義。文法格式為<IfDefine>指令</IfDefine>。具體案例如下:
<IfDefine MemCache>
LoadModule mem_cache_module modules/mod_mem_cache.so
</IfDefine>
<IfDefine UseCache>
LoadModule cache_module modules/mod_ cache.so
這樣的配置可以讓管理者采用多種配置方式啟動Apache,啟動Apache時如果使用了httpd -DuseCache -DMemCache,則Apache将加載mod_mem_cache與mod_cache子產品,如果沒有使用-D指定任何參數,則Apache将不加載這些子產品。
IfModule容器
使用IfModule容器可以封裝僅在條件滿足時才會處理的指令,根據指定的子產品是否加載決定條件是否滿足,文法格式<IfModule [!] 子產品>指令</IfModule>。具體案例如下:
<IfModule unixd_module>
User daemon
Group daemon
</IfModule>
以上配置說明,僅在Apache加載了unixd_module子產品後User daemon與Group daemon才會被Apache處理。
Directory容器
該容器内的指令僅應用于特定的檔案系統目錄、子目錄以及目錄下的内容,文法格式為<Directory directory-path>指令</Directory>。路徑可以使用~比對正規表達式。具體案例如下:
<Directory “/usr/local/apche2/htdocs”>
Options Indexs FollowSymLinks
</Directory>
<Directory ~ “^/www/[0-9]{3}”>
AllowOverride None
以上案例中Opions Index FollowSymLins僅對/usr/local/apache2/htdocs目錄有效,AllowOverride None僅對所有/www目錄下包含三個數字的子目錄有效。
<DirectoryMatch>
DirectoryMatch類似于Directory,但可以直接使用正規表達式比對,而無需像Directory一樣使用~符号才可以比對。
Files容器
該容器類似于Directory容器,但Files容器内的指令僅應用于特定的檔案,文法格式如下:<Files 檔案名>指令</File>,與Directory類似可以使用~比對正規表達式。
FilesMatch容器
僅使用正規表達式比對需要的檔案,容器内的指令僅應用于比對成功的特定檔案。FilesMatch等同于使用了~符号的Files。
Location容器
Location容器内定義的指令僅對特定的URL有效,文法格式為<Location URL-path|URL>指令</Location>,如果需要使用正規表達式比對URL可以使用~符号。
LocationMathch容器
LocationMatch僅使用正規表達式比對URL,等同于使用了~符号比對的Location。
VirtualHost容器
虛拟主機應用案例
虛拟主機是在一台伺服器上同時運作多個網站業務,Apache HTTP Server支援基于域名以及基于IP虛拟主機類型。在Apache配置檔案中虛拟主機指令需要使用VirtualHost容器封裝。基于IP的虛拟主機可以根據不同的IP位址以及端口号定位不同的網站請求,但基于IP的虛拟主機需要獨立的IP位址定位連接配接的網站,而目前IP位址是網際網路的稀缺資源,是以很多時候我們更喜歡基于域名的虛拟主機,伺服器可以根據用戶端通路HTTP的頭部資訊來實作網站的分離解析,用戶端可以使用不同的域名通路位于同一IP位址的伺服器資源。
當用戶端請求到達後,伺服器會根據<VirtualHost IP位址:[端口号]>參數比對IP位址與端口号,IP位址可以使用*比對伺服器本地所有IP位址。接下來我們通過一個案例說明基于域名虛拟主機的實作方式,首先我們需要将主配置檔案中Include conf/extra/httpd-vhosts.conf這樣功能開啟,預設該行為注釋行,去除#符号即可。Include指令會将httpd-vhosts.conf檔案視作為配置檔案的一部分。下面我們僅列出該配置檔案中需要修改的部分。
[root@centos6 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/usr/local/apache2/htdocs/example"
ServerName www.example.com
ServerAlias web.example.com
ErrorLog "logs/www.example.com-error_log"
CustomLog "logs/www.example.com-access_log" common
</VirtualHost>
DocumentRoot "/usr/local/apache2/htdocs/test"
ServerName www.test.com
ErrorLog "logs/test. com-error_log"
CustomLog "logs/test.com-access_log" common
[root@centos6 ~]# mkdir -p /usr/local/apache2/htdocs/{example,test}
[root@centos6 ~]# echo “example.com” > /usr/local/apache2/htdocs/example/index.html
[root@centos6 ~]# echo “test.com” > /usr/local/apache2/htdocs/test/index.html
[root@centos6 ~]# /usr/local/apache2/bin/apachectl restart
Apache HTTP Sever完成以上配置後即可實作基于相同IP位址的www.example.com與www.test.com網站。可以使用用戶端通路這兩個域名測試效果,如果沒有合法的DNS伺服器可以通過修改hosts檔案的方式進行域名解析。如果讀者需要實作基于IP位址的虛拟主機,隻需要将VirtualHost後面的*修改為固定的IP位址即可,多個虛拟主機需要使用多個VirtualHost封裝。
http://manual.blog.51cto.com/3300438/1186157 丁丁曆險
本文轉自丁丁曆險51CTO部落格,原文連結: http://blog.51cto.com/manual/1186157,如需轉載請自行聯系原作者