13.3.1 轉(zhuǎn)換文件號到路徑名假如想要檢查某個特定的cache文件,你可稍費工夫?qū)⑽募栟D(zhuǎn)換到路徑名。另外目錄號和L1和L2值 也是必需的。在squid的源代碼里,storeUfsDirFullPath( )函數(shù)做這個事情??稍?/font> src/fs/ufs/store_dir_ufs.c文件里找到它。如下短小的perl腳本模擬了當(dāng)前算法: useragent_log /usr/local/squid/var/logs/useragent.log7 這樣使用它: % echo 000DCD06 | ./fileno-to-pathname.pl
0D/CD/000DCD06
要在第N個cache_dir里找到該文件,簡單的進入到相應(yīng)的目錄,并列出或查看該文件: % cd /cache2
% ls -l 0D/CD/000DCD06
-rw------- 1 squid squid 391 Jun 3 12:40 0D/CD/000DCD06
% less 0D/CD/000DCD06
可選的referer.log包含了來自客戶端請求的Referer頭部。為了使用該功能,必須在./configure時打 開--enable-referer-log選項。還必須用referer_log指令來指定一個路徑。例如: referer_log /usr/local/squid/var/logs/referer.log 假如想禁止referer.log,則可設(shè)置文件名為none。 Referer頭部正常情況下包含一個URI,從這個URI獲取到了請求(見RFC2616的14.36節(jié))。例如, 當(dāng)web瀏覽器發(fā)布請求到某個內(nèi)嵌圖片時,Referer頭部被設(shè)置成包含該圖片的HTML網(wǎng)頁的URI。當(dāng) 你點擊HTML超鏈接時,它也被設(shè)置。某些web站點管理員使用Referer值來查找死鏈接。在使用 Squid作為代理人模式時,你也許發(fā)現(xiàn)referer.log特別有用。 referer.log格式簡單,僅有4個域。如下是一些示例: 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頭部的請求不會被記錄。這4個域描述如下:
注意的是,不像access.log,referer.log在Squid接受到完整請求時,會立刻記錄。這樣, referer.log條目在access.log之前發(fā)生,后者等待響應(yīng)完成才記錄。
可選的useragent.log包含來自客戶端請求的User-Agent頭部值。為了使用該功能,必須在運行 ./configure時打開--enable-useragent-log選項。還必須使用useragent_log指令來提供一個路徑 名。例如: ___FCKpd___5 User-Agent頭部正常情況下包含了發(fā)起請求的user-agent的描述。大多數(shù)情形下,該描述只是簡單 的產(chǎn)品名列表和版本信息。你應(yīng)該清楚應(yīng)用程序可以輕易的提供偽造的user-agent信息?,F(xiàn)代 user-agent提供途徑可定制該描述。甚至Squid在轉(zhuǎn)發(fā)請求里能改變這個User-Agent頭部。 useragent.log格式相對簡單,看起來如下: 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./bot.html)"
3.0.168.205 [05/Nov/2003:08:52:50 -0700]
"WebZIP/4.1 (http://www.)"
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./] (Version 2.0..."
不像其他日志文件,它僅有3個域:
swap.state文件是目標寫入cache目錄、或從cache目錄刪除的日志寫照。每個cache_dir有它自己 的swap.state文件。當(dāng)Squid啟動時,它讀取swap.state文件來重建cache目標的內(nèi)存索引。這些 文件對Squid管理來說,至關(guān)重要。 默認情況下,每個cache.state文件位于它相應(yīng)的cache目錄。這樣,每個state文件自動駐留在每個 cache_dir下。這點很有用--假如你想重新排序cache_dir行,或想從cache_dir列表里刪除條目的 話。 如果想將它們放在其他位置,可使用cache_swap_log指令來做: cache_swap_log /usr/local/squid/var/logs/swap.state 在此情況下,Squid對每個cache目錄創(chuàng)建一個swap.state文件,并增加數(shù)字后綴。例如,假如有4個 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
在這個情形下,如果你要增加、刪除、或重排序cache_dir行,就必須手工重命名swap.state文件, 以保持事情一致。 技術(shù)上,swap.state格式是獨立于存儲機制的。然而,在當(dāng)前版本的Squid里,所有的存儲機制使用 同一種格式。swap.state文件使用修正大?。?8位)的二進制格式。各個域值以主機字節(jié)順序記錄, 這樣在不同的操作系統(tǒng)之間不便遷移。表13-3描述了swap.state日志條目的各個域的說明。 Table 13-3. swap.state entry fields
13.7 輪轉(zhuǎn)日志 Squid不斷的寫日志,假如cache非常忙,那么在一段時間后,這些日志文件可能變得很大。某些操作 系統(tǒng)甚至限制了文件的最大size(例如2G),假如寫文件超過了這個size就會報錯。為了保持日志文件 容易管理,以及讓Squid正常工作,必須定期輪轉(zhuǎn)日志。 Squid有內(nèi)建的功能用于輪轉(zhuǎn)日志??赏ㄟ^squid -k rotate命令來調(diào)用它,然后告訴Squid對每個日志 文件保持多少份舊拷貝。例如,假如設(shè)置它為7,對每個日志文件會有8個版本:1個當(dāng)前的,和7個舊 的。 舊日志文件以數(shù)字擴展來重命名。例如,當(dāng)執(zhí)行一次輪轉(zhuǎn)時,Squid重命名log.6到log.7,然后是 log.5到log.6,依此類推。當(dāng)前l(fā)og變成log.0,并且Squid創(chuàng)建一個新的空文件,命名為log。 每次執(zhí)行squid -k rotate時,Squid輪轉(zhuǎn)下述文件:cache.log, access.log, store.log, useragent.log (假如激活), 以及referer.log (假如激活)。Squid也會創(chuàng)建最新版本的swap.state 文件。然而請注意,swap.state不會以數(shù)字擴展形式來輪轉(zhuǎn)。 Squid不會自己輪轉(zhuǎn)日志,最好的辦法是在crontab里自動執(zhí)行。例如: 0 0 * * * /usr/local/squid/sbin/squid -k rotate 假如你想編寫自己的腳本來管理日志文件,Squid提供了一個有用的模式,簡單的設(shè)置logfile_rotate 指令為0。這樣,當(dāng)你運行squid -k rotate命令時,Squid簡單的關(guān)閉當(dāng)前日志文件,并且打開新的。 如果操作系統(tǒng)允許重命名被其他進程打開的文件,則這點非常有用。下述shell腳本描述了一個思路: #!/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
Squid的日志文件特別是access.log,包含了用戶的活躍記錄,因此它受隱私問題支配。作為Squid管 理員,你必須采取額外的小心來保證日志文件安全。最好的辦法是限制訪問Squid主機的人員的數(shù)量。 假如這點行不通,那么就要謹慎的檢查文件和目錄許可,確保日志文件不會被非信任的、或未授權(quán)的用 戶訪問。 也可利用client_netmask和strip_query_terms指令來保護用戶隱私。前者讓識別access.log里的用 戶困難;后者移除了URI查詢條件以避免泄露用戶私人信息。更多信息見13.2.4節(jié)。 如果想要保持歷史數(shù)據(jù)相當(dāng)長的時間,你也許可裁減日志來保證日志文件匿名。假如你僅對哪個URI被 訪問感興趣,而不是誰訪問了它們,就可從access.log里抽取出該域。這樣也讓文件更小,并且減少 了隱私違背的風(fēng)險。另一個技術(shù)是隨機處理客戶端IP地址。換句話說,就是創(chuàng)建一個過濾器,把真正的 IP地址映射到假的地址,前提是同一個真IP地址總是映射到同一個假IP。假如你在使用RFC 1413身份 驗證協(xié)議或HTTP認證,也可考慮保持這些域匿名。
這樣使用它: ___FCKpd___58 要在第N個cache_dir里找到該文件,簡單的進入到相應(yīng)的目錄,并列出或查看該文件: ___FCKpd___59 13.4 referer.log 可選的referer.log包含了來自客戶端請求的Referer頭部。為了使用該功能,必須在./configure時打 開--enable-referer-log選項。還必須用referer_log指令來指定一個路徑。例如: ___FCKpd___60 假如想禁止referer.log,則可設(shè)置文件名為none。 Referer頭部正常情況下包含一個URI,從這個URI獲取到了請求(見RFC2616的14.36節(jié))。例如,當(dāng)web瀏覽器發(fā)布請求到某個內(nèi)嵌圖片時,Referer頭部被設(shè)置成包含該圖片的HTML網(wǎng)頁的URI。當(dāng)你點擊HTML超鏈接時,它也被設(shè)置。某些web站點管理員使用Referer值來查找死鏈接。在使用Squid作為代理人模式時,你也許發(fā)現(xiàn)referer.log特別有用。 referer.log格式簡單,僅有4個域。如下是一些示例: ___FCKpd___61 注意缺少Referer頭部的請求不會被記錄。這4個域描述如下:
注意的是,不像access.log,referer.log在Squid接受到完整請求時,會立刻記錄。這樣,referer.log條目在access.log之前發(fā)生,后者等待響應(yīng)完成才記錄。
13.5 useragent.log 可選的useragent.log包含來自客戶端請求的User-Agent頭部值。為了使用該功能,必須在運行./configure時打開--enable-useragent-log選項。還必須使用useragent_log指令來提供一個路徑名。例如: ___FCKpd___62 User-Agent頭部正常情況下包含了發(fā)起請求的user-agent的描述。大多數(shù)情形下,該描述只是簡單的產(chǎn)品名列表和版本信息。你應(yīng)該清楚應(yīng)用程序可以輕易的提供偽造的user-agent信息?,F(xiàn)代user-agent提供途徑可定制該描述。甚至Squid在轉(zhuǎn)發(fā)請求里能改變這個User-Agent頭部。 useragent.log格式相對簡單,看起來如下: ___FCKpd___63 不像其他日志文件,它僅有3個域:
13.6 swap.state swap.state文件是目標寫入cache目錄、或從cache目錄刪除的日志寫照。每個cache_dir有它自己的swap.state文件。當(dāng)Squid啟動時,它讀取swap.state文件來重建cache目標的內(nèi)存索引。這些文件對Squid管理來說,至關(guān)重要。 默認情況下,每個cache.state文件位于它相應(yīng)的cache目錄。這樣,每個state文件自動駐留在每個cache_dir下。這點很有用--假如你想重新排序cache_dir行,或想從cache_dir列表里刪除條目的話。 如果想將它們放在其他位置,可使用cache_swap_log指令來做: ___FCKpd___65 在此情況下,Squid對每個cache目錄創(chuàng)建一個swap.state文件,并增加數(shù)字后綴。例如,假如有4個cache目錄,Squid創(chuàng)建如下日志: ___FCKpd___66 在這個情形下,如果你要增加、刪除、或重排序cache_dir行,就必須手工重命名swap.state文件,以保持事情一致。 技術(shù)上,swap.state格式是獨立于存儲機制的。然而,在當(dāng)前版本的Squid里,所有的存儲機制使用同一種格式。swap.state文件使用修正大?。?8位)的二進制格式。各個域值以主機字節(jié)順序記錄,這樣在不同的操作系統(tǒng)之間不便遷移。表13-3描述了swap.state日志條目的各個域的說明。 Table 13-3. swap.state entry fields
13.7 輪轉(zhuǎn)日志 Squid不斷的寫日志,假如cache非常忙,那么在一段時間后,這些日志文件可能變得很大。某些操作系統(tǒng)甚至限制了文件的最大size(例如2G),假如寫文件超過了這個size就會報錯。為了保持日志文件容易管理,以及讓Squid正常工作,必須定期輪轉(zhuǎn)日志。 Squid有內(nèi)建的功能用于輪轉(zhuǎn)日志??赏ㄟ^squid -k rotate命令來調(diào)用它,然后告訴Squid對每個日志文件保持多少份舊拷貝。例如,假如設(shè)置它為7,對每個日志文件會有8個版本:1個當(dāng)前的,和7個舊的。 舊日志文件以數(shù)字擴展來重命名。例如,當(dāng)執(zhí)行一次輪轉(zhuǎn)時,Squid重命名log.6到log.7,然后是log.5到log.6,依此類推。當(dāng)前l(fā)og變成log.0,并且Squid創(chuàng)建一個新的空文件,命名為log。 每次執(zhí)行squid -k rotate時,Squid輪轉(zhuǎn)下述文件:cache.log, access.log, store.log, useragent.log (假如激活), 以及referer.log (假如激活)。Squid也會創(chuàng)建最新版本的swap.state文件。然而請注意,swap.state不會以數(shù)字擴展形式來輪轉(zhuǎn)。 Squid不會自己輪轉(zhuǎn)日志,最好的辦法是在crontab里自動執(zhí)行。例如: ___FCKpd___67 假如你想編寫自己的腳本來管理日志文件,Squid提供了一個有用的模式,簡單的設(shè)置logfile_rotate指令為0。這樣,當(dāng)你運行squid -k rotate命令時,Squid簡單的關(guān)閉當(dāng)前日志文件,并且打開新的。如果操作系統(tǒng)允許重命名被其他進程打開的文件,則這點非常有用。下述shell腳本描述了一個思路: ___FCKpd___68 13.8 隱私和安全 Squid的日志文件特別是access.log,包含了用戶的活躍記錄,因此它受隱私問題支配。作為Squid管理員,你必須采取額外的小心來保證日志文件安全。最好的辦法是限制訪問Squid主機的人員的數(shù)量。假如這點行不通,那么就要謹慎的檢查文件和目錄許可,確保日志文件不會被非信任的、或未授權(quán)的用戶訪問。 也可利用client_netmask和strip_query_terms指令來保護用戶隱私。前者讓識別access.log里的用戶困難;后者移除了URI查詢條件以避免泄露用戶私人信息。更多信息見13.2.4節(jié)。 如果想要保持歷史數(shù)據(jù)相當(dāng)長的時間,你也許可裁減日志來保證日志文件匿名。假如你僅對哪個URI被訪問感興趣,而不是誰訪問了它們,就可從access.log里抽取出該域。這樣也讓文件更小,并且減少了隱私違背的風(fēng)險。另一個技術(shù)是隨機處理客戶端IP地址。換句話說,就是創(chuàng)建一個過濾器,把真正的IP地址映射到假的地址,前提是同一個真IP地址總是映射到同一個假IP。假如你在使用RFC 1413身份驗證協(xié)議或HTTP認證,也可考慮保持這些域匿名。 |
|
|