Как автоматически создавать поддомены

Задача: при обращении к поддомену сервер должен отдавать контент из соответствующей поддиректории для заданного VirtualHost.

Есть 2 способа решения задачи, и какой из них лучше – решайте сами.
В любом случае, сначала надо настроить WildCard DNS на домене, иначе ничего работать не будет.

Если Ваш проект хостится у firstvds или у minivds, то при добавлении домена на Ваш аккаунт файл зоны будет выглядеть примерно так:


$TTL 3600
domain.com. IN SOA ns1.minivds.com. root.mylogin.minivds.com. (2007041702 10800 3600 604800 86400)
;
domain.com. IN NS ns1.minivds.com.
domain.com. IN NS ns2.minivds.com.
domain.com. IN MX 10 mail
domain.com. IN MX 20 mail
domain.com. IN A XXX.YYY.ZZZ.WWW
www IN A XXX.YYY.ZZZ.WWW
ftp IN A XXX.YYY.ZZZ.WWW
mail IN A XXX.YYY.ZZZ.WWW
smtp IN A XXX.YYY.ZZZ.WWW
pop IN A XXX.YYY.ZZZ.WWW
domain.com. IN TXT "v=spf1 a mx ~all"

Чтобы включить WildCard DNS, достаточно в файл зоны добавить всего одну строчку и поменять цифры в serial number зоны. После исправлений файл доменной зоны будет выглядеть так:


$TTL 3600
domain.com. IN SOA ns1.minivds.com. root.mylogin.minivds.com. (2007041703 10800 3600 604800 86400)
;
domain.com. IN NS ns1.minivds.com.
domain.com. IN NS ns2.minivds.com.
domain.com. IN MX 10 mail
domain.com. IN MX 20 mail
domain.com. IN A XXX.YYY.ZZZ.WWW
www IN A XXX.YYY.ZZZ.WWW
ftp IN A XXX.YYY.ZZZ.WWW
mail IN A XXX.YYY.ZZZ.WWW
smtp IN A XXX.YYY.ZZZ.WWW
pop IN A XXX.YYY.ZZZ.WWW
* IN A XXX.YYY.ZZZ.WWW
domain.com. IN TXT "v=spf1 a mx ~all"

Через некоторое время можно попробовать пингануть домены abc.domain.com, asfwsegws.domain.com – доменное имя 3-го уровня должно определяться с тем же IP-адресом, что и доменное имя 2-го уровня.
Вот теперь можно переходить к настройке сабдоменов.

Способ номер 1: вносим изменения в httpd.conf
Выглядит это примерно так:


RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.domain.com
RewriteCond %{HTTP_HOST} !^cgi-bin\.domain\.com$ # запрещаем перенаправление для cgi-bin
RewriteCond %{HTTP_HOST} ^(www\.)?(([^\.]+)\.){1}domain.com$
RewriteCond /home/domain/data/www/domain.com/%3 -d
RewriteRule ^/(.*) /%3/$1

Перезапускаем apache и все – любая поддиректория, созданная в /home/domain/data/www/domain.com/ будет доступна как поддомен. Это самый правильный вариант создания поддоменов.

Но такой способ не будет работать на виртуалхостингах, поскольку доступ пользователю к httpd.conf никто не даст.

Способ номер 2: поддомены через .htaccess:


RewriteEngine on
RewriteCond %{HTTP_HOST} ^subdomain1.domain.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.subdomain1.domain.com$
RewriteRule ^(.*)$ http://www.domain.com/subdomain1/ [R=301,L]
RewriteCond %{HTTP_HOST} ^subdomain2.domain.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.subdomain2.domain.com$
RewriteRule ^(.*)$ http://www.domain.com/subdomain2/ [R=301,L]

В этом случае при обращении к subdomain1.domain.com или к www.subdomain1.domain.com пользователь будет перенаправлен на URL http://www.domain.com/subdomain1/ и он это заметит.

Как автоматически создавать поддомены: 14 комментариев

  1. А для совсем ленивых или тех кто не умеет кавырятся в шеле, можно ткнуть один раз мышкой через ISPmanager и получить тотже самый эффект.

  2. Все верно, Wildcard DNS создается в один-два клика в ISPmanager’e.
    Но это не спасает от правки .htaccess или httpd.conf для перенаправления серфера в поддиректории.

  3. Автоподдомены кстати ISPmanager научился недавно создавать через mod_vhost_alias, на хостинге FirstVDS.ru работает, включается одной галочкой :)

    Просто создаешь папку в www/имя-домена и она видна как папка.домен через браузер.

  4. Верно, так тоже можно.
    Осталось только выяснить, что же сильнее нагружает систему, mod_vhost_alias или mod_rewrite. Да и с mod_rewrite мне привычнее работать.

  5. Люди такой вопрос, извиняюсь может не в тему? У меня сайт на firstvds. Получается как бы выделенный сервер. Но как на нем создать сайт? Ибо говорят, что сначала надо создать пользователя, а потом для него можно создавать будет сайт, а это уже получается, что я на своем серваке создал виртуальный хост, нахрен он мне нужен? Как сделать чисто на выделенном? Чтобы был root и просто один домен? Спасибо.

  6. юрий, все верно, надо создавать пользователя. К пользователю привязать www-домен, тогда в домашней директории пользователя создастся директория www/domain.com; и как ты верно подметил, в апаче он будет отражаться как виртуалхост.

    А нужен он для того, чтобы можно было управлять доменом через ISPmanager, разруливать права между пользователями, в целях безопасности и т.д. Если хочешь, можешь конечно создать все руками и не трогать ISPmanager, но тогда и исправлять придется все руками.

  7. Хорошо, это я понял, но вот настроить виртуальные субдомены у меня не получилось. В httpconf прописывал Serveralias *.cmslive.ru – не обрабатывает главную хоть тресни, посмотрите пожалуйста там в сообществах выдает ошибку, что адрес http://****.cmslive.ru не доступен.

  8. Юрий, я не уверен, что у тебя проблема с mod_rewrite или с неправильной настройкой httpd.conf

    Попробуй создать простой текстовый файл, скажем, test.txt, и помести его в директорию /home/admin/data/www/cmslive.ru/blog/

    Если ты все правильно сделал, то файл должен быть доступен через браузер по адресам
    http://www.cmslive.ru/blog/test.txt и http://blog.cmslive.ru/test.txt

    Если он доступен, то вся проблема исключительно в твоей CMS.

  9. спасибо. Я написал такой хтакс

    RewriteCond %{HTTP_HOST} !^www.blabla.ru$ [NC]
    RewriteCond %{HTTP_HOST} ^(([a-z0-9]+)\.)blabla.ru$ [NC]
    RewriteRule ^(.*)$ http://blabla.ru/user/profile/%2/$1 [L,QSA]

    Как сделать так чтобы перенаправленный урл скрывался в строке адреса, а на его месте все так же оставался username.blabla.ru

  10. В том виде, в котором написано у Вас, ничего не выйдет. Вы берете один исходный URL и заменяете его на второй, т.е. для пользователя это будет выглядеть как редирект, и он заметит подмену URLa.

    Попробуйте перенаправлять пользователя не на URL, а на локальный файл, который и обработаетcя под старым урлом. Пример можно посмотреть здесь. Сам я такого не делал ни разу, но возможно, Вам оно поможет.

  11. Единственное чего не понял так это зачем руками что-то в файл зоны писать? В остальном замечаний нет.

  12. Meg@DED, файл зоны можно редактировать и через ISPmanager, это не принципиально.

  13. Подскажите пожалуйста, каким образом можно автоматически обновлять настройки DNS-сервера (в связи с автоматическим добавлением нового поддомена)?

  14. Анонимный, если настроен wildcard DNS (указана звездочка вместо имени поддомена), то все поддомены будут автоматически резолвиться на заданный адрес. Т.е. при добавлении нового поддомена обновлять ничего не потребуется.

Обсуждение закрыто.