LINUX.ORG.RU
ФорумAdmin

nginx reverse proxy, настроить таймаут, чтобы сайт был доступен

 


1

1

На входе стоит nginx reverse proxy, обрабатывает запросы tomcat. Если tomcat перезагружается, то nginx возвращает вроде 503 gateway not available или что-то вроде этого. Хотелось бы, чтобы nginx все входящие запросы ставил в очередь минут 10, пока бэкэнд не доступен, а когда станет доступен – отдавал на обработку, а не отдавал ошибку. Если бэкэнд долго «лежит», тогда уже можно и ошибку отдавать. В настройках такого не нашёл.

★★★★★

nginx все входящие запросы ставил в очередь минут 10

Это будут смотреть посетители, или для скрипта? Для посетителей есть вариант, чтобы nginx выдавал старые странички из кеша, пока томкат лежит.

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

Это будут смотреть посетители, или для скрипта?

Посетители.

Для посетителей есть вариант, чтобы nginx выдавал старые странички из кеша, пока томкат лежит.

Интересно посмотреть, но хотелось бы без кешей, сайт достаточно интерактивный.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от trofk

Попробую, но разве эти таймауты сработают, если бэкэнд не запущен и не слушает свой порт? Там же без таймаутов будет моментальный отлуп? Таймауты это если бэкэнд запущен, но перегружен или ещё по какой то причине очень долго отвечает. Я так думал.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от Legioner

Смотри proxy_cache_use_stale. Таймауты работать не будут. И 10 минут ждать никто не будет :)

goingUp ★★★★★
()
Ответ на: комментарий от Legioner

Интересно посмотреть, но хотелось бы без кешей, сайт достаточно интерактивный.

может тогда имеет смысл бороться с «падением» томката?

Попробую, но разве эти таймауты сработают, если бэкэнд не запущен и не слушает свой порт?

Нет, это я тебя неправильно понял. Я думал что томкат просто медленно отвечает

trofk ★★★
()
Ответ на: комментарий от trofk

может тогда имеет смысл бороться с «падением» томката?

Он не падает, он рестартует, например когда устанавливается новая версия приложения. Было бы неплохо, если бы пользователи этого не замечали.

Legioner ★★★★★
() автор топика

минут 10

Ты уверен, что браузеры будут столько ждать? Лучше уж отдавать страничку в стиле «Мы скоро вернёмся...»

d2
()
Ответ на: комментарий от d2

Ты уверен, что браузеры будут столько ждать?

Уверен. Браузер не может решать за сервер, сколько ему ждать. Пока соединение открыто – будет ждать.

Лучше уж отдавать страничку в стиле «Мы скоро вернёмся...»

10 минут это некая разумная верхняя граница. В реальности, конечно, секунд 10 максимум рестарт занимает.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от Legioner

Я бы решил проблему так:

Создал upstream в котором бекендами были бы два томката, один со старой версией, другой с новой.
И во время обновления переключался бы между ними. например что-то типо такого:

upstream backend {
    server localhost:8080;
    server localhost:8081   backup;
}

На версию с 8081 деплоишь новый код, проверяешь что работает, меняешь местами запись backup и рестартишь nginx.

upstream backend {
    server localhost:8080 backup;
    server localhost:8081;
}
В следующий раз деплоишь сначала на томкат:8080 Зеро даунтайм деплой для бедных :)

trofk ★★★
()
Последнее исправление: trofk (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.