Apache服務(wù)器配置攻略3
更新時間:2006年10月11日 00:00:00 作者:
Apache服務(wù)器配置全攻略(六)
通常連接時,服務(wù)器僅僅可以得到客戶機的IP地址,如果要想獲得客戶機的主機名,以進行日志記錄和提供給 CGI程序使用,就需要使用這個HostnameLookups 選項,將其設(shè)置為On打開DNS反查功能。但是這將使服務(wù)器對每次客戶請求都進行DNS查詢,增加了系統(tǒng)開銷,使得反應(yīng)變慢,因此缺省設(shè)置為使用Off關(guān)閉此選項。關(guān)閉選項之后,服務(wù)器就不會獲得客戶機的主機名,而只能使用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
這里定義了系統(tǒng)日志的形式,對于服務(wù)器錯誤記錄, 由ErrorLog、 LogLevel 來定義不同的錯誤日志文件及其記錄內(nèi)容。
對于系統(tǒng)的訪問日志,缺省使用CustomLog參數(shù)定義日志的位置,缺省使用 combined 參數(shù)指定將所有的訪問日志放在一個文件中,然而也可以將不同種類的訪問日志放在不同的日志記錄文件中,這是通過在 CustomLog中指定不同的記錄類型來完成的。common表示普通的對單頁面請求訪問記錄,referer表示每個頁面的引用記錄,可以看出一個頁面中包含的請求數(shù),agent表示對客戶機的類型記錄,顯然可以將現(xiàn)有的combined 定義的設(shè)置行注釋掉,并使用common、referer和agent作為CustomLog的參數(shù),來為不同種類的日志分別指定日志記錄文件。
顯然,LogFormat是用于定義不同類型的日志進行記錄時使用的格式, 這里使用了以%開頭的宏定義,以記錄不同的內(nèi)容。
如果這些參數(shù)指定的文件使用的是相對路徑,那么就是相對于ServerRoot的路徑。
ServerSignature On
一些情況下,例如當(dāng)客戶請求的網(wǎng)頁并不存在時,服務(wù)器將產(chǎn)生錯誤文檔,缺省情況下由于打開了 ServerSignature選項,錯誤文檔的最后一行將包含服務(wù)器的名字、Apache的版本等信息。有的管理員更傾向于不對外顯示這些信息,就可以將這個參數(shù)設(shè)置為Off,或者設(shè)置為Email,最后一行將替換為對 ServerAdmin 的Email提示。
Alias /icons/ "/www/icons/"
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
Alias參數(shù)用于將URL與服務(wù)器文件系統(tǒng)中的真實位置進行直接映射,一般的文檔將在DocumentRoot 中進行查詢,然而使用Alias定義的路徑將直接映射到相應(yīng)目錄下,而不再到DocumentRoot 下面進行查詢。因此Alias可以用來映射一些公用文件的路徑,例如保存了各種常用圖標(biāo)的icons路徑。這樣使得除了使用符號連接之外,文檔根目錄(DocumentRoot)外的目錄也可以通過使用了Alias映射,提供給瀏覽器訪問。
定義好映射的路徑之后,應(yīng)該需要使用Directory語句設(shè)置訪問限制。
ScriptAlias /cgi-bin/ "/www/cgi-bin/"
AllowOverride None
Options None
Order allow,deny
Allow from all
ScriptAlias也是用于URL路徑的映射,但與Alias的不同在于,ScriptAlias 是用于映射CGI程序的路徑,這個路徑下的文件都被定義為CGI程序,通過執(zhí)行它們來獲得結(jié)果,而非由服務(wù)器直接返回其內(nèi)容。缺省情況下CGI程序使用cgi-bin目錄作為虛擬路徑。
# Redirect old-URI new-URL
Redirect參數(shù)是用來重寫URL的,當(dāng)瀏覽器訪問服務(wù)器上的一個已經(jīng)不存在的資源的時候,服務(wù)器返回給瀏覽器新的URL,告訴瀏覽器從該URL中獲取資源。這主要用于原來存在于服務(wù)器上的文檔,改變了位置之后,而又希望能使用老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
當(dāng)一個HTTP請求的URL為一個目錄的時候,服務(wù)器返回這個目錄中的索引文件。但如果一個目錄中不存在缺省的索引文件,并且該服務(wù)器又許可顯示目錄文件列表的時候,就會顯示出這個目錄中的文件列表,為了使得這個文件列表能具有可理解性,而不僅僅是一個簡單的列表,就需要前面的這些設(shè)置參數(shù)。
Apache服務(wù)器配置全攻略(七)
如果使用了IndexOptions FancyIndexing選項,可以讓服務(wù)器產(chǎn)生的目錄列表中針對各種不同類型的文檔引用各種圖標(biāo)。而哪種文件使用哪種圖標(biāo),則使用下面的 AddIconByEncoding、AddIconByType以及AddIcon來定義,分別依據(jù)MIME 的編碼、類型以及文件的后綴來判斷使用何種圖標(biāo)。如果不能確定文檔使用的圖標(biāo),就使用 DefaultIcon定義的缺省圖標(biāo)。
同樣,使用AddDescription可以為不同類型的文檔加入不同的描述。并且,服務(wù)器還在目錄下,查詢使用ReadmeName和HeaderName定義的文件(自動加上 .html后綴,如果沒有發(fā)現(xiàn),再使用.txt后綴進行搜索),如果發(fā)現(xiàn)了這些文件,就在文件列表之前首先顯示這些文件的內(nèi)容,以使得普通目錄列表具備更大的可理解性。
IndexIgnore讓服務(wù)器在列出文件列表時忽略相應(yīng)的文件, 這里使用模式配置的方式定義文件名。
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進行定義。這樣服務(wù)器可以針對不同國家的客戶,通過與瀏覽器進行協(xié)商,發(fā)送不同的語言版本。而LanguagePriority 定義不同語言的優(yōu)先級,以便在瀏覽器沒有特殊要求時,按照順序使用不同的語言版本回應(yīng)對file1.html 的請求。這個國際化的能力實際的應(yīng)用并不多。
#AddType application/x-httpd-php .phtml
#AddType application/x-httpd-php-source .phps
AddType參數(shù)可以為特定后綴的文件指定MIME類型,這里的設(shè)置將覆蓋 mime.types中的設(shè)置。
#AddHandler cgi-script .cgi
AddHandler是用于指定非靜態(tài)的處理類型,用于定義文檔為一個非靜態(tài)的文檔類型,需要進行處理,再向瀏覽器返回處理結(jié)果。例如上面注釋中的設(shè)置是將以.cgi結(jié)尾的文件設(shè)置為cgi-script類型,那么服務(wù)器將啟動這個CGI程序以進行處理。如果需要在前面AliasScript定義的路徑之外執(zhí)行CGI程序,就需要使用這個參數(shù)進行設(shè)置,此后以.cgi結(jié)尾的文件將被當(dāng)作CGI程序執(zhí)行。
在配置文件、這個目錄中的.htaccess以及其上級目錄的.htaccess中必須允許執(zhí)行CGI程序,這需要通過Options ExecCGI參數(shù)設(shè)定。
#AddType text/html .shtml
#AddHandler server-parsed .shtml
另外一種動態(tài)進行處理的類型為server-parsed,由服務(wù)器自身預(yù)先分析網(wǎng)頁內(nèi)的標(biāo)記,將標(biāo)記更改為正確的HTML標(biāo)識。由于server-parsed需要對text/html 類型的文檔進行處理,因此首先定義了對應(yīng)的.shtml為text/html類型。
然而要支持SSI,還要首先要在配置文件(或.htaccess)中使用Options Includes允許該目錄下的文檔可以為SSI類型,或使用Options IncludesNOExec讓執(zhí)行普通的SSI標(biāo)志,但不執(zhí)行其中引用的外部程序。
另一種指定server-parsed類型的方式為使用XBitBack設(shè)置選項,如果將 XBitHack設(shè)置為On,服務(wù)器將檢查所有text/html類型的文檔(包括.html后綴的文檔),如果發(fā)現(xiàn)文件屬性具備執(zhí)行位 “x",則服務(wù)器就認為它是服務(wù)器分析文檔,需要服務(wù)器進行處理。推薦使用AddHandler進行設(shè)置,而將XBitBack 設(shè)置為Off,因為使用XBitBack將對所有的HTML文檔都執(zhí)行額外的檢查,降低了效率。
#AddHandler send-as-is asis
#AddHandler imap-file map
#AddHandler type-map var
上面被注釋的AddHandler用于支持Apache服務(wù)器的asis、map和var處理能力
# Action media/type /cgi-script/location
# Action handler-name /cgi-script/location
因為Apache內(nèi)部提供的處理功能有限,因此可以使用Action為服務(wù)器定義外部程序作為可處理的動態(tài)文檔類型,這些外部程序與標(biāo)準(zhǔn)CGI程序相同,都是對輸入的數(shù)據(jù)處理之后,再輸出不同MIME類型的結(jié)果。例如要定義一個對特殊后綴wri都先執(zhí)行wri2txt進行處理操作,再返回結(jié)果的操作,可以使用:
Action windows-writer /bin/wri2txt
AddHandler windows-writer wri
更進一步,可以直接使用Action定義對某個MIME類型預(yù)先進行處理操作,這需要例子中第一種格式的Action 參數(shù)設(shè)置方式。這樣設(shè)置方式就不再需要額外的AddHandler用來將處理操作與文件后綴聯(lián)系起來,而是使用Action直接處理MIME類型的文件。但如果文檔后綴沒有正式的MIME類型,還需要先定義一個MIME類型。
#MetaDir .web
#MetaSuffix .meta
Meta信息是在文檔發(fā)送給客戶之前,預(yù)先發(fā)送給客戶瀏覽器一些數(shù)據(jù),因此瀏覽器可以通過HEAD請求來訪問這些Meta信息而不必真正通過GET來返回全部文檔數(shù)據(jù)。服務(wù)器通常發(fā)送給瀏覽器的是一些標(biāo)準(zhǔn)的HTTP頭信息,如果要想增加額外的信息,就需要使用MetaDir來定義Meta數(shù)據(jù)存放的目錄, 而MetaS uffix用于指定包含Meta數(shù)據(jù)的文件后綴。
#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
如果客戶請求的網(wǎng)頁不存在,或者沒有訪問權(quán)限等情況發(fā)生時,服務(wù)器將產(chǎn)生一個錯誤代碼,同時也將回應(yīng)客戶瀏覽器一個標(biāo)識錯誤的網(wǎng)頁。
ErrorDocument就用于設(shè)置當(dāng)出現(xiàn)哪個錯誤時應(yīng)該回應(yīng)客戶瀏覽器那些內(nèi)容,ErrorDocument的第一個參數(shù)為錯誤的序號,第二個參數(shù)為回應(yīng)的數(shù)據(jù),可以為簡單的文本,本地網(wǎng)頁,本地CGI程序,以及遠程主機上的網(wǎng)頁。
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命令為特定的客戶程序,設(shè)置特殊的參數(shù),以保證對老版本瀏覽器的兼容性,并支持新瀏覽器的新特性。
# 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
Apache服務(wù)器配置全攻略(八)
用于設(shè)置訪問控制的設(shè)置主要是針對目錄和文件進行設(shè)置的,然而也可以針對不同的URL進行訪問控制的設(shè)置,這樣就不必擔(dān)心ScriptAlias、Alias是否將路徑設(shè)置到了受控制的目錄之外了。針對URL進行控制的語句為 Location語句,這樣不但能對服務(wù)器上的文件、CGI提供保護,此外,它還能保護不能找到對應(yīng)文件,而是由服務(wù)器本身提供的特殊功能URL。http://servername/server-status用于報告當(dāng)前Apache服務(wù)器的狀態(tài),http://servername/server-info用于報告Apache 服務(wù)器的統(tǒng)計信息。與此相關(guān)的設(shè)置還有ExtendedStatus參數(shù),可以讓服務(wù)器輸出更詳細的的報告。
#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服務(wù)器本身就具備代理的功能,然而這要求加載入mod_proxy模塊。這能使用IfModule語句進行判斷,如果存在mod_proxy模塊,就使用ProxyRequests打開代理支持。此后的Directory用于設(shè)置對Proxy功能的訪問權(quán)限設(shè)置,以及用于設(shè)置緩沖的各個參數(shù)設(shè)置。
虛擬主機
#NameVirtualHost 12.34.56.78:80
#NameVirtualHost 12.34.56.78
# ServerAdmin webmaster@host.some_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
缺省設(shè)置文件中的這些內(nèi)容是用于設(shè)置命名基礎(chǔ)的虛擬主機服務(wù)器時使用。
其中NameVirtualHost 來指定虛擬主機使用的IP地址,這個IP地址將對應(yīng)多個 DNS名字,如果Apache使用了Listen 參數(shù)控制了多個端口,那么就可以在這里加上端口號以進一步進行區(qū)分對不同端口的不同連接請求。此后,使用 VirtualHost 語句,使用NameVirtualHost指定的IP地址作參數(shù),對每個名字都定義對應(yīng)的虛擬主機設(shè)置。
虛擬主機是在一臺Web服務(wù)器上,可以為多個單獨域名提供Web服務(wù),并且每個域名都完全獨立,包括具有完全獨立的文檔目錄結(jié)構(gòu)及設(shè)置,這樣域名之間完全獨立,不但使用每個域名訪問到的內(nèi)容完全獨立,并且使用另一個域名無法訪問其他域名提供的網(wǎng)頁內(nèi)容。
虛擬主機的概念對于ISP來講非常有用,因為雖然一個組織可以將自己的網(wǎng)頁掛在具備其他域名的服務(wù)器上的下級往址上,但使用獨立的域名和根網(wǎng)址更為正式,易為眾人接受。傳統(tǒng)上,必須自己設(shè)立一臺服務(wù)器才能達到單獨域名的目的,然而這需要維護一個單獨的服務(wù)器,很多小單位缺乏足夠的維護能力,更為合適的方式是租用別人維護的服務(wù)器。ISP也沒有必要為一個機構(gòu)提供一個單獨的服務(wù)器,完全可以使用虛擬主機能力,使服務(wù)器為多個域名提供Web服務(wù),而且不同的服務(wù)互不干擾,對外就表現(xiàn)為多個不同的服務(wù)器。
有兩種設(shè)定虛擬主機的方式,一種是基于HTTP 1.0標(biāo)準(zhǔn),需要一個具備多IP地址的服務(wù)器,再配置DNS 服務(wù)器,給每個IP地址以不同的域名,最后才能配置Apache的配置文件,使服務(wù)器對不同域名返回不同的Web文檔。由于這需要使用額外的IP地址,對每個要提供服務(wù)的域名都要使用單獨的IP地址,因此這種方式實現(xiàn)起來問題較多。
可以在一個網(wǎng)絡(luò)界面上綁定多個IP地址,Linux下需要使用ifconfig的 alias參數(shù)來進行這個配置,但此時會影響網(wǎng)絡(luò)性能。
HTTP 1.1標(biāo)準(zhǔn)在協(xié)議中規(guī)定了對瀏覽器和服務(wù)器通信時,服務(wù)器能夠跟蹤瀏覽器請求的是哪個主機名字。因此可以利用這個新特性,使用更輕松的方式設(shè)定虛擬主機。這種方式不需要額外的IP地址,但需要新版本的瀏覽器支持。這種方式已經(jīng)成為建立虛擬主機的標(biāo)準(zhǔn)方式。
要建立非IP基礎(chǔ)的虛擬主機,多個域名是不可少的配置,因為每個域名就對應(yīng)一個要服務(wù)的虛擬主機。因此需要更改DNS服務(wù)器的配置,為服務(wù)器增加多個C NAME選項,如:
linux IN A 192.168.1.64
vhost1 IN CNAME linux
vhost2 IN CNAME linux
基本的設(shè)置選項都是為了linux主機設(shè)定的,如果要為vhost1和vhost2設(shè)定虛擬主機,就要使用VirtualHost語句定義不同的選項,在語句中可以使用配置文件前面中的大部分選項,而可以重新定義幾乎所有的針對服務(wù)器的設(shè)置。
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的參數(shù)地址一定要和NameVirtualHost定義的地址相一致,必須保證所有的值嚴格一致,Apache服務(wù)器才承認這些定義是為這個IP地址定義的虛擬主機。
此外,定義過NameVirtualHost之后,那么對這個IP地址的訪問都被區(qū)分不同的虛擬主機進行處理,而對其他IP地址的訪問,例如127.0.0.1,才應(yīng)用前面定義的缺省選項。
相關(guān)文章
Exchange2000系統(tǒng)建設(shè)及規(guī)劃
Exchange2000系統(tǒng)建設(shè)及規(guī)劃...2006-10-10Validation of viewstate MAC failed.的解決方法
Validation of viewstate MAC failed.的解決方法...2007-10-10