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";
}
}
weight=1
はデフォルトの構成であるため、明示的に指定するか、削除して暗黙的に設定しても違いはありません。
全体的に、設定は正しいように見えます。
アップストリームリストから動作中のサーバーを削除し、動作しないサーバーを1つだけ残してみてください。ルーティングまたはファイアウォールの問題が原因で、まったく機能しないと思われます。
私はセルゲイに同意します。 1つのサーバーがトラフィックを取得していないためにファイアウォールの問題が発生し、nginxが使用可能なサーバーのプールからそのサーバーを削除する可能性があります。
質問に直接答えることはできませんが、問題のより良い解決策は AWS Application Load Balancer を使用することです。これは、基本的なユースケースから標準的なユースケースに適した機能を備えたロードバランサーです。本当に特定の要件がある場合は、自分でロールする必要があるかもしれません。
AWS ALBは、単一障害点がなく、複数のアベイラビリティーゾーンで実行される高可用性サービスです。これにより、単一のインスタンスよりもはるかに信頼性が高くなり、実行中のインスタンスと比較して費用効果が高くなります。時々それはもう少し費用がかかるでしょう、しかしあなたはそれから利益を得ます。