配置文件解析

本人安裝的httpd2.4配置文件位于/etc/httpd24目錄下,在該目錄下最主要的配置文件是httpd.conf文件,還有一些位于extra目錄下的附加配置文件。此外original目錄中存有所有這些配置文件的副本。


下面是對主配置文件重點指定的具體描述。
SeverRoot指令

ServerRoot指令設置Apache軟件的安裝主目錄

ServerRoot "/usr/local/apache1"

Listen指令

Listen指令設置服務器監聽的IP以及端口號,默認監聽服務器本機所有的IP地址的80端口。

語法格式為 ?Listen ?IP: 端口

其中IP地址為可選項,默認監聽所有IP,使用TCP協議。一個配置文件中可以多次使用Listen指令來開啟多個端口。

Listen 80
Listen 172.16.251.248:8080


LoadModule指令

Apache HTTP Server的特色之一就是她的功能多數是以模塊方式加載的,但如果希望Apache動態加載模塊,需要在編譯Apache時通過--enable-so將mod_so以靜態方式編譯到Apache核心模塊中,LoadModule指令的作用就是加載模塊。

語法格式為:LoadModule 模塊 模塊文件名稱,模塊文件一般位于ServerRoot指定目錄下modules目錄中。

LoadModule filter_module modules/mod_filter.so
#LoadModule substitute_module modules/mod_substitute.so
#LoadModule sed_module modules/mod_sed.so
LoadModule deflate_module modules/mod_deflate.so



ServerAdmin指令

當網站出現故障時,需要為客戶提供一個可以幫助解決問題的郵件地址,ServerAdmin指令的作用就是提供這樣的郵件地址。

ServerAdmin cw@linux.com


ServerName指令

ServerName指令設置服務器本機的主機名稱以及端口,對于URL地址的重定向很重要。

ServerName localhost:80


DocumentRoot指令

該指令設置Web服務對客戶端開放可見的文檔根目錄,也就是客戶端訪問網站的根路徑

DocumentRoot "/usr/local/apache1/htdocs"


ErrorLog指令

ErrorLog定位服務器錯誤日志的位置,默認使用相對路徑,為ServerRoot指定目錄下的”logs/error_log”文件。

ErrorLog "logs/error_log"


LogFormat指令

設置錯誤日志的格式,Apache HTTP Server事先定義了很多格式字串 可以直接引用。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined


CustomLog指令

該指令設置客戶端的訪問日志文件名以及日志格式,默認為”logs/access_log”,語法格式為CustomLog 文件名 格式。

CustomLog "logs/access_log" combined


Include指令

Include指令允許Apache在主配置文件中加載其他的配置文件,該指令語法比較簡單,Inclde指令后直接跟上其他附加配置文件路徑即可。

Include /etc/httpd24/extra/httpd-info.conf


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代表允許所有,所以最終結果為允許所有。


Order Allow,Deny
allow from 192.168.0.1
先檢查允許規則時允許192.168.0.1,其余為默認值,默認為拒絕所有,最終除192.168.0.1外拒絕所有。


Order Allow,Deny
allow from 192.168.0.1
Deny from All
先檢查允許規則時允許192.168.0.1訪問,但檢查拒絕規則時為拒絕所有,而192.168.0.1也包含在all之中,當Allow與Deny有沖突時,以Order最后的規則覆蓋其他的規則,本案例將使用Deny規則覆蓋Allow規則,最終效果為拒絕所有人訪問。


Order Deny,Allow
Deny from all
allow from 192.168.0.1
先檢查拒絕規則,再檢查允許規則,拒絕規則為拒絕所有,允許規則為允許192.168.0.1,拒絕與允許規則有沖突的部分本案例將采用Allow的規則,最終本案例可以實現僅允許192.168.0.1訪問,其他任何主機均無法訪問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
</Directory>
以上案例中Opions Index FollowSymLins僅對/usr/local/apache2/htdocs目錄有效,

AllowOverride None僅對所有/www目錄下包含三個數字的子目錄有效。


<DirectoryMatch>
DirectoryMatch類似于Directory,但可以直接使用正則表達式匹配,而無需像Directory一樣使用~符號才可以匹配。