Назад | Перейти на главную страницу

Обслуживание страниц ошибок HTTP / 5xx приложения через Varnish

Я работаю над запуском нескольких приложений Rails через Varnish, чтобы обеспечить лучшую поддержку кеширования, которая, надеюсь, будет более гибкой, чем встроенные параметры кеширования страниц в rails.

Одна проблема, на которую я наткнулся, заключается в том, что, когда сервер приложений возвращает ошибку HTTP / 50x, лак не обслуживает страницу настраиваемой ошибки (например, когда приложение rails вызывает исключение, мы визуализируем настраиваемый шаблон HTML ошибки) - вместо того, чтобы видеть На «красивой» удобной для пользователя странице ошибки мы видим следующий текст:

Error 503 Service Unavailable

Service Unavailable

Guru Meditation:

XID: 828451354

Varnish cache server

Есть ли способ передать полученный HTML-код с внутреннего сервера клиенту? Это так же просто, как реализовать метод VCL sub_error и использовать директиву fetch или pass?

Спасибо.

Что ж, у меня есть ответ - и, что удивительно, проблема даже не в том, что лак не передает содержимое ответа HTTP / 500.

Ошибка HTTP / 503 на самом деле возникала, когда Varnish истекал по таймауту при подключении к внутреннему серверу или ожидал отправки байтов.

В основном, если соединение с серверной частью было успешным, но серверная часть не отправляет первый байт без определенного периода тайм-аута или есть задержка между отправкой байтов, Varnish будет тайм-аут и вернет ошибку HTTP / 503.

Решение состоит в том, чтобы обновить значения тайм-аута (и, конечно же, исправить медленный внутренний сервер), как показано ниже (как подробно описано в: http://varnish-cache.org/wiki/VCL):

backend www {
   .host = "www.example.com";
   .port = "http";
   .connect_timeout = 1s;
   .first_byte_timeout = 5s;
   .between_bytes_timeout = 2s;
}