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

Динамическая маршрутизация поддоменов

Я задал этот вопрос в stackoverflow, но получил очень мало просмотров: https://stackoverflow.com/questions/2284917/route-web-requests-to-different-servers-based-on-subdomain

Возможно, это больше применимо к этой толпе. И снова для удобства:

У меня есть платформа, на которой пользователь может создать новый веб-сайт, используя поддомен. Их будут тысячи, например abc.mydomain.com, def.mydomain.com. Надеюсь, если мы добьемся успеха сотнями тысяч.

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

Какие здесь лучшие практики и рекомендуемые технологии?

Я вижу пару вариантов:

  1. Настройте DNS с подстановочной записью CNAME, чтобы все запросы направлялись на один IP-адрес, где, возможно, две машины, использующие тактовый сигнал (для аварийного переключения), знают, как искать IP-адрес в базе данных, а затем выполнять http-перенаправление на соответствующий сервер приложений. Мне это кажется неуклюжим и медленным.
  2. Запустить мой собственный DNS-сервер, которым можно управлять программно, так что при создании нового сайта добавляется запись DNS. Мы также перемещаем сайты на разные серверы приложений, поэтому мне нужно было бы иметь возможность обновлять записи DNS почти в реальном времени. Кто-нибудь думает?

Спасибо.

Обновление2: Я установил внешний DNS с подстановочными знаками, указывающий на веб-сервер HAProxy, чья работа заключается в маршрутизации запросов на внутренние серверы. Сопоставление хранится на нашем внутреннем сервере PowerDNS. Теперь вопрос в том, как заставить HAProxy-сервер (или другой) использовать значение внутреннего DNS, а не какой-то файл конфигурации или список доступа? -

Обновить: Основываясь на некоторых предложениях, приведенных ниже, похоже, что обратный прокси-сервер (-ы) - это правильный путь. Поскольку я буду перебалансировать сопоставление домен-> сервер, они должны работать мгновенно, и TTL в решении DNS может быть проблемой. Любые рекомендации по использованию программного обеспечения, учитывая, что этот домен -> данные IP хранятся в БД, и мне нужно, чтобы это работало?

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

Все эти серверы будут на одном сайте? Устойчивый интерфейсный «обратный прокси» с доступом к таблице сопоставления клиент -> сервер кажется самым простым.

hipache кажется именно тем, что вам нужно. вы можете динамически добавлять и удалять поддомены, просто добавляя и удаляя записи Redis:

https://github.com/hipache/hipache

Если я понимаю прямо, у вас будет много:

subdomains.domain.com

Насчет настройки прокси-сервера.

В DNS вы устанавливаете подстановочный знак для * .domain.com и указываете его на свой обратный прокси-сервер.

На обратном прокси-сервере запустите собственный DNS или используйте файл хоста для сопоставления запроса с соответствующим внутренним сервером.

Таким образом, путь будет: клиент -> обратный прокси ---> внутренний сервер

Я бы выбрал второе решение, используя PowerDNS и это бэкэнд трубы, вам просто нужно написать программу, которая сможет читать запросы и писать ответы из stdin / stdout через красивый просто протокол