Что такое reverse proxy?
Статья также доступна на украинском (перейти к просмотру).
Reverse proxy (от англ. reverse – обратный) – это сервер, стоящий между пользователями Интернета и сайтом и принимающий все запросы на себя, прежде чем передать их на реальный сервер с данными.
Когда вы заходите на сайт, ваш запрос сначала попадает не напрямую на веб-сервер сайта, а к посреднику – реверс-прокси. Он решает, куда и как передать этот запрос дальше, получает ответ приложений и возвращает его вам. При этом вы даже не догадываетесь, что между вами и сайтом есть еще один дополнительный слой.
Аналогией к тому, что такое reverse proxy - работа рецепции в офисе крупной компании. Вместо того чтобы непосредственно посещать отдел, клиенты обращаются к администратору, который направляет их в нужном направлении.
Как работает Reverse Proxy?
Представим, что пользователь вводит в браузере адрес example.com. Запрос поступает на сервер, работающий как Reverse Proxy. Он принимает запрос от пользователя и передает его внутреннему веб-серверу или приложению, который должен его обработать.
Схематически это выглядит так:

Пользователь → Reverse Proxy → веб-сервер или приложение
Например, Reverse Proxy может передавать все запросы одному веб-серверу. А в более сложной системе он может направлять разные запросы в разные сервисы:
-
example.com → веб-приложение сайта;
-
api.example.com→ API-сервер;
-
panel.example.com → панель управления.
Для пользователя внутренняя структура остается незаметной – он обращается только к обычному адресу сайта.
После обработки запроса веб-сервер или приложение возвращает ответ Reverse Proxy, а тот передает его пользователю.
Зачем нужен reverse proxy?
Для клиента все выглядит так, словно он общается с сайтом напрямую. Но за другим доменом может скрываться несколько разных серверов, и это главное преимущество такого подхода: настоящих «рабочих лошадок» не видно на публике / снаружи. Какую роль это играет в архитектуре?

Скрытие внутренних серверов
Когда пользователь обращается к сайту, он взаимодействует исключительно с обратным прокси. Так защищается все:
-
реальные адреса;
-
количество внутренних серверов и их структура;
-
данные о технологиях, на которых построены веб-серверы.
Это повышает уровень безопасности – злоумышленник, пытающийся атаковать сайт, видит перед собой только прокси, а не настоящую инфраструктуру.
Маршрутизация запросов
Является одной из главных функций обратного прокси-сервера. Администрирование и перенаправление позволяют разработчикам независимо развивать сайт и API. С маршрутизацией запросов можно легко внедрять новые функции и не беспокоиться о том, что изменения в одном приложении повлияют на работу другого.
Так, каждая команда обновляет свою часть системы в собственном темпе, не дожидаясь согласования с остальными. Для клиентов изменения не будут заметны, ведь с точки зрения дизайна все остается единым доменом.
HTTPS
Сервер-посредник часто берет на себя обработку HTTPS-соединений, принимая зашифрованный трафик от пользователя и работая с SSL/TLS-сертификатом. Внутреннее приложение при этом может вообще не заниматься шифрованием и работать по более простому протоколу – эту часть работы берет на себя обратный прокси.
Кэширование
Если определенный контент запрашивают очень часто, обратный прокси-сервер может хранить его копию и отдавать пользователям напрямую, без обращения к основному приложению заново. Кэширование снижает нагрузку на внутренние серверы и ускоряет ответ для пользователя, ведь данные уже сохранены в кэше и не нуждаются в повторной генерации.
Балансировка нагрузки (load balancing)
Это особый случай маршрутизации запросов, когда реверс-прокси должен распределять их так, чтобы ни один веб-сервер не перегружался, пока другие простаивают. Балансировка нагрузки не является обязательной частью логики технологии, а настраивается при необходимости.
Простой практический пример
На практике часто случается такая ситуация – на сервере запущено три разных веб-приложения, каждое из которых работает на собственном порту:
-
PHP-сайт – 8000;
-
API – 8080;
-
панель управления – 3000.
Без обратного прокси пришлось бы каждый раз указывать не только домен, но и конкретный порт, например, example.com:8000 для сайта. Это неудобно, потому что заставляет пользователя держать в голове ненужные ему технические детали, да еще и показывает часть инфраструктуры посторонним. Наличие дополнительного слоя полностью решает эту проблему.
Чем reverse proxy отличается от обычного proxy?
Несмотря на сходство понятий, прокси-сервер и обратный прокси выполняют разные функции. Обычный прокси-сервер становится посредником между пользователем и Интернетом, «скрывая» реальный адрес клиента за своим.

А вот reverse proxy работает наоборот – на стороне сервера. Он стоит перед целой группой серверов и принимает все входящие запросы от пользователей, прежде чем передать их дальше. Выходит, что он маскирует серверы уже от клиента.
Какие приложения могут работать как reverse proxy?
Реализовать функции обратного прокси можно с помощью различных инструментов – от классических веб-серверов до специализированных решениям. Самые распространенные из них:
-
NGINX – дает высокую производительность и небольшое потребление ресурсов даже под большой нагрузкой;
-
Apache – менее производительный, чем NGINX при работе с большим количеством одновременных соединений, но популярен благодаря гибкости настроек и большому количеству готовых решений;

-
HAProxy – узкоспециализированный инструмент, созданный специально для балансировки нагрузки и проксиирование трафика;
-
Caddy – имеет простые настройки и автоматическое получение и обновление SSL/TLS-сертификатов;
-
Traefik – создан с расчетом на современные динамические инфраструктуры, в том числе контейнеры и Docker/Kubernetes.
Однако функции перенаправления запросов пользователей могут брать на себя и другие веб-приложения, например, CDN (Content Delivery Network) – сеть доставки контента или WAF (Web Application Firewall) – фаервол.
Reverse proxy и load balancer – это одно и то же?
Обратный прокси-сервер и балансировщик нагрузки часто путают, поэтому следует понять, что первое понятие гораздо шире. Обратный proxy может просто принимать все запросы и передавать их одному-единственному серверу, не занимаясь никаким распределением.

А вот когда он распределяет запросы между несколькими серверами, он фактически выполняет еще и функцию балансировщика нагрузки (load balancer). То есть, балансировщик нагрузки – это одна из ролей, которую может исполнять сервер-посредник.
Заключение
Обратный прокси выступает своеобразным «щитом» между пользователями и реальными серверами, беря на себя весь входящий трафик и решая, куда и как его направить. Благодаря этому удается:
-
скрыть внутреннюю структуру системы от посторонних;
-
гибко маршрутизировать запросы между разными приложениями;
-
снять с внутренних серверов нагрузку, перебрав на себя обработку HTTPS и кешировние.
При необходимости он может распределить запросы между несколькими серверами, взяв на себя роль балансировщика нагрузки.
Обычно обратный прокси не является одним конкретным инструментом, а скорее принципом организации трафика, который можно реализовать с помощью различных программ: от обратного прокси NGINX до специализированных решениям типа HAProxy.


