Как заставить Varnish перестать кэшировать фрагменты ESI

У меня возникли проблемы с использованием ESI с Varnish 3.0 с проектом repoze.bfg. У меня есть фрагмент ESI, который отображает уведомление для вошедших в систему пользователей, включенное через тег ESI. Тем не менее, лак кэширует включенный фрагмент ESI, поэтому изменения, внесенные во фрагмент вручную или в результате сеанса, не отражаются на включенной (и кэшированной) веб-странице.

Используемый тег ESI:

VCL configuration:

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 будет делать запросы к «path/to/fragment.esi» и повторно собирать веб-страницу кеша каждый раз, когда он извлекается из своего хранилища кеша, тем более что beresp.ttl установлен на 0 для каждого фрагмента .esi 2) Varnish не хранит фрагменты ESI вместе с веб-страницей в своем кэш-хранилище**


person Dami    schedule 15.08.2011    source источник
comment
И какие заголовки возвращает запрос на фрагмент?   -  person symcbean    schedule 09.09.2011


Ответы (1)


Сначала я бы попробовал полностью пропустить кеш для URL-адресов *.esi, т.е. return(pass); вместо beresp.ttl установить = 0s;

person kaqqao    schedule 09.09.2011