Как мне сделать Varnish чтобы остановить кеширование фрагментов ESI - PullRequest
2 голосов
/ 15 августа 2011

У меня проблема с использованием ESI с Varnish 3.0 с проектом repoze.bfg.У меня есть фрагмент ESI, который отображает уведомление для зарегистрированных пользователей, включенное через тег ESI.Однако лак кэширует включенный фрагмент 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) Лак сделаетзапрашивает "путь / к / фрагменту.esi" и повторную сборку веб-страницы кеша каждый раз, когда он выбирает из своего хранилища кеша, особенно потому, что для beresp.ttl установлено значение 0s для каждого фрагмента .esi 2) Varnish не хранит ESIфрагменты вместе с веб-страницей в ее кеш-хранилище **

1 Ответ

0 голосов
/ 09 сентября 2011

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

...