Внешний reverse proxy
Если в организации уже есть балансировщик или reverse proxy, который держит TLS и публикует внутренние сервисы, nginx из состава дистрибутива не нужен. Инстанс ставится в режиме без nginx, панель и API публикуются портами на хост, а всё остальное делает ваш прокси.
Установка
./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 перезапустите стек:
docker compose up -d
Заголовки прокси
Прокси должен передавать Host и X-Forwarded-Proto: https, иначе панель будет строить ссылки по HTTP.
Проверка
./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. - RADIUS через HTTP-прокси не проходит: UDP-порты публикуются на хост напрямую и настраиваются в RADIUS-клиентах по адресу сервера.