Vernish: cache ma non memorizzata nella cache
-
27-10-2019 - |
Domanda
Se eseguo questo comando
varnishtop -i txurl
Tale richiesta è "cacheble" ma non "memorizzata nella cache". Vedo "Age = 0" (età che è mantenuta in vernice), come modificarlo?
Questa è la richiesta per la mia pagina .php
Abituarsi http://example.com
User-Agent: lwp-request/5.810
200 OK
Cache-Control: max-age=60, public, must-revalidate
Connection: close
Date: Sat, 18 Feb 2012 12:14:33 GMT
Via: 1.1 varnish
Age: 0
Server: Apache
Vary: Accept-Encoding
Content-Type: text/html
Expires: Sat, 18 Feb 2012 12:24:33 GMT
Client-Date: Sat, 18 Feb 2012 12:14:34 GMT
Client-Peer: 173.236.219.104:80
Client-Response-Num: 1
Client-Transfer-Encoding: chunked
X-Cache: MISS
X-Cacheable: YES
X-Varnish: 840966561
Codice .htaccess
# BEGIN Expire headers
<ifModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 5 seconds"
ExpiresByType image/x-icon "access plus 2592000 seconds"
ExpiresByType image/jpeg "access plus 2592000 seconds"
ExpiresByType image/png "access plus 2592000 seconds"
ExpiresByType image/gif "access plus 2592000 seconds"
ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
ExpiresByType text/css "access plus 604800 seconds"
ExpiresByType text/javascript "access plus 216000 seconds"
ExpiresByType application/javascript "access plus 216000 seconds"
ExpiresByType application/x-javascript "access plus 216000 seconds"
ExpiresByType text/html "access plus 600 seconds"
ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>
# END Expire headers
# BEGIN Cache-Control Headers
<ifModule mod_headers.c>
<filesMatch "\.(ico|jpe?g|png|gif|swf)$">
Header set Cache-Control "public"
</filesMatch>
<filesMatch "\.(css)$">
Header set Cache-Control "public"
</filesMatch>
<filesMatch "\.(js)$">
Header set Cache-Control "private"
</filesMatch>
<filesMatch "\.(x?html?|php)$">
Header set Cache-Control "public, must-revalidate"
</filesMatch>
</ifModule>
Default.vlc
backend default {
.host = "173.236.219.104";
.port = "81";
.connect_timeout = 600s;
.first_byte_timeout = 600s;
.between_bytes_timeout = 600s;
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
}
sub vcl_fetch {
# Varnish determined the object was not cacheable
if (beresp.ttl <= 0s) {
set beresp.http.X-Cacheable = "NO:Not Cacheable";
# You don't wish to cache content for logged in users
} elsif (req.http.Cookie ~ "(UserID|_session)") {
set beresp.http.X-Cacheable = "NO:Got Session";
return(hit_for_pass);
# You are respecting the Cache-Control=private header from the backend
} elsif (beresp.http.Cache-Control ~ "private") {
set beresp.http.X-Cacheable = "NO:Cache-Control=private";
return(hit_for_pass);
# Varnish determined the object was cacheable
} else {
set beresp.http.X-Cacheable = "YES";
}
# ....
return(deliver);
}
Soluzione
Molto probabilmente il backend restituisce un cookie, quindi Varnish non memorizza il contenuto.
Qui ulteriori informazioni al riguardo: Vernice-cookies
Ci sono anche alcune incoerenze sulla risposta che ottieni da LWP. In effetti vedo un'intestazione massima set su 60 secondi, che non vedo configurato sull'estremità del backed da nessuna parte.
Anche una richiesta LWP all'origine potrebbe aiutare a eseguire il debug del problema.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow