Версия архитектуры хост-сервера 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, заглушка). Маршрутизация по доменам подтверждена.