graceful reloadでは、新しいworkerが新設定を使う一方、古いworkerは現在の処理を完了します。処理中のリクエストを突然停止せず変更を適用することが目的です。
実行中のダウンロードを追う
reload時にダウンロードが動いているとします。新しいworkerが新規接続を受け始めます。古いworkerは既存のダウンロードを完了まで処理し続け、残りの作業が終わると終了できます。
一般的な環境では、次のように検証してreloadします。
sh
nginx -t && nginx -s reload
最初のコマンドは設定を確認し、成功した場合だけ2つ目がreloadを要求します。環境に合う設定パスと権限を使ってください。新設定の適用に失敗した場合、masterは以前の設定で動作を続けます。
長い接続がトレードオフを変える
WebSocketは古いworkerをはるかに長く生存させることがあります。worker_shutdown_timeoutで終了待ちを制限できますが、期限に達すると接続が閉じられる場合があります。クライアントが安全に再接続または再開できるかに応じて上限を選びます。
ダウンロード中とWebSocketセッション中にreloadをテストします。workerの生存時間、エラー、クライアントの回復を確認します。構文チェックが通るだけでは、新しいバックエンドのルーティングが動くことは証明できません。
