Базовая конфигурация upstream
upstream backend {
# Round-robin по умолчанию
server 10.0.0.1:8080;
server 10.0.0.2:8080;
server 10.0.0.3:8080 weight=2; # В 2 раза больше запросов
# Запасной сервер
server 10.0.0.4:8080 backup;
keepalive 32; # Persistent connections
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_next_upstream error timeout;
}
}
Алгоритмы балансировки
| Алгоритм | Директива | Применение |
|---|---|---|
| Round Robin | (по умолчанию) | Равнозначные серверы |
| Least Connections | least_conn | Разные по нагрузке запросы |
| IP Hash | ip_hash | Sticky sessions по IP |
| Hash | hash $request_uri | Кэш-консистентность |
Least Connections
upstream backend {
least_conn;
server 10.0.0.1:8080;
server 10.0.0.2:8080;
}
Healthcheck (Nginx Plus / nginx_upstream_check_module)
upstream backend {
server 10.0.0.1:8080 max_fails=3 fail_timeout=30s;
server 10.0.0.2:8080 max_fails=3 fail_timeout=30s;
}
💡
keepalive 32 в блоке upstream поддерживает постоянные соединения к бэкендам — снижает накладные расходы на TCP-хэндшейки.