Итак, в моем vcl_recv у меня установлен этот заголовок
set req.http.Grace = "NONE";
и когда бэкэнд работает, все имеет установленный заголовок Grace: NONE, что здорово... и тогда у нас есть
sub vcl_hit {
# Called when a cache lookup is successful.
if (obj.ttl >= 0s) {
# A pure unadultered hit, deliver it
return (deliver);
}
if (std.healthy(req.backend_hint)) {
# Backend is healthy. Limit age to 10s.
if (obj.ttl + 10s > 0s) {
set req.http.Grace = "normal(limited)";
return (deliver);
} else {
# No candidate for grace. Fetch a fresh object.
return(fetch);
}
} else {
# backend is sick - use full grace
if (obj.ttl + obj.grace > 0s) {
set req.http.Grace = "full";
return (deliver);
} else {
# no graced object.
return (fetch);
}
}
# fetch & deliver once we get the result
return (fetch); # Dead code, keep as a safeguard
}
Итак, я понимаю, что, по-видимому, полная льгота наступает, когда серверная часть не работает, и я понимаю, что если серверная часть не работает, мы не настраиваем льготу, но когда именно этот нормальный (ограниченный) блок сработает? Похоже, что когда бэкэнд работает, он обслуживает все с Grace: NONE, и если я останавливаю nginx, он переходит прямо к Grace: FULL. я просто не знаю когда
if (obj.ttl + 10s > 0s) {
set req.http.Grace = "normal(limited)";
должен сработать, так как я не могу этого сделать, по крайней мере, согласно этому установленному заголовку...
Мой vcl_backend_response имеет эти значения (для тестирования, но да)
# A TTL of 24h
set beresp.ttl = 60s;
# Define the default grace period to serve cached content
set beresp.grace = 6h;