Налаштування nginx для повторного запуску одного сервера вище


14

Я використовую nginx як зворотний проксі, і я хотів би, щоб він зачекав деяку кількість секунд і повторив запит, якщо сервер вище за течією не відповідає. Таким чином я можу перезапустити верхній сервер і замість користувачів, які бачать 502 поганий шлюз, їх браузери просто зависають на кілька секунд (процес перезавантаження займає 3 або 4 секунди). Я спробував кілька речей, і я помістив це в свій серверний блок:

proxy_connect_timeout 60;
proxy_send_timeout 15;
proxy_read_timeout 20;

але, здавалося, це нічого не робило. Я також спробував додати це до блоку вище за течією:

server 127.0.0.1:3001 fail_timeout=10s;

знову ж таки, не те, що я хотів.

Чи можливо це? Що я пропускаю?

Відповіді:


1

Директиви, які ви намагалися, призначені для різних речей, ніж те, що ви хочете. Прочитайте їх документацію.

Документація upstreamдирективи докладно пояснює, як працює блок вище:

Якщо під час спілкування з сервером виникає помилка, запит буде переданий наступному серверу тощо, поки не будуть спробувані всі функціонуючі сервери. Якщо успішну відповідь не вдалося отримати з жодного із серверів, клієнт отримає результат зв'язку з останнім сервером.

Там все сказано.

Однак ви, можливо, зможете обробити повернутий код помилки з бекенда, перехопивши його, proxy_intercept_errorsа потім надішліть $request_uriспеціальний сценарій, що займається ним від імені вихідного клієнта.

Основна лінія полягає в тому, що вам потрібно трохи логіки коду / програми, щоб повторити клієнтську сторону (або фронтальну сторону).


0

Як сказано в іншій відповіді, немає вбудованого способу змусити nginx робити це. Можливим рішенням є використання налаштування балансування навантаження, що складається з вашого поточного сервера та резервного сервера, який виконує наступні дії для всіх запитів:

  • опитуйте поточний сервер, поки він не повернеться в Інтернет
  • потім відповідь перенаправленням 302 або іншим, щоб браузер спробував ще раз

Цей сервер буде позначений прапором "резервного копіювання", щоб його спробували лише тоді, коли всі інші сервери перебувають у режимі офлайн ( HTTP Load балансування> Ваги сервера ).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.