Допустим, у меня есть 3 физических сервера с разными IP-адресами и 1 балансировщик нагрузки, который управляет трафиком между этими 3 серверами. Мы протестировали, чтобы остановить службу nginx на 2 серверах, и балансировщик нагрузки обнаружил это и не использовал 2 сервера с остановленным nginx.
Мой вопрос: например, 3 сервера запущены и работают, а 1 сервер имеет внутреннюю ошибку сервера (любая внутренняя ошибка сервера 500). Как мы можем избежать этого 1 сервера, на котором возникает ошибка сервера? чтобы избежать белой страницы?
Вы избегаете появления белой страницы, определяя правильно отформатированный документ об ошибке с error_page
вместо того, чтобы полагаться на сообщение об ошибке по умолчанию :)
error_page 500 /errors/500.html
С другой стороны, если вы хотите избежать отправки дальнейших запросов на узел, который возвращает ошибки?
Обычно это то, что вы настраиваете в балансировщике нагрузки, там вы хотите удалить отказавший узел из пула активных внутренних серверов. Детали различаются между продуктами, но вам необходимо определить проверку работоспособности, которая делает больше, чем просто TCP-соединение, чтобы определить, запущен ли внутренний сервер и работает ли он.
Балансировщику нагрузки необходимо сделать что-то более сложное, например, фактический HTTP-запрос, и оценить, насколько быстро и что будет возвращено, обычно, если код состояния / ответа HTTP равен 200 и / или тело ответа имеет определенное содержимое или соответствует определенному минимальному размеру. .