varnish常见错误的解决方法

标签: varnish 常见 错误 | 发表时间:2013-01-12 10:29 | 作者:祥哥哥
出处:http://www.nb03.com/
   1. obj.ttl not accessible in method vcl_fetch


这是因为从2.0.6以后,obj.ttl 已经变更为beresp.ttl

2. beresp.cacheable的含义是什么?

官方的解释:beresp.cacheable

    True if the request resulted in a cacheable response. A response is considered cacheable if HTTP status code is 200, 203, 300, 301, 302, 404 or 410 and pass wasn’t called in vcl_recv. If however, both the TTL and the grace time for the response are 0 beresp.cacheable will be 0.

    beresp.cacheable is writable.

    如果后端服务器返回的状态码是200,203,300,302,404, 410并且没有在vcl_recv事件中没有返回pass,则beresp.cacheable为true

    当然,如果后端机器返回内容的ttl 和grace time 如果都是0, 则beresp.cacheable也就为0

    并且beresp.cacheable在vcl配置中是可改写的。

3. 如何不编写程序,使用Ctrl + F5清除varnish缓存

这在我们的生产环境中,是相当有用的。编辑上传图片后,直接按Ctrl + F5强制刷新web页面,即可刷新web页面包括其它资源。

具体的原理是当用户使用ctrl + F5强制刷新浏览器时,浏览器会添加

Pragma    no-cache
Cache-Control    no-cache

这两行header, 那么只要在varnish中捕获这些header, 不就可以ctrl + F5清除缓存了吗?配置非常简单

在default.vcl 的 sub vcl_hit事件中增加以下代码:



    if ( req.http.Pragma ~ "no-cache" ) {
        set obj.ttl = 0s ;
        return (pass); 
    }

我的代码是:

sub vcl_hit {
    
     if (!obj.cacheable) {
         return (pass); 
     }

    if ( req.http.Pragma ~ "no-cache" ) {
        set obj.ttl = 0s ;
        return (pass); 
    }

    
    return (deliver);
}

这段代码告诉varnish, 当请求header Pragma中包含no-cache时,清理缓存(obj.ttl=0s),并直接从后端服务器取得数据( 即return (pass) );

但是这样一来,任何人使用Ctrl + F5即可清除缓存,存在一定问题,可考虑使用IP来源限制,如以下代码:

acl   local {

      "192.168.0.25";

      "1.2.3.4";

}

sub vcl_hit {

      if (!obj.cacheable) {
         return (pass); 
     }

     if (client.ip ~ local && req.http.Pragma ~ "no-cache") {

         set obj.ttl = 0s;

         return (pass);

     }

      return (deliver);

}

 

 

也可以使用Cookie传递密码方式验证,只有Cookie中传递的密码正确,才清除缓存。

 

准备工作:给firefox安装 Modify Header插件,设置Cookie, 比如设置Cookie : pwd=123456, 则varnish的配置:

 

 if ( req.http.Cookie ~ "pwd=123456" && req.http.Pragma ~ "no-cache" ) {
        set obj.ttl = 0s ;
        return (pass); 
  }

 

借助VCL强制的控制结构,可以做任何逻辑验证。

=========================

点击查看原图

相关 [varnish 常见 错误] 推荐:

varnish常见错误的解决方法

- - 开心平淡对待每一天。热爱生活
这是因为从2.0.6以后,obj.ttl 已经变更为beresp.ttl. 2. beresp.cacheable的含义是什么. 官方的解释:beresp.cacheable. A response is considered cacheable if HTTP status code is 200, 203, 300, 301, 302, 404 or 410 and pass wasn’t called in vcl_recv.

Spring MVC的常见错误

- - Java译站
10年前我开始自己的职业生涯的时候,Struts还是市场上的主流标准. 然而多年过后,我发现Spring MVC已经越来越流行了. 对我而言这并不意外,因为它能和Spring容器无缝集成,同时它还提供了灵活性及扩展性. 从我迄今为止对Spring的经验来看,我发现有不少人在配置Spring的时候经常会犯一些常见的错误.

Varnish VS Nginx测试报告

- Ben - 龙浩的blog
CPU:     E7500  @ 2.93GHz (双核). CPU:     E3300  @ 2.50GHz (双核). 使用压力测试工具siege(http://www.joedog.org/index/siege-home) 来验证. 可以根据路径来并发重复压力测试. 下载:wget ftp://sid.joedog.org/pub/siege/siege-latest.tar.gz.

Linux下的常见错误配置

- - FreeBuf.COM
    经过对大量客户的配置审计与渗透测试,我们总结出了一些Linux系统下的常见配置错误. 我们相信总结、回顾这些常见错误可以在以后为我们节省更多时间与资源,更重要的是可以帮助系统管理员,使其服务器更加安全可靠.     五个常见配置错误如下:. 1、用户/home目录的权限 2、系统中的getgid与setuid程序 3、全局可读/可写的文件/目录 4、使用包含漏洞的服务 5、默认的NFS挂载选项或不安全的导出选项.

Mark Lutz:Python程序员的常见错误

- - 博客 - 伯乐在线
译注: Mark Lutz 是《Learning Python | 学习Python》的作者之一. 在这篇文章中,我将总结新老Python程序员常犯的一些错误,以帮助你们在自己的工作避免犯同样或类似错误. 首先我要说明一下的是,这些都是来源于第一手的经验. 我以讲授Python的知识为生. 在过去的7年里,我已经给上千名学生讲授上百堂Python的课程,同时看着这些学生们犯同样的错.

SEO中常见的七个错误

- - Java译站
SEO作为一个战略营销服务多年来它的效果一直都是非常不错的. 他们通过给网站进行深度优化从而使网站流量得到了质的提升. 品牌的曝光度和知名度的提升. 这些理由足以让营销人员将SEO作为主要的在线营销策略了. 然而,需要仔细调整SEO来适应客户企业以及目标用户的分布特征. 许多SEO服务提供商在替客户取得满意的效果前都经历了许多常见的错误的方法.

hadoop常见错误及解决办法!

- - 企业架构 - ITeye博客
转: http://p-x1984.iteye.com/blog/989577 1:Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out Answer: 程序里面需要打开多个文件,进行分析,系统一般默认数量是1024,(用ulimit -a可以看到)对于正常使用是够了,但是对于程序来讲,就太少了.

Varnish Cache 3.0.1 RC1 开始测试

- 乌鸦 - cnBeta.COM
Varnish cache,或称Varnish,是一套高效能的反向网站快取服务器(reverse proxy server). Varnish目前被用在挪威最大的报社Verdens Gang上.

自建CDN技术选型: squid varnish nginx

- - 鲁塔弗的博客
CDN的全称是Content Delivery Network,即内容分发网络. 其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定. 优化跨ISP网络访问速度,在国内大联通和大电信之间是世界上最远的距离,在国外,中国和其他地区很平行,用cdn可以优化全球响应速度.

线上服务增加varnish缓存

- - CSDN博客互联网推荐文章
(1)是基于内存缓存,重启后数据将消失. (2)利用虚拟内存方式,io性能好. (3)支持设置0~60秒内的精确缓存时间. (4)VCL配置管理比较灵活. (5)32位机器上缓存文件大小为最大2G. (6)具有强大的管理功能,例如top,stat,admin,list等. (7)状态机设计巧妙,结构清晰.