Назад | Перейти на главную страницу

KVM Несколько гостевых виртуальных машин Apache

Я хочу настроить хост CentOS 7/8 на несколько виртуальных машин KVM с Apache, к которым я могу маршрутизировать из Интернета (т. Е. Назначить запись DNS A / CNAME). Какая типичная конфигурация для этого?

Так, например, я хочу иметь следующие записи DNS:

site1.example.com   26  IN  A   76.81.220.196 -> KVM Guest 1 running Apache
site2.example.com   26  IN  A   76.81.220.196 -> KVM Guest 2 running Apache

Опция 1:

Настройте хост на общедоступный статический IP-адрес. Настройте сеть KVM Bridge и используйте таблицы IP для маршрутизации портов к гостевым KVM. Похоже, у меня возникнут конфликты, если я запущу все серверы Apache на порт 80. Описанный Вот

Вариант 2:

Хост запускает обратный прокси в Apache / HAProxy, а затем просто перенаправляет на правильный гостевой KVM, настроенный в KVM, как описано Вот

Смогу ли я перенаправить нестандартные порты в случае варианта 2? Возможно, мне придется настроить гостевую систему Windows, которая использует программное обеспечение на нестандартных портах, и я захочу также сопоставить их с общедоступным хостом.

РЕДАКТИРОВАТЬ:

Проект, над которым я работаю, состоит в том, чтобы собрать все случайные выделенные коробки, которые ИТ-специалисты установили за эти годы, на один (или несколько) стоек-серверов.

Я знаю о третьем варианте виртуальных хостов Apache и использую их постоянно. Причина, по которой мы не обращаем внимания на это на данный момент, заключается в необходимости иметь несколько версий PHP, потому что мне не придется немедленно исправлять какие-либо ошибки, которые могут быть вызваны использованием более новой версии PHP, и не нужно со странными / нестандартными конфигами. Я также часто использую Docker, но из-за близости крайнего срока соответствующего проекта я не уверен, что у меня есть время переназначить все существующие в настоящее время выделенные службы в Docker.

По сути, мне нужно сказать: «У Боба была программа ABC на этом сервере, создайте виртуальную машину, которая делает то же самое».

Честно говоря, лучший способ для этого - просто иметь 1 экземпляр apache и использовать vhosts. Нет виртуальных машин. Преимущество в том, что вам нужен только 1 статический IP-адрес, а ресурсы не тратятся напрасно.

Если вы (по какой-то причине) действительно хотите запустить несколько отдельных экземпляров apache, рассмотрите возможность запуска всего в контейнерах. (т.е. Docker или Kubernetes). Вы по-прежнему используете два отдельных экземпляра, но не пытаетесь поддерживать две полные ОС. Каждый контейнер может иметь свой собственный статический IP-адрес, или вы можете использовать NAT с хост-машины на контейнеры. Это своего рода "золотая середина", где вы получаете почти такую ​​же защиту, как две изолированные виртуальные машины, но при этом значительно экономите ресурсы и повышаете производительность.

Если вы действительно достаточно сумасшедшие, чтобы захотеть запустить две полные ОС в качестве гостей внутри ОС третьего «хоста», тогда да ... Я думаю, вы могли бы запустить две ОС на виртуальных машинах, а затем либо просто NAT, либо запустить прокси-службу или веб-сервис кластера для перенаправления на отдельные виртуальные машины.

А какой вариант «лучший»? ... это серьезный вопрос общественного мнения, и он определенно не вписывается в правила Stack-Exchange по заданию вопросов. (Лучшее - это вопрос мнения, и для понимания целей вашего проекта потребуется долгое обсуждение)

Последний. Используйте прокси-сервер переднего плана (также можно запускать в виртуальных машинах или контейнерах) и ретранслируйте их на серверы по имени. Сохраняет конфигурацию на уровне приложения, работая на хорошо известных номерах портов.

NAT наверное не нужен. Прокси-сервер устанавливает собственное соединение с серверной частью, которая может находиться в частной сети.

Или веб-сервер может выполнять свой собственный виртуальный хостинг на основе имени, без чего-либо перед ним. Однако ваш дизайн - это гость для каждого сайта.

Приложения, не поддерживающие HTTP, не имеют заголовка имени хоста, и для них потребуется другой способ маршрутизации. У других приложений есть прокси, или вы можете написать один.