Я хочу использовать Varnish для кеширования определенных страниц даже при наличии файлов cookie. Есть 3 возможности, о которых мне нужно позаботиться:
Ожидаемое поведение:
Я прочитал несколько документов по Varnish, и я не могу сказать, является ли это поведением по умолчанию или есть некоторые настройки, которые мне нужно сделать в VCL, чтобы это произошло.
По умолчанию Varnish не кэширует запросы с заголовком Cookie:
http://varnish-cache.org/svn/trunk/varnish-cache/bin/varnishd/default.vcl
sub vcl_recv {
(...)
if (req.http.Authorization || req.http.Cookie) {
/* Not cacheable by default */
return (pass);
}
return (lookup);
Вам необходимо закодировать желаемое поведение в конфигурации. Имейте в виду, что Cookie - это часть клиентского запроса, а не «страница» (на самом деле). «Страница» (объект) поставляется с заголовком «Set-Cookie» - это тот, который будет кэшироваться.
Кроме того, «Vary: Cookie» не означает «не кэшировать». Это означает, что кэшировать один объект для каждого значения полученного Cookie.
Если ваше приложение не генерирует контент на основе Cookie, его, вероятно, можно проигнорировать:
- if (req.http.Authorization || req.http.Cookie) {
+ if (req.http.Authorization) {
Сделайте несколько тестов, и вы научитесь этому. Надеюсь это поможет.
Если я правильно вас понял, вам не нужен конкретный файл cookie как часть ключа, но вам нужно оставить его нетронутым?
Вам нужно установить хэш в vcl_hash как req.url + req.http.host (и, возможно, другие), но не конкретный файл cookie ..
Думаю, один из моих постов может помочь вам в правильном направлении: Игнорирование параметров GET в Varnish VCL