Рейтинг:0

Динамическое обслуживание новых поддоменов

флаг pl

у меня есть услуга пример.com который должен позволить пользователям размещать несколько файлов в своем собственном субдомене страница пользователя-userabc.example.com, так же, как Github с userabc.github.io.

В настоящее время я использую Apache, и каждый раз, когда я хочу настроить новый домен или поддомен, мне приходится вручную создавать новый <VirtualHost>, перезапустите сервер Apache и т. д. Здесь это невозможно.

Пример: если посетитель создает новую учетную запись userabc (добавлено в базу), как сделать, чтобы страница пользователя-userabc.example.com поддомен доступен и автоматически обслуживает файлы из /www/userabc/ или обслуживание http://userpage-userabc.example.com/ с /www/main/index.php?user=userabc?

Примечание: *.example.com уже имеет подстановочный знак DNS-запись для перенаправления на мой сервер

Что такое простой легкий инструмент для «динамического создания поддоменов»? (В настоящее время я использую Apache, PHP, Python, но могу использовать и другие инструменты).

Или можно с одним <VirtualHost> который ловит все sudomains *.example.com и RewriteRule, включая субдомен?

Appleoddity avatar
флаг ng
https://cwiki.apache.org/confluence/plugins/servlet/mobile?contentId=115522231#content/view/115522231
Appleoddity avatar
флаг ng
https://httpd.apache.org/docs/2.4/vhosts/mass.html
Appleoddity avatar
флаг ng
Кажется, есть несколько способов сделать это. Я не думаю, что вы много исследовали или думали об этом.
флаг pl
@Appleoddity Спасибо за ваши комментарии.Именно потому, что я видел так много разных методов и советов (таких как «Использовать этот плагин», «Перейти на nginx», «Использовать другой сервер»), я упускаю общую картину этого, поэтому этот вопрос.
Appleoddity avatar
флаг ng
Здесь вы решаете, что лучше всего подходит для вас, и реализуете это. Никто не может принять это решение за вас. Мы просто недостаточно знаем о вашем сценарии использования или вашем техническом опыте. Хорошая новость заключается в том, что существует множество способов сделать это.
флаг pl
@Appleoddity После дальнейших тестов я наконец нашел, пожалуй, самое простое решение с Apache + PHP и одним единственным VirtualHost. Еще раз спасибо за вашу помощь!
Рейтинг:1
флаг pl

Как упоминалось в комментарии, вот ссылки на Apache, есть несколько способов сделать это: Динамически настраиваемый массовый виртуальный хостинг, Динамические массовые виртуальные хосты с mod_rewrite.

Самое простое решение, которое я нашел после нескольких тестов: один единственный <VirtualHost>

<VirtualHost *:80>
  ServerName example.com
  ServerAlias *.example.com
  DocumentRoot /www/example
  <Directory />
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>

с этим подстановочным знаком Псевдоним сервера.

С .htaccess содержащий

RewriteEngine включен
Правило перезаписи ^(.*)$ index.php [QSA,L]

затем мы можем выполнить всю маршрутизацию для каждого пользователя через PHP:

<?php
$host = $_SERVER['HTTP_HOST'];
$sname = $_SERVER['SERVER_NAME'];
// parse the subdomain of $host or $sname and deliver 
// the content accordingly (using the database)
?>

Преимущество: это также работает, если конечный пользователь использует его собственный домен с DNS-записью CNAME. Пример:

www.userabc.com CNAME страница пользователя-userabc.example.com

Затем в PHP $хост здесь будет показано www.userabc.com. Если эта информация о личном домене находится где-то в базе данных, мы можем предоставить контент соответствующим образом, даже если пользователь использует личный домен.

Примечание: в случае, когда пользователи используют свой личный домен с CNAME, полезно определить, какой виртуальный хост по умолчанию использовать, когда запрос поступает с хостом, который не указан в списке. Имя сервера директивы: Виртуальный хост Apache по умолчанию.

Torin avatar
флаг in
Просто добавим, что вам не следует добавлять апексные записи CNAME, такие как `userabc.com. CNAME userpage-userabc.example.com.`. DNS содержит больше, чем просто «A/AAAA», и они также будут иметь CNAME (см. https://www.isc.org/blogs/cname-at-the-apex-of-a-zone/).
флаг pl
Спасибо @Torin, правильно, я изменил на `www.userabc.com. ЗАПИСЬ ...`. Кстати, как поступают люди, которые используют личный домен с «Github Pages» или аналогичную услугу хостинга, которая работает с настраиваемым доменом? [Документ GH Pages](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your -github-pages-site) говорит, что мы должны `www.johndoe.com. CNAME johndoe.github.io.`. Но тогда как сделать так, чтобы `http://johndoe.com` обслуживал тот же контент, что и `http://www.johndoe.com`? (если мы не можем НАЗВАТЬ `johndoe.com.`)
Torin avatar
флаг in
Некоторое программное обеспечение DNS имеет виртуальную запись типа «CNAME» (иногда называемую «ALIAS» или «ANAME»), которая будет возвращать записи «A/AAAA» этого другого имени. Если ваше программное обеспечение/поставщик DNS позволяет вам использовать эти типы записей, они будут в порядке, но в противном случае вам придется вручную добавлять записи `A/AAAA` и обновлять их при изменении. [Документы GitHub](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your- github-pages-site#configuring-an-apex-domain) упомяните о записях IPv4/6, которые вам необходимо добавить.
флаг pl
Спасибо @Торин! Так что в моем примере это должен быть `www.johndoe.com. CNAME johndoe.github.io и johndoe.com. Псевдоним johndoe.github.io. или последний johndoe.com. Псевдоним www.johndoe.com.`?
флаг pl
И последнее, что @Torin: если ALIAS/ANAME недоступны DNS-провайдеру, можем ли мы использовать DNAME (которое кажется доступным)?
Torin avatar
флаг in
`DNAME` похоже на `CNAME`, но для подимен, поэтому, вероятно, это не то, что вам нужно. Если вы делаете страницы GitHub, вы, вероятно, захотите добавить четыре записи `A` и четыре записи `AAAA`, которые упоминаются в документации. Больно, но это так :(

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.