【转】Cache 文件是否存在的查询

        当咱们使用 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

嗯,文件存在了,由 MISS 变成了 HIT。由于查询也是一次访问,因此会给这个文件下载回来,因此第二次变成 HIT。

 

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

怎么回事,明明查了有,怎么是 MISS?其实这是对的,由于 curl  -I  <URL>只发了一个 head 请求,Squid 会给这个 head 作 h ,但对对象自己的内容不会下载.因此第一次查的状态是对的.之后都会是错的响应.

 

解决方法网站

好了,一个高级又快速的解决方法 ,咱们还记的 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
相关文章
相关标签/搜索