Reverse proxy: зачем ставить промежуточный сервер перед приложением
Host, TLS termination, upstream, X-Forwarded-For и отличие reverse proxy от forward proxy.
Reverse proxy принимает соединение от клиента и сам обращается к внутреннему приложению. Для пользователя именно reverse proxy выглядит конечным сервером, хотя реальная обработка запроса выполняется одним или несколькими backend-сервисами.
Зачем нужен промежуточный слой
На reverse proxy удобно завершать TLS, применять единые HTTP-заголовки, ограничивать доступ, балансировать запросы и скрывать внутреннюю топологию приложений. Backend при этом может слушать отдельный адрес или внутреннюю сеть.
Host и виртуальные хосты
HTTP-заголовок Host сообщает серверу, к какому имени обращался клиент. Один reverse proxy может обслуживать десятки сайтов на одном IP, выбирая конфигурацию по hostname.
При проксировании важно понимать, какой Host ожидает backend. Иногда нужно передавать исходное имя клиента, а иногда — hostname самого upstream.
HTTPS до upstream и SNI
Если reverse proxy подключается к backend по HTTPS, появляется ещё один уровень выбора имени — TLS SNI. Сервер может иметь несколько сертификатов на одном IP, поэтому имя, переданное на этапе TLS handshake, должно соответствовать ожидаемому сертификату.
Адрес клиента
Backend физически видит соединение от reverse proxy, поэтому исходный IP клиента часто передаётся через X-Forwarded-For или Forwarded. Приложение должно доверять таким заголовкам только от известных прокси.
Практический вывод
Reverse proxy — не только способ «перебросить порт». Он становится отдельной точкой управления HTTP-трафиком. Поэтому важно учитывать TLS, Host/SNI, WebSocket, таймауты и поведение редиректов приложения.