NGINX 구성을 다시 로드하면 기존 HTTP 및 Websocket 연결은 어떻게 되나요?

NGINX 구성을 다시 로드하면 기존 HTTP 및 Websocket 연결은 어떻게 되나요?

꽤 표준적인 블루/그린 배포 설정이 있다고 가정해 보겠습니다. NGINX는 현재 모든 트래픽을 라이브 서버(BLUE)로 프록시하고 있습니다. 그런 다음 업데이트된 버전의 코드를 유휴 서버(GREEN)에 배포합니다. 마지막으로 모든 HTTP 트래픽이 GREEN으로 라우팅되도록 NGINX 구성을 새로 고칩니다.

제가 이해한 바로는 NGINX가 이 재로드를 정상적으로 처리할 것입니다. 향후 모든 HTTP 요청은 GREEN으로 라우팅되고 BLUE로 전환된 모든 보류 중인 HTTP 요청은 BLUE로 처리됩니다.

하지만 WebSocket은 어떻습니까? 구성이 다시 로드되었을 때 BLUE에 10개의 라이브 WebSocket 연결이 있었다고 가정해 보겠습니다. 그들에게는 무슨 일이 일어나는가?

NGINX 문서에 대한 나의 이해에서, 새 데이터가 전송되지 않으면 60초 후에 연결이 종료됩니다.

그러나 클라이언트가 일종의 연결 유지 또는 핑을 사용하는 경우 BLUE가 더 이상 다른 HTTP 트래픽을 제공하지 않더라도 WebSocket 연결은 무기한 유지될 것이라고 생각합니다.

내 직감이 바로 여기에 있습니까? 그렇다면 NGINX에 누락된 기능이 없으면 BLUE가 연결 자체를 닫거나 클라이언트 측 코드가 닫아야 한다고 생각합니다.

답변1

맞습니다. 연결은 무기한 유지됩니다. 이러한 경우를 처리하기 위한 특별한 지시문이 있습니다.

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

관련 정보