web-dev-qa-db-ja.com

Nginxロードバランサーが最初のサーバーのみにプロキシするのはなぜですか?

Servers For Hackers チュートリアルサイトからNginxを使用するロードバランサーがあります。これは、ラウンドロビン設定の2台のサーバーを指します。 SSLからhttpへのリダイレクトをテストするための自己署名https証明書を用意しています。

ロードバランサーのIPアドレスにアクセスすると、リクエストはupstream appブロックの最初のIPアドレスにのみ転送されます。 50/50に分割したい。

構成ファイルを見て、誰かがこれを行う方法を教えてもらえますか?これらはすべてAmazonec2インスタンスです。

リダイレクトはhttpからhttpsに機能しており、プロキシは最初のサーバーに対して機能しています。

upstream app {
    server 172.31.33.5:80 weight=1;
    server 172.31.42.208:80 weight=1;
}

server {
    listen 80 default_server;

    # Requests to /.well-known should look for local files
    location /.well-known {
        root /var/www/html;
        try_files $uri $uri/ =404;
    }

    # All other requests get load-balanced
    location / {
        return 301 https://$http_Host$request_uri;
    }
}

server {
    listen 443 ssl default_server;


    ssl_protocols              TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers                ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;
    ssl_prefer_server_ciphers  on;
    ssl_session_cache          shared:SSL:10m;
    ssl_session_timeout        24h;
    keepalive_timeout          300s;

    ssl_certificate      /etc/pki/tls/certs/load_balance.crt;
    ssl_certificate_key  /etc/pki/tls/certs/load_balance.key;

    charset utf-8;

    location / {
        include proxy_params;
        proxy_pass http://app;
        proxy_redirect off;

        # Handle Web Socket connections
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

デバッグログfastcgi.confngix.confnginxファイル

1
LeDoc

weight=1はデフォルトの構成であるため、明示的に指定するか、削除して暗黙的に設定しても違いはありません。

全体的に、設定は正しいように見えます。

アップストリームリストから動作中のサーバーを削除し、動作しないサーバーを1つだけ残してみてください。ルーティングまたはファイアウォールの問題が原因で、まったく機能しないと思われます。

1
Sergey Nudnov

私はセルゲイに同意します。 1つのサーバーがトラフィックを取得していないためにファイアウォールの問題が発生し、nginxが使用可能なサーバーのプールからそのサーバーを削除する可能性があります。

0
Hunter Lannon

質問に直接答えることはできませんが、問題のより良い解決策は AWS Application Load Balancer を使用することです。これは、基本的なユースケースから標準的なユースケースに適した機能を備えたロードバランサーです。本当に特定の要件がある場合は、自分でロールする必要があるかもしれません。

AWS ALBは、単一障害点がなく、複数のアベイラビリティーゾーンで実行される高可用性サービスです。これにより、単一のインスタンスよりもはるかに信頼性が高くなり、実行中のインスタンスと比較して費用効果が高くなります。時々それはもう少し費用がかかるでしょう、しかしあなたはそれから利益を得ます。

0
Tim