Varnish немедленно начинает показывать ошибку 503 Service Unavailable, когда серверная часть сайта не работает. Конфигурация такова, что все должно храниться в кэше 7 дней.
Я бы ожидал, что сайт будет работать, если серверная часть не будет работать в течение часа. Кэш-сервер должен по-прежнему обслуживать страницы из своего кеша.
Сайт представляет собой полностью статичный сайт с 300 000 просмотров страниц в день. Показатель попаданий пока 2: 5 (MISS - HIT), думаю, он тоже должен быть выше.
Конфигурация / etc / varnish / по умолчанию:
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);
}
}
.Htaccess с сайта:
<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>
Вам нужно посмотреть на реализацию режима Grace и / или Saint.
Режим Grace позволяет вам обслуживать устаревший контент, когда ваши серверные ВМ не работают или работают медленно, а режим святого позволяет вам повторить попытку другого бэкэнда, если бэкэнд, который вы использовали, выдает ошибку.