Введение
Load Balancer (балансировщик нагрузки) и Reverse Proxy (обратный прокси) — два фундаментальных компонента сетевой инфраструктуры, которые часто путают. Оба находятся между клиентом и серверами, оба принимают запросы и пересылают их. Но их цели и функциональность различаются.
На практике многие инструменты совмещают обе роли (Nginx, HAProxy), что усиливает путаницу. Разберём подробно.
Reverse Proxy — что делает
Reverse Proxy — сервер, который принимает запросы от клиентов от имени backend-серверов. Клиент не знает, с каким конкретно сервером общается.
Основные функции
Сокрытие инфраструктуры — клиенты видят только IP прокси, а не реальных серверов. Это повышает безопасность.
SSL termination — прокси обрабатывает SSL/TLS, разгружая backend-серверы от криптографических операций.
Кэширование — хранение ответов для повторных запросов без обращения к backend.
Сжатие — gzip/brotli сжатие ответов для экономии трафика.
Защита от атак — фильтрация вредоносных запросов, защита от DDoS.
URL rewriting — изменение путей запросов перед пересылкой на backend.
Добавление заголовков — X-Real-IP, X-Forwarded-For и другие служебные заголовки.
Load Balancer — что делает
Load Balancer — сервер, который распределяет входящие запросы между несколькими backend-серверами для оптимизации нагрузки и обеспечения отказоустойчивости.
Основные функции
Распределение нагрузки — равномерное распределение запросов между серверами по заданному алгоритму.
Health checking — постоянная проверка доступности backend-серверов. Недоступные серверы исключаются из пула.
Session persistence — привязка сессии пользователя к одному серверу (sticky sessions).
Отказоустойчивость — автоматическое перенаправление трафика при падении сервера.
Масштабирование — добавление новых серверов без простоя.
Алгоритмы балансировки
| Алгоритм | Описание | Когда использовать |
|---|---|---|
| Round Robin | Последовательное распределение | Одинаковые серверы |
| Weighted Round Robin | С учётом веса серверов | Серверы разной мощности |
| Least Connections | На сервер с наименьшим числом соединений | Разная длительность запросов |
| IP Hash | По хешу IP клиента | Нужна session persistence |
| Least Response Time | На самый быстрый сервер | Критична скорость |
| Random | Случайный выбор | Простота |
Сравнение
| Параметр | Reverse Proxy | Load Balancer |
|---|---|---|
| Главная цель | Посредник между клиентом и сервером | Распределение нагрузки |
| Backend серверов | 1+ | 2+ (обычно) |
| SSL termination | Да | Не обязательно |
| Кэширование | Да | Нет |
| Health checks | Базовые | Продвинутые |
| Балансировка | Базовая | Продвинутая |
| Сжатие | Да | Нет |
| URL rewriting | Да | Нет |
| L4 (TCP) | Некоторые | Да |
| L7 (HTTP) | Да | Да |
Когда они совпадают
В реальности большинство инструментов совмещают обе роли:
Nginx — начинался как reverse proxy, но поддерживает upstream балансировку с health checks, weighted round robin, least connections.
HAProxy — начинался как load balancer, но поддерживает SSL termination, заголовки, ACL для маршрутизации.
Envoy — спроектирован как универсальный прокси с полной поддержкой обеих ролей плюс service mesh.
Traefik — автоматическая конфигурация для контейнеров, reverse proxy + load balancer.
Уровни балансировки
L4 (транспортный уровень)
Балансировка на уровне TCP/UDP. Балансировщик видит только IP и порт, не анализирует содержимое запроса. Быстрый, но без контент-зависимой маршрутизации.
L7 (уровень приложения)
Балансировка на уровне HTTP. Анализирует URL, заголовки, cookies. Позволяет маршрутизировать по содержимому запроса. Медленнее L4, но более гибкий.
Пример разницы
L4 видит: TCP-соединение на порт 443 → распределяет по алгоритму.
L7 видит: GET /api/users с Cookie: session=abc123 → маршрутизирует на конкретный backend.
Применение в прокси-индустрии
Прокси-провайдеры
Прокси-провайдеры используют оба компонента:
Reverse Proxy — фронтальный шлюз, который принимает подключения клиентов, обрабатывает аутентификацию и маршрутизирует к нужному пулу IP.
Load Balancer — распределяет запросы между пулами прокси-серверов в разных дата-центрах для отказоустойчивости.
Собственная инфраструктура
При построении своей прокси-фермы:
1. Load Balancer на входе распределяет между прокси-серверами
2. Каждый прокси-сервер работает как forward proxy к целевым сайтам
3. Health checks проверяют доступность каждого прокси
Что выбрать
Нужен только Reverse Proxy если:
- У вас один backend-сервер
- Нужен SSL termination и кэширование
- Хотите скрыть инфраструктуру
Нужен Load Balancer если:
- Несколько backend-серверов
- Нужна отказоустойчивость
- Критичен equal distribution of load
Нужны оба (что бывает чаще всего):
- Используйте Nginx, HAProxy или Traefik — они умеют и то, и другое
Заключение
Reverse Proxy и Load Balancer — два аспекта одной задачи: управление трафиком между клиентами и серверами. Reverse Proxy фокусируется на функциях посредника (SSL, кэш, безопасность), Load Balancer — на распределении нагрузки и отказоустойчивости. В современной инфраструктуре чаще всего используется инструмент, совмещающий обе роли.