Varnish는 사이트의 백엔드가 다운되면 즉시 503 Service Unavailable 오류를 표시하기 시작합니다. 구성은 모든 것이 7일 동안 캐시되어야 한다는 것입니다.
백엔드가 한 시간 동안 다운되면 사이트가 계속 작동할 것으로 예상합니다. 캐시 서버는 여전히 해당 캐시의 페이지를 제공해야 합니다.
이 사이트는 하루 300,000회의 페이지 조회수를 기록하는 완전히 정적인 사이트입니다. 현재까지의 적중률은 2:5(MISS - HIT)인데, 이것도 더 높아야 한다고 생각합니다.
/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);
}
}
웹사이트의 .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>
답변1
Grace 모드 및/또는 Saint 모드 구현을 살펴봐야 합니다.
Grace 모드를 사용하면 백엔드가 다운되거나 느릴 때 오래된 콘텐츠를 제공할 수 있으며, Saint 모드를 사용하면 사용한 백엔드가 오류로 응답하는 경우 다른 백엔드를 다시 시도할 수 있습니다.