Есть ли способ настроить лак или любой другой кэширующий обратный прокси-сервер для обслуживания страниц из своего кеша при сбое серверной части? На данный момент, если серверная часть выйдет из строя 503 Service Unavailable
ошибка будет возвращена браузеру. Я бы предпочел, чтобы посетители видели кешированную версию, а не страницу с ошибкой, пока серверная часть исправляется.
Моя установка:
[varnish (общедоступный IP-адрес)] <===> [маршрутизатор] <===> [веб-сервер (частный IP-адрес)]
PS: у меня только один внутренний веб-сервер.
Да, есть, со Squid. Марк Ноттингем работал над этим в Yahoo, см. это отличное сообщение в блоге для всех деталей.
Во-первых, Squid 3.0 - это довольно большая переработка кодовой базы Squid, поэтому не следует слепо развертывать новейшую версию Squid, а сначала проверьте, какие версии Squid имеют эту функциональность. Возможно, его не перенесут на 3.0.
Я думаю, что womble прав насчет Varnish и делает это через VCL Varnish, но я никогда не настраивал что-то подобное с Varnish, поэтому не могу сказать.
Теоретически, если объект устарел, вы не хотите, чтобы он обслуживался кешем - если он не устарел, срок действия должен быть увеличен ...
С другой стороны, Varnish признает, что теория и практика расходятся, так что есть grace
директива в VCL что я считать обрабатывает этот случай, а также более прозаические способы использования, описанные на этой странице.
2.1.0 представил режим святого, который работает с изяществом: http://varnish-cache.org/wiki/VCLExampleSaintMode
Хак, который должен сработать: вы можете время от времени создавать кешируемую страницу и настраивать обработчик 503 для использования кешированной страницы.
Добавьте / измените, если необходимо, в ваш conf:
ErrorDocument 503 /my_cached_page.html
Varnish имеет функцию под названием «отсрочка», которая позволяет вам назначать период отсрочки, в течение которого объект будет сохранен после истечения срока жизни. Если ваш бэкэнд выходит из строя, Varnish обслуживает украшенный (устаревший) объект.
Проверьте это:
Ага; stale-if-error / max-stale есть в Squid 2.7 и 2.HEAD, но не в 3.x (пока).