Я не понимаю поведения Varnish в этом случае:
Скажем, у меня есть одна страница на сайте, которая начинает генерировать 500 ошибок (и на сайте есть хороший настраиваемый экран 500, но это не совсем актуально).
У меня есть код в подпрограмме vcl_fetch:
sub vcl_fetch {
// Keep stale response for six hours in case backend fails.
set beresp.grace = 6h;
if (beresp.status == 500) {
set beresp.saintmode = 30s;
return(restart);
}
Я надеялся, что в случае возникновения ошибки 500 Varnish доставит кешированную версию страницы с увеличенным льготным периодом. Это не то, что случилось.
Вместо этого Varnish публикует свою 500-ю страницу, а затем начинает размещать 503-ю.
Если я изменю возврат на (доставить), то он доставляет пользовательскую страницу 500 из бэкенда, но затем обслуживает свои собственные 503 страницы для медитации гуру на время действия режима святого.
Что я хотеть Очевидно, что произойдет это, чтобы доставить кешированную версию до начала 500, за исключением этого, отправить нашу пользовательскую страницу 500 и никогда не отправлять 503.
В этом случае серверные ВМ по-прежнему сообщают о работоспособности, а другие страницы сайта все еще обслуживаются.
Вам нужно посмотреть на реализацию режима Grace и / или Saint.
https://www.varnish-cache.org/docs/trunk/users-guide/vcl-saint-and-grace.html
Режим Grace позволяет вам обслуживать устаревший контент, когда ваши серверные ВМ не работают или работают медленно, а режим святого позволяет вам повторить попытку другого бэкэнда, если бэкэнд, который вы использовали, выдает ошибку.
Таким образом, для использования режима святого вам потребуется 2 или более серверных ВМ.
Чтобы использовать льготный режим, вам понадобится какой-то способ вернуть настраиваемую страницу с ошибкой, даже если бэкэнд не работает. Либо из статического файла html, либо из кода HTML, встроенного в vcl. И то, и другое должно быть всегда, даже когда серверная часть не работает.