我真的想不出来如何让Varnish忽略对500内部服务器错误的缓存。基本上,如果有人访问Varnish并返回500内部服务器错误,则我希望Varnish不缓存该页面(设置0秒的ttl / grace期间?)。 我正在使用Varnish 3.0.3,并附上我的VCL。默认情况下,我希望将页面缓存30天。
sub vcl_fetch {
# Set 30-day TTL
set beresp.ttl = 2592000 s;
set beresp.grace = 15d; /* The max amount of time to keep object in cache */
if (beresp.status == 301 || beresp.status == 302) {
return (hit_for_pass);
}
# Serve pages from the cache should we get a sudden error and re-check in one minute
if (beresp.status >= 500) {
set beresp.grace = 1s;
set beresp.ttl = 1s;
return (hit_for_pass);
}
# Unset the "etag" header (suggested)
unset beresp.http.etag;
return(deliver);
}
所以,简单来说:如果返回500内部服务器错误代码,那么X-CACHE应该显示MISS。当我刷新页面时,如果还是500内部服务器错误,那么它应该再次显示MISS。如果页面成功加载,则应该显示HIT。