Обратный прокси (Reverse Proxy)
Сервер-посредник перед приложениями: принимает запросы из интернета, передает их нужному серверу и возвращает ответ, скрывая внутреннее устройство.
Обратный прокси — сервер, который стоит перед одним или несколькими приложениями и принимает все запросы из интернета вместо них. Он решает, какому внутреннему серверу передать запрос, получает от него ответ и отдает посетителю. Снаружи виден только прокси; адреса и устройство серверов приложений остаются скрытыми.
Прямой и обратный прокси
- Прямой прокси работает на стороне пользователей: сотрудники компании выходят в интернет через него, и сайты видят адрес прокси, а не сотрудника.
- Обратный прокси работает на стороне сервиса: пользователи интернета обращаются к нему, не зная о серверах за ним.
Что он делает
- Шифрование. Принимает HTTPS-соединения, хранит сертификаты TLS и передает приложениям уже расшифрованные запросы по внутренней сети.
- Маршрутизация.
/api/— на серверы API,/admin/— на админку, остальное — на сайт. Несколько микросервисов выглядят снаружи как один сайт. - Балансировка нагрузки между несколькими копиями приложения.
- Кэширование и сжатие — повторяющиеся ответы отдаются без обращения к приложению.
- Защита. Ограничение частоты запросов, фильтрация подозрительных обращений, межсетевой экран для веб-приложений (WAF), поглощение части атак DDoS.
Пример
location /api/ {
proxy_pass http://api-servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
Фрагмент настройки Nginx передает все запросы к /api/ группе серверов API. Заголовки X-Real-IP и X-Forwarded-Proto сообщают приложению настоящий адрес посетителя и то, что он пришел по HTTPS, — иначе приложение увидело бы адрес прокси.
Инструменты
Самые распространенные — Nginx и его российский форк Angie, HAProxy, а в контейнерных средах — Traefik и Envoy. В Kubernetes роль обратного прокси выполняет Ingress-контроллер.
Важные детали
Приложение за прокси должно доверять заголовкам с адресом посетителя только от своего прокси, иначе любой сможет подделать свой адрес. Тайм-ауты прокси нужно согласовать с длительностью тяжелых операций, чтобы долгий отчет не обрывался через минуту. А сам прокси, как единая точка входа, нуждается в резервировании.