當咱們使用 Squid 的時候,是否是經常會有個問題,怎麼查文件是否存在?你們是怎麼查的,我想大多都是使用 wget 來查,好比wget -S。 若是返回的響應頭部X-Cache顯示 HIT, 那麼文件就是從 squid的緩存中讀取的,而不是從源網站讀取,但但這樣作效率比較低。若是有大量的文件,好比 100萬份,那怎麼辦, 難道通通下載一次?有人就講了, 我不是能夠發 Head 請求查嗎?好比使用 Curl -I <URL>來查, 這樣就沒有下載文件的過程,多快啊。 事實是這麼簡單嗎?php
1. 當文件不存在時首次查詢 Squidshell
咱們來使用 curl 加 -I 的參數來查詢 緩存
curl -I http://www.php-oa.com/data/emagazine/mode/mode_10.exe
......
X-Cache: MISS from BM_SC.php-oa.com
嗯,很好,不存在,正常。文件不存在時就顯示 MISS ,這是對的。 bash
2. 上次查詢後在次查詢 Squid
咱們來使用 curl -I 來再查一次curl
curl -I http://www.php-oa.com/data/emagazine/mode/mode_10.exe ......... X-Cache: HIT from BM_SC.php-oa.com
3. 使用 Wget 確認查詢
好了,咱們如今在使用 wget -S 來在測試一下測試
wget -S http: //www .php-oa.com /data/emagazine/mode/mode_10 .exe ........ X-Cache: MISS from BM_SC.php-oa.com
解決方法網站
好了,一個高級又快速的解決方法 ,咱們還記的 ICP 嗎…是父子模式時用來處理查詢 Cache 是否存在的方法 …因此咱們只要實現一個 ICP 協議的查詢就好了.這樣就能大量查詢,狀態還會很準…ui
還好,有人寫好了現成的 ICP 協議的客戶端.下載地址: http://icp.ircache.net/tools/udp-banger.pl
使用很簡單,咱們先準備一個要查詢的列表,好比,example.txturl
cat example.txt |perl udp-banger.pl xxx.xxx.xxx.x 3130
|
|
這樣在標準輸出,就會輸出相關的內容spa
UDP_MISS http: //www .php-a.com/%C5%F9%F6%A8MIT%28%B5%DA01%BC%AF%29.mp4 UDP_HIT http: //www .php-oa.com/%C5%F9%F6%A8MIT%28%B5%DA01%BC%AF%29.mp4 UDP_MISS http: //www .php-a.com/%C5%F9%F6%A8MIT%28%B5%DA01%BC%AF%29.mp4
|
固然,這個還得對Squid進行適當的配置
icp_port 3130 # 端口 icp_hit_stale off # 過時了,但存在是否還回答爲 HIT icp_access allow all # 那些地址能夠查詢 #icp_access deny all |