Компьютерные сети

Reverse Proxy

Ваш сервер обрабатывает 100 запросов в секунду. Поставили Nginx перед ним - теперь 10000 RPS благодаря кэшированию. Reverse proxy - невидимый щит между интернетом и вашими серверами.

  • **Cloudflare** - крупнейший reverse proxy в мире, защищает миллионы сайтов от DDoS
  • **Netflix** - использует собственный Open Connect с кэширующими proxy по всему миру
  • **GitHub** - HAProxy балансирует миллионы git-операций в секунду

Предварительные знания

  • L4 vs L7 Balancing

Что такое Reverse Proxy

**Forward Proxy** сидит перед клиентами: ваш браузер → proxy → интернет. **Reverse Proxy** сидит перед серверами: интернет → proxy → ваши серверы. Клиенты общаются с proxy, не зная о реальных серверах за ним.

**Reverse Proxy** - единая точка входа для клиентов. Он скрывает топологию backend'а, принимает на себя TLS, добавляет безопасность, кэширование, сжатие.

Функции reverse proxy: **SSL termination** (HTTPS → HTTP), **load balancing** (распределение нагрузки), **caching** (кэширование ответов), **compression** (gzip/brotli), **security** (WAF, rate limiting, IP filtering).

Чем reverse proxy отличается от forward proxy?

Nginx: веб-сервер и reverse proxy

**Nginx** (произносится "engine-x") - высокопроизводительный веб-сервер и reverse proxy. Создан Игорем Сысоевым в 2004 году для решения проблемы C10K (10000 одновременных соединений). Использует асинхронную event-driven архитектуру.

**Nginx vs Apache**: Apache создаёт поток на каждое соединение (затратно). Nginx использует event loop - один worker обрабатывает тысячи соединений. Nginx потребляет меньше памяти и CPU.

Nginx конфигурируется через текстовые файлы. Основные директивы: `server` (виртуальный хост), `location` (маршрутизация по URL), `upstream` (пул backend-серверов). Конфигурация иерархическая: http → server → location.

Почему Nginx использует меньше памяти, чем Apache при высокой нагрузке?

HAProxy: профессиональный балансировщик

**HAProxy** (High Availability Proxy) - специализированный load balancer и reverse proxy. В отличие от Nginx, HAProxy не отдаёт статику - он создан исключительно для проксирования и балансировки. Используется в высоконагруженных системах: GitHub, Stack Overflow, Twitter.

**HAProxy stats** - встроенная страница статистики с метриками: RPS, latency, health status серверов, активные соединения. Отличный инструмент для мониторинга.

HAProxy конфигурируется через `frontend` (входящие соединения), `backend` (пулы серверов), `listen` (комбинация frontend+backend). ACL (Access Control Lists) позволяют сложную маршрутизацию.

Когда HAProxy лучше Nginx для балансировки?

Кэширующий Proxy: Varnish и Nginx Cache

**Caching Proxy** сохраняет ответы backend'а и отдаёт их повторным запросам без обращения к серверу. Это снижает нагрузку на backend и ускоряет ответы. **Varnish** - специализированный HTTP-акселератор, **Nginx** может кэшировать через модуль proxy_cache.

**Cache-Control** - HTTP-заголовок, управляющий кэшированием. `max-age=3600` - кэшировать 1 час. `private` - не кэшировать на proxy (только в браузере). `no-store` - не кэшировать вообще.

**Varnish** хранит кэш в RAM и работает невероятно быстро - миллионы RPS с одного сервера. Использует язык VCL (Varnish Configuration Language) для сложной логики кэширования.

Reverse proxy и Load Balancer - это одно и то же

Reverse proxy - более широкое понятие. Load balancing - одна из его функций

Reverse proxy включает: SSL termination, caching, compression, WAF, routing, и load balancing. HAProxy - LB, но также reverse proxy. Nginx - веб-сервер, reverse proxy и LB. Varnish - caching proxy. Все они reverse proxy, но с разной специализацией.

Почему нельзя кэшировать ответы с Set-Cookie на reverse proxy?

Итоги

  • **Reverse Proxy** - посредник перед серверами: SSL, кэш, балансировка, безопасность в одном месте
  • **Nginx** - event-driven архитектура, веб-сервер + proxy, простая конфигурация для большинства задач
  • **HAProxy** - специализированный LB, развитые ACL, детальная статистика. **Varnish** - HTTP-акселератор с RAM-кэшем

Связанные темы

Reverse proxy объединяет знания о балансировке, кэшировании и безопасности:

  • L4 vs L7 балансировка — Nginx/HAProxy работают на обоих уровнях
  • CDN — CDN - это распределённая сеть reverse proxy с кэшированием

Вопросы для размышления

  • Почему Nginx часто ставят перед Node.js/Python приложениями, даже если они сами могут обрабатывать HTTP?
  • Какие данные безопасно кэшировать на reverse proxy, а какие - нет?
  • Когда стоит использовать Varnish вместо Nginx proxy_cache?

Связанные уроки

  • sd-06-load-balancer
Reverse Proxy

0

1

Войти