Маршрутизация всего трафика через nginx-reverse-proxy

Дата: 2026-02-08
Статус: Рекомендация / план внедрения

Зачем переходить на nginx-reverse-proxy как единую точку входа

Сейчас весь трафик 80/443 с хоста по iptables попадает в BBB-CONT22-1 (10.218.14.37), где HAProxy и Nginx делают маршрутизацию по доменам. Из‑за этого:

  • При остановленном BBB-CONT22-1 недоступны все домены, в том числе denkart.cdto.group и docs, хотя они обслуживаются docs-denkart и Cockpit на хосте.
  • Единая точка входа по факту — тяжёлый контейнер BBB, а не отдельный reverse proxy.

Правильнее сделать единой точкой входа контейнер nginx-reverse-proxy (10.218.14.200):

  1. Один лёгкий вход — только nginx-reverse-proxy должен быть поднят, чтобы маршрутизация работала.
  2. Отказоустойчивость — при остановке BBB-CONT22-1 продолжают работать denkart.cdto.group, docs.cdto.group (через docs-denkart и Cockpit).
  3. Соответствие документации — в паспорте и плане оптимизации уже указано: «reverse proxy (nginx-reverse-proxy) и проброс портов через iptables».
  4. Ясная схема — интернет → хост (iptables) → nginx-reverse-proxy → по Host в нужный бэкенд (docs-denkart, BBB-CONT22-1, хост Cockpit).

Текущая и целевая схема

Сейчас

Роутер (89.179.242.240) → хост (192.168.1.112) → iptables DNAT
  → BBB-CONT22-1 (10.218.14.37) :80, :443
      → HAProxy :443 (SSL) → Nginx :8443 / :81
          → docs-denkart (denkart, docs) / BigBlueButton (school)

Если BBB-CONT22-1 остановлен — весь веб-доступ падает.

Целевая схема

Роутер (89.179.242.240) → хост (192.168.1.112) → iptables DNAT
  → nginx-reverse-proxy (10.218.14.200) :80, :443
      → по Host:
          denkart.cdto.group, denkart.cdto.life → Cockpit (10.218.14.1:9090)
          docs.cdto.group, docs.cdto.life       → docs-denkart (10.218.14.102)
          school.cdto.life                     → BBB-CONT22-1 (10.218.14.37:80)

Если BBB-CONT22-1 остановлен — недоступен только school.cdto.life; denkart и docs продолжают работать.

Что нужно сделать

1. Настроить nginx в nginx-reverse-proxy

В контейнере nginx-reverse-proxy nginx должен:

  • Слушать 80 (HTTP) и 443 (HTTPS).
  • Терминировать SSL на 443 (сертификаты Let's Encrypt для всех доменов: denkart.cdto.group, docs.cdto.group, school.cdto.life и при необходимости .life).
  • Маршрутизировать по server_name:
  • denkart.cdto.group, denkart.cdto.lifeproxy_pass https://10.218.14.1:9090 (Cockpit).
  • docs.cdto.group, docs.cdto.lifeproxy_pass http://10.218.14.102:80 (или :8090 в зависимости от того, что слушает docs-denkart).
  • school.cdto.lifeproxy_pass http://10.218.14.37:80 (BigBlueButton).

За основу можно взять:

  • config/nginx/denkart-routing.conf (логика маршрутов),
  • config/nginx/bbb-https-routing.conf и снимок config/snapshots/nginx-docs-denkart-2026-01-23.conf (SSL и server_name для cdto.group).

Сертификаты: либо Certbot в самом nginx-reverse-proxy для всех доменов, либо копирование готового bundle/cert с хоста и настройка ssl_certificate / ssl_certificate_key.

2. Переключить iptables на nginx-reverse-proxy

Изменить проброс 80/443 с 10.218.14.37 (BBB-CONT22-1) на 10.218.14.200 (nginx-reverse-proxy):

  • PREROUTING: --dport 8010.218.14.200:80
  • PREROUTING: --dport 44310.218.14.200:443
  • FORWARD и POSTROUTING (MASQUERADE) — для 10.218.14.200 вместо 10.218.14.37.

Готовый вариант правил — в скрипте config/iptables/port-forwarding-rules-nginx-proxy.sh (см. ниже).

3. Проверка

  • Запустить только nginx-reverse-proxy и docs-denkart, оставить BBB-CONT22-1 остановленным.
  • Применить iptables для 10.218.14.200.
  • Проверить: https://denkart.cdto.group и https://docs.cdto.group должны открываться.
  • Запустить BBB-CONT22-1 и проверить https://school.cdto.life.

4. Обновить документацию

После перехода обновить:

  • docs/host-server-passport.md — явно указать: «Трафик 80/443 пробрасывается в nginx-reverse-proxy (10.218.14.200)».
  • docs/operations/domains-configuration.md и docs/operations/final-architecture.md — описать целевую схему с nginx-reverse-proxy как единственной точкой входа для веб-трафика.

Резюме

Да, правильнее настроить маршрутизацию всего трафика через nginx-reverse-proxy: один контейнер-шлюз, остальные сервисы — бэкенды. Тогда недоступность denkart.cdto.group не будет зависеть от того, запущен ли BBB-CONT22-1.