通常連接配接時,伺服器僅僅可以得到客戶機的IP位址,如果要想獲得客戶機的
主機名,以進行日志記錄和提供給 CGI程式使用,就需要使用這個 HostnameLookups 選項,将其設定為On打開DNS反查功能。但是這将使伺服器對每次客戶請求都進行DNS查詢,增加了系統開銷,使得反應變慢,是以預設設定為使用Off關閉此選項。關閉選項之後,伺服器就不會獲得客戶機的主機名,而隻能使用IP位址來記錄客戶。
ErrorLog /var/log/httpd-error.log
LogLevel warn
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent} "" combined
LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
#CustomLog /var/log/httpd-access.log common
#CustomLog /var/log/httpd-referer.log referer
#CustomLog /var/log/httpd-agent.log agent
CustomLog /var/log/httpd-access.log combined
這裡定義了系統日志的形式,對于伺服器錯誤記錄, 由ErrorLog、 LogLevel 來定義不同的錯誤日志檔案及其記錄内容。
對于系統的通路日志,預設使用CustomLog參數定義日志的位置,預設使用 combined 參數指定将所有的通路日志放在一個檔案中,然而也可以将不同種類的通路日志放在不同的日志記錄檔案中,這是通過在 CustomLog中指定不同的記錄類型來完成的。common表示普通的對單頁面請求通路記錄,referer表示每個頁面的引用記錄,可以看出一個頁面中包含的請求數,agent表示對客戶機的類型記錄,顯然可以将現有的combined 定義的設定行注釋掉,并使用common、referer和agent作為CustomLog的參數,來為不同種類的日志分别指定日志記錄檔案。
顯然,LogFormat是用于定義不同類型的日志進行記錄時使用的格式, 這裡
使用了以%開頭的宏定義,以記錄不同的内容。
如果這些參數指定的檔案使用的是相對路徑,那麼就是相對于ServerRoot的
路徑。
ServerSignature On
一些情況下,例如當客戶請求的網頁并不存在時,伺服器将産生錯誤文檔,
預設情況下由于打開了 ServerSignature選項,錯誤文檔的最後一行将包含伺服器的名字、Apache的版本等資訊。有的管理者更傾向于不對外顯示這些資訊,就
可以将這個參數設定為Off,或者設定為Email,最後一行将替換為對 ServerAdmin 的Email提示。
Alias /icons/ "/www/icons/"
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
Alias參數用于将URL與伺服器檔案系統中的真實位置進行直接映射,一般的
文檔将在DocumentRoot 中進行查詢,然而使用Alias定義的路徑将直接映射到相
應目錄下,而不再到DocumentRoot 下面進行查詢。是以Alias可以用來映射一些
公用檔案的路徑,例如儲存了各種常用圖示的icons路徑。這樣使得除了使用符号連接配接之外,文檔根目錄(DocumentRoot)外的目錄也可以通過使用了Alias映射,提供給浏覽器通路。
定義好映射的路徑之後,應該需要使用Directory語句設定通路限制。
ScriptAlias /cgi-bin/ "/www/cgi-bin/"
AllowOverride None
Options None
Order allow,deny
Allow from all
ScriptAlias也是用于URL路徑的映射,但與Alias的不同在于,ScriptAlias 是用于映射CGI程式的路徑,這個路徑下的檔案都被定義為CGI程式,通過執行它們來獲得結果,而非由伺服器直接傳回其内容。預設情況下CGI程式使用cgi-bin目錄作為虛拟路徑。
# Redirect old-URI new-URL
Redirect參數是用來重寫URL的,當浏覽器通路伺服器上的一個已經不存在的資源的時候,伺服器傳回給浏覽器新的URL,告訴浏覽器從該URL中擷取資源。這主要用于原來存在于伺服器上的文檔,改變了位置之後,而又希望能使用老URL能通路到,以保持與以前的URL相容。
IndexOptions FancyIndexing
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
DefaultIcon /icons/unknown.gif
#AddDescription "GZIP compressed document" .gz
#AddDescription "tar archive" .tar
#AddDescription "GZIP compressed tar archive" .tgz
ReadmeName README
HeaderName HEADER
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
當一個HTTP請求的URL為一個目錄的時候,伺服器傳回這個目錄中的索引檔案。但如果一個目錄中不存在預設的索引檔案,并且該伺服器又許可顯示目錄檔案清單的時候,就會顯示出這個目錄中的檔案清單,為了使得這個檔案清單能具有可了解性,而不僅僅是一個簡單的清單,就需要前面的這些設定參數。
如果使用了IndexOptions FancyIndexing選項,可以讓伺服器産生的目錄列
表中針對各種不同類型的文檔引用各種圖示。而哪種檔案使用哪種圖示,則使用
下面的 AddIconByEncoding、AddIconByType以及AddIcon來定義,分别依據MIME 的編碼、類型以及檔案的字尾來判斷使用何種圖示。如果不能确定文檔使用的圖示,就使用 DefaultIcon定義的預設圖示。
同樣,使用AddDescription可以為不同類型的文檔加入不同的描述。并且,
伺服器還在目錄下,查詢使用ReadmeName和HeaderName定義的檔案(自動加上 .
html字尾,如果沒有發現,再使用.txt字尾進行搜尋),如果發現了這些檔案,
就在檔案清單之前首先顯示這些檔案的内容,以使得普通目錄清單具備更大的可
了解性。
IndexIgnore讓伺服器在列出檔案清單時忽略相應的檔案, 這裡使用模式配
置的方式定義檔案名。
AddEncoding x-compress Z
AddEncoding x-gzip gz
AddEncoding用于告訴一些使用壓縮的MIME類型,這樣可以讓浏覽器進行解壓縮操作。
AddLanguage en .en
AddLanguage fr .fr
AddLanguage de .de
AddLanguage da .da
AddLanguage el .el
AddLanguage it .it
LanguagePriority en fr de
一個HTML文檔可以同時具備多個語言的版本,如對于file1.html文檔可以具
備file1.html.en、file1.html.fr 等不同的版本,每個語言字尾必須使用 AddLanguage進行定義。這樣伺服器可以針對不同國家的客戶,通過與浏覽器進行協商,發送不同的語言版本。而LanguagePriority 定義不同語言的優先級,以便在浏覽器沒有特殊要求時,按照順序使用不同的語言版本回應對file1.html 的請求。
這個國際化的能力實際的應用并不多。
#AddType application/x-httpd-php .phtml
#AddType application/x-httpd-php-source .phps
AddType參數可以為特定字尾的檔案指定MIME類型,這裡的設定将覆寫 mime.types中的設定。
#AddHandler cgi-script .cgi
AddHandler是用于指定非靜态的處理類型,用于定義文檔為一個非靜态的文
檔類型,需要進行處理,再向浏覽器傳回處理結果。例如上面注釋中的設定是将以.cgi結尾的檔案設定為cgi-script類型,那麼伺服器将啟動這個CGI程式以進行處理。如果需要在前面AliasScript定義的路徑之外執行CGI程式,就需要使用這個參數進行設定,此後以.cgi結尾的檔案将被當作CGI程式執行。
在配置檔案、這個目錄中的.htaccess以及其上級目錄的.htaccess中必須允許執行CGI程式,這需要通過Options ExecCGI參數設定。
#AddType text/html .shtml
#AddHandler server-parsed .shtml
另外一種動态進行處理的類型為server-parsed,由伺服器自身預先分析網頁内的标記,将标記更改為正确的HTML辨別。由于server-parsed需要對text/html 類型的文檔進行處理,是以首先定義了對應的.shtml為text/html類型。
然而要支援SSI,還要首先要在配置檔案(或.htaccess)中使用Options Includes允許該目錄下的文檔可以為SSI類型,或使用Options IncludesNOExec讓執行普通的SSI标志,但不執行其中引用的外部程式。
另一種指定server-parsed類型的方式為使用XBitBack設定選項,如果将 XBitHack設定為On,伺服器将檢查所有text/html類型的文檔(包括.html字尾的文檔),如果發現檔案屬性具備執行位 “x",則伺服器就認為它是伺服器分析文檔,需要伺服器進行處理。推薦使用AddHandler進行設定,而将XBitBack 設定為Off,因為使用XBitBack将對所有的HTML文檔都執行額外的檢查,降低了效率。
#AddHandler send-as-is asis
#AddHandler imap-file map
#AddHandler type-map var
上面被注釋的AddHandler用于支援Apache伺服器的asis、map和var處理能力
。
# Action media/type /cgi-script/location
# Action handler-name /cgi-script/location
因為Apache内部提供的處理功能有限,是以可以使用Action為伺服器定義外
部程式作為可處理的動态文檔類型,這些外部程式與标準CGI程式相同,都是對輸入的資料處理之後,再輸出不同MIME類型的結果。例如要定義一個對特殊字尾wri都先執行wri2txt進行處理操作,再傳回結果的操作,可以使用:
Action windows-writer /bin/wri2txt
AddHandler windows-writer wri
更進一步,可以直接使用Action定義對某個MIME類型預先進行處理操作,這
需要例子中第一種格式的Action 參數設定方式。這樣設定方式就不再需要額外的AddHandler用來将處理操作與檔案字尾聯系起來,而是使用Action直接處理MIME類型的檔案。但如果文檔字尾沒有正式的MIME類型,還需要先定義一個MIME類型。
#MetaDir .web
#MetaSuffix .meta
Meta資訊是在文檔發送給客戶之前,預先發送給客戶浏覽器一些資料,是以
浏覽器可以通過HEAD請求來通路這些Meta資訊而不必真正通過GET來傳回全部文檔資料。伺服器通常發送給浏覽器的是一些标準的HTTP頭資訊,如果要想增加額外的資訊,就需要使用MetaDir來定義Meta資料存放的目錄, 而MetaS uffix用于指定包含Meta資料的檔案字尾。
#ErrorDocument 500 "The server made a boo boo.
#ErrorDocument 404 /missing.html
#ErrorDocument 404 /cgi-bin/missing_handler.pl
#ErrorDocument 402
http://some.other_server.com/subscription_info.html
如果客戶請求的網頁不存在,或者沒有通路權限等情況發生時,伺服器将産
生一個錯誤代碼,同時也将回應客戶浏覽器一個辨別錯誤的網頁。
ErrorDocument就用于設定當出現哪個錯誤時應該回應客戶浏覽器那些内容,ErrorDocument的第一個參數為錯誤的序号,第二個參數為回應的資料,可以為簡單的文本,本地網頁,本地CGI程式,以及遠端主機上的網頁。
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4.0" force-response-1.0
BrowserMatch "Java/1.0" force-response-1.0
BrowserMatch "JDK/1.0" force-response-1.0
BrowserMatch指令為特定的客戶程式,設定特殊的參數,以保證對老版本浏
覽器的相容性,并支援新浏覽器的新特性。
#
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#
#
# SetHandler server-info
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#
#
# Deny from all
# ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
#
用于設定通路控制的設定主要是針對目錄和檔案進行設定的,然而也可以針
對不同的URL進行通路控制的設定,這樣就不必擔心ScriptAlias、Alias是否将路徑設定到了受控制的目錄之外了。針對URL進行控制的語句為 Location語句,這樣不但能對伺服器上的檔案、CGI提供保護,此外,它還能保護不能找到對應檔案,而是由伺服器本身提供的特殊功能URL。http://servername/server-status用于報告目前Apache伺服器的狀态,http://servername/server-info用于報告Apache 伺服器的統計資訊。與此相關的設定還有ExtendedStatus參數,可以讓伺服器輸出更詳細的的報告。
#
#ProxyRequests On
#
#
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#
#ProxyVia On
#CacheRoot "/www/proxy"
#CacheSize 5
#CacheGcInterval 4
#CacheMaxExpire 24
#CacheLastModifiedFactor 0.1
#CacheDefaultExpire 1
#NoCache a_domain.com another_domain.edu joes.garage_sale.com
#
Apache伺服器本身就具備代理的功能,然而這要求加載入mod_proxy子產品。這能使用IfModule語句進行判斷,如果存在mod_proxy子產品,就使用ProxyRequests打開代理支援。此後的Directory用于設定對Proxy功能的通路權限設定,以及用于設定緩沖的各個參數設定。
虛拟主機
#NameVirtualHost 12.34.56.78:80
#NameVirtualHost 12.34.56.78
#
# ServerAdmin [email protected]_domain.com
# DocumentRoot /www/docs/host.some_domain.com
# ServerName host.some_domain.com
# ErrorLog logs/host.some_domain.com-error_log
# CustomLog logs/host.some_domain.com-access_log common
#
#
預設設定檔案中的這些内容是用于設定命名基礎的虛拟主機伺服器時使用。
其中NameVirtualHost 來指定虛拟主機使用的IP位址,這個IP位址将對應多個 DNS名字,如果Apache使用了Listen 參數控制了多個端口,那麼就可以在這裡加上端口号以進一步進行區分對不同端口的不同連接配接請求。此後,使用 VirtualHost 語句,使用NameVirtualHost指定的IP位址作參數,對每個名字都定義對應的虛拟主機設定。
虛拟主機是在一台Web伺服器上,可以為多個單獨域名提供Web服務,并且每個域名都完全獨立,包括具有完全獨立的文檔目錄結構及設定,這樣域名之間完全獨立,不但使用每個域名通路到的内容完全獨立,并且使用另一個域名無法訪
問其他域名提供的網頁内容。
虛拟主機的概念對于ISP來講非常有用,因為雖然一個組織可以将自己的網頁挂在具備其他域名的伺服器上的下級往址上,但使用獨立的域名和根網址更為正式,易為衆人接受。傳統上,必須自己設立一台伺服器才能達到單獨域名的目的,然而這需要維護一個單獨的伺服器,很多小機關缺乏足夠的維護能力,更為合适的方式是租用别人維護的伺服器。ISP也沒有必要為一個機構提供一個單獨的伺服器,完全可以使用虛拟主機能力,使伺服器為多個域名提供Web服務,而且不同的服務互不幹擾,對外就表現為多個不同的伺服器。
有兩種設定虛拟主機的方式,一種是基于HTTP 1.0标準,需要一個具備多IP
位址的伺服器,再配置DNS 伺服器,給每個IP位址以不同的域名,最後才能配置Apache的配置檔案,使伺服器對不同域名傳回不同的Web文檔。由于這需要使用額外的IP位址,對每個要提供服務的域名都要使用單獨的IP位址,是以這種方式實作起來問題較多。
可以在一個網絡界面上綁定多個IP位址,Linux下需要使用ifconfig的 alias參數來進行這個配置,但此時會影響網絡性能。
HTTP 1.1标準在協定中規定了對浏覽器和伺服器通信時,伺服器能夠跟蹤浏
覽器請求的是哪個主機名字。是以可以利用這個新特性,使用更輕松的方式設定
虛拟主機。這種方式不需要額外的IP位址,但需要新版本的浏覽器支援。這種方
式已經成為建立虛拟主機的标準方式。
要建立非IP基礎的虛拟主機,多個域名是不可少的配置,因為每個域名就對
應一個要服務的虛拟主機。是以需要更改DNS伺服器的配置,為伺服器增加多個C NAME選項,如:
linux IN A 192.168.1.64
vhost1 IN CNAME linux
vhost2 IN CNAME linux
基本的設定選項都是為了linux主機設定的,如果要為vhost1和vhost2設定
虛拟主機,就要使用VirtualHost語句定義不同的選項,在語句中可以使用配置檔案前面中的大部分選項,而可以重新定義幾乎所有的針對伺服器的設定。
NameVirtualHost 192.168.1.64
DocumentRoot /www/data
ServerName linux.example.org.cn
DocumentRoot /vhost1
ServerName vhost1.example.org.cn
DocumentRoot /vhost2
ServerName vhost2.example.org.cn
這裡需要注意的是,VirtualHost的參數位址一定要和NameVirtualHost定義
的位址相一緻,必須保證所有的值嚴格一緻,Apache伺服器才承認這些定義是為這個IP位址定義的虛拟主機。
此外,定義過NameVirtualHost之後,那麼對這個IP位址的通路都被區分不同的虛拟主機進行處理,而對其他IP位址的通路,例如127.0.0.1,才應用前面定義的預設選項