nginx проксируют повторную попытку, в то время как бэкенд перезапускает

Конечно. Поиск DNS использует UDP на уровне 4 непосредственно, не включая уровни 5-7 вообще. Я предполагаю, что Вы могли назвать DNS запросом "прикладного уровня", но нет никакой сессии или состояния, это действительно слишком тривиально для подсчета как таковым, по-моему.

Обновление:

Хорошо, я думаю, что вижу то, что Вы спрашиваете. Как насчет широковещательных сообщений DHCP, когда хост присоединяется к сети? Технически это - приложение клиента DHCP, делающее запрос, но это не (обязательно) инициируется пользователем.

Кроме того, когда интерфейс IPv4 прибудет онлайн, он сделает датчик ARP для проверки IP-адреса, с которым он настроен, уже не используется.

Еще глубже маршрутизаторы и переключатели будут обмениваться сообщениями BGP, когда они прибудут онлайн и регулярно, и я полагаю, что это происходит, даже если никакие конечные точки даже не соединены, например, два маршрутизатора, подключенные вместе и ни к чему иному.

16
задан 14 April 2011 в 23:28
3 ответа

Самой близкой вещью, которую я знаю, является этот проект, но я никогда не использовал. Я знаю, что лак имеет проверку бэкенда, возможно, Вы хотите смотреть на нем.

1
ответ дан 2 December 2019 в 20:44

Я обнаружил, что Nginx потребовалось ~ 2 секунды для исчерпания попыток, если вы указали сотни экземпляров одного и того же бэкэнда:

    server  localhost:8080 max_fails=0;
    server  localhost:8080 max_fails=0;
    server  localhost:8080 max_fails=0;
    server  localhost:8080 max_fails=0;

(... э-э, повторите, если требуется!)

Да, ужасная путаница - но она добавляет некоторую стойкость ...

Еще хуже, вы можете использовать:

    server  localhost:8080 max_fails=0;     
    server  localhost:80 backup;        

Предполагая, что Nginx работает на порту 80, это будет пытаться непрерывно зацикливать запрос вокруг Nginx пока не ответит localhost: 8080. Т.е. повторять бесконечное (?) Количество раз с задержкой в ​​ноль секунд.

Я вернусь к своей заполненной ячейке сейчас ....

5
ответ дан 2 December 2019 в 20:44

Если в вашей установке nginx есть поддержка Lua, вы можете некоторое время удерживать клиента в режиме сна. Операция не блокирует и не блокирует воркер. Имейте в виду, что пользователя нельзя удерживать бесконечно, так как некоторые другие таймауты сокета / брандмауэра, связанные с сетью, могут, наконец, произойти.

server {
    listen 8502;
    location / {
        #25 seconds sleep
        content_by_lua_block {
             ngx.sleep(25); 
             ngx.exit(ngx.HTTP_BAD_GATEWAY);
        }
    }
}

Затем в свой список восходящего потока вам нужно добавить указанный выше сервер в качестве резервного для хранения клиента.

upstream backend {
    server 127.0.0.1:3001 fail_timeout=2s; #The backend
    server 127.0.0.1:8502 backup; #Lua holding server in the event backend is restarting
}

И это должен быть включен в вашу спецификацию прокси-местоположения:

proxy_read_timeout         30;  #Value must be higher than sleep in Lua
proxy_next_upstream error timeout http_502 http_504;
2
ответ дан 2 December 2019 в 20:44

Теги

Похожие вопросы