# Внешний reverse proxy Если в организации уже есть балансировщик или reverse proxy, который держит TLS и публикует внутренние сервисы, nginx из состава дистрибутива не нужен. Инстанс ставится в режиме без nginx, панель и API публикуются портами на хост, а всё остальное делает ваш прокси. ## Установка ```bash ./install.sh --non-interactive \ --tls-mode none \ --host 10.0.0.5 \ --admin-panel-http-port 8081 \ --backend-http-port 8080 \ --generate-admin-password ``` В интерактивном режиме тот же результат даёт пункт **none** на вопросе о режиме публикации. В этом режиме установщик спрашивает один адрес сервера и два порта: - **`--admin-panel-http-port`** — порт панели на хосте, по умолчанию 8081. - **`--backend-http-port`** — порт API на хосте, по умолчанию 8080. Порты должны отличаться. Занятые установщик определяет заранее и предлагает свободные рядом. Публикацию включает оверлей `docker-compose.publish-backend.yml`, установщик подключает его сам. ## Что настроить на прокси | Что | Куда проксировать | | --- | --- | | Панель администратора | `http://<хост инстанса>:8081` | | API backend | `http://<хост инстанса>:8080` — если к API обращаются адаптеры или веб-приложения снаружи | TLS-сертификаты, редирект с HTTP и правила доступа остаются на стороне прокси. Инстанс отдаёт обычный HTTP на локальные порты — закрывайте их от внешней сети межсетевым экраном. ## Что настроить в `.env` Панель должна знать свой публичный адрес — иначе Django отклонит вход с ошибкой CSRF. | Переменная | Значение | | --- | --- | | `LOCAL_PANEL_URL` | Публичный HTTPS-адрес панели, например `https://2fa.example.com` | | `CSRF_TRUSTED_ORIGINS` | Тот же адрес с протоколом | | `ALLOWED_HOSTS` | Имя, под которым панель открывается через прокси | | `LOCAL_URL` | Оставьте `http://local-backend:8080` — панель обращается к backend по docker-сети, а не через прокси | После правки `.env` перезапустите стек: ```bash docker compose up -d ``` !!! note "Заголовки прокси" Прокси должен передавать `Host` и `X-Forwarded-Proto: https`, иначе панель будет строить ссылки по HTTP. ## Проверка ```bash ./doctor.sh ``` Для этой схемы важны три строки отчёта: - согласованность `LOCAL_PANEL_URL` и `CSRF_TRUSTED_ORIGINS` — они должны совпадать; - `Хост → backend :8080/health доступен` — публикация API на хост работает; - связь панели с backend по внутренней сети. Сертификаты в отчёте не проверяются: в режиме без nginx они на стороне прокси. Затем откройте панель по публичному адресу и войдите — если вход обрывается ошибкой CSRF, проверьте `CSRF_TRUSTED_ORIGINS` и заголовки прокси. ## Ограничения - При нескольких репликах `local-backend` оверлей `docker-compose.publish-backend.yml` не используется: фиксированный порт хоста занять дважды нельзя. См. [Несколько реплик local-backend](replicas.md). - RADIUS через HTTP-прокси не проходит: UDP-порты публикуются на хост напрямую и настраиваются в RADIUS-клиентах по адресу сервера. ## Смотрите также - [Установка локального инстанса](../local-instance.md) - [Отказоустойчивость на двух нодах](ha.md) - [Особые сценарии развёртывания](index.md)