#caching #varnish #varnish-vcl
Вопрос:
Поэтому я установил кэш лака 4.1 на свою машину Ubuntu.
Лак находится перед моим Nginx и за моим AWS ELB.
В настоящее время я пытаюсь кэшировать страницу, на которой есть файлы cookie Google analytics, а также файл cookie, в котором хранится выбор валюты для посетителей, не вошедших в систему, идентификатор сеанса php и форма, которую посетитель может при необходимости отправить по ПОЧТЕ. Страница кэшируется нормально, как только я перезапущу лак, но как только срок действия кэша истечет, я закрою и снова открою браузер и попытаюсь снова попасть в кэш после истечения срока действия кэша, я продолжаю получать промахи, независимо от того, сколько раз я обновляю страницу. Я не уверен, что происходит, но лак начинает действовать. Ниже приведен мой файл по умолчанию.vcl , поскольку из того, что я знаю, страница всегда должна кэшироваться с помощью return(хэш), но, похоже, она отлично кэшируется после перезапуска. P. S Я сохраняю кэш с помощью опции хранения и у меня его много, включая много памяти, так что это не проблема.
# new 4.0 format. vcl 4.0; # Default backend definition. Set this to point to your content server. backend default { .host = "127.0.0.1"; .port = "8000"; } sub vcl_recv { . set req.http.X-Forwarded-For = req.http.X-Forwarded-For; if(req.url ~ "/landing-page$"){ #unset req.http.cache-control; #unset req.http.pragma; if(req.method == "GET"){ # if method is get # From my knowledge return hash should cache the page under all circumstances return(hash); #override varnish settings to cache this page even though it has cookies } } } sub vcl_backend_response { #following enables gzip also compress the content before storing it in cache if (bereq.url ~ "/") { set beresp.do_esi = true; #enable esi edge side includes if(bereq.url ~ ".(png|gif|ico|jpg|jpeg)$") { unset beresp.http.cache-control; set beresp.http.cache-control="s-maxage=0"; } else { # else not an image gzip it set beresp.do_gzip = true; #gzip } } if(bereq.url ~ "/landing-page$") { unset beresp.http.cache-control; unset beresp.http.pragma; unset beresp.http.expires; set beresp.http.cache-control = "s-maxage=120"; set beresp.ttl = 120s; } } sub vcl_deliver { #debug hit miss if(obj.hits gt; 0) { set resp.http.X-cache-vcb = "HIT"; } else { set resp.http.X-cache-vcb = "MISS"; } }
Заголовки моих Ответов
HTTP/2 200 OK date: Tue, 26 Oct 2021 12:53:35 GMT content-type: text/html; charset=UTF-8 server: nginx x-content-type-options: nosniff strict-transport-security: max-age=31536000; includeSubDomains content-security-policy: upgrade-insecure-requests; frame-ancestors 'self' referrer-policy: no-referrer-when-downgrade cache-control: s-maxage=120 content-encoding: gzip vary: Accept-Encoding x-varnish: 721758 age: 0 via: varnish x-cache-vcb: MISS accept-ranges: bytes X-Firefox-Spdy: h2
Request Headers
GET /landing-page HTTP/2 Host: www.tester.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0 Accept: text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate, br DNT: 1 Connection: keep-alive Cookie: csess=r8ecdekj6mq6vmnru8g364mav3; _gcl_au=1.1.1961255.1635252; _ga_YYH600NN=GS1.1.1635252.1.1.1635252.59; _ga=GA1.1.1510215.1635252 Upgrade-Insecure-Requests: 1 Sec-Fetch-Dest: document Sec-Fetch-Mode: navigate Sec-Fetch-Site: none Sec-Fetch-User: ?1 TE: trailers