Reverse Proxy, или обратный прокси-сервер, — это сервер, который принимает запросы от клиентов и передаёт их одному или нескольким внутренним серверам. После обработки запроса он получает ответ от backend-сервера и возвращает его клиенту.
Клиент взаимодействует с reverse proxy, но обычно не подключается к backend-серверам напрямую. Поэтому обратный прокси используют как единую точку входа в инфраструктуру, а также для маршрутизации, балансировки нагрузки, кэширования и защиты серверов.
Как работает Reverse Proxy
Схема работы выглядит следующим образом:
- Клиент отправляет запрос на домен или IP-адрес reverse proxy.
- Прокси анализирует запрос: домен, URL, заголовки и другие параметры.
- Запрос передаётся подходящему backend-серверу.
- Backend обрабатывает запрос и отправляет ответ прокси.
- Reverse proxy может изменить, проверить или закэшировать ответ.
- Клиент получает результат, не взаимодействуя с backend напрямую.
Например, запросы к example.com/api могут направляться на сервер API, а запросы к example.com — на сервер с веб-интерфейсом. Такой подход позволяет объединить несколько сервисов под одним доменом.
Основные функции
Балансировка нагрузки
Reverse proxy распределяет входящие запросы между несколькими backend-серверами. Это помогает равномерно использовать ресурсы, избегать перегрузки и поддерживать доступность системы при росте трафика.
Для распределения запросов могут применяться разные алгоритмы:
- Round robin — серверы получают запросы по очереди.
- Least connections — запрос направляется серверу с наименьшим количеством активных соединений.
- IP hash — клиент закрепляется за определённым сервером на основе IP-адреса.
- Weighted balancing — серверам назначаются разные веса в зависимости от их производительности.
Маршрутизация запросов
Прокси может направлять запросы на разные сервисы в зависимости от:
- доменного имени;
- пути URL;
- HTTP-метода;
- заголовков;
- типа контента.
Например, запросы к /images можно отправлять на сервер хранения файлов, а запросы к /api — на сервер с бизнес-логикой.
SSL/TLS-терминация
Reverse proxy может принимать HTTPS-соединения, обрабатывать сертификаты и расшифровывать трафик. Этот процесс называют SSL/TLS-терминацией.
Централизованная работа с сертификатами упрощает настройку инфраструктуры и снимает криптографическую нагрузку с backend-серверов. При этом соединение между прокси и внутренними серверами также можно оставить зашифрованным.
Кэширование
Прокси может сохранять ответы на часто повторяющиеся запросы и отдавать их из кэша без обращения к backend. Это уменьшает нагрузку на серверы и сокращает время ответа.
Кэширование применяют для:
- изображений;
- таблиц стилей и JavaScript-файлов;
- HTML-страниц;
- API-ответов;
- других данных, которые редко меняются.
Защита инфраструктуры
Reverse proxy скрывает адреса и внутреннюю структуру backend-серверов. Дополнительно на его уровне можно настроить:
- ограничение частоты запросов;
- блокировку подозрительных IP-адресов;
- фильтрацию HTTP-запросов;
- проверку заголовков и параметров;
- интеграцию с WAF;
- базовую аутентификацию.
При этом сам reverse proxy не заменяет полноценную систему информационной безопасности. Его нужно правильно настроить и дополнить другими средствами защиты.
Сжатие данных
Прокси может сжимать ответы с помощью gzip или Brotli. Это уменьшает объём передаваемых данных и может ускорить загрузку страниц, особенно при медленном интернет-соединении.
Reverse Proxy и Forward Proxy
Оба решения работают как посредники, но находятся по разные стороны соединения.
| Характеристика | Forward proxy | Reverse proxy |
|---|---|---|
| Чьи интересы представляет | Клиента | Серверов |
| Расположение | Между клиентом и интернетом | Между интернетом и backend-серверами |
| Основная задача | Управление исходящим трафиком клиентов | Управление входящими запросами к серверам |
| Что скрывает | Клиентские устройства | Backend-серверы |
| Типичные функции | Фильтрация доступа, анонимизация, контроль сайтов | Балансировка, маршрутизация, кэширование, защита |
Преимущества
- Повышает отказоустойчивость за счёт распределения запросов между серверами.
- Снижает нагрузку на backend благодаря кэшированию и сжатию.
- Позволяет централизованно управлять HTTPS-сертификатами.
- Скрывает внутреннюю инфраструктуру от внешних клиентов.
- Упрощает подключение новых серверов и сервисов.
- Позволяет настроить единую точку для логирования и контроля трафика.
- Поддерживает постепенное обновление инфраструктуры без изменения адреса для клиентов.
Недостатки
- Reverse proxy может стать единой точкой отказа, если не настроить резервирование.
- Дополнительный слой усложняет архитектуру и диагностику проблем.
- Неправильные настройки маршрутизации могут привести к ошибкам доступа.
- Прокси добавляет небольшую задержку при обработке запросов.
- Кэширование требует контроля актуальности данных.
- При SSL/TLS-терминации важно правильно защищать соединение между proxy и backend.
Где используется
Reverse proxy применяют в следующих сценариях:
- размещение нескольких сервисов на одном домене;
- балансировка нагрузки между серверами;
- публикация внутренних сервисов во внешнюю сеть;
- защита backend-серверов;
- централизованная обработка HTTPS;
- кэширование статического контента;
- построение API Gateway;
- организация входящего трафика в микросервисной архитектуре;
- постепенное обновление или перенос отдельных сервисов.
Популярные решения
- Nginx — веб-сервер и reverse proxy с поддержкой маршрутизации, кэширования и балансировки нагрузки.
- Apache HTTP Server — веб-сервер с модулем
mod_proxy. - HAProxy — решение для балансировки нагрузки и проксирования TCP- и HTTP-трафика.
- Traefik — reverse proxy для контейнерных и облачных сред.
- Envoy — прокси для распределённых систем и service mesh.
- Caddy — веб-сервер с автоматическим управлением HTTPS-сертификатами.
Пример настройки Nginx
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
В этом примере Nginx принимает запросы на example.com и передаёт их backend-сервису, доступному по адресу backend:8000. Заголовки X-Real-IP и X-Forwarded-For позволяют передать серверу информацию об исходном клиентском IP-адресе.
Итог
Reverse Proxy — это промежуточный сервер между клиентами и backend-инфраструктурой. Он может распределять нагрузку, направлять запросы к нужным сервисам, обрабатывать HTTPS, кэшировать ответы и добавлять защитные ограничения. Благодаря этому reverse proxy используется для повышения производительности, безопасности и масштабируемости веб-систем.
