GNU/Linux >> Linux の 問題 >  >> Linux

HTTP/HTTPS の Apache または Tomcat のロードバランサとして Nginx をセットアップする方法

Web アプリケーションの前で Nginx をロードバランサーとして使用できます。

たとえば、エンタープライズ アプリケーションが Apache (または Tomcat) で実行されている場合、エンタープライズ アプリケーションの 2 番目のインスタンスを別のサーバーの Apache (または Tomcat) にセットアップできます。

次に、Nginx をフロントエンドに配置して、2 つの Apache (または Tomcat、または JBoss) サーバー間で負荷を分散します。

Nginx を初めて使用する場合は、Nginx と Apache の違い、および Nginx アーキテクチャを理解することが重要です。

Nginx は、次の 3 種類の負荷分散をサポートしています。

<オール>
  • ラウンドロビン – これは Nginx のデフォルトのタイプで、典型的なラウンドロビン アルゴリズムを使用して受信リクエストの送信先を決定します
  • least-connected – 名前が示すように、着信リクエストは接続数の少ないサーバーに送信されます。
  • ip-hash – これは、着信要求の永続性または固定接続が必要な場合に役立ちます。このタイプでは、クライアントの IP アドレスを使用して、リクエストを送信するサーバーを決定します。
  • 1. Nginx 設定ファイルで上流とproxy_passを定義

    負荷分散のために、nginx 構成ファイルに次の 2 つを追加する必要があります:1) アップストリーム 2) proxy_pass

    まず上流: 一意の名前 (アプリケーションの名前の場合もあります) を指定し、この Nginx によって負荷分散されるすべてのサーバーを一覧表示します。

    次の例では、「crmdev」はアップストリームの名前であり、個々の Apache Web サーバー (以下に示すように 101.1 と 102.2) の両方で実行されているアプリケーションの名前です。 「crmdev」の代わりに、ここで好きなものを指定できます。

    注:アップストリームは、Nginx の「http」コンテキスト内で定義する必要があります。

    upstream crmdev {
        server 192.168.101.1;
        server 192.168.101.2;
    }
    

    注:個々のサーバーが別のポート (ポート 80 以外) で実行されている場合は、アップストリームで以下に示すようにポート番号を指定してください

    upstream crmdev {
        server 192.168.101.1:8080;
        server 192.168.101.2:8080;
    }
    

    第二に、proxy_pass: 以下に示すように、「サーバー」セクションの下にある「ロケーション」セクション内で、前のステップで定義された一意のアップストリーム名を proxy_pass として指定します。

    server {
      listen 80;
      
      location / {
        proxy_pass http://crmdev;
      }
    }
    

    注:この例では、nginx 自体が listen パラメーターによって上記のようにポート 80 でリッスンしています。

    また、proxy_pass を使用して Nginx を Apache/PHP のリバース プロキシとしてセットアップすることもできます。

    2. Nginxのデフォルト設定ファイルでupstreamとproxy_passを定義

    注:通常、上記は以下に示すように http または https の下にある必要があります。

    http {
      upstream crmdev {
       server 192.168.101.1:8080;
       server 192.168.101.2:8080;
      }
    
      server {
          listen 80;
    
          location / {
              proxy_pass http://crmdev;
          }
      }
    }
    

    ただし、デフォルトの nginx.conf ファイルに付属する default.conf を使用している場合は、http コンテキストで既に定義されているため、「http」を指定する必要はありません。

    注:HTTPS の場合、「http」コンテキスト (上記の 1 行目) を https に置き換えます。また、proxy_pass 行では、https://{your-upstream-name}

    を使用します。

    この場合、上記のように「http」を使用すると、次のような http ディレクティブは許可されていませんというエラー メッセージが表示される場合があります。

    Starting nginx: nginx: [emerg] "http" directive is not allowed here in /etc/nginx/conf.d/default.conf:1
    

    これは私の default.conf ファイルのコピーです。先頭にアップストリームを追加し (http なし)、デフォルトの場所をコメント アウトし、proxy_pass を使用して新しい場所を追加しました。

    # vi /etc/nginx/conf.d/default.conf
    upstream crmdev {
        server 127.0.0.1:4080;
        server 127.0.0.1:7080;
    }
    server {
      listen       3080;
      server_name  localhost;
      
      #location / {
      #    root   /usr/share/nginx/html;
      #    index  index.html index.htm;
      #}
      
      location / {
        proxy_pass http://crmdev;
      }
    ..
    ..
    }
    

    3. Nginx ロード バランサの最小接続アルゴリズムのセットアップ

    このアルゴリズムでは、着信要求は、既存のアクティブな接続の数が最も少ないサーバーに送信されます。

    このために、以下に示すように、アップストリームの上部にキーワード「least_conn」を追加します。

    upstream crmdev {
        least_conn;
        server 192.168.101.1:8080;
        server 192.168.101.2:8080;
    }
    

    least_conn に複数のサーバーがリストされていて、複数のサーバーの既存のアクティブな接続数が同様に少ない場合、それらのサーバーの中から加重ラウンドロビンに基づいて 1 つが選択されます。

    4. Nginx ロード バランサーの永続性またはスティッキー アルゴリズムのセットアップ

    ラウンド ロビンおよび最小接続方式の欠点は、クライアントからの後続の接続がプール内の同じサーバーに移動しないことです。これは、セッションに依存しないアプリケーションでは問題ない場合があります。

    ただし、アプリケーションがセッションに依存している場合、特定のサーバーとの最初の接続が確立されると、その特定のクライアントからの以降のすべての接続が同じサーバーに送られるようにする必要があります。これには、以下に示すように ip_hash アルゴリズムを使用します。

    upstream crmdev {
        ip_hash;
        server 192.168.101.1:8080;
        server 192.168.101.2:8080;
    } 
    

    ハッシュの場合、IPv4 アドレスの場合、最初の 3 オクテットが使用されます。 IPv6 アドレスの場合、アドレス全体が使用されます。

    5.個々のサーバーの重量オプション

    プール内の特定のサーバーの重みを指定することもできます。デフォルトでは、すべてのサーバーの優先度 (重み) は同じです。つまり、重みのデフォルト値は 1 です。

    ただし、以下に示すようにサーバーに重みを割り当てることで、この動作を変更できます。

    upstream crmdev {
        server 192.168.101.1:8080;
        server 192.168.101.2:8080;
        server 192.168.101.3:8080 weight 2;
        server 192.168.101.4:8080;
        server 192.168.101.5:8080;
    }
    

    この例では、合計 5 つのサーバーがあります。ただし、3 番目のサーバーの重みは 2 です。これは、6 つの新しいリクエストごとに、2 つのリクエストが 3 番目のサーバーに送られ、残りのサーバーが 1 つのリクエストを取得することを意味します。

    したがって、これは、より多くの馬力を持つ特定のサーバーにより多くの負荷を分散するのに役立ちます.

    上記の例では、デフォルトのラウンドロビン アルゴリズムで重みが使用されていますが、least_conn と ip_hash にも重みを使用できます。

    6.個々のサーバーのタイムアウト オプション – max_fails および fail_timeout

    以下に示すように、max_fails と fail_timeout を特定のサーバーに指定することもできます。

    upstream crmdev {
        server 192.168.101.1:8080 max_fails=3 fail_timeout=30s;
        server 192.168.101.2:8080;
        server 192.168.101.3:8080 weight 2;
        server 192.168.101.4:8080;
        server 192.168.101.5:8080;
    }
    

    上記では:

    • デフォルトの fail_timeout は 10 秒です。上記の例では、これは 30 秒に設定されています。これは、試行の失敗回数が x 回 (max_fails で定義) された場合、30 秒以内にサーバーが使用できなくなることを意味します。また、サーバーは 30 秒間利用できなくなります。
    • デフォルトの max_fails は 1 回です。上記の例では、これは 3 回の試行に設定されています。これは、この特定のサーバーへの接続試行が 3 回失敗すると、Nginx はこのサーバーが fail_timeout (30 秒) の間利用できないと見なすことを意味します。

    7. Nginx LoadBalancer プールにバックアップ サーバーを割り当てる

    次の例では、サーバー パラメータの末尾に「backup」キーワードを使用して、5 番目のサーバーをバックアップとしてマークします。

    upstream crmdev {
        server 192.168.101.1:8080 max_fails=3 fail_timeout=30s;
        server 192.168.101.2:8080;
        server 192.168.101.3:8080 weight 2;
        server 192.168.101.4:8080;
        server 192.168.101.5:8080 backup;
    }
    

    以上で5台目のサーバー(192.168.101.5)がバックアップサーバーになります。他の 4 つのサーバーがすべてダウンしていない限り、着信要求はこのサーバーに渡されません。


    Linux
    1. NginxでHTTPをHTTPSにリダイレクトする方法

    2. NginXでHTTPをHTTPSにリダイレクトする

    3. Apache サーバーで HTTP を HTTPS に自動的にリダイレクトする方法は?

    1. CentOS8でNginxをWebサーバーおよびApacheのリバースプロキシとして構成する方法

    2. Debian11でApacheのリバースプロキシとしてNginxを設定する方法

    3. Node.jsのフロントエンドプロキシとしてApacheを設定する方法

    1. CentOS8でNginxのロードバランサーとしてHAProxyを設定する方法

    2. LinuxシステムのApacheでHTTP/2を有効にする方法

    3. NginxサーバーでHTTP/2.0を有効にする方法:ステップバイステップガイド