Версия архитектуры хост-сервера DENKART: единая точка входа nginx-reverse-proxy

Версия архитектуры: 1.0
Дата: 2026-02-08
Статус: В эксплуатации


1. Назначение

При обращении к приложениям DENKART через доменное имя, направленное внешним DNS-сервером на IP-адрес сервера DENKART, обеспечить маршрутизацию трафика на соответствующие доменам приложения.


2. Условия входа

  • Пользователь обращается по доменному имени (например https://denkart.cdto.group/, https://docs.cdto.life/, https://school.cdto.life/).
  • Внешний DNS разрешает эти домены в IP-адрес сервера DENKART (внешний IP роутера, за которым стоит хост, например 89.179.242.240; на хост трафик попадает по пробросу портов на 192.168.1.112).
  • Входящий трафик приходит на хост по портам 80 (HTTP) и 443 (HTTPS).

3. Компоненты и поток трафика

┌─────────────────────────────────────────────────────────────────────────────┐
│  КЛИЕНТ (браузер / приложение)                                              │
│  Запрос: https://denkart.cdto.group/  или  https://docs.cdto.life/  и т.д.   │
└─────────────────────────────────────────────────────────────────────────────┘
                                        │
                                        ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│  ВНЕШНИЙ DNS                                                                 │
│  denkart.cdto.group, docs.cdto.life, docs.cdto.group, school.cdto.life        │
│  → A-запись на IP сервера DENKART (89.179.242.240 / роутер → 192.168.1.112)  │
└─────────────────────────────────────────────────────────────────────────────┘
                                        │
                                        ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│  ХОСТ DENKART (192.168.1.112)                                                │
│  Порты 80, 443 принимают трафик (проброс с роутера на хост)                  │
│  iptables: PREROUTING DNAT 80/443 → 10.218.14.200:80, :443                    │
└─────────────────────────────────────────────────────────────────────────────┘
                                        │
                                        ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│  ЕДИНАЯ ТОЧКА ВХОДА: nginx-reverse-proxy (LXD, 10.218.14.200)               │
│  Слушает :80, :443, :8443. SSL-терминация.                                   │
│  Маршрутизация по заголовку Host (server_name):                               │
│    • denkart.cdto.group, denkart.cdto.life  → proxy_pass Cockpit              │
│    • docs.cdto.group, docs.cdto.life        → proxy_pass docs-denkart         │
│    • school.cdto.life                      → proxy_pass BBB-CONT22-1        │
└─────────────────────────────────────────────────────────────────────────────┘
                    │                       │                       │
                    ▼                       ▼                       ▼
┌──────────────────────┐  ┌──────────────────────┐  ┌──────────────────────┐
│ Cockpit              │  │ docs-denkart         │  │ BBB-CONT22-1          │
│ 10.218.14.1:9090     │  │ 10.218.14.102:80     │  │ 10.218.14.37:80       │
│ (хост)               │  │ (LXD)                │  │ (LXD)                 │
│ Управление сервером  │  │ Документация          │  │ BigBlueButton         │
└──────────────────────┘  └──────────────────────┘  └──────────────────────┘

4. Таблица: домен → приложение

Домен (Host) Приложение Бэкенд (куда проксирует nginx-reverse-proxy) Порт бэкенда
denkart.cdto.group Cockpit (управление) 10.218.14.1 (хост) 9090 (HTTPS)
denkart.cdto.life Cockpit 10.218.14.1 9090
docs.cdto.group Документация DENKART 10.218.14.102 (docs-denkart) 80
docs.cdto.life Документация DENKART 10.218.14.102 80
school.cdto.life BigBlueButton 10.218.14.37 (BBB-CONT22-1) 80

Домены без назначения (например cdto.life, cms.cdto.group) отдают страницу-заглушку из /var/www/stub в контейнере nginx-reverse-proxy.


5. Конфигурационные артефакты

Компонент Расположение Назначение
Маршрутизация nginx Контейнер nginx-reverse-proxy: /etc/nginx/sites-enabled/01-routing.conf Копия из репозитория: config/nginx/nginx-reverse-proxy-routing.conf
Правила iptables Хост: скрипт config/iptables/port-forwarding-rules-nginx-proxy.sh DNAT 80/443 (и опц. 8443) на 10.218.14.200
SSL-сертификаты Контейнер: /etc/ssl/denkart/ denkart.cdto.group., school.cdto.life.

6. Критерии приёмки (тестирование)

  • При запросе к IP сервера с заголовком Host: denkart.cdto.group (или .life) по HTTPS ответ приходит от Cockpit (HTTP 200 или редирект на страницу входа).
  • При запросе с Host: docs.cdto.group (или .life) ответ приходит от документации (HTTP 200 или 301).
  • При запросе с Host: school.cdto.life ответ приходит от BigBlueButton (HTTP 200 или 301).
  • При обращении по реальным доменным именам (через DNS) те же приложения открываются в браузере.

Тесты выполняются скриптом scripts/test-architecture-nginx-reverse-proxy.sh:

# Прямая проверка контейнера (рекомендуется)
/home/cdto/DENKART/scripts/test-architecture-nginx-reverse-proxy.sh 10.218.14.200

# Проверка через IP хоста (как при обращении по домену через DNS)
/home/cdto/DENKART/scripts/test-architecture-nginx-reverse-proxy.sh 192.168.1.112

Результат приёмки (2026-02-08): при целе 10.218.14.200 все проверки пройдены (Cockpit, docs, BBB, заглушка). Маршрутизация по доменам подтверждена.


7. Связанные документы