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

[经验分享] squid 动态页面

[复制链接]

尚未签到

发表于 2015-9-3 12:13:28 | 显示全部楼层 |阅读模式
1 被cache的页面必须对所有用户显示的内容都是一致的。如果同一个URL(包括参数)对不同用户如果显示不同的内容,那么cache它会使一些用户看到其它用户才能看到的内容。(我第一步缓存的是访问量最大的阅读帖子的页面,但是页面上原来有非常复杂的权限判断,针对这种情况,考虑到大部分信息在短期内基本是变化不大的,只好将用户基本信息写入cookie,使用前端的js来控制。虽然这样会导致限制不严格现象,但是因为毕竟不是商业应用,这些损失和性能相比还是可以接受的)2 被cache的动态页面不能启动一个session。因为通常session都是用cookie实现,启动一个session意味着服务器会发送一个Set-Cookie的HTTP头,squid把这样的页面cache之后,会造成所有后续的访问用户都在自己的浏览器里设置相同的cookie,这会造成严重的后果。所有设置cookie操作的页面都有此类问题,即使不是启用一个session。所以,这类页面是绝对不能cache的。但是对包含在一个已启动的session里的页面进行cache则不会有这个问题。(我基本上没有用到session,set-cookie(服务器端的)在需要缓存的这个页面也没有,只有一个为了配合广告活动增加的用js来set-cookie,所以也没有问题)3 用户的访问频度必须远远超过页面内容的更新频度,否则cache的意义不大。(这个页面每天的pv超过100万,所以还是想当有必要的 )另外,cache动态页面以后,由于squid会拦截用户的请求,应用程序服务器收不到被拦截的请求,必须保证这不会影响应用的处理逻辑。使用squid来cache动态页面有两种方式,一种是在页面里动态生成几个HTTP头:其中一个是Last-Modified,这个头表示页面上次修改的时间,一般访问静态页面时,apache会根据静态文件的一个上次修改时戳来设置这个属性。(我们采用了这个last-modifyed 头来进行,然后在文件会发生变化时通知squid这样可以提高squid的缓存命中率)另一个是Expires或者Cache-Control。Expires代表页面将在该时间之后过期,squid会从后端的应用服务器重新获取页面。Cache-Control则通过一个max-age属性来告诉squid和浏览器这个页面从Last-Modified开始的生存时间。Expires和Cache-Control只设置一个就可以。Last-Modified和Expires的时间格式是,Wed, 14 May 2003 13:06:17 GMT。注意生成这个时间时一定要转换成GMT时间,这样才能使互联网的全球用户都能正确识别。max-age的时间是一个整数,单位是秒。详细的文档请参考RFC2616。这几个HTTP头必须在所有页面内容输出之前进行设置,否则应用程序会报错。php的例子如下:# Last-Modified时间设置为当前时间header("Last-Modified: " . gmdate("D, d M Y H:i:s" . " GMT";# Expires时间设置为1小时后header("Expires: " . gmdate("D, d M Y H:i:s", time() + 3600) . " GMT";第二种cache方式是使squid强制cache某些指定的页面,而不管页面中是否有前面提到的那几个HTTP头。相应的配置参数举例如下:#下面两行表示凡是带参数(含有?)的URL就不cache,必须注释掉。#acl QUERY urlpath_regex cgi-bin \?#no_cache deny QUERY#下面两行创建一个acl,它匹配两个jsp页面acl CACHABLE_PAGES urlpath_regex ^/topic/readSub\.jspacl CACHABLE_PAGES urlpath_regex ^/topic/listFrame\.jsp#下面一个acl匹配所有的动态页面acl NONE_CACHABLE_PAGES urlpath_regex \? \.jsp#允许cache两个jsp页面no_cache allow CACHABLE_PAGES#禁止cache其它的jsp页面no_cache deny NONE_CACHABLE_PAGES#下面几行设置页面cache的时长,第一行cache一天,第二行cache两分钟refresh_pattern ^http://post.mop.com/topic/readSub\.jsp 1440 0% 1440 ignore-reloadrefresh_pattern ^http://post.mop.com/topic/listFrame\.jsp 2 0% 2 ignore-reload对于显示帖子内容的页面,当用户回复之后,帖子内容就改变了,为了实时刷新页面,可以在用户改变帖子内容之后,打开一个tcp连接到squid,发送一个PURGE指令,就可以将指定的URL过期,squid会重新到服务器上抓最新页面。相应页面中需要增加:Date last_modified_time = s.getLastReplyTime();String modifySince=request.getHeader("If-Modified-Since";SimpleDateFormat tempSdf=new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss z",new java.util.Locale("en");try{Date modifySinceDate=tempSdf.parse(modifySince);if (!modifySinceDate.before(last_modified_time)){response.sendError(HttpServletResponse.SC_NOT_MODIFIED);return;}}catch (Exception e){out.println("";}long last_modified = last_modified_time.getTime();response.setDateHeader("Last-Modified",last_modified);----------------------------------------------------------------------------------------察看cache命中率等信息,可以用如下命令:/data/squid/bin/squidclient -p 80 cache_object://localhost/info其中的如下信息比较重要:Cache information for squid:Request Hit Ratios: 5min: 41.5%, 60min: 40.1%Byte Hit Ratios: 5min: 52.3%, 60min: 50.8%Request Memory Hit Ratios: 5min: 27.7%, 60min: 30.7%Request Disk Hit Ratios: 5min: 38.3%, 60min: 39.2%Storage Swap size: 1886720 KBStorage Mem size: 39452 KBMean Object Size: 50.85 KBRequests given to unlinkd: 1685

运维网声明 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-109044-1-1.html 上篇帖子: Windows下安装squid详解 下篇帖子: squid之简单安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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