假如想要檢查某個(gè)特定的cache文件,你可稍費工夫將文件號轉換到路徑名。另外目錄號和L1和L2值
也是必需的。在squid的源代碼里,storeUfsDirFullPath( )函數做這個(gè)事情??稍?/font>
src/fs/ufs/store_dir_ufs.c文件里找到它。如下短小的perl腳本模擬了當前算法:
useragent_log /usr/local/squid/var/logs/useragent.log7
這樣使用它:
% echo 000DCD06 | ./fileno-to-pathname.pl 0D/CD/000DCD06
要在第N個(gè)cache_dir里找到該文件,簡(jiǎn)單的進(jìn)入到相應的目錄,并列出或查看該文件:
% cd /cache2 % ls -l 0D/CD/000DCD06 -rw------- 1 squid squid 391 Jun 3 12:40 0D/CD/000DCD06 % less 0D/CD/000DCD06
13.4 referer.log
可選的referer.log包含了來(lái)自客戶(hù)端請求的Referer頭部。為了使用該功能,必須在./configure時(shí)打
開(kāi)--enable-referer-log選項。還必須用referer_log指令來(lái)指定一個(gè)路徑。例如:
referer_log /usr/local/squid/var/logs/referer.log
假如想禁止referer.log,則可設置文件名為none。
Referer頭部正常情況下包含一個(gè)URI,從這個(gè)URI獲取到了請求(見(jiàn)RFC2616的14.36節)。例如,
當web瀏覽器發(fā)布請求到某個(gè)內嵌圖片時(shí),Referer頭部被設置成包含該圖片的HTML網(wǎng)頁(yè)的URI。當
你點(diǎn)擊HTML超鏈接時(shí),它也被設置。某些web站點(diǎn)管理員使用Referer值來(lái)查找死鏈接。在使用
Squid作為代理人模式時(shí),你也許發(fā)現referer.log特別有用。
referer.log格式簡(jiǎn)單,僅有4個(gè)域。如下是一些示例:
1068047502.377 3.0.168.206 http://www.amazon.com/exec/obidos/search-handle-form/002-7230223-8205634 http://www.amazon.com/exec/obidos/ASIN/0596001622/qid=1068047396/sr=2-1/... 1068047503.109 3.0.168.206 http://www.amazon.com/exec/obidos/ASIN/0596001622/qid=1068047396/sr=2-1/... http://g-images.amazon.com/./images/G/01/gourmet/gourmet-segway.gif 1068047503.196 3.0.168.206 http://www.amazon.com/exec/obidos/ASIN/0596001622/qid=1068047396/sr=2-1/... http://g-images.amazon.com/./images/G/01/marketing/cross-shop/arnold/appar... 1068047503.198 3.0.168.206 http://www.amazon.com/exec/obidos/ASIN/0596001622/qid=1068047396/sr=2-1/... http://g-images.amazon.com/./images/G/01/marketing/cross-shop/arnold/appar... 1068047503.825 3.0.168.206 http://www.amazon.com/exec/obidos/ASIN/0596001622/qid=1068047396/sr=2-1/... http://images.amazon.com/./images/P/B00005R8BC.01.TZZZZZZZ.jpg 1068047503.842 3.0.168.206 http://www.amazon.com/exec/obidos/ASIN/0596001622/qid=1068047396/sr=2-1/... http://images.amazon.com/./images/P/0596001622.01._PE_PI_SCMZZZZZZZ_.jpg
注意缺少Referer頭部的請求不會(huì )被記錄。這4個(gè)域描述如下:
注意的是,不像access.log,referer.log在Squid接受到完整請求時(shí),會(huì )立刻記錄。這樣,
referer.log條目在access.log之前發(fā)生,后者等待響應完成才記錄。
13.5 useragent.log
可選的useragent.log包含來(lái)自客戶(hù)端請求的User-Agent頭部值。為了使用該功能,必須在運行
./configure時(shí)打開(kāi)--enable-useragent-log選項。還必須使用useragent_log指令來(lái)提供一個(gè)路徑
名。例如:
___FCKpd___5
User-Agent頭部正常情況下包含了發(fā)起請求的user-agent的描述。大多數情形下,該描述只是簡(jiǎn)單
的產(chǎn)品名列表和版本信息。你應該清楚應用程序可以輕易的提供偽造的user-agent信息?,F代
user-agent提供途徑可定制該描述。甚至Squid在轉發(fā)請求里能改變這個(gè)User-Agent頭部。
useragent.log格式相對簡(jiǎn)單,看起來(lái)如下:
3.0.168.206 [05/Nov/2003:08:51:43 -0700] "Mozilla/5.0 (compatible; Konqueror/3; FreeBSD)" 3.0.168.207 [05/Nov/2003:08:52:18 -0700] "Opera/7.21 (X11; FreeBSD i386; U) [en]" 4.241.144.204 [05/Nov/2003:08:55:11 -0700] "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/103u (KHTM..." 3.0.168.206 [05/Nov/2003:08:51:43 -0700] "Java1.3.1_01" 64.68.82.28 [05/Nov/2003:08:52:50 -0700] "Googlebot/2.1 (http://www.googlebot.com/bot.html)" 3.0.168.205 [05/Nov/2003:08:52:50 -0700] "WebZIP/4.1 (http://www.spidersoft.com)" 4.241.144.201 [05/Nov/2003:08:52:50 -0700] "Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt; Hotbar 3.0)" 3.0.168.206 [05/Nov/2003:08:54:40 -0700] "Bookmark Renewal Check Agent [http://www.bookmark.ne.jp/] (Version 2.0..."
不像其他日志文件,它僅有3個(gè)域:
[10/Jun/2003:22:38:36 -0600]
13.6 swap.state
swap.state文件是目標寫(xiě)入cache目錄、或從cache目錄刪除的日志寫(xiě)照。每個(gè)cache_dir有它自己
的swap.state文件。當Squid啟動(dòng)時(shí),它讀取swap.state文件來(lái)重建cache目標的內存索引。這些
文件對Squid管理來(lái)說(shuō),至關(guān)重要。
默認情況下,每個(gè)cache.state文件位于它相應的cache目錄。這樣,每個(gè)state文件自動(dòng)駐留在每個(gè)
cache_dir下。這點(diǎn)很有用--假如你想重新排序cache_dir行,或想從cache_dir列表里刪除條目的
話(huà)。
如果想將它們放在其他位置,可使用cache_swap_log指令來(lái)做:
cache_swap_log /usr/local/squid/var/logs/swap.state
在此情況下,Squid對每個(gè)cache目錄創(chuàng )建一個(gè)swap.state文件,并增加數字后綴。例如,假如有4個(gè)
cache目錄,Squid創(chuàng )建如下日志:
/usr/local/squid/var/logs/swap.state.00 /usr/local/squid/var/logs/swap.state.01 /usr/local/squid/var/logs/swap.state.02 /usr/local/squid/var/logs/swap.state.03
在這個(gè)情形下,如果你要增加、刪除、或重排序cache_dir行,就必須手工重命名swap.state文件,
以保持事情一致。
技術(shù)上,swap.state格式是獨立于存儲機制的。然而,在當前版本的Squid里,所有的存儲機制使用
同一種格式。swap.state文件使用修正大?。?8位)的二進(jìn)制格式。各個(gè)域值以主機字節順序記錄,
這樣在不同的操作系統之間不便遷移。表13-3描述了swap.state日志條目的各個(gè)域的說(shuō)明。
Table 13-3. swap.state entry fields
| Name | Size, in bytes | Description |
| op | 1 | Operation on the entry: added (1) or deleted (2). |
| file number | 4 | Same as the fourth field of store.log, except it is stored in binary. |
| timestamp | 4 | A timestamp corresponding to the time when the response was generated or last validated. Taken from the Date header for responses that have one. Stored as the number of seconds since the Unix epoch. |
| lastref | 4 | A timestamp corresponding to the most recent access to the object. |
| expires | 4 | The object's expiration time, taken from an Expires header or Cache-Control max-age directive. |
| last-modified | 4 | The object's Last-Modified value. |
| swap file size | 4 | The amount of space the object occupies on disk. This includes HTTP headers and other Squid-specific meta-information. |
| refcount | 2 | The number of times this object has been requested. |
| flags | 2 | Various internal flags used by Squid. |
| key | 16 | The MD5 hash of the corresponding URI. Same as the key in store.log, except this one is stored in binary. |
Squid不斷的寫(xiě)日志,假如cache非常忙,那么在一段時(shí)間后,這些日志文件可能變得很大。某些操作
系統甚至限制了文件的最大size(例如2G),假如寫(xiě)文件超過(guò)了這個(gè)size就會(huì )報錯。為了保持日志文件
容易管理,以及讓Squid正常工作,必須定期輪轉日志。
Squid有內建的功能用于輪轉日志??赏ㄟ^(guò)squid -k rotate命令來(lái)調用它,然后告訴Squid對每個(gè)日志
文件保持多少份舊拷貝。例如,假如設置它為7,對每個(gè)日志文件會(huì )有8個(gè)版本:1個(gè)當前的,和7個(gè)舊
的。
舊日志文件以數字擴展來(lái)重命名。例如,當執行一次輪轉時(shí),Squid重命名log.6到log.7,然后是
log.5到log.6,依此類(lèi)推。當前l(fā)og變成log.0,并且Squid創(chuàng )建一個(gè)新的空文件,命名為log。
每次執行squid -k rotate時(shí),Squid輪轉下述文件:cache.log, access.log, store.log,
useragent.log (假如激活), 以及referer.log (假如激活)。Squid也會(huì )創(chuàng )建最新版本的swap.state
文件。然而請注意,swap.state不會(huì )以數字擴展形式來(lái)輪轉。
Squid不會(huì )自己輪轉日志,最好的辦法是在crontab里自動(dòng)執行。例如:
0 0 * * * /usr/local/squid/sbin/squid -k rotate
假如你想編寫(xiě)自己的腳本來(lái)管理日志文件,Squid提供了一個(gè)有用的模式,簡(jiǎn)單的設置logfile_rotate
指令為0。這樣,當你運行squid -k rotate命令時(shí),Squid簡(jiǎn)單的關(guān)閉當前日志文件,并且打開(kāi)新的。
如果操作系統允許重命名被其他進(jìn)程打開(kāi)的文件,則這點(diǎn)非常有用。下述shell腳本描述了一個(gè)思路:
#!/bin/sh set -e yesterday_secs=`perl -e 'print time -43200'` yesterday_date=`date -r $yesterday_secs +%Y%m%d` cd /usr/local/squid/var/logs # rename the current log file without interrupting the logging process mv access.log access.log.$yesterday_date # tell Squid to close the current logs and open new ones /usr/local/squid/sbin/squid -k rotate # give Squid some time to finish writing swap.state files sleep 60 mv access.log.$yesterday_date /archive/location/ gzip -9 /archive/location/access.log.$yesterday_date
13.8 隱私和安全
Squid的日志文件特別是access.log,包含了用戶(hù)的活躍記錄,因此它受隱私問(wèn)題支配。作為Squid管
理員,你必須采取額外的小心來(lái)保證日志文件安全。最好的辦法是限制訪(fǎng)問(wèn)Squid主機的人員的數量。
假如這點(diǎn)行不通,那么就要謹慎的檢查文件和目錄許可,確保日志文件不會(huì )被非信任的、或未授權的用
戶(hù)訪(fǎng)問(wèn)。
也可利用client_netmask和strip_query_terms指令來(lái)保護用戶(hù)隱私。前者讓識別access.log里的用
戶(hù)困難;后者移除了URI查詢(xún)條件以避免泄露用戶(hù)私人信息。更多信息見(jiàn)13.2.4節。
如果想要保持歷史數據相當長(cháng)的時(shí)間,你也許可裁減日志來(lái)保證日志文件匿名。假如你僅對哪個(gè)URI被
訪(fǎng)問(wèn)感興趣,而不是誰(shuí)訪(fǎng)問(wèn)了它們,就可從access.log里抽取出該域。這樣也讓文件更小,并且減少
了隱私違背的風(fēng)險。另一個(gè)技術(shù)是隨機處理客戶(hù)端IP地址。換句話(huà)說(shuō),就是創(chuàng )建一個(gè)過(guò)濾器,把真正的
IP地址映射到假的地址,前提是同一個(gè)真IP地址總是映射到同一個(gè)假I(mǎi)P。假如你在使用RFC 1413身份
驗證協(xié)議或HTTP認證,也可考慮保持這些域匿名。
);
printf("%02X/%02X/%08X\n",
(($filn / $L2) / $L2) % $L1,
($filn / $L2) % $L2,
$filn);
}
這樣使用它:
___FCKpd___58
要在第N個(gè)cache_dir里找到該文件,簡(jiǎn)單的進(jìn)入到相應的目錄,并列出或查看該文件:
___FCKpd___59
13.4 referer.log
可選的referer.log包含了來(lái)自客戶(hù)端請求的Referer頭部。為了使用該功能,必須在./configure時(shí)打
開(kāi)--enable-referer-log選項。還必須用referer_log指令來(lái)指定一個(gè)路徑。例如:
___FCKpd___60
假如想禁止referer.log,則可設置文件名為none。
Referer頭部正常情況下包含一個(gè)URI,從這個(gè)URI獲取到了請求(見(jiàn)RFC2616的14.36節)。例如,當web瀏覽器發(fā)布請求到某個(gè)內嵌圖片時(shí),Referer頭部被設置成包含該圖片的HTML網(wǎng)頁(yè)的URI。當你點(diǎn)擊HTML超鏈接時(shí),它也被設置。某些web站點(diǎn)管理員使用Referer值來(lái)查找死鏈接。在使用Squid作為代理人模式時(shí),你也許發(fā)現referer.log特別有用。
referer.log格式簡(jiǎn)單,僅有4個(gè)域。如下是一些示例:
___FCKpd___61
注意缺少Referer頭部的請求不會(huì )被記錄。這4個(gè)域描述如下:
注意的是,不像access.log,referer.log在Squid接受到完整請求時(shí),會(huì )立刻記錄。這樣,referer.log條目在access.log之前發(fā)生,后者等待響應完成才記錄。
13.5 useragent.log
可選的useragent.log包含來(lái)自客戶(hù)端請求的User-Agent頭部值。為了使用該功能,必須在運行./configure時(shí)打開(kāi)--enable-useragent-log選項。還必須使用useragent_log指令來(lái)提供一個(gè)路徑名。例如:
___FCKpd___62
User-Agent頭部正常情況下包含了發(fā)起請求的user-agent的描述。大多數情形下,該描述只是簡(jiǎn)單的產(chǎn)品名列表和版本信息。你應該清楚應用程序可以輕易的提供偽造的user-agent信息?,F代user-agent提供途徑可定制該描述。甚至Squid在轉發(fā)請求里能改變這個(gè)User-Agent頭部。
useragent.log格式相對簡(jiǎn)單,看起來(lái)如下:
___FCKpd___63
不像其他日志文件,它僅有3個(gè)域:
___FCKpd___64
13.6 swap.state
swap.state文件是目標寫(xiě)入cache目錄、或從cache目錄刪除的日志寫(xiě)照。每個(gè)cache_dir有它自己的swap.state文件。當Squid啟動(dòng)時(shí),它讀取swap.state文件來(lái)重建cache目標的內存索引。這些文件對Squid管理來(lái)說(shuō),至關(guān)重要。
默認情況下,每個(gè)cache.state文件位于它相應的cache目錄。這樣,每個(gè)state文件自動(dòng)駐留在每個(gè)cache_dir下。這點(diǎn)很有用--假如你想重新排序cache_dir行,或想從cache_dir列表里刪除條目的話(huà)。
如果想將它們放在其他位置,可使用cache_swap_log指令來(lái)做:
___FCKpd___65
在此情況下,Squid對每個(gè)cache目錄創(chuàng )建一個(gè)swap.state文件,并增加數字后綴。例如,假如有4個(gè)cache目錄,Squid創(chuàng )建如下日志:
___FCKpd___66
在這個(gè)情形下,如果你要增加、刪除、或重排序cache_dir行,就必須手工重命名swap.state文件,以保持事情一致。
技術(shù)上,swap.state格式是獨立于存儲機制的。然而,在當前版本的Squid里,所有的存儲機制使用同一種格式。swap.state文件使用修正大?。?8位)的二進(jìn)制格式。各個(gè)域值以主機字節順序記錄,這樣在不同的操作系統之間不便遷移。表13-3描述了swap.state日志條目的各個(gè)域的說(shuō)明。
Table 13-3. swap.state entry fields
| Name | Size, in bytes | Description |
| op | 1 | Operation on the entry: added (1) or deleted (2). |
| file number | 4 | Same as the fourth field of store.log, except it is stored in binary. |
| timestamp | 4 | A timestamp corresponding to the time when the response was generated or last validated. Taken from the Date header for responses that have one. Stored as the number of seconds since the Unix epoch. |
| lastref | 4 | A timestamp corresponding to the most recent access to the object. |
| expires | 4 | The object's expiration time, taken from an Expires header or Cache-Control max-age directive. |
| last-modified | 4 | The object's Last-Modified value. |
| swap file size | 4 | The amount of space the object occupies on disk. This includes HTTP headers and other Squid-specific meta-information. |
| refcount | 2 | The number of times this object has been requested. |
| flags | 2 | Various internal flags used by Squid. |
| key | 16 | The MD5 hash of the corresponding URI. Same as the key in store.log, except this one is stored in binary. |
13.7 輪轉日志
Squid不斷的寫(xiě)日志,假如cache非常忙,那么在一段時(shí)間后,這些日志文件可能變得很大。某些操作系統甚至限制了文件的最大size(例如2G),假如寫(xiě)文件超過(guò)了這個(gè)size就會(huì )報錯。為了保持日志文件容易管理,以及讓Squid正常工作,必須定期輪轉日志。
Squid有內建的功能用于輪轉日志??赏ㄟ^(guò)squid -k rotate命令來(lái)調用它,然后告訴Squid對每個(gè)日志文件保持多少份舊拷貝。例如,假如設置它為7,對每個(gè)日志文件會(huì )有8個(gè)版本:1個(gè)當前的,和7個(gè)舊的。
舊日志文件以數字擴展來(lái)重命名。例如,當執行一次輪轉時(shí),Squid重命名log.6到log.7,然后是log.5到log.6,依此類(lèi)推。當前l(fā)og變成log.0,并且Squid創(chuàng )建一個(gè)新的空文件,命名為log。
每次執行squid -k rotate時(shí),Squid輪轉下述文件:cache.log, access.log, store.log, useragent.log (假如激活), 以及referer.log (假如激活)。Squid也會(huì )創(chuàng )建最新版本的swap.state文件。然而請注意,swap.state不會(huì )以數字擴展形式來(lái)輪轉。
Squid不會(huì )自己輪轉日志,最好的辦法是在crontab里自動(dòng)執行。例如:
___FCKpd___67
假如你想編寫(xiě)自己的腳本來(lái)管理日志文件,Squid提供了一個(gè)有用的模式,簡(jiǎn)單的設置logfile_rotate指令為0。這樣,當你運行squid -k rotate命令時(shí),Squid簡(jiǎn)單的關(guān)閉當前日志文件,并且打開(kāi)新的。如果操作系統允許重命名被其他進(jìn)程打開(kāi)的文件,則這點(diǎn)非常有用。下述shell腳本描述了一個(gè)思路:
___FCKpd___68
13.8 隱私和安全
Squid的日志文件特別是access.log,包含了用戶(hù)的活躍記錄,因此它受隱私問(wèn)題支配。作為Squid管理員,你必須采取額外的小心來(lái)保證日志文件安全。最好的辦法是限制訪(fǎng)問(wèn)Squid主機的人員的數量。假如這點(diǎn)行不通,那么就要謹慎的檢查文件和目錄許可,確保日志文件不會(huì )被非信任的、或未授權的用戶(hù)訪(fǎng)問(wèn)。
也可利用client_netmask和strip_query_terms指令來(lái)保護用戶(hù)隱私。前者讓識別access.log里的用戶(hù)困難;后者移除了URI查詢(xún)條件以避免泄露用戶(hù)私人信息。更多信息見(jiàn)13.2.4節。
如果想要保持歷史數據相當長(cháng)的時(shí)間,你也許可裁減日志來(lái)保證日志文件匿名。假如你僅對哪個(gè)URI被訪(fǎng)問(wèn)感興趣,而不是誰(shuí)訪(fǎng)問(wèn)了它們,就可從access.log里抽取出該域。這樣也讓文件更小,并且減少了隱私違背的風(fēng)險。另一個(gè)技術(shù)是隨機處理客戶(hù)端IP地址。換句話(huà)說(shuō),就是創(chuàng )建一個(gè)過(guò)濾器,把真正的IP地址映射到假的地址,前提是同一個(gè)真IP地址總是映射到同一個(gè)假I(mǎi)P。假如你在使用RFC 1413身份驗證協(xié)議或HTTP認證,也可考慮保持這些域匿名。
聯(lián)系客服