如何使Varnish停止缓存ESI片段

2024-09-29 02:22:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用ESI和Varnish 3.0和休止.bfg项目成功。我有一个ESI片段,它通过ESI标记显示登录用户的通知。但是,varnish缓存包含的ESI片段,因此对片段所做的更改(无论是手动更改还是会话结果更改)都不会反映在包含(和缓存的)网页中。在

使用的ESI标签:

VCL配置:

sub vcl_recv {
  if (req.url ~ "[A-Za-z0-9_-]*.esi$") {
    return (pass);  
  }

  if (req.http.cookie) {
    set req.http.Cookie = regsuball(req.http.Cookie, "__utm.=[^;]+(; )?", "");      
  if (req.http.cookie ~ "^ *$") {
      remove req.http.cookie;
   }
 }

  remove req.http.cookie;
  remove req.http.etag;  
}

sub vcl_fetch {
    remove beresp.http.Set-Cookie;
    remove beresp.http.ETag;

    #do esi processing
    set beresp.do_esi = true;
    if (bereq.url ~ "[A-Za-z0-9_-]*.esi$") {
      set beresp.ttl = 0s;
    } else {
     set beresp.ttl = 24h;
   }    
  }

我的假设是:

1)Varnish将请求/碎片.esi“以及每次从缓存存储中获取数据时重新组装缓存网页,特别是自从贝雷斯普.ttl为每个.esi片段设置为0 2) Varnish不会将ESI片段与网页一起存储在其缓存中**


Tags: httpurl网页ifcookieesireqremove