`
月影无痕
  • 浏览: 1009580 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

varnish常见错误的解决方法

 
阅读更多

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强制的控制结构,可以做任何逻辑验证。

 

分享到:
评论
1 楼 hnlixf 2011-07-07  
哥们,转载了

相关推荐

    私塾在线 高级java软件架构师实战培训视频教程 阶段一 代码及目录 46-51 讲 共148讲

    通过这五讲的学习,学员将能够深入理解Varnish缓存服务器的工作机制,并具备配置和优化Varnish的能力,这对于提升Java软件架构师在高并发、高性能场景下的解决方案设计能力有着极大的帮助。此外,这些知识也可以与...

    架构简答题(1)(1).docx

    7. HTTP请求方法:常见的HTTP请求方法包括GET(获取资源)、HEAD(获取资源头部信息)、POST(提交数据)、PUT(更新资源)、DELETE(删除资源)、MOVE(移动资源)、OPTIONS(查询支持的请求方法)和TRACE(追踪...

    开源基础架构和集群最佳实践

    解决常见的Nginx问题,例如错误页面、连接超时等。 #### 八、缓存服务器 缓存服务器如Squid和Varnish可以显著提高网站性能。 ##### 1、Squid - **安装**: 使用包管理器安装Squid。 - **配置**: 编辑配置文件`/...

    magento插件

    4. 错误处理:处理支付失败的情况,提供清晰的错误提示。 五、静态页面缓存 静态页面缓存插件提高了Magento商店的性能,通过缓存HTML页面,减少服务器负载,加快页面加载速度。关键特性包括: 1. 缓存管理:手动或...

    Nginx教程从入门到精通到失业

    - **遇到的问题**:列出在配置过程中可能遇到的问题及解决方案。 #### 十七、Nginx + Keepalived + Proxy Cache 配置高可用 Nginx 群集和高速缓存 - **高可用配置**:通过 Keepalived 配置 Nginx 高可用集群。 - *...

    详解大型网站web服务器缓存.zip

    例如,Java的Spring框架中的Hibernate二級缓存和Redis等内存数据库就是常见的应用缓存解决方案。 接下来是分布式缓存,它是在多台服务器之间共享数据的一种机制,常用于处理海量数据和高并发场景。分布式缓存系统如...

    构建高性能web站点

    13. **错误日志和性能分析**:收集和分析错误日志,使用如Google Analytics、Google PageSpeed Insights等工具评估性能,找出瓶颈。 14. **代码优化**:遵循最佳实践,如避免冗余代码,使用高效的算法,以及合理的...

    开关电源的啸叫原因探讨

    解决啸叫问题的方法包括: - 对于变压器,确保进行正确的浸漆处理,提高绝缘性能。 - 优化PWM IC的接地线路,确保其稳定性。 - 调整光耦的工作电流路径,避免在次级滤波电容之前。 - 确保基准稳压IC TL431的接地...

    前端面试题汇总

    - **解决方法**:使用前缀、条件注释或 Hack 技术。 **46. display的值及position的值** - **display** 的值包括 `block`、`inline`、`flex` 等。 - **position** 的值包括 `static`、`relative`、`absolute`、`...

    外贸magento程序网站模板11套

    总之,这11套外贸Magento程序网站模板提供了全方位的解决方案,涵盖了设计、功能、安全等多个方面,是构建高效外贸电商网站的理想选择。在选择和应用模板时,务必结合自身业务需求,充分利用其优势,以实现最佳的...

    开关电源啸叫的原因探讨

    解决这个问题的一种方法是在输出端预置假负载,但这并不能完全避免问题发生。设计时,应确保在反馈回路上加入适当的滤波或带通电路,以防止低频自激。 大功率开关电源在短路测试或电流保护设置时的啸叫,主要是由于...

    电源技术中的开关电源的啸叫原因分析

    解决啸叫问题,可以采取在输出端预置假负载的方法,以避免轻载或空载时的不稳定状态。同时,设计时应考虑加入选频回路,过滤掉可能引起自激的低频成分,或者使用固定频率的开关电源设计。对于大功率开关电源,短路...

    fullstack-tps:TPs 回购

    不合理的索引、过大的事务、频繁的全表扫描都是常见的问题。优化SQL语句,创建合适的索引,合理设计数据库模式,甚至采用缓存技术如Redis,都能提升TPS。 3. **服务器配置**:服务器硬件资源如CPU、内存、磁盘I/O和...

    PHP面试题(最牛)

    对于大流量的网站,您采用什么样的方法来解决访问量问题? - **负载均衡**:通过负载均衡器分散请求至多个服务器节点。 - **缓存技术**:使用CDN、Varnish等缓存静态资源,减少数据库负担。 - **数据库优化**:使用...

    开关电源的啸叫原因

    开关电源在运行过程中偶尔出现的啸叫声,是工程师们在开发和测试阶段常见的问题。这种声音通常是由于电源内部的特定组件或设计缺陷所引起的。以下将详细解析几个可能导致开关电源啸叫的原因及其解决方案: 1. **...

    magento-practice

    熟悉常见的安全威胁,如 SQL 注入、XSS 攻击,并了解如何编写安全的代码和配置安全设置,是保障用户数据安全的基础。 10. **扩展与插件开发** Magento 社区提供了大量第三方扩展和插件,了解如何安装、配置和开发...

Global site tag (gtag.js) - Google Analytics