Varnish inmediatamente comienza a mostrar un error 503 Servicio no disponible cuando el back-end del sitio no funciona. La configuración es que todo debe almacenarse en caché durante 7 días.
Esperaría que el sitio permaneciera activo si el back-end estuviera inactivo durante una hora. El servidor de caché aún debería servir páginas desde su caché.
El sitio es un sitio completamente estático con 300.000 páginas vistas por día. La tasa de aciertos hasta ahora es de 2:5 (MISS - HIT), creo que también debería ser mayor.
La configuración de /etc/varnish/default:
backend www {
.host = "ip address here";
.port = "http";
.connect_timeout = 1s;
.first_byte_timeout = 5s;
.between_bytes_timeout = 2s;
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
}
else {
set resp.http.X-Cache = "MISS";
}
}
sub vcl_recv {
#if (req.request == "GET" && req.url ~ "\.(js|css|jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf|cgi|ico)$") {
unset req.http.cookie;
return (lookup);
#}
}
sub vcl_fetch {
if (beresp.http.Set-Cookie) {
#if (req.request == "GET" && req.url ~ "\.(js|css|jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf|cgi|ico)$") {
unset beresp.http.set-cookie;
set beresp.ttl = 7d;
return(deliver);
}
}
El .htaccess del sitio web:
<IfModule mod_headers.c>
SetEnv force-no-vary
Header append Vary: Accept-Encoding
Header unset Pragma
Header unset ETag
Header unset Last-Modified
FileETag None
# YEAR
<filesMatch "\.(ico|gif|jpg|jpeg|png|flv|pdf)$">
Header set Cache-Control "max-age=29030400"
</filesMatch>
# WEEK
<filesMatch "\.(js|css|swf)$">
Header set Cache-Control "max-age=604800"
</filesMatch>
# 3 DAYS
<filesMatch "\.(php|cgi|pl|htm)$">
Header set Cache-Control "max-age=259200"
</filesMatch>
</ifModule>
Respuesta1
Debe considerar implementar el modo Gracia y/o el modo Santo.
El modo de gracia le permite ofrecer contenido obsoleto cuando sus servidores están inactivos o son lentos, y el modo santo le permite volver a intentar con otro servidor si el servidor que utilizó responde con un error.