Вопрос или проблема
Поверьте мне, я искал, но не могу найти окончательный ответ на свой вопрос.
У меня есть домен, example.eu
, и сейчас я пытаюсь настроить такие вещи, как CA/TLS, без изменения NAT с одного хоста на другой только для проверки (после установки, когда я возвращаюсь к основному серверу, это ломается).
Я хотел бы иметь следующее:
www.example.eu ->
nc.server.example.eu (отдельная машина) 192.168.1.2 (также размещает wireguard/adguard/docker)
mattermost.server.example.eu (VM) 192.168.1.8
aapanel.server.example.eu (VM) 192.168.1.9
2/2Gbit волоконная связь с 1 IP
192.168.1.1 = edgerouter
192.168.1.2 = dns-adguard/wireguard/nextcloud
192.168.1.3 = Узел 1 Supermicro сервер ESXI8 (работает только при необходимости)
192.168.1.4 = Узел 2 Supermicro сервер ESXI8 (работает только при необходимости)
192.168.1.5 еще свободен / pfsense тест
192.168.1.6 = juniper коммутатор EX4200 48T
192.168.1.7 = тестовый NAS (будет заменен на truenas scale)
Интересно, возможно ли это? Думаю, да, но я не знаю как.
Можно ли сделать так, чтобы ‘что-то’ при входе трафика через www.example.eu
направляло его на нужный сервер? Что для этого нужно? У меня есть тест с PFsense, но это для меня ново.
Я уже создал некоторые сертификаты с подстановкой, так что *.example.eu
и *.*example
работают на одной машине, однако я не могу разместить всё на одной машине.
У меня умеренные знания о Linux, в основном Ubuntu, и я знаю Windows.
Если кто-то может направить меня в нужное русло?
(Я видел, как кто-то спрашивал о хостах, но не могу найти, где это опубликовано?)
Это смешанные Apache и Nginx
Aapanel работает на Nginx (возможно, я могу перенести это на apache также).
Nextcloud работает на Apache (отдельная машина, если это важно)
Вы имеете в виду это?
https://httpd.apache.org/docs/2.4/vhosts/ip-based.html
Можно ли сделать так, чтобы ‘что-то’ при входе трафика через
www.example.eu
направляло его на нужный сервер?
На уровне IP (или даже TCP) трафик не поступает через www.example.eu
– в заголовках пакетов IP и TCP нет информации о используемом имени, поэтому вы не можете сделать это только с маршрутизацией или NAT. Все, что у вас есть, это IP:порт, а именно “внешний” (публичный) IP:порт.
По той же причине, виртуальные хосты на основе IP не смогут различать различные запросы, как и сам маршрутизатор, если не используются различные номера портов (которые должны быть указаны в URL, и это несколько сводит на нет цель нескольких доменов).
Вам нужно, чтобы весь трафик поступал на что-то, что понимает конкретные протоколы, используемые в этом соединении TCP/IP, и может извлекать запрошенное имя хоста из них (предполагая, что протоколы сами по себе несут его где-то сначала). Это часто называют “обратным прокси”, и это в основном ограничено HTTP и TLS.
Таким образом, в конфигурации вашего маршрутизатора весь трафик на портах 80 и 443 должен идти на одну машину, на которой работает такой прокси (которая может работать на самом pfsense, если это ваш маршрутизатор, и я полагаю, у нее есть несколько пакетов для этого), а затем прокси будет перенаправлять TLS соединения или HTTP запросы на любой сервер, который он настроен использовать.
И Nginx, и Apache могут действовать как обратный прокси (в основном, просто определив виртуальные хосты, которые имеют ProxyPath
вместо DocumentRoot). Другие распространенные выборы – это HAproxy и, думаю, Traefik? и Caddy? (Что люди часто используют с Docker.)
Существуют подобные прокси для Minecraft, но не для SSH, например, поскольку SSH не отправляет запрошенное имя хоста нигде в своем протоколе. Если вы хотите иметь доступ к нескольким внутренним хостам по SSH, вам нужно использовать различные номера внешних портов. (Или различные внешние IP адреса, но они, вероятно, уже не дешевые.)
Ок, я нашел ‘Nginx Proxy Manager’, я установил это на свой сервер truenas scale.
И это работает в основном
Множество вещей правильно перенаправляется при использовании вне моей локальной сети.
Я тестировал, используя свой телефон и телефонный хотспот + ноутбук.
Единственное, что не работает в данный момент, это мой сайт Nextcloud.
При попытке подключения я получаю ‘ERR_TOO_MANY_REDIRECTS’
Когда я использую свой VPN, это работает, в локальной сети это тоже работает.
Ответ или решение
Для размещения нескольких веб-сайтов за одним IP-адресом и портом 80 вам потребуется организовать инфраструктуру с использованием обратного прокси-сервера. Этот подход позволит перенаправлять запросы по доменным именам на различные внутренние серверы в зависимости от требуемого виртуального хоста. Давайте рассмотрим теорию, практические примеры и применение на вашем случае.
Теория
Обратный прокси-сервер берет входящие запросы, анализирует информацию, такую как доменное имя в HTTP-заголовке Host, и перенаправляет их на нужные серверы внутри вашей сети. Это выполняется независимо от того, на каком именно сервере размещается ваш сайт с определенным поддоменом. Обратные прокси-серверы также могут выполнять роль балансировщиков нагрузки и обеспечивать SSL/TLS шифрование.
Чаще всего используются обратные прокси-серверы, такие как Nginx, Apache, HAProxy и Traefik, которые позволяют настраивать правила переадресации для поддоменов (например, nc.server.example.eu
, mattermost.server.example.eu
). Таким образом, все входящие HTTP-запросы на ваш публичный IP-адрес проходят через обратный прокси, который затем направляет их на нужные внутренние адреса.
Пример
В вашей ситуации, вы уже задействовали Nginx Proxy Manager, что является отличным выбором для управления входящими HTTP/HTTPS-запросами. Ваша текущая сеть выглядит следующим образом:
www.example.eu
на Nginx Proxy Manager.- Внутренние серверы (
192.168.1.2
,192.168.1.8
,192.168.1.9
) обрабатывают специфические поддомены.
Логика работы такая: запрос на www.example.eu
обрабатывается Nginx Proxy Manager, который затем перенаправляет его на соответствующий сервер, основываясь на конфигурации. Nginx читает заголовок Host и передает запрос серверу по адресу, указанному в настройке для этого домена.
Применение
Чтобы все корректно функционировало, необходимо установить и настроить обратный проксии на вашем сервере:
-
Настройка NAT и перенаправление на Proxy Manager: ваш маршрутизатор должен направлять все входящие подключения на порты 80 и 443 к вашему серверу с Nginx Proxy Manager.
-
Настройка SSL/TLS: поскольку у вас есть многодоменный сертификат (wildcard), настройка SSL должна выполняться на уровне Proxy Manager, который будет обеспечивать шифрование и безопасные соединения для всех поддоменов.
-
Настройка правил в Proxy Manager: создайте обратное проксирование для каждого домена. Например:
nc.server.example.eu
->192.168.1.2:80
mattermost.server.example.eu
->192.168.1.8:8065
(или соответствующий порт Mattermost)aapanel.server.example.eu
->192.168.1.9:8888
(например, если используется этот порт)
-
Ошибки и устранение неполадок: ошибка
ERR_TOO_MANY_REDIRECTS
указывает на цикл перенаправлений. Это может быть связано с неправильной конфигурацией URL (например, включение в конфигурации redirect HTTP на HTTPS или наоборот). Проверьте конфигурацию дляNextcloud
внутри Proxy Manager на наличие конфликтов, например, когда сервер возвращает переадресацию обратно к Proxy. -
Тестирование и отладка: убедитесь, что все поддомены правильно настроены и тестируются как из Интернета, так и внутри локальной сети. Важно, чтобы конфигурация на всех уровнях (маршрутизатор, Proxy Manager, внутренние серверы) была согласованной и правильной.
Таким образом, с помощью обратного прокси, вы можете эффективно управлять несколькими веб-сайтами и серверами из одного публичного IP-адреса без необходимости изменять физическую инфраструктуру или добавлять дополнительные IP-адреса. Это позволяет вам гибко и масштабируемо развертывать ваши веб-приложения и сервисы.