У меня есть балансировщик нагрузки, использующий Nginx из Серверы для хакеров учебный сайт. Это относится к двум серверам в циклической настройке. У меня есть самоподписанный SSL
сертификат для проверки http
к https
перенаправить.
Когда я получаю доступ к IP-адресу балансировщика нагрузки, запрос пересылается только на первый IP-адрес в upstream app
блок. Я хочу разделить его на 50/50.
Посмотрев на файл конфигурации, может кто-нибудь подскажет, как это сделать? Все это экземпляры Amazon ec2.
Редирект работает с 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
- это конфигурация по умолчанию, поэтому ее явное указание или удаление и неявное использование не имеют никакого значения.
В целом ваша конфигурация выглядит правильно.
Попробуйте удалить рабочий сервер из списка вышестоящих и оставить только один, который не работает. Я подозреваю, что это вообще не сработает из-за проблем с маршрутизацией или брандмауэром.
Не отвечая напрямую на ваш вопрос, лучшее решение вашей проблемы - использовать Балансировщик нагрузки приложений AWS. Это достаточно хорошо оснащенный балансировщик нагрузки для базовых и стандартных вариантов использования. Возможно, вам придется свернуть свою собственную, если у вас есть действительно особые требования.
AWS ALB - это сервис высокой доступности без единой точки отказа, работающий в нескольких зонах доступности. Это сделает его намного более надежным, чем отдельный экземпляр, и может быть экономически эффективным по сравнению с запущенными экземплярами. Иногда это будет стоить немного дороже, но вы получите от этого выгоду.
Я согласен с Сергеем. Вполне возможно, что существует некоторая проблема с брандмауэром, когда один сервер не получает трафик, из-за чего nginx удаляет его из пула доступных серверов.
Сбросьте вес = 1, и он должен работать