Иногда один сервер уже не справляется с потоком запросов — сайт тормозит, а пользователи жалуются. В такие моменты пора задуматься о масштабировании. Самый логичный шаг — подключить к работе еще несколько серверов и настроить между ними распределение нагрузки. Именно это и называется балансировкой. В этой статье разберём, как быстро настроить её на 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 для балансировки запросов используется специальный блок 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 справится с этим без проблем.