配置檔案詳細解析
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容器
虛拟機配置
<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
本文轉自super李導51CTO部落格,原文連結:http://blog.51cto.com/superleedo/1890050 ,如需轉載請自行聯系原作者