Прокси и CDN

Разбираемся, какие посредники стоят между браузером и сервером и зачем они нужны.

Прокси — посредник, через который проходит сетевой запрос. CDN — распределённая сеть серверов, отдающих контент с ближайшей к пользователю точки.

Прямой прокси (forward proxy)

Стоит на стороне клиента и отправляет запросы в интернет от его имени. Сервер видит прокси, а не реального пользователя.

  • Зачем: кэширование, фильтрация контента (корпоративные сети), анонимность, обход ограничений.
  • VPN — близкий родственник: тоже пропускает ваш трафик через промежуточный узел.

Обратный прокси (reverse proxy)

Стоит на стороне сервера и принимает запросы вместо него. Клиент думает, что говорит с сервером, а на деле — с прокси, который перенаправляет запрос внутрь. Это рабочая лошадка современного бэкенда (nginx, Caddy, Traefik).

Задача обратного проксиПольза
Балансировка нагрузкираспределяет запросы между несколькими серверами
Терминация TLSрасшифровывает HTTPS, разгружая бэкенд
Кэшированиеотдаёт частые ответы, не дёргая приложение
Защитаскрывает реальные серверы, фильтрует атаки
Клиент --> [ Обратный прокси (nginx) ] --> Сервер 1
                                      --> Сервер 2   (балансировка)
                                      --> Сервер 3

Балансировщик нагрузки

Частный случай обратного прокси — балансировщик (load balancer). Когда один сервер не справляется, ставят несколько и распределяют запросы между ними (по очереди, по нагрузке, по «прилипанию» сессии). Для клиента это один адрес, за которым прячется ферма серверов.

CDN: контент поближе к пользователю

CDN (Content Delivery Network) — сеть серверов по всему миру, кэширующих статику (картинки, CSS, JS, видео). Когда пользователь из Токио запрашивает картинку, её отдаёт ближайший узел CDN в Японии, а не сервер в США. Зачем это нужно:

  • Скорость: меньше расстояние — меньше задержка (RTT).
  • Разгрузка: основной сервер не отдаёт миллионы запросов на статику.
  • Устойчивость: нагрузка размазана, проще пережить всплески и DDoS.
Пользователь (Токио)  -->  CDN-узел в Токио  (быстро, кэш)
                             |
                             v (только если нет в кэше)
                          Исходный сервер (origin) в США

Зачем это веб-разработчику

Почти любой продакшен стоит за обратным прокси и CDN. Понимание этого объясняет: почему в логах приложения чужой IP (его подменил прокси — реальный приходит в заголовке X-Forwarded-For), почему статику кладут на CDN, почему «сервер видит HTTP, хотя снаружи HTTPS» (TLS терминируется на прокси). Это базовая архитектура веба.

Итог

  • Прямой прокси — посредник на стороне клиента; обратный — на стороне сервера.
  • Обратный прокси балансирует нагрузку, терминирует TLS, кэширует, защищает.
  • CDN отдаёт статику с ближайшего к пользователю узла — быстрее и устойчивее.
  • Реальный IP клиента за прокси приходит в заголовке X-Forwarded-For.
Проверьте себя
1. Чем обратный прокси отличается от прямого?
AНичем
BПрямой прокси работает на стороне клиента, обратный — на стороне сервера, принимая запросы вместо него
CОбратный прокси медленнее
DПрямой прокси шифрует, обратный — нет
2. Зачем нужен CDN?
AЧтобы шифровать трафик
BЧтобы отдавать контент с ближайшего к пользователю сервера — быстрее и с разгрузкой origin
CЧтобы назначать IP-адреса
DЧтобы блокировать CORS
3. Где обычно появляется реальный IP клиента, если запрос прошёл через обратный прокси?
AОн теряется навсегда
BВ заголовке X-Forwarded-For
CВ URL запроса
DВ DNS-записи
Поддержать проект