Что происходит с существующими соединениями HTTP и Websocket при перезагрузке конфигурации NGINX?

Что происходит с существующими соединениями HTTP и Websocket при перезагрузке конфигурации NGINX?

Допустим, у нас довольно стандартная сине-зеленая настройка развертывания. NGINX в настоящее время проксирует весь трафик на работающий сервер (СИНИЙ). Затем мы развертываем обновленную версию нашего кода на неактивном сервере (ЗЕЛЕНЫЙ). Наконец, мы обновляем конфигурацию NGINX, чтобы весь HTTP-трафик направлялся на ЗЕЛЕНЫЙ.

Насколько я понимаю, NGINX справится с этой перезагрузкой изящно. Все будущие HTTP-запросы будут направляться в GREEN, а все ожидающие HTTP-запросы, попавшие в BLUE, будут обрабатываться BLUE.

А как насчет WebSockets? Допустим, у BLUE было десять активных подключений WebSocket, когда конфигурация была перезагружена. Что с ними происходит?

Насколько я понимаю документацию NGINX, соединения будут разорваны через 60 секунд, если не будут отправлены новые данные.

Однако если клиенты используют какой-либо тип keep-alive или ping, то я предполагаю, что соединения WebSocket будут поддерживаться бесконечно, даже если BLUE больше не обслуживает никакой другой HTTP-трафик.

Верна ли моя интуиция? Если так, то я бы предположил, что BLUE либо сам должен закрывать соединения, либо это делает клиентский код, если только у NGINX нет функции, которую я упускаю.

решение1

Правильно, соединения будут поддерживаться бесконечно. Для таких случаев есть специальная директива:

https://nginx.org/en/docs/ngx_core_module.html#worker_shutdown_timeout

Связанный контент