Компьютерные сети
Reverse Proxy
Ваш сервер обрабатывает 100 запросов в секунду. Поставили Nginx перед ним - теперь 10000 RPS благодаря кэшированию. Reverse proxy - невидимый щит между интернетом и вашими серверами.
- **Cloudflare** - крупнейший reverse proxy в мире, защищает миллионы сайтов от DDoS
- **Netflix** - использует собственный Open Connect с кэширующими proxy по всему миру
- **GitHub** - HAProxy балансирует миллионы git-операций в секунду
Предварительные знания
Что такое 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?