Назад | Перейти на главную страницу

Varnish: как добавить исключение для динамических страниц с помощью / cookies

Я хотел бы знать, как правильно избежать кеширования «некоторых страниц» веб-сайта с помощью Varnish и кеширования всех остальных.

Вот что я пытался сделать с vcl conf:

     sub vcl_fetch {
         #set beresp.ttl = 1d;
         if (!(req.url ~ "/page1withauth") ||
             !(req.url ~ "/page2withauth")) {
            unset beresp.http.set-cookie;
         }
         if (!beresp.cacheable) {
             return (pass);
         }
         if (beresp.http.Set-Cookie) {
             return (pass);
         }
         return (deliver);
}

Спасибо

Обычно это делается в vcl_recv:

sub vcl_recv {
  if ( req.url !~ "^/page1withauth" && req.url !~ "^/page2withauth" )
  {
    unset req.http.Cookie;
    remove req.http.Cookie;
  }
}

Тогда единственный раз, когда у вас должен быть параметр set-cookie, возвращающийся с сервера, - это когда вы пытаетесь однозначно идентифицировать соединение. Если это потому, что они только что отправили POST или что-то подобное, это уже ускользнет от кеша. Если это потому, что вы просто хотите однозначно идентифицировать их, то проблема в том, что код вашего приложения намеренно нарушает работу Varnish; исправьте свое приложение, если можете, иначе вы можете переопределить vcl_fetch аналогично тому, что вы делаете здесь.