欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

<-
Apache > HTTP Server > 文檔 > 版本2.2
   致謝 | 譯者聲明 | 本篇譯者:金步國 | 本篇譯稿最后更新:2006年1月4日 | 獲取最新版本

日志文件

要有效地管理Web服務(wù)器,就有必要反饋服務(wù)器的活動(dòng)、性能以及出現(xiàn)的問題。Apache HTTP服務(wù)器提供了非常全面而靈活的日志記錄功能。本文將闡述如何配置文件以及如何理解日志內(nèi)容。

top

安全警告

任何人只要對Apache存放日志文件的目錄具有寫權(quán)限,也就當(dāng)然地可以獲得啟動(dòng)Apache的用戶(通常是root)的權(quán)限,絕對不要隨意給予任何人存放日志文件目錄的寫權(quán)限。細(xì)節(jié)請參見安全方面的提示

另外,日志文件可能會包含未加轉(zhuǎn)換的來自用戶的信息,用戶就有機(jī)會惡意插入控制符,所以處理原始日志時(shí)應(yīng)該當(dāng)心這個(gè)問題。

top

錯(cuò)誤日志(Error Log)

錯(cuò)誤日志是最重要的日志文件,其文件名和位置取決于ErrorLog指令。Apache httpd將在這個(gè)文件中存放診斷信息和處理請求中出現(xiàn)的錯(cuò)誤,由于這里經(jīng)常包含了出錯(cuò)細(xì)節(jié)以及如何解決,如果服務(wù)器啟動(dòng)或運(yùn)行中有問題,首先就應(yīng)該查看這個(gè)錯(cuò)誤日志。

錯(cuò)誤日志通常被寫入一個(gè)文件(unix系統(tǒng)上一般是error_log ,Windows和OS/2上一般是error.log)。在unix系統(tǒng)中,錯(cuò)誤日志還可能被重定向到syslog通過管道操作傳遞給一個(gè)程序。

錯(cuò)誤日志的格式相對靈活,并可以附加文字描述。某些信息會出現(xiàn)在絕大多數(shù)記錄中,一個(gè)典型的例子是:

[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/test

其中,第一項(xiàng)是錯(cuò)誤發(fā)生的日期和時(shí)間;第二項(xiàng)是錯(cuò)誤的嚴(yán)重性,LogLevel指令使只有高于指定嚴(yán)重性級別的錯(cuò)誤才會被記錄;第三項(xiàng)是導(dǎo)致錯(cuò)誤的IP地址;此后是信息本身,在此例中,服務(wù)器拒絕了這個(gè)客戶的訪問。服務(wù)器在記錄被訪問文件時(shí),用的是文件系統(tǒng)路徑,而不是Web路徑。

錯(cuò)誤日志中會包含類似上述例子的多種類型的信息。此外,CGI腳本中任何輸出到stderr的信息會作為調(diào)試信息原封不動(dòng)地記錄到錯(cuò)誤日志中。

用戶可以增加或刪除錯(cuò)誤日志的項(xiàng)。但是對某些特殊請求,在訪問日志(access log)中也會有相應(yīng)的記錄,比如上述例子在訪問日志中也會有相應(yīng)的記錄,其狀態(tài)碼是403,因?yàn)樵L問日志也可以定制,所以可以從訪問日志中得到錯(cuò)誤事件的更多信息。

在測試中,對任何問題持續(xù)監(jiān)視錯(cuò)誤日志是非常有用的。在unix系統(tǒng)中,可以這樣做:

tail -f error_log

top

訪問日志(Access Log)

訪問日志中會記錄服務(wù)器所處理的所有請求,其文件名和位置取決于CustomLog指令,LogFormat指令可以簡化日志的內(nèi)容。這里闡述如何配置服務(wù)器的訪問日志。

實(shí)施日志管理,首先當(dāng)然必須產(chǎn)生訪問日志,然后才能分析日志從而得到有用的統(tǒng)計(jì)信息。日志分析不是Web服務(wù)器的職責(zé),已超出本文的范疇,更多資料和有關(guān)分析工具的信息,可以查看Open DirectoryYahoo 。

不同版本的Apache httpd使用了不同的模塊和指令來控制對訪問的記錄,包括mod_log_referer, mod_log_agent和TransferLog指令,F(xiàn)在,CustomLog指令包含了舊版本中相關(guān)指令的所有功能。

訪問日志的格式是高度靈活的,使用很象C風(fēng)格的printf()函數(shù)的格式字符串。下面有幾個(gè)例子,完整的說明可以查看用于mod_log_config模塊的格式字符串。

通用日志格式(Common Log Format)

這是一個(gè)典型的記錄格式:

LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common

它定義了一種特定的記錄格式字符串,并給它起了個(gè)別名common ,其中的"%"指示服務(wù)器用某種信息替換,其他字符則不作替換。引號(")必須加反斜杠轉(zhuǎn)義,以避免被解釋為字符串的結(jié)束。格式字符串還可以包含特殊的控制符,如換行符"\n" 、制表符"\t"。

CustomLog指令建立一個(gè)使用指定別名的新日志文件,除非其文件名是以斜杠開頭的絕對路徑,否則其路徑就是相對于ServerRoot的相對路徑。

上述配置是一種被稱為通用日志格式(CLF)的記錄格式,它被許多不同的Web服務(wù)器所采用,并被許多日志分析程序所識別,它產(chǎn)生的記錄形如:

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326

記錄的各部分說明如下:

127.0.0.1 (%h)
這是發(fā)送請求到服務(wù)器的客戶的IP地址。如果HostnameLookups設(shè)為 On ,則服務(wù)器會嘗試解析這個(gè)IP地址的主機(jī)名并替換此處的IP地址,但并不推薦這樣做,因?yàn)樗鼤@著拖慢服務(wù)器,最好是用一個(gè)日志后續(xù)處理器來判斷主機(jī)名,比如logresolve 。如果客戶和服務(wù)器之間存在代理,那么記錄中的這個(gè)IP地址就是那個(gè)代理的IP地址,而不是客戶機(jī)的真實(shí)IP地址。
- (%l)
這是由客戶端identd進(jìn)程判斷的RFC1413身份(identity),輸出中的符號"-"表示此處的信息無效。除非在嚴(yán)格控制的內(nèi)部網(wǎng)絡(luò)中,此信息通常很不可靠,不應(yīng)該被使用。只有在將IdentityCheck指令設(shè)為 On 時(shí),Apache才會試圖得到這項(xiàng)信息。
frank (%u)
這是HTTP認(rèn)證系統(tǒng)得到的訪問該網(wǎng)頁的客戶標(biāo)識(userid),環(huán)境變量REMOTE_USER會被設(shè)為該值并提供給CGI腳本。如果狀態(tài)碼是401,表示客戶未通過認(rèn)證,則此值沒有意義。如果網(wǎng)頁沒有設(shè)置密碼保護(hù),則此項(xiàng)將是"-"。
[10/Oct/2000:13:55:36 -0700] (%t)
這是服務(wù)器完成請求處理時(shí)的時(shí)間,其格式是:

[日/月/年:時(shí):分:秒 時(shí)區(qū)]
日 = 2數(shù)字
月 = 3字母
年 = 4數(shù)字
時(shí) = 2數(shù)字
分 = 2數(shù)字
秒 = 2數(shù)字
時(shí)區(qū) = (+|-)4數(shù)字

可以在格式字符串中使用 %{format}t 來改變時(shí)間的輸出形式,其中的format與C標(biāo)準(zhǔn)庫中的strftime()用法相同。
"GET /apache_pb.gif HTTP/1.0" (\"%r\")
引號中是客戶端發(fā)出的包含許多有用信息的請求行?梢钥闯,該客戶的動(dòng)作是GET ,請求的資源是/apache_pb.gif ,使用的協(xié)議是HTTP/1.0 。另外,還可以記錄其他信息,如:格式字符串"%m %U%q %H"會記錄動(dòng)作、路徑、查詢字符串、協(xié)議,其輸出和"%r"一樣。
200 (%>s)
這是服務(wù)器返回給客戶端的狀態(tài)碼。這個(gè)信息非常有價(jià)值,因?yàn)樗甘玖苏埱蟮慕Y(jié)果,或者是被成功響應(yīng)了(以2開頭),或者被重定向了(以3開頭),或者出錯(cuò)了(以4開頭),或者產(chǎn)生了服務(wù)器端錯(cuò)誤(以5開頭)。完整的狀態(tài)碼列表參見HTTP規(guī)范(RFC2616第10章)。
2326 (%b)
最后這項(xiàng)是返回給客戶端的不包括響應(yīng)頭的字節(jié)數(shù)。如果沒有信息返回,則此項(xiàng)應(yīng)該是"-",如果希望記錄為"0"的形式,就應(yīng)該用%B 。

組合日志格式(Combined Log Format)

另一種常用的記錄格式是組合日志格式,形式如下:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
CustomLog log/access_log combined

這種格式與通用日志格式類似,但是多了兩個(gè) %{header}i 項(xiàng),其中的header可以是任何請求頭。這種格式的記錄形如:

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"

其中,多出來的項(xiàng)是:

"http://www.example.com/start.html" (\"%{Referer}i\")
"Referer"請求頭。此項(xiàng)指明了該請求是被從哪個(gè)網(wǎng)頁提交過來的,這個(gè)網(wǎng)頁應(yīng)該包含有/apache_pb.gif或者其連接。
"Mozilla/4.08 [en] (Win98; I ;Nav)" (\"%{User-agent}i\")
"User-Agent"請求頭。此項(xiàng)是客戶端提供的瀏覽器識別信息。

多文件訪問日志

可以簡單地在配置文件中用多個(gè)CustomLog指令來建立多文件訪問日志。如下例,既記錄基本的CLF信息,又記錄提交網(wǎng)頁和瀏覽器的信息,最后兩行CustomLog示范了如何模擬ReferLogAgentLog指令的效果。

LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common
CustomLog logs/referer_log "%{Referer}i -> %U"
CustomLog logs/agent_log "%{User-agent}i"

此例也說明了,記錄格式可以直接由CustomLog指定,而并不一定要用LogFormat起一個(gè)別名。

條件日志

許多時(shí)候,根據(jù)與請求特征相關(guān)的環(huán)境變量來有選擇地記錄某些客戶端請求會帶來便利。首先,需要使用SetEnvIf指令來設(shè)置特定的環(huán)境變量以標(biāo)識符合某種特定條件的請求,然后用CustomLog指令的 env= 子句,根據(jù)這些環(huán)境變量來決定記錄或排除特定的請求。例如:

# 不記錄本機(jī)發(fā)出的請求
SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
# 不記錄對robots.txt文件的請求
SetEnvIf Request_URI "^/robots\.txt$" dontlog
# 記錄其他請求
CustomLog logs/access_log common env=!dontlog

再如,將使用英語的請求記錄到一個(gè)日志,而記錄非英語的請求到另一個(gè)日志:

SetEnvIf Accept-Language "en" english
CustomLog logs/english_log common env=english
CustomLog logs/non_english_log common env=!english

雖然上述已經(jīng)展示了條件日志記錄的強(qiáng)大和靈活,但這不是控制日志內(nèi)容的唯一手段,還可以用日志后繼處理程序來剔除你不關(guān)心的內(nèi)容,從而使日志更加有用。

top

日志滾動(dòng)

即使一個(gè)并不繁忙的服務(wù)器,其日志文件的信息量也會很大,一般每10000個(gè)請求,訪問日志就會增加1MB或更多。這就有必要定期滾動(dòng)日志文件。由于Apache會保持日志文件的打開,并持續(xù)寫入信息,因此服務(wù)器運(yùn)行期間不能執(zhí)行滾動(dòng)操作。移動(dòng)或者刪除日志文件以后,必須重新啟動(dòng)服務(wù)器才能讓它打開新的日志文件。

優(yōu)雅的(graceful)方法重新啟動(dòng),可以使服務(wù)器啟用新的日志文件,而不丟失原來尚未寫入的信息。為此,有必要等待一段時(shí)間,讓服務(wù)器完成正在處理的請求,并將記錄寫入到原來的日志文件。以下是一個(gè)典型的日志滾動(dòng)和為節(jié)省存儲空間而壓縮舊日志的例子:

mv access_log access_log.old
mv error_log error_log.old
apachectl graceful
sleep 600
gzip access_log.old error_log.old

另一種執(zhí)行滾動(dòng)的方法是使用下一節(jié)闡述的管道日志。

top

管道日志

Apache httpd可以通過管道將訪問記錄和出錯(cuò)信息傳遞給另一個(gè)進(jìn)程,而不是寫入一個(gè)文件,由于無須對主服務(wù)器進(jìn)行編程,這個(gè)功能顯著地增強(qiáng)了日志的靈活性。只要用管道操作符"|"后面跟一個(gè)可執(zhí)行文件名,就可以使這個(gè)程序從標(biāo)準(zhǔn)輸入設(shè)備獲得事件記錄。Apache在啟動(dòng)時(shí),會同時(shí)啟動(dòng)這個(gè)管道日志進(jìn)程,并且在運(yùn)行過程中,如果這個(gè)進(jìn)程崩潰了,會重新啟動(dòng)這個(gè)進(jìn)程(所以我們稱這個(gè)技術(shù)為"可靠管道日志")。

管道日志進(jìn)程由其父進(jìn)程Apache httpd產(chǎn)生,并繼承其權(quán)限,這意味著管道進(jìn)程通常是作為root運(yùn)行的,所以保持這個(gè)程序簡單而安全極為重要。

管道日志的一種重要用途是,允許日志滾動(dòng)而無須重新啟動(dòng)服務(wù)器。為此,服務(wù)器提供了一個(gè)簡單的程序rotatelogs 。每24小時(shí)滾動(dòng)一次日志的例子如下:

CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common

注意:引號用于界定整個(gè)管道命令行。雖然這是針對訪問日志的,但是其用法對于其他日志也一樣。

在其他站點(diǎn),有一個(gè)類似但更靈活的日志滾動(dòng)程序叫cronolog 。

如果有較簡單的離線處理日志的方案,就不應(yīng)該使用條件日志和管道日志,即使它們非常強(qiáng)大。

top

虛擬主機(jī)

如果服務(wù)器配有若干虛擬主機(jī),那么還有幾個(gè)控制日志文件的功能。首先,可以把日志指令放在<VirtualHost>段之外,讓它們與主服務(wù)器使用同一個(gè)訪問日志和錯(cuò)誤日志來記錄所有的請求和錯(cuò)誤,但是這樣就不能方便的獲得每個(gè)虛擬主機(jī)的信息了。

如果把CustomLogErrorLog指令放在<VirtualHost>段內(nèi),所有對這個(gè)虛擬主機(jī)的請求和錯(cuò)誤信息會被記錄在其私有的日志文件中,那些沒有在<VirtualHost>段內(nèi)使用日志指令的虛擬主機(jī)將仍然和主服務(wù)器使用同一個(gè)日志。這種方法對虛擬主機(jī)較少的服務(wù)器很有用,但虛擬主機(jī)非常多時(shí),就會帶來管理上的困難,還經(jīng)常會產(chǎn)生文件描述符短缺的問題。

對于訪問日志,有一個(gè)很好的折衷方案,在同一個(gè)訪問日志文件中記錄對所有主機(jī)的訪問,而每條記錄都注明虛擬主機(jī)的信息,日后再把記錄拆開存入不同的文件。例如:

LogFormat "%v %l %u %t \"%r\" %>s %b" comonvhost
CustomLog logs/access_log comonvhost

%v 用來附加虛擬主機(jī)的信息。有個(gè)split-logfile程序可以根據(jù)不同的虛擬主機(jī)信息對日志進(jìn)行拆分,并將結(jié)果存入不同的文件。

top

其他日志文件

記錄接收和發(fā)送的實(shí)際字節(jié)數(shù)

mod_logio增加了兩個(gè)額外的LogFormat字段(%I 和 %O)用于記錄接收和發(fā)送的實(shí)際字節(jié)數(shù)。

對比記錄(Forensic Logging)

mod_log_forensic提供了對客戶端請求的對比記錄,也就是在請求被處理之前和處理完成之后進(jìn)行兩次記錄,所以對比日志(forensic log)對于每個(gè)請求都包含兩條記錄。對比記錄器(forensic logger)十分嚴(yán)格,不可以進(jìn)行定制。它可以成為無價(jià)的調(diào)試和安全工具。

PID文件

在啟動(dòng)時(shí),Apache httpd將會在logs/httpd.pid文件中保存其父進(jìn)程httpd的進(jìn)程ID(process id[PID])。該文件名可以用PidFile指令改變。該P(yáng)ID可以被管理員利用來重新啟動(dòng)或者終止服務(wù)器后臺守護(hù)進(jìn)程。在Windows中,可以使用命令行參數(shù) -k 。更多信息請參見停止和重新啟動(dòng)。

腳本日志

為了方便調(diào)試,可以用ScriptLog指令來記錄CGI腳本的輸入和輸出。此功能應(yīng)該僅用于測試,而不應(yīng)該用于正常工作的服務(wù)器。更多資料請參見mod_cgi文檔。

重寫日志

在使用強(qiáng)大且靈活的mod_rewrite時(shí),幾乎都有必要用RewriteLog來幫助調(diào)試。這個(gè)日志提供了重寫引擎如何轉(zhuǎn)換請求的詳細(xì)分解信息,其詳細(xì)程度取決于RewriteLogLevel指令。