#1. Nginx リバース プロキシ
nginx のロードバランシングを紹介する前に、nginx のリバースプロキシについて紹介しますが、リバースプロキシは一般的に使用されているため、ここではフォワードプロキシについては紹介しません。
nginx のプロキシ プロセスは、リクエストを nginx に送信し、そのリクエストをバックエンド サーバーに転送し、バックエンド サーバーに転送します。 -end サーバーは処理を完了します。その後、結果が nginx に送信され、nginx は結果をクライアントに送信します。バックエンド サーバーはリモートまたはローカルにすることも、nginx サーバー内で定義された別の仮想ホストにすることもできます。 nginx の転送を受け取るこれらのサーバーは、アップストリームと呼ばれます
nginx をプロキシとして使用する目的の 1 つは、インフラストラクチャの規模を拡大することです。 nginx は多数の同時接続を処理でき、リクエストが到着すると、nginx はリクエストを任意の数のバックグラウンド サーバーに転送して処理できます。これは、クラスター全体に負荷分散を分散することと同じです。
構文: proxy_pass URL
説明: URL は次の形式にすることができます: http://location:8000/uri/,など。「場所の設定」で見つけることができます。
例: 単純なリバース プロキシを作成してみましょう:
ポート 80 でリッスンするディレクトリには test_proxy ファイルがありませんが、私の 8080 ポート リスニング ディレクトリに、次のコンテンツをポート 80 のサーバーに追加しました:
location ~ /test_proxy.html$ {proxy_pass http://127.0.0.1:8080;}
次に、次のように入力しますブラウザ上で http://IP アドレス/test_proxy.html にアクセスすると、要求された情報が表示されます。実際には、ポート 80 がポート 8080 に転送され、データが返送されます。
2. バッファリング
nginx は、パフォーマンスを向上させるためのバッファリング メカニズムも提供します。バッファリングを行わない場合、データはバックエンド サーバーからクライアントに直接送信されます。バッファリングの機能は、バックエンドサーバーからの処理結果をnginx上に一時的に保存することで、nginxからバックエンドへの接続を早期に閉じてIOロスを軽減することができます。通常、コンテンツはメモリに保存されますが、コンテンツが多すぎてメモリが不足する場合、コンテンツは一時ファイル ディレクトリに保存されます。以下は、一般的に使用されるバッファリング設定項目の一部であり、http、server、および location コンテンツ ブロックの下にあります。
proxy_buffering: このコンテンツ ブロックでバッファリングを有効にするかどうかを制御します。デフォルトは「オン」です。
proxy_buffers: 2 つのパラメータがあり、1 つ目はバッファ リクエストの数を制御し、2 つ目はバッファ サイズを制御します。デフォルト値は 8、1 ページ (通常は 4k または 8k) です。値が大きいほど、より多くのコンテンツがバッファーされます。
proxy_buffer_size: バックエンド応答結果の最初のセグメント (ヘッダーを含む部分) は個別にバッファリングされます。この構成は、この部分のサイズを構成します。バッファー。この値のデフォルトは proxy_buffer と同じ値ですが、一般にヘッダーの内容が少ないため、より小さい値に設定できます。
proxy_busy_buffers_size: 「クライアント対応」としてマークされたバッファのサイズを設定します。クライアントは一度に 1 つのバッファからのみデータを読み取ることができ、バッファはキューの順序に従ってバッチでクライアントに送信されます。この構文は、このキューのサイズを構成します。
proxy_temp_path: nginx が一時ファイルを保存するパスを定義します。
proxy_max_temp_file_size: リクエストごとに一時ファイルを保存できるディレクトリのサイズ。アップストリームから送信された結果が大きすぎてバッファーに収まらない場合、nginx はそれらの結果のために一時ファイルを作成します。
3. 負荷分散
設定構文: アップストリーム名 {.......}
説明: name はカスタム名、{} は定義する必要があるコンテンツです。これは http ブロックでのみ定義でき、server ブロックでは定義できません。定義した後、location ブロックの下に次のコードを記述して、http://name を呼び出すことができます。
例: サーバーの数に制限があるため、ここでは 1 つのサーバーの異なるポートを使用して負荷分散をシミュレートします。もちろん、複数のサーバーの構成も同様です。
#次のコードをサーバー ブロックに追加します:
#アップストリーム テスト {#ip_hash サーバー IP:8001; サーバー IP:8002; サーバー IP:8003; }
次に、http ブロック内の場所に次のコンテンツを追加します。
location / {#サーバーがクライアントの実際の IP を取得できるように、ホスト ヘッダーとクライアントの実際のアドレスを設定しますproxy_set_header ホスト $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_connect_timeout 30;#接続タイムアウトを 30 秒に設定します proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffer_size 32k; #バッファ サイズを設定 proxy_buffering on; #バッファを開く proxy_buffers 4 128k; #バッファの数とサイズを設定します proxy_busy_buffers_size 256k; #クライアント対応バッファ サイズを設定します proxy_max_temp_file_size 256k; # proxy_pass http://test; #上記のロード バランシング セットの呼び出し }
もちろん、次のことを思い出してください。設定するIP ポートは設定ファイルで事前に設定されます。例えば以下のような構成です。次に、ホスト アドレスにアクセスし、継続的に更新すると、各ポートから出力されるページ情報がわかります。デフォルトのロード バランシングではポーリングが使用されます。
# 負荷分散に別のサーバーを使用している場合は、次の構成などのわずかな変更を加えるだけで済みます。
アップストリーム mydomain.com{サーバー 47.95.242.167:80; サーバー 47.95.242.168:80; サーバー 47.95.242.169:80; } 設定後、http の残りのコードは上記と同様になり、他の 3 つのサーバーでも次のようになります。そこでの設定。もちろん、これら 3 つのサーバーにファイアウォールを設定する必要があります。
サーバー{80 を聞く; サーバー名 www.mydomain.com; indexindex.htmindex.phpindex.html;ルート ディレクトリ パス;} ①負荷分散スケジュールにおけるバックエンド サーバーのステータス dowm:current サーバー当面は負荷分散には参加しません。 #backup: 予約済みのバックアップ サーバー。 max_fails: 許可されるリクエストの失敗の数。 fail_timeout: max_fails が失敗した後にサーバーが一時停止する時間。 max_conns: 受信接続の最大数を制限します。
②スケジュールアルゴリズム ポーリング: 時系列順に異なるバックエンド サーバーに 1 台ずつ割り当てられます。 加重ポーリング: 設定されたサーバーの後にweight=numberを追加できます。数値が大きいほど、割り当ての確率が高くなります。 ip_hash: 各リクエストはアクセス IP のハッシュに応じて振り分けられるため、同じ IP からのバックエンド サーバーへのアクセスは固定されます。 least_hash: リンクの最小数。接続数が最も少ないマシンがそのマシンに配布されます。 url_hash: アクセスされた URL のハッシュ結果に従ってリクエストを振り分け、各 URL を同じバックエンド サーバーに振り分けます。 ハッシュ キー値: ハッシュ カスタム キー。 注: スケジューリング アルゴリズムはアップストリームの設定で構成されます。たとえば、中括弧内に ip_hash を記述することは、ip_hash を使用して を割り当てることを意味します。詳細 Nginx 関連の技術記事については、Nginx チュートリアル 列にアクセスして学習してください。
以上がnginxの負荷分散を行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。