httpd.conf 檔的設定
I. 全域環境變數設定
ServerType
語法:ServerType <(inetd)/(standalone)>
預設:ServerType standalone
ServerType 用來指定系統該以何種型態去啟動伺服器。型態可以是其中之一:
* inetd:伺服器將由系統程序 inetd 執行;啟動伺服器使用的命令加在 /etc/inetd.conf 檔案裡。
* standalone:伺服器將會以伺服程式〈daemon〉方式來執行;啟動伺服器使用的命令加在系統啟動指令稿裡〈/etc/rc.d/rc.local 或 /etc/rc.d/init.d/httpd 裡〉。
inetd 在這兩個選項裡比較少使用。因為接收到每個 http 連線就要重頭開始執行另一份新的伺服器程式拷貝;連線結束後,這支程式就會結束,所以每次連線要付出的代價很高,相對的使用者等待時間會加長。但是因為安全上的理由,某些管理者喜歡這個選項。
standalone 是 ServerType 最普遍的設定,因為它是最有效率的執行方式。伺服器程式只啟動一次,而且服務所有的連線。如果我們想要利用 Apache Server 來服務一個忙碌的站臺,standalone 大概將會是唯一的選擇。
例:
ServerType standalone
-> 指定 apache 以 daemon 方式來執行
ServerRoot
語法:ServerRoot <目錄名稱>
預設:ServerRoot “/usr/local/apache”
ServerRoot 用於設定 Apache Server 所安裝的絕對路徑,所有網站相關的襠案都存放在此目錄中。其它配置檔的相對路徑是相對於這個路徑。
例:
ServerRoot “/usr/local/apache”
-> 指定 apache server 安裝的根目錄為 /usr/local/apache 目錄
PidFile
語法:PidFile <檔案名稱>
預設:PidFile /usr/local/apache/logs/httpd.pid
PidFile 用來設定伺服器記錄它的程式之程序號碼所使用的檔案。這樣就不必用 ps 指令來尋找它的程序號碼。而 PidFile 的功能只能使用在 ServerType 為 standalone 的模式。
我們可以藉由傳送 SIGHUP〈kill -1〉信號到列在 PidFile 檔案裡的程序號碼來達成關閉或重新再打開錯誤記錄與傳輸記錄以及重新讀取配置檔等。
例:
PidFile /usr/local/apache/logs/httpd.pid
-> 指定 apache 執行時要存放記錄 PID 檔案的路徑與檔名
TimeOut
語法:TimeOut <數字>
預設:TimeOut 300
TimeOut 用來設定伺服器接收一個請求以及完成一個請求最長的等待時間〈以秒為單位〉,如果在此時間內沒有回應則終止服務。所以當接收或傳送一個資料時所花的時間超過 TimeOut 所規定的時間時,伺服器便將會中斷該連線。如果網路速度較慢,則此 Timeout 時間可以設長一些。
例:
TimeOut 500
-> 指定 apache 接收或傳送的等待時間
KeepAlive
語法:KeepAlive <(On/Off)>
預設:KeepAlive On
KeepAlive 用於設定伺服器要不要開啟連續請求的功能,On 是開啟,Off 是關閉。
例:
KeepAlive On
-> 指定 apache 開啟連續請求功能
MaxKeepAliveRequests
語法:MaxKeepAliveRequests <個數>
預設:MaxKeepAliveRequests 100
MaxKeepAliveRequests 用於設定伺服器所能接受之最大連續請求量,如果連續請求超過這個此數限制則 Server 會自動拒絕請求連線。若設定為 0 則表示不做限制。
例:
MaxKeepAliveRequests 0
-> 指定 apache 不限制所能接收之連線數量
KeepAliveTimeout
語法:KeepAliveTimeout <秒數>
預設:KeepAliveTimeout 15
KeepAliveTimeout 用於設定使用者 ‘連續’ 請求等待的時間上限,如果使用者連續請求的時間超過此數,則終止此請求服務。
例:
KeepAliveTimeou 15
-> 指定 apache 等待使用者連續請求的時間,在接到使用者請求開始,15 秒內若沒收到新請求訊息,即中斷該連線
MinSpareServers / MaxSpareServers
語法:MinSpareServers <數量> / MaxSpareServers <數量>
預設:MinSpareServers 5 / MaxSpareServers 10
MinSpareServers 用於設定最小閒置 (idle) 子伺服程序數量,而 MaxSpareServers 用於設定最大閒置 (idle) 子伺服程序數量。閒置子伺服程序是目前沒有處理要求的程序。如果有多於 MaxSpareServers 的子程序,那麼父程序會終止超過此數量的子程序。如果有小於 MinSpareServers 的子程序,那麼父程序會產生超過此數量的子程序。通常不會將 MaxSpareServers 設很大,只有在非常忙碌的站臺上才有調整這個選項的需要。
例:
MinSpareServers 5
-> 設定最少閒置等待服務的伺服程序數量為 5 個
MaxSpareServers 10
-> 設定最大閒置等待服務的伺服程序數量為 10 個
StartServers
語法:StartServers <數量>
預設:StartServers 5
StartServers 用於設定啟動時所要建立的子伺服程序數量。因為程序的數量是依據負載動態控制的,通常不需要調整這個參數。
例:
StartServers 5
-> 設定啟動 apache 時要建立 5 個伺服程序
MaxClients
語法:MaxClients <數量>
預設:MaxClients 150
MaxClients 用於設定同時能夠提供給使用者的最大服務請求數目。
例:
MaxClients 150
-> 設定 apache 在同一時間內最大能服務 150 個連線請求
II. Server 主要變數設定
Port
語法:Port <數字>
預設:Port 80
Port 設定伺服器用來監聽連線的網路埠號。參數<數字>是 0 到 65535 的一個數目;某些埠號(特別是低於 1024 的)是保留給特殊的協定。請參閱 /etc/services 裡定義的一些埠的列表,而標準的 http 協定則使用 80 埠號。Port 80 是 Unix 中的一個特別埠。所有低於 1024 的埠號都是保留給系統使用的,一般使用者 (non-root) 不能使用它們;取而代之的是他們可以使用較高的埠號。要使用 80 埠你必須以 root 帳號啟動伺服器。如果你不能使用 80 埠,選擇任何其它沒有使用到的埠。非 root 使用者必須選擇高於 1023 的埠號,像是 8000 。
例:
Port 8000
-> 設定 apache 的連線埠號為 8000
User
語法:User [username / #uid]
預設:User nobody
User 用來設定伺服器程式的執行者是誰。一般是 nobody,也可以是已註冊的使用者,若用 user id 則要先加上 # 號。這個執行者應該不能有存取外界所不能看到的檔案的權限,而且這個執行者應該不能執行對 httpd 要求而言沒有意義的程式碼。建議特別為執行這個伺服器設立新的使用者。
例:
User apache
-> 設定 apache 程式以 apache 使用者身份來執行
Group
語法:Group [groupname / #gid]
預設:Group nogroup
Group 用於設定 httpd 這程式的執行者所屬的群組,一般是 nogroup,此 group 必須要存在於 /etc/group 中。相同於 User 指令,這個群組應該不能有存取外界所不能看到的檔案的權限,而且應該不能執行對 httpd 要求而言沒有意義的程式碼。建議特別為執行這個伺服器設立新的群組。
例:
Group apache
-> 設定 apache 程式以 apache 群組的身份來執行
ServerAdmin
語法:ServerAdmin <電子郵件地址>
預設:ServerAdmin root@localhost
ServerAdmin 用於設定此站台管理者的電子郵件地址,當伺服器發生錯誤時,會傳送這些錯誤訊息給此電子郵件地址。
例:
ServerAdmin chanel@armani.com
-> 當 apache 發生錯誤時,會傳送這些訊息給 chanel@armani.com 這個 E-mail 的管理者
ServerName
語法:ServerName <主機名稱>
ServerName 用於設定該伺服器的名稱,此名稱必須是已經向伺服器本身所在網域的 DNS 註冊。若沒有一個登記的 DNS name,則改為 IP 位址。
例:
ServerName www.prada.com
-> 設定 apache 主機的名稱為 www.prada.com
DocumentRoot
語法:DocumentRoot <目錄名稱>
預設:DocumentRoot “/usr/local/apache/htdocs”
DocumentRoot 用於設定伺服器文件或其它資料所在的根目錄位置。伺服器會把連線請求的 URL 附加到根文件目錄 (document root) 來組合到達文件的路徑。
例:
DocumentRoot “/usr/local/apache/htdocs”
-> 指定文件的根目錄為 /usr/local/apache/htdocs 目錄,若使用者輸入 http://myserver/doc.html,最對映到系統中的 /usr/local/apache/htdocs/doc.html 檔。
Directory
語法:<Directory [目錄絕對路徑]> … </Directory>
Directory 指令區間內的參數是用於設定目錄的相關屬性或控制目錄的權限。使用方法需配合 Order 或 Options 指令。
Order
語法:Order [allow/deny/allow,deny]
Order 用於設定何人可以從這個 Server 取得控制目錄的權限。
例:
Oeder allow,deny
allow from nchc.gov.tw <– 所有來自 nchc.gov.tw 的 user 都可以取得控制權
Options
語法:Options <參數>
Options 指令配合 <Directory [目錄絕對路徑]> … </Directory> 來控制該目錄的屬性,
指令後面的 <參數> 表示可以開啟的屬性種類,所代表的值可以包括:
1. All:此目錄除 MultiViews 外,所有屬性都開啟。
2. MultiViews:允許 MultiViews 內容。
3. Indexes:若該目錄被以 http 的方式讀取,而該目錄中並不存在 index.htm 或 index.html 等索引檔,則會自動將該目錄的檔案資訊轉化成為 HTML 格式傳回給瀏覽器。
4. IncludesNOEXEC:開放 SSI (Server-side include) 的權限,但是會關閉 CGI 程式中 #exec 與 #include 的宣告。
5. Includes:開放 SSI 的權限。
6. FollowSymLinks:准許以符號連結到其他目錄。
7. ExecCGI:允許執行 CGI 程式。
8. SymLinksfOwnerMath:允許符號連結到的目錄與原始目錄的所有人不同。
例:
<Directory /> <– 設定為根目錄
Options FollowSymLinks <– 此目錄允許透過 symbolic links 存取
AllowOverride None <– 此目錄的權限不受.htaccess 檔影響
</Directory>
<Directory “/usr/local/apache/htdocs”>
Options Indexes FollowSymLinks <– 只開啟 Indexes 及 FollowSymLinks 功能
AllowOverride None <– 此目錄的權限不受.htaccess 檔影響
Order allow,deny
Allow from all <– 所有的 user 都可以存取得控制權
<Directory>
UserDir
語法:UserDir <目錄名稱>
預設:UserDir public_html
UserDir 用來指定供使用者放置個人網頁時,該放在自家〈home〉目錄裡的那一個目錄中才能讓人瀏覽。若以 http://myserver/~username 作為開始的一個 URL 連線請求將會被轉換成以 home-dir/public_html 作為開始的檔案名稱,其中 home-dir 是 username 這個使用者的自家目錄。
例:
UserDir public_html
-> 設定使用者必須把自己的網頁放在自家目錄的 public_html 目錄下才能供人瀏覽。對 http://myserver/~user/dir/file.html 的請求將傳回 http://myserver/home/user/public_html/dir/file.html 這個檔案。
DirectoryIndex
語法:DirectoryIndex <檔名1> <檔名2>…
預設:DirectoryIndex index.html
DirectoryIndex 用於設定當使用者端藉由指定沒有以檔案做結尾的目錄名稱請求該目錄的索引時所要找尋的來源列表。參數 [檔名1] 是在伺服器上相對於請求之目錄的文件;它通常是目錄裡某個檔案的名稱。可以有好幾個檔名,伺服器會回傳它所找到的文件。
例:
DirectoryIndex index.html
-> 對於 http://myserver/docs/ 的請求若該來源設定的檔案存在的話會回傳 http://myserver/docs/index.html。
DefaultType
語法:DefaultType <MIME 種類>
預設:DefaultType text/plain
DefaultType 用於設定當伺服器無法辨識檔案類型,要把它當作何種的 MIME 格式。
例:
DefaultType text/plain
-> 將無法分辨的一律當成明文文字格式
HostNameLookups
語法:HostNameLookups <On/Off>
預設:HostNameLookups Off
HostNameLookups 用於設定要不要把自動搜尋 HostName 的功能打開,設定為 On 時,則會記錄進入此網站使用者的主機名稱。設為 Off,則僅記錄使用者主機的 IP。
例:
HostNameLookups Off
-> 關掉自動反查 IP 功能
ErrorLog
語法:ErrorLog <檔案名稱>
預設:ErrorLog /usr/local/apache/logs/error_log
ErrorLog 設定錯誤記錄檔案名稱,伺服器將會把其遭遇的每個錯誤記錄到這個檔案。如果檔案名稱不是以 / 開始的話那麼它就會被假設為相對於 ServerRoot 的路徑。
例:
ErrorLog /usr/local/apache/logs/error_log
-> 當 apache 發生錯誤時,會把訊息記錄到 /usr/local/apache/logs 目錄下的 error_log 檔中
LogLevel
語法:LogLevel <debug/info/notice/warm/error/crit/alert/emerg>
預設:LogLevel warm
LogLevel 用於設定 error_log 中記錄的錯誤訊息種類,建議值是 warm,參數越往右邊所記錄的資訊越簡略。
例:
LogLevel debug
-> 設定 apache 的記錄錯誤方式為除錯模式〈debug〉
Alias
語法:Alias <虛擬目錄> <實際目錄>
Alias 指令用於設定實際目錄至虛擬目錄之別名,可將原本很長的路徑簡化。
例:
Alias /doc /usr/local/apache/htdocs/manual/doc/
-> 原本需要用 http://localhost/manual/doc 才能連到的網頁,現在僅需使用 http://localhost/doc 即可。