Я использую 2 виртуальные машины, которые оба слушают порты 80/443. У меня есть только один публичный IP и несколько поддоменов, которые указывают на мой публичный IP. Я хотел бы как-нибудь иметь доступ к обеим виртуальным машинам через порты 80/443.

Сценарий, который я имею в виду, заключается в том, чтобы как-то задействовать третью виртуальную машину, которая будет получать запросы 80/443 из внешнего мира и перенаправлять их соответственно на виртуальные машины. Эта третья виртуальная машина может выступать в качестве "прокси", который будет выполнять запросы к виртуальным машинам с использованием локального IP-адреса, к которому не подключены никакие порты. Я не совсем уверен, возможно ли это, но я открыт для любых предложений.

2 ответа2

1

То, что вы предлагаете, полностью практично и распространено. Одним из терминов, используемых для описания того, что вы делаете, является "обратный прокси". Есть несколько способов добиться этого, включая использование Apache и Squid.

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

Https добавляет дополнительную сложность, и вы можете захотеть рассмотреть https внешне для http внутри - из-за дополнительных накладных расходов и сложностей с сертификатами.

Бит на вашей диаграмме о DNS неясен. У вас будет внешний DNS, а затем вы будете использовать определенные правила на прокси-сервере для сопоставления доменов с конечным сервером http(s).

1

Сценарий, который я имею в виду, заключается в том, чтобы как-то задействовать третью виртуальную машину, которая будет получать запросы 80/443 из внешнего мира и перенаправлять их соответственно на виртуальные машины.

Вы определенно смотрите на это правильно. Лично я бы использовал что-то вроде HAProxy для достижения вашей цели. Фактическая реализация будет зависеть от ваших потребностей / среды.

Простейшей формой будет использование другого набора портов для одного сервера (например, 1080/1443) и перенаправление трафика соответственно. Это можно сделать практически на любом прокси-сервере или маршрутизаторе / шлюзе NAT.

Используя HAProxy или подобное программное обеспечение, вы можете получить все, что захотите. Некоторые примеры того, как вы можете назначить трафик для перехода на один или другой сервер:

  • URL-адрес, используемый в запросе (например, запросы на /app1 / что-либо идут на сервер 1, по умолчанию на сервер 2)
  • Исходный IP делает запрос
  • Тип запрашиваемого файла (все запросы для файлов .php отправляются на сервер 2)
  • Пользовательский агент, выполняющий запрос (весь трафик iPhone идет на сервер 2)
  • Практически любой другой аспект заголовков, которые вы хотите использовать
  • Сочетание любого или всего вышеперечисленного

Существует множество статей и руководств по использованию HAProxy для многих вещей (в том числе здесь на нескольких сайтах SE ). Например, вот простой пост о маршрутизации трафика на основе URL. Или пример ServerFault , основанный на исходном IP. Google будет вашим другом, когда вы найдете примеры того, что вы можете сделать.

Я предлагаю проверить документацию на все, что вы можете сделать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .