NGINX 構成が再読み込みされると、既存の HTTP および Websocket 接続はどうなりますか?

NGINX 構成が再読み込みされると、既存の HTTP および Websocket 接続はどうなりますか?

標準的なブルー/グリーン デプロイメント セットアップがあるとします。NGINX は現在、すべてのトラフィックをライブ サーバー (BLUE) にプロキシしています。次に、コードの更新バージョンをアイドル サーバー (GREEN) にデプロイします。最後に、NGINX 構成を更新して、すべての HTTP トラフィックが GREEN にルーティングされるようにします。

私の理解では、NGINX はこのリロードを適切に処理します。今後のすべての HTTP リクエストは GREEN にルーティングされ、BLUE に到達した保留中のすべての HTTP リクエストは BLUE によって処理されます。

しかし、WebSocket はどうでしょうか? 構成が再ロードされたときに、BLUE に 10 個のライブ WebSocket 接続があったとします。これらに何が起こるでしょうか?

NGINXのドキュメントから私が理解したところによると新しいデータが送信されない場合、接続は 60 秒後に終了します。

ただし、クライアントが何らかのキープアライブまたは ping を使用している場合は、BLUE が他の HTTP トラフィックを処理しなくなった場合でも、WebSocket 接続は無期限に維持されると考えられます。

私の直感は正しいでしょうか? もしそうなら、NGINX に私が見逃している機能がある場合を除き、BLUE 自体が接続を閉じる必要があるか、クライアント側のコードが接続を閉じる必要があると思います。

答え1

正解です。接続は無期限に維持されます。このようなケースを処理するための特別なディレクティブがあります:

ワーカーシャットダウンタイムアウト

関連情報