конфигурация балансировщика нагрузки nginx не работает

#nginx #load-balancing

Вопрос:

У меня есть очень простая конфигурация балансировки нагрузки, настроенная для целей PoC. Мой сервер приложений 1 и сервер балансировщика нагрузки одинаковы.Ниже приведено содержимое моего файла load balncer conf. Пожалуйста, помогите мне это правильно?

На данный момент всякий раз, когда весь мой запрос поступает на IP1. Я ожидаю, что он также будет перенаправлять трафик на IP2 всякий раз, когда я нажимаю IP1, пожалуйста, исправьте, если это неверное понимание.

 upstream myapp1 {
    server srv1.example.com;
    server srv2.example.com;
    server srv3.example.com;
            }

server {
    listen 80;

    location / {
        proxy_pass http://myapp1;
                }
}
 

Ответ №1:

Ваша конфигурация верна. Отправка нескольких запросов на ваш прокси-порт NGINX 80 приведет к балансировке трафика с помощью циклического перебора LB-алгоритма по умолчанию на один из ваших внутренних (восходящих) серверов.

Проверьте это: https://www.nginx.com/resources/wiki/start/topics/examples/loadbalanceexample/

 http {
  upstream myproject {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
  }

  server {
    listen 80;
    server_name www.domain.com;
    location / {
      proxy_pass http://myproject;
    }
  }
}
 

Вы можете попробовать это из любой командной строки Linux

for ((i=1;i<=10;i )); do curl -v "http://localhost"; sleep 1; done

Это должно напечататься AppServer1, AppServer2, AppServer3 и снова начаться с 1.

Демо-серверная часть может выглядеть так

 server {
    listen 8080;
    location / {
      return 200 "AppServer1n";
    }
  }

server {
    listen 8081;
    location / {
      return 200 "AppServer2n";
    }
  }

server {
    listen 8082;
    location / {
      return 200 "AppServer3n";
    }
  }

 

Я только что протестировал новый контейнер nginx docker без каких-либо проблем.

Комментарии:

1. Спасибо @Timo Stark — я пропустил параметр имя_сервера в файле конфигурации. сейчас все выглядит хорошо.