Подтвердить что ты не робот

Как сделать лак игнорировать, а не удалять файлы cookie

Я хочу использовать Larnish для кеширования определенных страниц даже в присутствии файлов cookie. Мне нужно позаботиться о трех возможностях:

  • Анонимный пользователь просматривает страницу
  • Зарегистрированный пользователь просматривает страницу с легкой настройкой. Эти настройки все хранятся в подписанном cookie и динамически заполняются Javascript. Заголовок http файла различной cookie не установлен.
  • Вошедший в систему пользователь просматривает страницу с настраиваемыми данными из базы данных. Определяется http-заголовок alter-cookie http.

Ожидаемое поведение:

  • Загрузите страницу. Это самый простой сценарий для обработки лаком.
  • Загрузите страницу и не удаляйте файл cookie, потому что это требует логика Javascript.
  • Никогда не кэшируйте эту страницу, потому что change-cookie сигнализирует, что содержимое cookie повлияет на вывод этой страницы.

Я прочитал несколько документов о Varnish, и я не могу сказать, является ли это поведением по умолчанию, или если есть какая-то настройка, которую я должен сделать в VCL, чтобы это произошло.

4b9b3361

Ответ 1

Только сеансы уникальны для каждого клиента, а не для файлов cookie.

То, что вы хотите, имеет смысл и возможно с помощью лака, это просто вопрос тщательного создания собственного vcl. Обратите внимание на следующие части default.vcl:

sub vcl_recv {
    ...
    if (req.http.Authorization || req.http.Cookie) {
      /* Not cacheable by default */
      return (pass);
    }
}


sub vcl_hit {
    if (!obj.cacheable) {
        return (pass);
    }
    ...
}


sub vcl_fetch {
    if (!beresp.cacheable) {
        return (pass);
    }
    if (beresp.http.Set-Cookie) {
        return (pass);
    }
    ...
}

Вы должны заменить эти части своей собственной логикой; т.е. определить собственные функции vcl_. По умолчанию запросы (vcl_recv) и ответы (vcl_fetch) с кукисами не кэшируются. Вы знаете, что ваше back-end приложение лучше всего, и вы должны переписать общую логику кэширования в этом конкретном случае. То есть вы должны определить, в каком случае лак выполняет поиск, передачу или доставку.

В вашем случае у вас будут страницы (случаи 1 и 2) без cookie cookie, которые будут кэшироваться и совместно использоваться всеми (запросы с/без файлов cookie); просто не против req.http.Cookie в vcl_recv. Я не буду кэшировать страницы (случай 3) с помощью cookie файла по-разному, или, по крайней мере, не надолго, поскольку они не могут быть разделены вообще; выполните 'pass' в vcl_fetch.