Что такое обратный прокси?
На вашем домашнем сервере живут Home Assistant, Grafana, Zigbee2MQTT, Frigate, AdGuard Home, может быть Jellyfin и Portainer. Каждый на своём порту: 8123, 3000, 8080, 5000, 3003, 8096, 9000. Вы помните их все? А ваши домочадцы? А когда нужно открыть доступ извне — будете пробрасывать семь портов через роутер?
Обратный прокси решает эту проблему. Один адрес, одно HTTPS-соединение, красивые имена вместо номеров портов.
Прокси (proxy) — это посредник. Обратный прокси (reverse proxy) — это посредник, который стоит перед вашими сервисами и принимает входящие запросы от клиентов. Клиент обращается к прокси, прокси определяет, какому внутреннему сервису предназначен запрос, перенаправляет его туда, получает ответ и отдаёт клиенту.
Клиент думает, что общается с одним сервером. На самом деле за этим «сервером» — десяток разных приложений, каждое на своём порту или даже на отдельной машине. Обратный прокси скрывает эту внутреннюю кухню.
Аналогия: рецепция в гостинице. Вы не ходите напрямую к горничной, повару и электрику. Вы звоните на рецепцию, говорите, что нужно, — и рецепция перенаправляет запрос нужному человеку. Вы даже не знаете, на каком этаже находится кухня.
Вместо http://192.168.1.10:8123 — https://ha.myhouse.local. Вместо http://192.168.1.10:3000 — https://grafana.myhouse.local. Вместо http://192.168.1.10:5000 — https://frigate.myhouse.local.
Обратный прокси слушает запросы на стандартных портах (80 для HTTP, 443 для HTTPS) и по имени хоста (домену или поддомену) определяет, куда перенаправить запрос. Пришёл запрос на ha.myhouse.local — перенаправить на localhost:8123. На grafana.myhouse.local — на localhost:3000. И так далее.
Это удобно не только для красоты. Браузер запоминает закладки по имени. Автодополнение в адресной строке работает. Приложения на телефоне настраиваются один раз — и не ломаются при смене порта.
Большинство домашних сервисов по умолчанию работают по HTTP — без шифрования. В локальной сети это допустимо, но если вы открываете доступ извне (через VPN или проброс портов) — HTTP означает, что логины, пароли и данные летят открытым текстом.
Обратный прокси терминирует TLS: клиент подключается по HTTPS к прокси, прокси расшифровывает трафик и передаёт его внутреннему сервису по обычному HTTP. Один TLS-сертификат на прокси — и все сервисы за ним автоматически доступны по HTTPS. Не нужно настраивать сертификат на каждом сервисе отдельно.
Для локальной сети можно использовать самоподписанный сертификат или сертификат от внутреннего CA. Для внешнего доступа — бесплатный сертификат Let's Encrypt, который прокси обновляет автоматически.
Вместо проброса семи портов через роутер — пробрасываете один (443). Обратный прокси принимает все запросы и распределяет их. Снаружи виден только один порт. Меньше поверхность атаки. Проще управлять.
Или — что ещё правильнее — не пробрасываете порты вообще, а подключаетесь к домашней сети через VPN, и обратный прокси работает только внутри, для удобства.
Некоторые сервисы не имеют собственной системы аутентификации или имеют примитивную. Обратный прокси может добавить слой аутентификации перед такими сервисами: HTTP Basic Auth, SSO (Single Sign-On) через Authelia или Authentik, двухфакторная аутентификация. Не авторизовался — до сервиса не добрался.
Обратный прокси может ограничивать доступ по IP-адресу (например, только из локальной сети или только из VPN-подсети), блокировать подозрительные запросы, ограничивать частоту обращений (rate limiting), добавлять заголовки безопасности (HSTS, X-Frame-Options, Content-Security-Policy).
Пожалуй, самый популярный обратный прокси в сообществе домашних серверов и Home Assistant. Веб-интерфейс, в котором всё настраивается мышкой: добавили домен, указали внутренний адрес и порт сервиса, включили SSL — готово.
Под капотом — Nginx, но вам не нужно редактировать конфигурационные файлы вручную. Let's Encrypt сертификаты — через встроенный интерфейс, автообновление включено. Поддержка WebSocket (нужен для Home Assistant), потоковых соединений, кастомных заголовков.
Устанавливается в Docker за минуту. Для большинства домашних инсталляций — оптимальный выбор: просто, наглядно, работает.
Обратный прокси, спроектированный для Docker-окружений. Traefik автоматически обнаруживает новые контейнеры и создаёт для них правила маршрутизации — через лейблы (labels) в docker-compose.
Добавили контейнер с лейблом traefik.http.routers.grafana.rule=Host('grafana.myhouse.local') — Traefik автоматически создал маршрут. Удалили контейнер — маршрут исчез. Не нужно заходить в веб-интерфейс и руками добавлять записи. Для тех, кто активно использует Docker Compose — очень удобно.
Поддерживает Let's Encrypt, middleware (аутентификация, редиректы, rate limiting), мониторинг через Prometheus. Настройка — через YAML-файлы или лейблы Docker. Веб-интерфейс — есть, но скорее для мониторинга, чем для конфигурации.
Порог входа выше, чем у NPM. Но для Docker-ориентированных инсталляций — мощнее и автоматизированнее.
Минималистичный обратный прокси с автоматическим HTTPS. Caddy получает сертификат Let's Encrypt автоматически при первом запросе, без какой-либо настройки со стороны пользователя. Просто указал доменное имя — Caddy сам получил сертификат и включил HTTPS.
Конфигурация — в файле Caddyfile. Минимальный пример:
ha.myhouse.example {
reverse_proxy localhost:8123
}
grafana.myhouse.example {
reverse_proxy localhost:3000
}
Всё. Два сервиса за обратным прокси с HTTPS. Конфигурация на четыре строки.
Caddy — хороший выбор для тех, кто ценит простоту и не хочет разбираться с Nginx или Traefik. Веб-интерфейса нет (настройка — только файл), но конфигурация настолько проста, что он и не нужен.
Без Proxy Manager — просто Nginx с конфигурационными файлами. Максимальный контроль, минимальная абстракция. Для тех, кто знает Nginx и предпочитает текстовые конфиги графическим интерфейсам.
Используется как обратный прокси миллионами серверов по всему миру. Документация — исчерпывающая. Но для домашнего использования — NPM или Caddy удобнее.
Высокопроизводительный балансировщик нагрузки и обратный прокси. Используется на крупных сайтах для распределения трафика между серверами. Для домашнего умного дома — избыточен. Упоминается для полноты картины.
Обратный прокси маршрутизирует запросы по имени хоста (домену). Чтобы ha.myhouse.local попадал на прокси, нужно, чтобы DNS-сервер знал этот адрес.
Если обратный прокси работает только внутри домашней сети — достаточно локального DNS.
Через роутер. В OpenWrt, MikroTik, pfSense можно добавить локальные DNS-записи: ha.myhouse.local → 192.168.1.10, grafana.myhouse.local → 192.168.1.10. Все указывают на IP-адрес прокси.
Через AdGuard Home / Pi-hole. Если у вас работает DNS-фильтрация — локальные DNS-записи добавляются в настройках AdGuard Home (DNS rewrites) или Pi-hole (Local DNS Records).
Через файл hosts. На каждом компьютере. Работает, но не масштабируется — менять файл на каждом устройстве при добавлении нового сервиса неудобно.
Домен .local зарезервирован для mDNS и может конфликтовать с Avahi/Bonjour. Безопаснее использовать собственный домен (например, home.example.com) или .lan, .home (хотя формально эти зоны тоже не стандартизированы для частного использования).
Если нужен доступ к Home Assistant извне (без VPN), понадобится реальное доменное имя и реальный IP-адрес (статический или с DDNS).
Покупаете домен (или используете бесплатный DDNS-сервис: DuckDNS, No-IP, Dynu). Направляете *.myhouse.example.com на ваш внешний IP. Пробрасываете порт 443 на внутренний IP обратного прокси. Let's Encrypt выдаёт сертификат — и вы получаете https://ha.myhouse.example.com с полноценным HTTPS, доступным из любой точки мира.
Но помните: открытый порт 443 — это точка входа для всех, включая злоумышленников. Двухфакторная аутентификация, fail2ban, Authelia/Authentik, ограничение по GeoIP — меры, которые стоит рассмотреть. А ещё лучше — VPN вместо проброса портов. WireGuard на роутере, подключение к домашней сети, а обратный прокси работает только внутри.
Home Assistant использует WebSocket для real-time обновлений интерфейса. Обратный прокси должен поддерживать проксирование WebSocket-соединений — иначе интерфейс HA откроется, но не будет обновляться в реальном времени.
Nginx Proxy Manager, Traefik, Caddy — все поддерживают WebSocket. В NPM — достаточно включить галочку «WebSockets Support» при создании записи. В Caddy — работает автоматически. В чистом Nginx — нужно добавить заголовки Upgrade и Connection в конфигурацию.
Home Assistant также требует указать trusted_proxies в configuration.yaml — список IP-адресов, с которых принимаются проксированные запросы. Без этого HA будет видеть все запросы как приходящие от IP прокси, а не от реальных клиентов. Подробности — в документации Home Assistant.
Grafana. Работает за прокси без проблем. Нужно указать root_url в конфигурации Grafana, соответствующий внешнему URL.
Frigate. Веб-интерфейс работает за прокси. Видеопотоки (RTSP) — нет, RTSP не проксируется через HTTP reverse proxy. Но для просмотра через браузер — хватает HTTP/WebSocket.
Zigbee2MQTT. Веб-интерфейс — обычный HTTP, работает за прокси без проблем. Включите WebSocket, если используется.
AdGuard Home. Работает за прокси. Но учтите: DNS-трафик идёт по UDP-порту 53, а не по HTTP. Обратный прокси проксирует только HTTP/HTTPS. DNS-запросы — мимо него.
Portainer. Работает за прокси. WebSocket нужен для терминала контейнеров.
Обратный прокси — мощный инструмент, но он не делает небезопасный сервис безопасным. Если Frigate или Zigbee2MQTT не имеют аутентификации, а вы вывесили их на публичный домен через прокси — любой в интернете получит доступ к вашим камерам и Zigbee-сети.
Правила: внутренние сервисы без аутентификации — только через VPN или только из локальной сети. Если нужен внешний доступ — обязательна аутентификация (встроенная в сервис или через прокси). Home Assistant имеет аутентификацию — его можно вывешивать (с осторожностью). Grafana — тоже. Zigbee2MQTT или Frigate без пароля — нельзя.
Обратный прокси — это порядок. Вместо россыпи IP-адресов и портов — понятные имена. Вместо HTTP — HTTPS. Вместо семи пробросов портов — один. Вместо настройки TLS на каждом сервисе — один сертификат на прокси.
Для домашнего умного дома Nginx Proxy Manager — оптимальный старт. Установка — пять минут в Docker. Настройка сервиса — три клика. Let's Encrypt — галочка в интерфейсе. После первой настройки вы будете добавлять каждый новый сервис за минуту, и каждый будет доступен по красивому адресу с зелёным замочком в браузере.
Не обязательная вещь. Но из тех, которые, однажды настроив, уже не захочется убирать.
Статья подготовлена на основе документации проектов Nginx, Traefik, Caddy, Nginx Proxy Manager и материалов сообщества Home Assistant. Все упомянутые торговые марки принадлежат их правообладателям. Материал носит информационный характер и не является рекламой.