设为首页 收藏本站
查看: 1401|回复: 0

[经验分享] Squid 缓存的相关操作及使用说明

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-11-1 08:54:45 | 显示全部楼层 |阅读模式
一、查看squid命中情况

除了之前在squid的access.log中查看squid缓存命中的方法之外,还可以通过以下方法进行查看:
这里对图片服务器的httpd配置文件添加一些新的配置如下:
ExpiresActive on
  ExpiresDefault "access plus 12 month"
  ExpiresByType text/html "access plus 12 months"
  ExpiresByType text/css "access plus 12 months"
  ExpiresByType image/gif "access plus 12 months"
  ExpiresByType image/jpeg "access plus 12 months"  
  ExpiresByType image/jpg "access plus 12 months"
  ExpiresByType image/png "access plus 12 months"
  ExpiresByType application/x-javascript "access plus 12 months"
  ExpiresByType vedio/x-flv "access plus 12 months"
把以上内容追加到httpd.conf文件中,然后重新启动httpd服务。
1)使用curl命令查看
[iyunv@squid ~]# curl -I -s
HTTP/1.0 200 OK
Date: Mon, 31 Oct 2016 03:10:20 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Thu, 26 Jun 2014 01:12:31 GMT
ETag: "bf742-2f37a-4fcb2e3149dc0"
Accept-Ranges: bytes
Content-Length: 193402
Content-Type: image/jpeg
Age: 22522
X-Cache: HIT from cache1.contoso.com
Via: 1.0 cache1.contoso.com (squid/3.0.STABLE20)
Connection: close
[iyunv@squid ~]# curl -I -s |grep -i x-cache
X-Cache: HIT from cache1.contoso.com
[iyunv@squid ~]# curl -I -s |grep -i x-cache
X-Cache: HIT from cache1.contoso.com
[iyunv@squid ~]# curl -I -s |grep -i x-cache
X-Cache: HIT from cache1.contoso.com
[iyunv@squid ~]# curl -I -s |grep -i x-cache
X-Cache: HIT from cache1.contoso.com
2)使用Firefox的firebug插件进行查看

可以看到,在响应头信息中,有max-age也就是我在httpd中设置的expire时间,同样也可以在Expires看到过期时间,Server项显示web服务器的类型,这里是Apache;Via表示通过哪个代理服务器进行访问,这里是我在squid.conf中配置的名称cache1.contoso.com(后面还有squid的版本信息);X-Cache中HIT from cache1.contoso.com表示请求内容在cache1.contoso.com上命中。
3)可能遇到的问题及原因

问题1:日志看不到命中
原因:curl的不是squid缓存服务器地址,而是web服务器,所以看不到命中。
问题2:看到的总是MISS
原因:使用了Ctrl+F5刷新,所以总是cache丢失。
问题3:是否做了服务器时间同步?
服务器时间同步会影响缓存结果,需要在服务器上进行时间同步。
二、修改squid的默认日志格式

squid默认记录日志格式如下:

logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %h" "%{User-Agent}>h" %Ss:%Sh
修改squid配置文件,添加如下内容:
# 下面是logs相关配置
emulate_httpd_log on
logformat squid %{X-Forwarded-For}>h %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %h" "%{User-Agent}>h" %Ss:%Sh  #修改后的access.log格式
access_log /usr/local/squid/var/logs/access.log squid
cache_log /usr/local/squid/var/logs/cache.log
cache_store_log /usr/local/squid/var/logs/store.log
logfile_rotate 20
修改完成后,重启squid服务,再进行日志的查看:

killall squid
squid -k parse
squid -D
[iyunv@squid etc]# tail -f ../var/logs/access.log
1477907509.273      0 192.168.49.139 TCP_HIT/200 358 HEAD  - NONE/- image/jpeg
1477907514.597      0 192.168.49.139 TCP_HIT/200 358 HEAD  - NONE/- image/jpeg
1477907521.269      0 192.168.49.139 TCP_HIT/200 360 HEAD  - NONE/- image/jpeg
# 上面是修改之前的日志格式,下面是修改之后的日志格式
- - - [31/Oct/2016:06:06:13 -0400] "HEAD  HTTP/1.1" 200 360 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" TCP_HIT:NONE
- - - [31/Oct/2016:06:07:15 -0400] "GET  HTTP/1.1" 304 250 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" TCP_IMS_HIT:NONE
- - - [31/Oct/2016:06:07:26 -0400] "GET  HTTP/1.1" 200 193829 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" TCP_CLIENT_REFRESH_MISS:FIRST_UP_PARENT
- - - [31/Oct/2016:06:07:27 -0400] "GET  HTTP/1.1" 200 193829 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" TCP_CLIENT_REFRESH_MISS:FIRST_UP_PARENT
- - - [31/Oct/2016:06:07:30 -0400] "GET  HTTP/1.1" 304 286 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" TCP_IMS_HIT:NONE
- - - [31/Oct/2016:06:07:31 -0400] "GET  HTTP/1.1" 304 286 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" TCP_IMS_HIT:NONE
- - - [31/Oct/2016:06:07:35 -0400] "GET  HTTP/1.1" 304 286 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" TCP_IMS_HIT:NONE
# 修改之后的日志格式记录的信息更详细,另外时间也不再是一串看不懂的数字,更易于阅读

其中的对端编码含义如下表所示:

NONE
这指明Squid对本次请求,不会与任何其他服务器(邻居或原始服务器)通信。它通常与cache命中、拒绝请求、cache管理请求、错误、和所有的ICP查询这些类型联合出现。
DIRECT
Squid直接转发请求到原始服务器。该域的第2半部分显示原始服务器的IP地址,或主机名--假如禁止了log_ip_on_direct。
SIBLING_HIT
在姐妹cache返回ICP或HTCP命中后,Squid发送请求到姐妹cache。
PARENT_HIT
在父cache返回ICP或HTCP命中后,Squid发送请求到父cache。
DEFAULT_PARENT
Squid选择该父cache,因为其在squid.conf的cache_peer行里被标志为default。
FIRST_UP_PARENT
Squid转发请求到该父cache,因为它是位于已知活跃列表里的第一个父cache。
FIRST_PARENT_MISS
Squid转发请求到该父cache,它第一个响应ICP/HTCP丢失消息。换句话说,对这个特殊的ICP/HTCP查询,在这个特殊时刻,被选中的父cache有最佳的往返时间(RTT)。注意标准RTT可能被人工矫正过,取决于cache_peer指令的weight选项。
CLOSEST_PARENT_MISS
Squid选择该父cache,因为它报告到原始服务器的RTT最低。这点仅在2个cache都激活了netdb,并且原始服务器(或在同一子网内的其他server)返回ICMP ping消息。
CLOSEST_PARENT
这点类似CLOSEST_PARENT_MISS,除了RTT计算不是来自ICP/HTCP响应消息外。代替的,它们来自Squid保留的更老的计算方式,例如netdb交换功能。
CLOSEST_DIRECT
Squid基于netdb算法,转发请求到原始服务器。这点在满足下述任何条件时发生:
  • 1)在Squid和原始服务器之间的RTT小于配置的minimum_direct_rtt值。
  • 2)在Squid和原始服务器之间的标准路由跳数少于配置的minimum_direct_hops值。
  • 3)在ICP/HTCP响应里返回的RTT值,指示Squid离原始服务器近于任何其他邻居。
ROUNDROBIN_PARENT
Squid转发请求到该父cache,因为设置了round-robin选项,并且它有最低的使用计数器。
CD_PARENT_HIT
Squid基于cache摘要算法(见10.7节)转发请求到该父cache。
CD_SIBLING_HIT
Squid基于cache摘要算法转发请求到该姐妹cache。
CARP
Squid选择该父cache,基于cache数组路由协议算法(见10.9节)。
ANY_PARENT
作为最后的手段,Squid选择该父cache,因为没有其他方法能选择可行的下一跳。
注意大部分上述编码可能以TIMEOUT_开头,这表明在等待ICP/HTCP响应时发生超时。例如:
1066038165.382    345 193.233.46.21 TCP_MISS/200 2836

        GET  

        TIMEOUT_CLOSEST_DIRECT/213.219.122.19  image/jpeg
可使用icp_query_timeout指令来调整超时。
其中的结果编码含义如下表:
TCP_HIT
Squid发现请求资源的貌似新鲜的拷贝,并将其立即发送到客户端。
TCP_MISS
Squid没有请求资源的cache拷贝。
TCP_REFERSH_HIT
Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器。原始服务器返回304(未修改)响应,指示squid的拷贝仍旧是新鲜的。
TCP_REF_FAIL_HIT
Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器。然而,原始服务器响应失败,或者返回的响应Squid不能理解。在此情形下,squid发送现有cache拷贝(很可能是陈旧的)到客户端。
TCP_REFRESH_MISS
Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器。原始服务器响应新的内容,指示这个cache拷贝确实是陈旧的。
TCP_CLIENT_REFRESH_MISS
Squid发现了请求资源的拷贝,但客户端的请求包含了Cache-Control: no-cache指令。Squid转发客户端的请求到原始服务器,强迫cache确认。
TCP_IMS_HIT
客户端发送确认请求,Squid发现更近来的、貌似新鲜的请求资源的拷贝。Squid发送更新的内容到客户端,而不联系原始服务器。
TCP_SWAPFAIL_MISS
Squid发现请求资源的有效拷贝,但从磁盘装载它失败。这时squid发送请求到原始服务器,就如同这是个cache丢失一样。
TCP_NEGATIVE_HIT
在对原始服务器的请求导致HTTP错误时,Squid也会cache这个响应。在短时间内对这些资源的重复请求,导致了否命中。negative_ttl指令控制这些错误被cache的时间数量。请注意这些错误只在内存cache,不会写往磁盘。下列HTTP状态码可能导致否定cache(也遵循于其他约束): 204, 305, 400, 403, 404, 405, 414, 500, 501, 502, 503, 504。
TCP_MEM_HIT
Squid在内存cache里发现请求资源的有效拷贝,并将其立即发送到客户端。注意这点并非精确的呈现了所有从内存服务的响应。例如,某些cache在内存里,但要求确认的响应,会以TCP_REFRESH_HIT,  TCP_REFRESH_MISS等形式记录。
TCP_DENIED
因为http_access或http_reply_access规则,客户端的请求被拒绝了。注意被http_access拒绝的请求在第9域的值是NONE/-,然而被http_reply_access拒绝的请求,在相应地方有一个有效值。
TCP_OFFLINE_HIT
当offline_mode激活时,Squid对任何cache响应返回cache命中,而不用考虑它的新鲜程度。
TCP_REDIRECT
重定向程序告诉Squid产生一个HTTP重定向到新的URI(见11.1节)。正常的,Squid不会记录这些重定向。假如要这样做,必须在编译squid前,手工定义LOG_TCP_REDIRECTS预处理指令。
NONE
无分类的结果用于特定错误,例如无效主机名。
相应于ICP查询,下列标签可能出现在access.log文件的第四域。
UDP_HIT
Squid在cache里发现请求资源的貌似新鲜的拷贝。
UDP_MISS
Squid没有在cache里发现请求资源的貌似新鲜的拷贝。假如同一目标通过HTTP请求,就可能是个cache丢失。请对比UDP_MISS_NOFETCH。
UDP_MISS_NOFETCH
跟UDP_MISS类似,不同的是这里也指示了Squid不愿去处理相应的HTTP请求。假如使用了-Y命令行选项,Squid在启动并编译其内存索引时,会返回这个标签而不是UDP_MISS。
UDP_DENIED
因为icp_access规则,ICP查询被拒绝。假如超过95%的到某客户端的ICP响应是UDP_DENIED,并且客户端数据库激活了(见附录A),Squid在1小时内,停止发送任何ICP响应到该客户端。若这点发生,你也可在cache.log里见到一个警告。
UDP_INVALID
Squid接受到无效查询(例如截断的消息、无效协议版本、URI里的空格等)。Squid发送UDP_INVALID响应到客户端。
三、查看squid缓存文件情况

squidclient -h localhost -p 80 mgr:objects
这个命令能知道如下重要信息:
1、打印出的是所有缓存在内存和硬盘上的数据,对象是以key来表示,每个key代表不同的对象。
2、列出对象是否存放在内存,还是硬盘。
              IN_MEMORY   在内存中
     GET http://*.*.*.*/test.jpg
命令执行结果示例:
[iyunv@squid etc]# squidclient -h localhost -p 80 mgr:objects
HTTP/1.0 200 OK
Server: squid/3.0.STABLE20
Mime-Version: 1.0
Date: Mon, 31 Oct 2016 13:33:30 GMT
Content-Type: text/plain
Expires: Mon, 31 Oct 2016 13:33:30 GMT
Last-Modified: Mon, 31 Oct 2016 13:33:30 GMT
X-Cache: MISS from cache1.contoso.com
Via: 1.0 cache1.contoso.com (squid/3.0.STABLE20)
Connection: close

KEY 9C60DB2318E2EB2A91411D99F2EDD2C0
QQ截图20161101084503.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-294064-1-1.html 上篇帖子: Squid概述及相关配置说明 下篇帖子: squid access.log中Squid返回给客户端的结果编码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表