apache服務器訪問日誌access.log設置

一、訪問日誌信息

當瀏覽器請求服務器時,如果在服務器上設置了訪問日誌,就會記錄下用戶的訪問記錄。

例如我訪問本地apache所產生的一條默認的日誌:

127.0.0.1 - - [03/Feb/2015:23:14:24 +0800] "GET / HTTP/1.1" 200 2

分爲7個部分

  (1)第一項信息是遠程主機的地址,即它表明訪問網站的究竟是誰。(可以要求apache查出所有的主機名字,並在日誌文件中用主機名字來替代IP地址,但這種做法會極大的影響服務器記錄日誌的速度,從而降低整個網站的效率,不值得推薦)。然而,如果確實有必要讓Apache找出遠程主機的名字,可以使用如下指令:

HostNameLookups on

 如果HostNameLookups設置成double而不是on,日誌記錄程序將對它找到的主機名字進行反向查找,驗證該主機名字確實指向了原來出現的IP地址。

  (2)上例日誌記錄的第二項是空白,用一個“-”佔位符替代。實際上絕大多數時候這一項都是如此。這個位置用於記錄瀏覽者的標識,這不只是瀏覽者的登錄名字,而是瀏覽者的email地址或者其他唯一標識符。這個信息由identd返回,或者直接由瀏覽器返回。(爲了避免用戶的郵箱被垃圾郵件騷擾,第二項就用“-”取代了)。

  (3)日記記錄的第三項也是空白。這個位置用於記錄瀏覽者進行身份驗證時提供的名字。當然,如果網站的某些內容要求用戶進行身份驗證,那麼這項信息室不會空白的。但是,對於大多數網站來說,日誌文件的大多數記錄中這一項仍舊是空白的。

  (4)日誌記錄的第四項是請求的時間。這個信息用方括號包圍,而且採用“公用日誌格式”或者“標準英文格式”。因此,時間信息最後的“-0400”表示服務器所處時區位於UTC之前的4小時。

  (5)日誌記錄的第五項信息或許是整個日誌記錄中最有用的信息,它告訴我們服務器受到的是一個什麼樣的請求。該項信息的典型格式是“METHOD RESOURCE PROTOCOL”即“方法 資源 協議”(我們通常進行日誌監控的時候,主要也是看這項內容)。例子中METHOD是GET,還有POST、HEAD等其他類型,主要是這三種。

RESOURCE是指瀏覽者向服務器請求的文檔或者URL。在這個例子中,瀏覽者請求的是“/”,即網站的根或者主頁。大多數情況下,“/”指向DocumentRoot目錄的index.html文檔,但根據服務器配置的不同也可能指向其他文件。

  PROTOCOL通常是HTTP,然後再加上版本號。

 (6)日誌的第六項信息室狀態代碼。它告訴我們請求是否成功,或者遇到了什麼樣的錯誤。大多數時候這項是200,它表示服務器已經成功的響應瀏覽器的請求,一切正常。(以2開頭的狀態碼錶示成功,以3開頭的狀態碼錶示由於各種不同的原因用戶請求被重定向到了其他位置,以4開頭的狀態代碼表示客戶端存在某種錯誤,以5開頭的狀態代碼表示服務器遇到了某個錯誤)。

 (7)日誌記錄的第七項表示發送客戶端的總字節數。它告訴我們傳輸是否被打斷(即該數值是否和文件的大小相同)

二、配置訪問日誌

在apache的配置文件httpd.conf中,有一行是這麼配置的:

CustomLog "logs/access.log" common

指定了日誌的目錄路徑./logs/,指定了日誌的格式,默認common。

common格式是通過:LogFormat "%h %l %u %t \"%r\" %>s %b" common定義的。

雙引號裏面的格式字符串代表特定的信息。

apache格式字符串及其含義:

<span style="font-size:18px;">%%    百分號(Apache2.0.44或更高的版本)
%a    遠端IP地址
%A    本機IP地址
%B    除HTTP頭以外傳送的字節數
%b    以CLF格式顯示的除HTTP頭以外傳送的字節數,也就是當沒有字節傳送時顯示'-'而不是0。
%{Foobar}C    在請求中傳送給服務端的cookieFoobar的內容。
%D    服務器處理本請求所用時間,以微爲單位。
%{FOOBAR}e    環境變量FOOBAR的值
%f    文件名
%h    遠端主機
%H    請求使用的協議
%{Foobar}i    發送到服務器的請求頭Foobar:的內容。
%l    遠端登錄名(由identd而來,如果支持的話),除非IdentityCheck設爲"On",否則將得到一個"-"。
%m    請求的方法
%{Foobar}n    來自另一個模塊的註解Foobar的內容。
%{Foobar}o    應答頭Foobar:的內容。
%p    服務器服務於該請求的標準端口。
%P    爲本請求提供服務的子進程的PID。
%{format}P 服務於該請求的PID或TID(線程ID),format的取值範圍爲:pid和tid(2.0.46及以後版本)以及hextid(需要APR1.2.0及以上版本)
%q    查詢字符串(若存在則由一個"?"引導,否則返回空串)
%r    請求的第一行
%s    狀態。對於內部重定向的請求,這個狀態指的是原始請求的狀態,---%>s則指的是最後請求的狀態。
%t    時間,用普通日誌時間格式(標準英語格式)
%{format}t    時間,用strftime(3)指定的格式表示的時間。(默認情況下按本地化格式)
%T    處理完請求所花時間,以秒爲單位。
%u    遠程用戶名(根據驗證信息而來;如果返回status(%s)爲401,可能是假的)
%U    請求的URL路徑,不包含查詢字符串。
%v    對該請求提供服務的標準ServerName。
%V    根據UseCanonicalName指令設定的服務器名稱。


【補充】"<"和">"修飾符可以用來指定對於已被內部重定向的請求是選擇原始的請求還是選擇最終的請求。默認情況下,%s, %U, %T, %D, %r 使用原始請求,而所有其他格式串則選擇最終請求。例如,<strong>%>s</strong> 可以用於記錄請求的最終狀態,而 %<u 則記錄一個已經被內部重定向到非認證資源的請求的原始認證用戶。
  如果在“%”和變量之間放入了一個或者多個HTTP狀態代碼,則只有當請求返回的狀態代碼屬於指定的狀態代碼之一時,變量所代表的內容纔會被記錄。例如,如果我們想要記錄的是網站的所有無效鏈接,那麼可以使用:  
     LogFormat %404{Referer}i BrokenLinks  
  反之,如果我們想要記錄那些狀態代碼不等於指定值的請求,只需加入一個“!”符號即可: 
   LogFormat %!200U SomethingWrong   

我們還可以自定義日誌格式,例如:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" " combine

定義了combine格式  其中\"%{Referer}i\" \"%{User-Agent}i\" 是發送到服務器的求情頭和Referer鏈接。









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章