Настройка общих поддоменов за 5 минут

За последнюю неделю мне уже несколько раз приходилось рассказывать, как настраивать общие поддомены (известные как wildcard subdomains) в Apache и BIND/MaraDNS, поэтому решил написать статью, к которой можно будет отсылать интересующихся :-)

Общие поддомены используются в силу множества причин: создание многопользовательских инсталляций блогов/форумов, где каждый пользователь получает домен вида username.domain.tld (в качестве примера можно привести известный WordPress µ), использование одной CMS для управления всеми поддоменами и т.п.

Для серверов на базе Apache процесс настройки общих поддоменов проходит в два этапа.

  1. Создание wildcard-записи DNS

    Первый шаг состоит в создании wildcard-записи DNS. Для разных DNS-серверов это будет осуществляться по-разному (в смысле, принцип один и тот же, различия лишь в синтаксисе конфигурационного файла). Рассмотрим на примере BIND (так как BIND работает и под Linux/UNIX, и под Windows).

    Создание wildcard-записи очень просто: всё, что нужно — это добавить A-запись, связывающую имя вида *.domain.tld с IP-aдресом сервера.

    Рассмотрим на примере одного development-сервера:

    $TTL        86400
    $ORIGIN internetnetworkmarketer.org.ua.
    @  1D  IN         SOA ns1.internetnetworkmarketer.org.ua.        sjinks.internetnetworkmarketer.org.ua. (
                                  2008030500 ; serial
                                  24H ; refresh
                                  15 ; retry
                                  90w ; expire
                                  15 ; minimum
                                 )
                            IN  NS     ns1
                            IN  NS     ns.secondary.net.ua.
                            IN  NS     ns2.trifle.net.
                            IN  MX  10 @
                            IN  A      195.10.218.132
                            IN  TXT    "v=spf1 a mx:internetnetworkmarketer.org.ua -all"
                            IN  SPF    "v=spf1 a mx:internetnetworkmarketer.org.ua -all"
    ns1                     IN  A      195.10.218.132
    www                     IN  A      195.10.218.132
    

    Мы видим, что домен internetnetworkmarketer.org.ua "живёт" по адресу 195.10.218.132; там же находятся два его поддомена — ns1.internetnetworkmarketer.org.ua и www.internetnetworkmarketer.org.ua (технически www.somesite.tld является поддоменом somesite.tld; в общем случае www.somesite.tld и somesite.tld могут быть совершенно разными сайтами).

    На сайт был поставлен WordPress µ, вследствие чего нужно было создать общий поддомен — чтобы каждый пользователь получал блог вида username.internetnetworkmarketer.org.ua.

    Добавление общего поддомена сводится к добавлению A-записи в конец файла зоны:

    *.internetnetworkmarketer.org.ua.	IN  A      195.10.218.132
    

    После чего нужно было перезапустить BIND.

    После перезапуска придётся подождать некоторое время, пока новые настройки DNS "распространятся" через Internet (этот феномен называется DNS propagation).
  2. Настройка виртуального хоста Apache

    После того, как мы успешно настроили DNS, нужно указать Apache, что он должен обрабатывать адреса вида *.domain.tld (*.internetnetworkmarketer.org.ua в нашем случае).

    Пусть в файле конфигурации у нас есть такая запись о виртуальном хосте:

    [-]
    View Code Apache configuration
    <VirtualHost *:80>
        DocumentRoot "/home/internetnetworkmarketer.org.ua"
        ServerName "internetnetworkmarketer.org.ua"
        ServerAlias "internetnetworkmarketer.org.ua" "www.internetnetworkmarketer.org.ua"
        ErrorLog logs/internetnetworkmarketer.org.ua-error.log
        CustomLog logs/internetnetworkmarketer.org.ua-access.log common
    </VirtualHost>

    Всё, что нам надо — это добавить еще один псевдоним (alias) в директиву ServerAlias:

    [-]
    View Code Apache configuration
    ServerAlias "internetnetworkmarketer.org.ua" "www.internetnetworkmarketer.org.ua" "*.internetnetworkmarketer.org.ua"
    После внесения изменений Apache нужно перезапустить.

Вот так вот всё просто!

Добавить в закладки

Связанные записи

20
Апр
2008

Комментарии к статье «Настройка общих поддоменов (wildcard subdomains) в Apache» (3)  »

  1. Vadim Voituk says:

    Спасибо, помогло.

    P.S. значение ServerName и ServerAlias можно писать без кавычек - будет читабельнее.

  2. MechanisM says:

    Здравствуйте Владимир! Даже будучи Flex-девелопером я зачитался вашим блогом)) много всего полезного и интересного! И подход у вас своеобразный!! Хотел задать Вам вопрос для разрешения одной моей проблемы.. Как-раз связанной с темой данного поста.
    Как сделать имя пользователя субдоменом???
    если файл .htaccess следующий:

    [-]
    View Code Apache configuration
    RewriteEngine On
    Options +Followsymlinks
    RewriteBase /
    #.......
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^/]+)/?$ /profile.php?user=$1 [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^/]+)/([^/]+)?$ /profile.php?user=$1$2 [L]
    #.......

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

    • Vladimir says:

      У меня сейчас нет Апача под рукой, но первое, что приходит на ум:

      [-]
      View Code Apache configuration
      RewriteCond %{HTTP_HOST}  !^$
      RewriteCond %{HTTP_HOST}  !^www\.              [NC]
      RewriteCond %{HTTP_HOST}  ^([a-z0-9]+)\.(.+)$   [NC]
      RewriteRule ^(.*)         http://%2/$1?user=%1 [L,R=301]

      Посмотрите эту статью, там есть похожие примеры.

Подписаться на RSS-ленту комментариев к статье «Настройка общих поддоменов (wildcard subdomains) в Apache» Trackback URL: http://blog.sjinks.org.ua/administring/107-setting-up-wildcard-subdomains-in-apache/trackback/

Оставить комментарий к записи «Настройка общих поддоменов (wildcard subdomains) в Apache»

Вы можете использовать данные тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, Вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя