Gymterview
middle

Что такое 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.