Настройка общих поддоменов (wildcard subdomains) в Apache
Настройка общих поддоменов за 5 минут
За последнюю неделю мне уже несколько раз приходилось рассказывать, как настраивать общие поддомены (известные как wildcard subdomains) в Apache и BIND/MaraDNS, поэтому решил написать статью, к которой можно будет отсылать интересующихся
Общие поддомены используются в силу множества причин: создание многопользовательских инсталляций блогов/форумов, где каждый пользователь получает домен вида username.domain.tld (в качестве примера можно привести известный WordPress µ), использование одной CMS для управления всеми поддоменами и т.п.
Для серверов на базе Apache процесс настройки общих поддоменов проходит в два этапа.
- Создание 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). -
Настройка виртуального хоста 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После внесения изменений Apache нужно перезапустить.ServerAlias "internetnetworkmarketer.org.ua" "www.internetnetworkmarketer.org.ua" "*.internetnetworkmarketer.org.ua"
Вот так вот всё просто!
Автор: Vladimir; опубликовано в: Администрирование; метки: Apache, BIND, общий поддоменАпр
2008
Комментарии к статье «Настройка общих поддоменов (wildcard subdomains) в Apache» (38) »
Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.
Оставить комментарий к записи «Настройка общих поддоменов (wildcard subdomains) в Apache»
गते गते पारगते पारसंगते बोधि स्वाहा
Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.


Привет, спасибо за статью
Весьма полезно.
Есть вопрос по теме: Нужно сделдать для пользователя возможность прикрепить свой домен. Какими средствами этого можно достичь?
Станислав, всё зависит от используемого софта.
Например, если web-приложение поддерживает общие поддомены (как, например, WordPress), то нужно только сконфигурировать DNS и web-сервер: в DNS добавить запись общего поддомена (
* IN A ip.ad.dr.es), web-серверу задать псевдоним виртуального хоста (для Apache —ServerAlias *.mysite.com, для nginx —server .mysite.com).Если же нет, то нужно смотреть, что вообще можно сделать.
А скажи плз – куда именно добавлять А-запись? В какой файл настроек БИНДа?
В файл зоны.
*.sitename.com IN A ip.ad.re.ss>В файл зоны.
Сорри, но как бэ именно это и спрашиваю
В каталоге /etc/bind находится 13 файлов.
В какой из них? Как определить?
Вот у меня задача для того же вордпресса на локалхосте под линухом (точнее на виртуалхосте). Т.е. для 127,0,0,1.
Куда я должен прописать А-запись?
Допустим, сайт называется
example.com.В этом случае Вам нужно найти строку
zone "example.com"в Ваших файлах. В том, в котором она будет найдена, будет содержать код наподобие такого:type master;
file "/path/to/zone/file";
};
/path/to/zone/fileи будет требуемым файлом.Если все локально, то можно в
/etc/hosts— только каждый сайт придётся прописывать отдельно.Например,
Vladimir, благодарю за попытку помочь, но видимо мы друг-друга не понимаем
У меня есть настроенные и рабочие виртуалхотсты. (sitelocal1.loc, sitelocal1.loc и тд..).
Все они прописаны в хостс (Чтобы понятней было – делалось по этой методе: forum.ubuntu.ru/index.php?topic=52552.0 См там спойлер: «Как настроить виртуальные хосты?»).
Теперь на одном из этих виртулхостов нужно поднять вилкард (записи в хостс – не вариант в данном случае). Для этого собсно и пришлось установить БИНД.
В его конфигах НЕТ ни одного вируталхоста (что, думаю, естественно).
Вот я и никак не пойму, куда нужно добавить А-запись.
В конфиг апача сервералиас вписал и он работает (отвечает, если в хостс ручную прописать сабдомен). Осталось (как я понимаю) настроить БИНД.
Благодарю за помощь.
В
/etc/bind/named.conf.localдописываете такое (предполагаю, что у Вас Ubuntu):type master;
file "/etc/bind/zone-sitelocal1.loc";
};
Создаёте
/etc/bind/zone-sitelocal1.loc:$TTL 600
sitelocal1.loc IN SOA localhost.localdomain. root.localhost.localdomain. (20110809094700 600 300 54432000 600)
IN NS localhost.localdomain.
IN A 127.0.0.1
*.sitelocal1.loc IN A 127.0.0.1
Перезапускаете bind, смотрите в логах, что всё в порядке.
Проверить можно так:
dig something.sitelocal1.loc @127.0.0.1
Затем первой строкой в
/etc/resolv.confдописываетеЕсли у Вас IP-адреса провайдером раздаются по DHCP, то нужно сказать клиенту, что нужно прописывать новый nameserver в
/etc/resolv.conf. У меня это делается так:/etc/dhcp/dhclient.conf:Как-то так.
Владимир, огромное спасибо.
Всё получилось, только БИНД ругался на данные тобой цифры в /etc/bind/zone-sitelocal1.loc.
Изменив их на значения из /etc/bind/db.local – всё сразу стало ОК.
Ещё раз благодарю за помощь.
Владимир, добрый день.
Спасибо за статью. У меня остается открытым только вопрос, как правильно настроить www для субдоменов. Т.е. задача такая:
основной домен domain.com, http://www.domain.com (все прописано, как вы и описываете, работает)
субдомен sub.domain.com (прописана A запись вида * A IP – работает), http://www.sub.domain.com – не работает, нет такого домена, почему не работает, в общем, понятно, как заставить – не понятно
Подскажите, как правильно настроить. Заранее благодарна.
Nadia, напишите, пожалуйста, на vladimir at free-sevastopol dot com.
Владимир,доброе время суток, такой вопрос, может вы знаете.
Есть сайт test.pro, именно pro. На nic.ru в настройках днс указано *.test.pro.
Все работает, все отлично. Мы пользуемся адресом aaa.test.pro . Однако, время от время у разных пользователей в разных регионах, в разное время aaa.test.pro перестает открываться. Проверка показала, что домен не пингуется (пишет что такой узел не найден), в тоже время работают любые адреса, которыми никто не пользуется:
bbb.test.pro, neponeanto_cto_eto.test.pro, www.aaa.test.pro . Причем домен начинает работать примерно минут через 20-30. В чем может быть дело?
Проверьте DNS во время сбоев.
Вообще для отказоустойчивости я бы посоветовал использовать DNS двух разных провайдеров, ибо сам наступал на такие грабли с Encirca.
Спасибо за ответ. Попробуем. Посмотрим что выдаст.
вчера написал вопрос про домен pro , мой вопрос просто взяли и удалили. почему?
Вопрос этажом выше, Вы либо куки почистили, либо под другим браузером вошли.