Почему nginx как обратный прокси-сервер не закрывает клиентские соединения после перезагрузки конфигурации?

У нас есть Server1 и Server2 с сайтом IIS "WebApi" на каждом, и Nginx подключает их для балансировки нагрузки с помощью восходящих потоков (на Server3). По некоторым причинам нам нужно перезагружать Server1 и Server2 каждую неделю, но сервис в целом должен оставаться доступным все время.

Мы хотим использовать следующий план:
0. Server1 и Server2 обрабатывают запросы
1. Измените конфигурацию nginx, чтобы отправлять все запросы на Server2; вызовnginx -s reload
2. Подождите, пока Server1 обработает последний запрос; затем - перезагрузите Server1
3. и т. д.

Но вот трудность:
- Если Server1 не открывал соединения от клиентов, все работает нормально.
- Если Server1 открыл соединения от клиентов, они не будут закрыты при перезагрузке конфигурации Nginx. Итак, клиенты продолжают отправлять запросы на Server1, и его перезагрузка вызовет 500 (InternalServerError).

Насколько мы понимаем, нам нужно указать nginx, чтобы он закрыл все существующие подключения, чтобы клиенты могли повторно подключиться к nginx, и все запросы будут отправляться на Server2.

Вопросы:
- Почему nginx не закрывает клиентские соединения после перезагрузки конфигурации?
- Можно ли их принудительно закрыть?



Вот наши файлы конфигурации nginx:

# Server1 and Server2 are active

stream {
    upstream https_backend {
        server server1:443;
        server server2:443;
    }

    server {
        listen server3:443;
        proxy_pass https_backend;
    }
}
# Server2 is active

stream {
    upstream https_backend {
        server server2:443;
    }

    server {
        listen server3:443;
        proxy_pass https_backend;
    }
}

0 ответов

Другие вопросы по тегам