nginxの圧力測定誤差を解決する上流側に接続しながら502ない生のアップストリームを発生させません

エラーの上流側に接続中に界面圧測定システムの限界に、同時バラとともに、nginxのは、時間の同時期間の最大量を維持するために、502ない生のアップストリームを開始していない、502コール・インタフェースが返されたことが判明、nginxのを発見できなかったことバックエンドの生存。

ポートを追跡することにより、我々は、nginxのは、バックエンドとの接続を多数作成しました。これは明らかにHTTP1.1長い接続を使用することによって引き起こされていません。だから、上流にキープアライブの設定を追加します。

上流yyy.xxx.web { 
    サーバー 36.10.xx.107:9001 
    サーバー 36.10.xx.108:9001 ; キープアライブ

     256 ; 
} 
サーバー{ 
    ··· 
    位置 / ZZZ / { 
        proxy_passのhttp: // yyy.xxx.web。
        ···    
    } 
}

指示に従って公式文書上流サーバとの間の接続プールパラメータを開くは、nginxのワーカーごとに保持することができる接続の最大数の値は、デフォルトが設定されていない、すなわちときにアクティブでないクライアントキープアライブnginxのような側。

デフォルトでは、nginxの短いアクセスバックエンド接続が使用されている(HTTP1.0)、要求が来て、nginxのオープン新しいポートとバックエンド接続が確立され、要求が接続の回復を終了します。HTTP 1.1長い接続構成した場合、その後、nginxのは、バックエンド接続を維持するために長い接続となり、同時リクエストがキープアライブ最大接続数を指定します超える場合、nginxのは、要求を転送する新しい接続を開始します、新しい接続が要求の完了後に閉じられ、新しい接続が長い接続を確立しています。

原則nginxの上流キープアライブ長いリンクを達成する図。

まず、各プロセスが接続プールを必要とし、複数のプロセス間の長い接続は、接続プールを共有する必要はありませんがあります。接続は、バックエンドサーバーに確立されたら、あなたは接続を確立する必要があり、毎回、接続した後、現在の要求はすぐに接続を閉じませんが、内部のキープアライブ接続プール内の接続を使い果たし保存するときだけから戻って、それは適切な接続を検出した場合、見つけるために、内部プーリングこの接続は、それが直接これに接続することができ、あなたが)(ソケットを再作成するか、接続を開始する必要はありません。これは、接続時間がかかるを確立するためのハンドシェイクを保存し、また、スロースタートTCPコネクションを避けるだけでなく。接続プールのキープアライブは、右の接続が見つからない場合は、接続を再確立するには、元の手順に従います。ロジックは同じである必要があり、私は、接続プール内のnginxのルックアップコード利用可能な接続を見ていないが、私はRedisのを書いて、MySQLdbはコネクションプーリングコード。これだけ時間O(1)、アウトを実行し、その後でPUSH、POP者は誰です。 

なお:私は私のnginx1.12.0バージョン、再び測定された圧力の後、新しい構成午前、502の問題は、バージョン1.16.0にアップグレードし、502問題解決後に持続します。その理由は、長い間の接続構成をサポートしていませんnginx1.12.0バージョンです。

また、バックエンドサービスとは、同じネットワークセグメント上のない上のサーバーへの接続を確立nginxのサーバーの場合(2台のマシンの間にファイアウォールがある)、また、ファイアウォールの長い接続への影響に注意を払う必要があります。

 

 

参考:http://xiaorui.cc/2016/06/26/%E8%AE%B0%E4%B8%80%E6%AC%A1%E5%8E%8B%E6%B5%8B%E5%BC%95%E8%B5%B7%E7%9A%84nginx%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E6%80%A7%E8%83%BD%E8%B0%83%E4%BC%98/

おすすめ

転載: www.cnblogs.com/zjfjava/p/10909087.html