Что такое Proxy и Reverse Proxy?
Proxy (Forward Proxy, прямой прокси) — сервер-посредник, через который клиент явно направляет свои запросы к целевому серверу. Прокси действует от имени клиента.
Reverse Proxy (обратный прокси) — сервер-посредник, расположенный перед backend-серверами. Клиент обращается к reverse proxy, не зная о реальных серверах за ним. Reverse proxy действует от имени сервера.
Аналогия из жизни: Forward Proxy — это ваш представитель (адвокат), который ведёт переговоры от вашего имени, скрывая вашу личность. Reverse Proxy — это ресепшн в отеле: вы обращаетесь на ресепшн, а он решает, какой сотрудник (backend-сервер) обработает ваш запрос.
Forward Proxy
Пример
Клиент ──→ [Forward Proxy] ──→ Интернет ──→ Целевой сервер
Зачем нужен:
- Анонимность — скрывает IP клиента от сервера
- Кэширование — прокси хранит кэш ответов, ускоряя повторные запросы
- Фильтрация — корпоративный прокси блокирует доступ к определённым сайтам
- Обход ограничений — доступ к ресурсам через прокси в другой стране
- Логирование — мониторинг трафика сотрудников
Reverse Proxy
Пример
Клиент ──→ [Reverse Proxy (Nginx)] ──→ Backend Server 1
──→ Backend Server 2
──→ Backend Server 3
Зачем нужен:
- Балансировка нагрузки (Load Balancing) — распределяет запросы между backend-серверами (round-robin, least connections, IP hash, weighted)
- SSL/TLS-терминация — reverse proxy обрабатывает HTTPS, а к backend обращается по HTTP. Снимает криптографическую нагрузку с backend
- Кэширование — кэширует статические ресурсы (изображения, CSS, JS)
- Сжатие — gzip/brotli-сжатие ответов
- Защита — скрывает структуру backend, фильтрует вредоносные запросы, ограничивает rate limit
- Обслуживание статики — раздаёт статические файлы напрямую, не нагружая backend
Сравнение Forward Proxy и Reverse Proxy
| Свойство | Forward Proxy | Reverse Proxy |
|---|---|---|
| Расположение | На стороне клиента | На стороне сервера |
| Знает ли клиент о нём? | Да (настраивается явно) | Нет (прозрачен для клиента) |
| Скрывает | Клиента от сервера | Серверы от клиента |
| Настройка | На стороне клиента | На стороне инфраструктуры |
| Примеры | Squid, корпоративный прокси | Nginx, HAProxy, Envoy, Traefik |
Nginx как Reverse Proxy (пример конфигурации)
nginx.conf — reverse proxy с балансировкой и SSL
upstream backend {
server 10.0.0.1:8080;
server 10.0.0.2:8080;
server 10.0.0.3:8080;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
location /api/ {
proxy_pass http://backend;
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;
}
location / {
root /var/www/static;
expires 30d;
add_header Cache-Control "public, immutable";
}
}
Типичная production-архитектура с reverse proxy
Пример
Internet ──→ [CDN] ──→ [Nginx / ALB] ──→ [Spring Boot App 1]
──→ [Spring Boot App 2] ──→ [PostgreSQL]
──→ [Spring Boot App 3]
Для Java-разработчика
- Типичная production-схема: Nginx (reverse proxy, SSL-терминация, статика) → Spring Boot (API, бизнес-логика) → PostgreSQL
- Заголовки
X-Forwarded-For,X-Real-IP,X-Forwarded-Proto— передают реальный IP и протокол клиента через прокси - В Spring Boot:
server.forward-headers-strategy=nativeилиserver.forward-headers-strategy=frameworkдля корректной обработки этих заголовков - В Docker/Kubernetes Ingress Controller (Nginx Ingress, Traefik) выполняет роль reverse proxy
- Envoy (используется в Istio service mesh) — современный reverse proxy для микросервисной архитектуры
Вывод
Forward Proxy защищает и скрывает клиента, Reverse Proxy защищает и масштабирует серверы. В современной инфраструктуре reverse proxy — обязательный компонент production-окружения, обеспечивающий балансировку, SSL-терминацию, кэширование и защиту.
На собеседовании: чётко разделяйте forward proxy (со стороны клиента) и reverse proxy (со стороны сервера). Часто спрашивают практически: как настроить Nginx перед Spring Boot, зачем нужен
X-Forwarded-For, как работает SSL-терминация. Бонус — упомянуть Envoy/Istio в контексте service mesh.