エラーの上流側に接続中に界面圧測定システムの限界に、同時バラとともに、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台のマシンの間にファイアウォールがある)、また、ファイアウォールの長い接続への影響に注意を払う必要があります。