Почему 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;
}
}