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.

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.

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)状态机设计巧妙,结构清晰.

高性能缓存服务器Varnish解析

- - 技术改变世界 创新驱动中国 - 《程序员》官网
Varnish是一款高性能、开源的反向代理服务器和缓存服务器,其开发者Poul-Henning Kamp是FreeBSD核心的开发人员之一. Varnish采用全新的软件体系结构,和现在的硬件体系配合比较紧密. 当前计算机系统的内存除了主存外,还包括CPU的L1级缓存、L2级缓存,甚至还包括L3级缓存.

谈谈varnish,squid,apache,nginx缓存的对比

- - 行业应用 - ITeye博客
群里总是有人在问cache用什么,有varnish,squid,apache,nginx这几种,到底是我们用什么架构cache. varnish和squid是专业的cache服务,而apache,nginx这些都是第三方模块完成. 2、要做cache服务的话,我们肯定是要选择专业的cache服务,优先选择squid和varnish.

使用varnish + nginx + lua搭建网站的降级系统

- - 博学无忧
通常一个网站数据库挂掉后,后果将是非常严重的. 对于一些网站来说,当数据库挂掉后,如果能提供基本的浏览服务,也是不错的. 本文将尝试使用varnish + nginx + lua 搭建网站降级系统来实现整个目标. 降级方案的目标是,当网站出现致命故障时(如出现500错误,不能提供服务),可以把缓存的页面数据展现给用户.

(总结)Linux下Oracle11gR2的ORA-00845错误解决方法

- - 服务器运维与网站架构|Linux运维|X研究
PS:前些时间一台演示环境的Oracle 11g for Linux不知什么原因,启动不起来,报错ORA-00845. 搜索了下,这个问题是由于设置SGA的大小超过了操作系统/dev/shm的大小. 当时解决了没空写总结,今天有点空,总结分享一下:. Oracle在metalink的文档:Doc ID: Note:460506.1中进行了说明.

运行Hadoop作业时一处常见错误以及解决方法 job 引入第三方jar包

- - 学着站在巨人的肩膀上
提交job端引入了 第三方jar包,自动传上去的参数 -D libjars=myjob.jar,third-party.jar. 会上传到 hdfs-site.xml 文件中 :. 指定的路径,该路径是hdfs上的路径,mapred运行时会在该目录下建立自己的文件夹里面放入 上传的第三方jar包,所有的mapred程序都去这个hdfs目录读取jar包到本地运行java程序.