Как настроить балансировку нагрузки с помощью Nginx — простой и понятный разбор

  • Главная
  • База знаний
  • Как настроить балансировку нагрузки с помощью Nginx — простой и понятный разбор
15.05.2025, 18:20

Иногда один сервер уже не справляется с потоком запросов — сайт тормозит, а пользователи жалуются. В такие моменты пора задуматься о масштабировании. Самый логичный шаг — подключить к работе еще несколько серверов и настроить между ними распределение нагрузки. Именно это и называется балансировкой. В этой статье разберём, как быстро настроить её на Nginx.

Устанавливаем Nginx на сервер

Nginx — один из самых популярных веб-серверов и прокси. Установить его можно буквально в пару команд.

Для Debian/Ubuntu:

sudo apt update
sudo apt install nginx

Для CentOS, AlmaLinux, Rocky Linux:

sudo dnf install nginx

После установки не забудьте запустить и включить его:

sudo systemctl enable --now nginx

Как устроена балансировка в Nginx

В Nginx для балансировки запросов используется специальный блок upstream. В нём вы перечисляете все ваши серверы и настраиваете, как именно между ними будут распределяться запросы.
Простейший пример:

upstream myapp {
    server 192.168.1.101;
    server 192.168.1.102;
    server 192.168.1.103;
}

Какие бывают алгоритмы распределения запросов
→ round-robin — по умолчанию. Запросы уходят к серверам по очереди, равномерно.

→ least_conn — выбирается сервер с наименьшим количеством активных подключений.

→ ip_hash — пользователь попадает всегда на один и тот же сервер в зависимости от своего IP.

Настройки серверов
→ weight — задаёт приоритет сервера. Например:

server 192.168.1.101 weight=5;
server 192.168.1.102 weight=1;

В таком случае сервер с весом 5 будет получать больше запросов.
→ max_fails и fail_timeout — позволяют временно исключать сервер из работы, если он не отвечает. Например:

server 192.168.1.101 max_fails=3 fail_timeout=30s;

Как подключить балансировщик к вашему приложению

Добавляем upstream в конфиг и настраиваем проксирование:

http {
    upstream myapp {
        server 192.168.1.101;
        server 192.168.1.102;
    }

    server {
        listen 80;

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

Работает не только с HTTP. Nginx умеет балансировать и другие типы подключений:
→ FastCGI — fastcgi_pass
→ uWSGI — uwsgi_pass
→ SCGI — scgi_pass
→ memcached — memcached_pass
→ gRPC — grpc_pass

Проверка и запуск

Проверьте, что в конфиге нет ошибок:

sudo nginx -t

Если всё хорошо — применяйте настройки:

sudo nginx -s reload

Что в итоге

Вы только что настроили полноценную балансировку нагрузки. Теперь Nginx будет сам решать, куда отправить очередной запрос — на локальный сервер или на один из новых. Причём с учётом приоритета и количества активных подключений.

Это отличный способ избежать перегрузки и подготовить проект к росту. Хотите расти дальше? Добавляйте ещё сервера в блок upstream — и Nginx справится с этим без проблем.