Cache
Varnish Server 在後端關閉時拋出錯誤 503
當站點的後端關閉時,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 模式。
寬限模式允許您在後端關閉或緩慢時提供陳舊的內容,而聖模式允許您在您使用的後端響應錯誤時重試另一個後端。