地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Nginx】proxy_ignore_client_abortの効果を考えてみる

nginx.org

proxy_ignore_client_abortはデフォルト値がOFFの設定でONにすると以下のような動きになる。

クライアントが応答を待たずに接続を閉じたときに、プロキシされたサーバとの接続を閉じるかどうかを決定します。

これは何が嬉しいかというとリバースプロキシ先のコネクションが同時接続数=プロセス数みたいな大量アクセスをさばくのが苦手なアプリケーションなんかだと思われる。バックエンドのプロセスが50だとすると同時にさばけるのは50リクエストしか無い。50リクエストのうち10クライアントが消失(スマホなら高速移動したとか)した場合にNginxはproxy_ignore_client_abortがオフだとアプリケーションの応答を待ち続けるような動きとなる。アプリケーションの処理が例えば思いみたいなケースだとNginxは結構な時間無駄なコネクションを持ち続ける(つまりクライアント+プロキシ先とのコネクションを維持してしまう)。

proxy_ignore_client_abortをオンにすることでクライアントが接続を閉じたらプロキシサーバとの接続を閉じてくれる。アプリケーションとのコネクションはクローズされるだけでアプリケーションの処理は(アプリケーションの実装次第ではあるが多くは)継続される。そこも止めたいのなら違う手法が必要となる。