Cache

Varnish Server 在後端關閉時拋出錯誤 503

  • May 29, 2013

當站點的後端關閉時,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>

您需要考慮實施 Grace 模式和/或 Saint 模式。

Varnish Grace & Saint 模式

寬限模式允許您在後端關閉或緩慢時提供陳舊的內容,而聖模式允許您在您使用的後端響應錯誤時重試另一個後端。

引用自:https://serverfault.com/questions/420756