nginxのの重要な概念をlingering_close

lingering_closeは何ですか?

  nginxのがないときは、すぐ近くに接続接続を閉じますが、書き込みのTCP接続をオフにした後、一定期間後に接続を閉じるように読み取りを待つために、延期シャットダウンをlingering_close。

なぜlingering_close必要がありますか?

  nginxのクライアント要求を受信したときに、クライアントまたはサーバのエラー場合、nginxのは、その直後に、エラーメッセージに応答して、クライアントにエラーメッセージで応答するため、ほとんどの場合、現在の接続をクローズする必要があります。

  nginxのは、クライアントにエラーメッセージを送信するためにwrite()システムコールを実行して、write()システムコールのリターンの成功は、そこかもしれまだTCP接続データがクライアントに送信されたことを意味しない書き込みバッファ、近い直接実行された場合()システム近くにTCP接続への呼び出し、TCPカーネルチェックするリード・バッファを、どのクライアントデータは、カーネルモードにとどまるために私が送信されないユーザーモードプロセスの読み取りではありません。クライアントは、TCPドロップコネクタを閉じるためにメッセージRST(接続をリセットするリセットエラーに接続されているいくつかの理由のために発生し、不正なデータ要求を拒否するようにしても使用される)を送信した場合、書き込みバッファをなしている場合,,データに待機write_bufferデータが切断パケットを振って前に4回送信されました。

  場合以上のことから、書き込みバッファ近い()システムコールの後にwrite()システムコールのデータでは、完了前に送信されず、読み出しバッファは、読み込むデータはありません、それはRSTパケットを受信するためにクライアントを引き起こすとしませんでしょうサーバーから送信されたエラーメッセージを取得します。クライアントへのサーバー自体が送られたRSTパケットデータは無視されているクライアントにつながる送信するため、このシーンはあります。

  解決策は以下のとおりである、我々は書き込みのTCP接続をオフにし、通常の読み、その後、クライアントにデータを再送信、それはRSTの対象になりません。nginxのもタイムアウト設定lingering_timeoutを、今回はオフにし、また、読み出しデータに接続され、通常のクライアントをオフに接続され、受信したデータを超えていません。

lingering_time

  接続セットnginxの総読み出し時間がlingering_timeによって設定され、この時間終了時間nginxのは、書き込み後の予約されたソケットは、クライアントのニーズを直接になります。この時間の後にそれ以外の場合は、この時間内にnginxのすべてのデータを送信することです接続をオフにします。

lingering_closeの長所と短所

  クライアントがより良い互換性を維持することができますが、それ以上の追加のリソースを消費します(そのような接続として占有されていたであろう)。

上記の概要の参照リンクhttps://mp.weixin.qq.com/s/bXtI45d7M-XjkJH3ARZiMQ

おすすめ

転載: www.cnblogs.com/smallzhen/p/12650652.html