当后端宕机时,Varnish Server 会抛出错误 503

当后端宕机时,Varnish Server 会抛出错误 503

当网站后端关闭时,Varnish 立即开始显示 503 服务不可用错误。配置是所有内容都应缓存 7 天。

我希望即使后端停机一小时,网站也能保持正常运行。缓存服务器仍应提供缓存中的页面。

该网站是一个完全静态的网站,每天有 300,000 次页面浏览量。到目前为止的点击率为 2:5(未命中 - 命中),我认为这应该更高。

/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 模式。

Varnish Grace 和 Saint 模式

当您的后端宕机或运行缓慢时,优雅模式允许您提供过时的内容;如果您使用的后端响应错误,圣人模式允许您重试另一个后端。

相关内容