
標準的なブルー/グリーン デプロイメント セットアップがあるとします。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
正解です。接続は無期限に維持されます。このようなケースを処理するための特別なディレクティブがあります: