查看單個文章
舊 2004-09-18, 02:58 AM   #9 (permalink)
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

Apache日誌:訪問日誌(一)
想要知道什麼人在什麼時候瀏覽了網站的哪些內容嗎?檢視Apache的訪問日誌就可以知道。訪問日誌是Apache的標準日誌,本文詳細解釋了訪問日誌的內容以及相關選項的組態。
一、訪問日誌的格式

   Apache內建了記錄伺服器活動的功能,這就是它的日誌功能。這個《Apache日誌》系列文章介紹的就是Apache的訪問日誌、錯誤日誌,以及如何分析日誌資料,如何設定Apache日誌,如何從日誌資料產生統計報表等內容。

   如果Apache的安裝方式是預設值安裝,伺服器一執行就會有兩個日誌文件產生。這兩個文件是access_log(在Windows上是access.log)和error_log(在Windows上是error.log)。採用預設值安裝方式時,這些文 件可以在/usr/local/apache/logs下找到;對於Windows系統,這些日誌文件將儲存在Apache安裝目錄的logs子目錄。不同的包管理器會把日誌文件放到各種不同的位置,所以你可能需要找找其他的地方,或者通過組態文件檢視這些日誌文件組態到了什麼地方。

   正如其名字所顯示,訪問日誌access_log記錄了所有對Web伺服器的訪問活動。下面是訪問日誌中一個典型的記錄:

216.35.116.91 - - [19/Aug/2000:14:47:37 -0400] "GET / HTTP/1.0" 200 654

  這行內容由7項構成,上面的例子中有兩項空白,但整行內容仍舊分成了7項。

   第一項資訊是遠端主機的位址,即它表明訪問網站的究竟是誰。在上面的例子中,訪問網站的主機是216.35.116.91。隨便說一句,這個位址屬於一台名為si3001.inktomi.com的機器(要找出這個資訊,可以使用nslookup工具搜尋 DNS),inktomi.com是一家製作Web搜尋軟體的公司。可以看出,僅僅從日誌記錄的第一項出發,我們就可以得到有關訪問者的不少資訊。

   預設值情況下,第一項資訊只是遠端主機的IP位址,但我們可以要求Apache查出所有的主機名字,並在日誌文件中用主機名字來替代IP位址。然而,這種做法通常不值得推薦,因為它將極大地影響伺服器記錄日誌的速度,從而也就減低了整個網站的效率。另外,有 許多工具能夠將日誌文件中的IP位址轉換成主機名字,因此要求Apache記錄主機名字替代IP位址是得不償失的。

   然而,如果確實有必要讓Apache找出遠端主機的名字,那麼我們可以使用如下指令:

HostNameLookups on

   如果HostNameLookups設定成double而不是on,日誌記錄程序將對它找到的主機名字進行反向搜尋,驗證該主機名字確實指向了原來出現的IP位址。預設值情況下HostNameLookups設定為off。

   上例日誌記錄中的第二項是空白,用一個「-」佔位符替代。實際上絕大多數時候這一項都是如此。這個位置用於記錄瀏覽者的標識,這不只是瀏覽者的登入名字,而是瀏覽者的email位址或者其他唯一標識符。這個資訊由identd返回,或者直接由瀏覽器返回。很早的時候,那時Netscape 0.9還佔據著統治地位,這個位置往往記錄著瀏覽者的email位址。然而,由於有人用它來收集郵件位址和傳送垃圾郵件,所以它未能保留多久,很久之前市場上幾乎所有的瀏覽器就取消了這項功能。因此,到了今天,我們在日誌記錄的第二項看到email位址的 機會已經微乎其微了。

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

   日誌記錄的第四項是請求的時間。這個資訊用方括號包圍,而且採用所謂的「公共日誌格式」或「標準英文格式」。因此,上例日誌記錄表示請求的時間是2000年8月19日星期三14:47:37。時間資訊最後的「-0400」表示伺服器所處時區位於UTC之前的4小時。

   日誌記錄的第五項資訊或許是整個日誌記錄中最有用的資訊,它告訴我們伺服器收到的是一個什麼樣的請求。該項資訊的典型格式是「METHOD RESOURCE PROTOCOL」,即「方法 資源 傳輸協定」。

   在上例中,METHOD是GET,其他經常可能出現的METHOD還有POST和HEAD。此外還有不少可能出現的合法METHOD,但主要就是這三種。

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

   PROTOCOL通常是HTTP,後面再加上版本號。版本號或者是1.0,或者是1.1,但出現1.0的時候比較多。我們知道,HTTP傳輸協定是Web得以工作的基礎,HTTP/1.0是HTTP傳輸協定的早期版本,而1.1是最近的版本。當前大多數Web客戶程序仍使用1.0版本的HTTP傳輸協定。

   日誌記錄的第六項資訊是狀態程式碼。它告訴我們請求是否成功,或者遇到了什麼樣的錯誤。大多數時候,這項值是200,它表示伺服器已經成功地回應瀏覽器的請求,一切正常。此處不準備指出狀態程式碼的完整清單以及解釋它們的含義,請參考相關資料瞭解這方面的資訊 。但一般地說,以2開頭的狀態程式碼表示成功,以3開頭的狀態程式碼表示由於各種不同的原因用戶請求被重轉發IP到了其他位置,以4開頭的狀態程式碼表示客戶端存在某種錯誤,以5開頭的狀態程式碼表示伺服器遇到了某個錯誤。

   日誌記錄的第七項表示傳送給客戶端的總字元數。它告訴我們傳輸是否被打斷(即,該數值是否和文件的大小相同)。把日誌記錄中的這些值加起來就可以得知伺服器在一天、一周或者一月內傳送了多少資料。

二、組態訪問日誌

   訪問日誌文件的位置實際上是一個組態選項。如果我們檢查httpd.conf組態文件,可以看到該檔案中有如下這行內容:

CustomLog /usr/local/apache/logs/access_log common
   注意,對於版本較早的Apache伺服器,這行內容可能略有不同。它使用的可能不是CustomLog指令,而是TransferLog指令。如果你的伺服器屬於這類情況,建議你盡可能地早日昇級伺服器。

   CustomLog指令指定了儲存日誌文件的具體位置以及日誌的格式。至於如何設定日誌文件的格式以及內容,我們將在這個《Apache日誌》系列文章的後面幾篇討論。上面這行指令指定的是common日誌格式,自從有了Web伺服器開始,common格 式就是它的標準格式。由此我們也可以理解,雖然幾乎不再有任何客戶程序向伺服器提供用戶的標識資訊,但訪問日誌卻還保留著第二項內容。

   CustomLog指令中的路徑是日誌文件的路徑。注意,由於日誌文件是由HTTP用戶開啟的(用User指令指定),因此必須注意這個路徑要有安全保證,防止該檔案被隨意改寫。
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次