Что такое proxy_pass и зачем использовать несколько серверов?
Директива proxy_pass в Nginx — ключевой инструмент для перенаправления запросов на backend-серверы. Её использование с несколькими серверами решает критически важные задачи:
- Масштабируемость: Распределение трафика между серверами позволяет выдерживать высокие нагрузки
- Отказоустойчивость: При падении одного сервера трафик автоматически перенаправляется на рабочие ноды
- Геораспределение: Возможность направлять пользователей к ближайшим серверам
- Гибкость: Легкое добавление/удаление серверов без простоя
Настройка proxy_pass с несколькими серверами в Nginx
Основная конфигурация использует блок upstream:
http {
upstream backend {
server 192.168.1.10:80;
server 192.168.1.11:80;
server backend-domain.com:8080;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
Ключевые параметры:
weight— задает приоритет сервера (по умолчанию 1)max_fails— количество ошибок для признания сервера недоступнымfail_timeout— время исключения сервера из ротации при ошибках
Методы балансировки нагрузки
Nginx поддерживает несколько алгоритмов распределения запросов:
- Round Robin (по умолчанию): Циклическое распределение запросов
- Least Connections: Направление на сервер с минимальным числом активных соединений
- IP Hash: Привязка клиента к конкретному серверу по хешу IP
- Weighted Distribution: Ручное назначение весов серверам
Мониторинг здоровья серверов
Для предотвращения перенаправления на нерабочие ноды настройте проверки:
upstream backend {
server server1.example.com max_fails=3 fail_timeout=30s;
server server2.example.com max_fails=2 fail_timeout=15s;
health_check interval=5s;
}
Параметры мониторинга:
interval— частота проверокfails— количество проваленных проверок для маркировки “unhealthy”passes— успешные проверки для возврата в ротацию
Продвинутые техники конфигурации
- Использование DNS-имён с
resolverдля динамических окружений - Настройка таймаутов:
proxy_connect_timeout,proxy_read_timeout - Кэширование ответов:
proxy_cache_path - Обработка WebSocket:
proxy_http_version 1.1,proxy_set_header Upgrade
Часто задаваемые вопросы (FAQ)
В: Как добавить резервный сервер?
О: Используйте параметр backup:
server backup-server.example.com:80 backup;
В: Почему запросы не распределяются равномерно?
О: Проверьте:
- Настройки
weight - Работу алгоритма балансировки
- Статус серверов в
nginx -T
В: Как перенаправлять HTTPS трафик?
О: Добавьте в location:
proxy_ssl_verify off; proxy_set_header X-Forwarded-Proto https;
В: Можно ли использовать переменные в upstream?
О: Да, с версии Nginx 1.17.0:
map $http_host $backend {
hostnames;
default backend-default;
example.com backend-special;
}
В: Как ограничить число соединений с backend?
О: Через параметр max_conns:
server backend1.example.com max_conns=100;








