Reverse proxy & TLS termination
Тема дорожной карты · DevOps Engineer
Обратный прокси — это сервер, который принимает входящие запросы и пересылает их на один или несколько back-end серверов. С точки зрения клиента общается он именно с прокси, реальный backend скрыт. TLS-терминация — частный случай: HTTPS-соединение от клиента разрывается на прокси, дальше внутрь идёт уже расшифрованный HTTP (или новый HTTPS, если требуется end-to-end шифрование). Это даёт централизованное управление сертификатами, разгрузку CPU с backend'а и единую точку для security-политик.
Как это работает
Прокси слушает порт 443, держит привязанный TLS-сертификат и приватный ключ. На входящий запрос: ServerHello, обмен ключами по ECDHE, ALPN-negotiation (HTTP/1.1 vs HTTP/2 vs HTTP/3). После хэндшейка декодированный HTTP передаётся через proxy_pass http://upstream к backend'у. Прокси добавляет служебные заголовки: X-Forwarded-For (IP клиента), X-Forwarded-Proto (https), X-Real-IP. Backend должен доверять им только если знает, что запрос пришёл именно через прокси (по сети или по shared secret). Сертификаты обычно выпускает Let's Encrypt через ACME-протокол (certbot, acme.sh) или Cloudflare с проксированным режимом.
Когда применять
Reverse proxy с TLS-терминацией — обязательная часть любого production-сетапа. Используйте его всегда, когда: сервис должен быть доступен по HTTPS (то есть всегда в 2026); есть больше одного backend-инстанса и нужно балансировать; нужно скрыть backend от прямого доступа из интернета (DDoS-mitigation, security-by-obscurity); нужно централизовать управление сертификатами (один renewal на edge вместо десятка на инстансах); нужно делать canary-деплой через переключение upstream'ов. Для Kubernetes — ту же функцию выполняет Ingress controller.
Типичные ошибки
Грабли: end-to-end TLS только на бумаге — прокси терминирует TLS, а до backend идёт plain HTTP по публичной сети (используйте приватную сеть или mTLS); забытый proxy_set_header Host $host — backend получает Host прокси и роутится не туда; неправильная обработка X-Forwarded-For — берёте первый IP вместо последнего доверенного (open redirect и spoofing); просроченный сертификат — настройте мониторинг с тревогой за 14 дней до expiry; OCSP-stapling отключён — клиенты делают лишний lookup, +100мс к handshake; HSTS не выставлен — клиент может откатиться на HTTP при downgrade-атаке.