Я хочу кэшировать каждую страницу (даже с файлами cookie), серверная часть в php для этого не подготовлена, поэтому она отправляет несколько заголовков Set-Cookie. Когда я удаляю все функции session_start и setcookie, страница высвечивается, но когда я настраиваю свой vcl для лака, делаю это автоматически для меня, страница всегда пропускает.
Вот мой default.vcl:
vcl 4.0;
backend default {
.host = "myhost.app";
.port = "80";
}
sub vcl_recv {
unset req.http.cookie;
}
sub vcl_backend_response {
unset beresp.http.set-cookie;
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
}
Кажется, вы идете в мутную воду, но попробуйте заставить ttl:
sub vcl_backend_response {
set beresp.ttl = 120 s;
unset beresp.http.set-cookie;
}
Убедитесь, что вы ничего не нарушаете, кэшируя игнорируя куки и ттл.
Я тоже каждый раз сталкивался с кешем MISS и обновлял sub vcl_backend_response{..}
как упомянул Хорхе Нерин. Сейчас показывался кеш HIT, но входа в систему не происходило. Это было очевидно из-за unset beresp.http.set-cookie;
, Итак, я понял Обработка заголовков запросов в VCL удалить cookie на основе URL. Я применил то же самое вvcl_backend_response
, В моем приложении логин URL содержит auth
, Поэтому я обновил до unset beresp.http.set-cookie;
везде, кроме случаев, когда URL содержат auth
, Теперь происходит вход в систему, а также кэш ХИТ. Надеюсь, это поможет сообществу
sub vcl_backend_response {
set beresp.ttl = 120 s;
if ((bereq.url ~ "auth")){
}
else{
unset beresp.http.set-cookie;
}
#rest of code
}