All4DK 27.03.2011 22:36

НовичкуМоментальное создание поддоменов в Apache

Решил облегчить себе жизнь и настроить работу с хостами в моей любимой Ubuntu.
Задача: Создаём директорию new_site в /home/web/ и браузер успешно находит http://new_site.dk (dk - имя машины). Первой мыслью было написание скриптов, сканирующих /home/web/ и вносящих изменения в настройки apache и файл hosts. Мне этот вариант не понравился. Но решение есть!

Как это сделать я спросил ТУТ и умные люди подсказали, в какую сторону нужно копать:

* модуль Apache mod_vhost_alias для web сервера
* dnsmasq для обработки поддоменов

Поставил, проверил - всё работает!
Ну а теперь подробнее от начала до конца (рассмотрим настройку для Ubuntu):

1) Установка web сервера Apache с поддержкой PHP:
sudo apt-get install apache2 php5 libapache2-mod-php5

2) Установка СУБД MySQL (если требуется):
sudo apt-get install mysql-server mysql-client php5-mysql

3) PHPmyAdmin для удобной работы с базами (если требуется):
sudo apt-get install phpmyadmin

4) Включение модуля Rewrite в Apache (если требуется):
sudo a2enmod rewrite

5) Включение модуля vhost:
sudo a2enmod vhost_alias

Пришло время всё это хозяйство настроить! Всего несколько шагов:
1) Для настройки vhost_alias достаточно в /etc/apache2/sites-enabled/000-default дописать:

 1
2
3
4
5
6
7
8
9
10
11
12
<VirtualHost *:80>
ServerName dk
ServerAlias *.dk
VirtualDocumentRoot /home/web/%-2/public
LogLevel warn
<Directory "/home/web/">
AllowOverride All
Options -Indexes
Order allow,deny
Allow from all
</Directory>
</VirtualHost>



Для редактирования этого файла потребуются права супер-пользователя. Вариант решения:
sudo gedit /etc/apache2/sites-enabled/000-default

Перезапускаем apache:
sudo /etc/init.d/apache2 restart

Нужно обрать внимание на то, что мы обрабатываем запросы вида *.dk
Если вы хотите настроить ваши виртуальные хосты как-то по другому, то рекомендую к прочтению: http://www.softtime.ru/info/apache.php?id_article=103
Поздравляю! Теперь, создав директорию /home/web/new_site/public и дописав в /etc/hosts new_site.dk 127.0.0.1 мы обратимся к этой новой директории как к отдельному хосту! Следует обратить внимание на то, что индивидуальные настройки хоста следует проводить файлом .htaccess
Если работает, то возвращаем hosts к исходному виду.

2) Вам, как и мне, совсем не интересно при добавлении нового хоста править /etc/hosts? Замечательно! Приступим к настройке dnsmasq:
Смысл в том, что мы хотим запросы вида *.dk адресовывать на адрес 127.0.0.1, т.е. на нашу локальную машину. Сделает это для нас маленький DNS сервер. Хочу сразу обратить ваше внимание, что dnsmasq обладает гораздо большими возможностями, чем мы сейчас будем использовать!
В конфигурационном файле /etc/dnsmasq.conf раскомментируем и отредактируем одну единственую строку:

address=/dk/127.0.0.1

Этой строкой мы сообщаем нашему dns серверу, что все запросы *.dk хотим перенаправлять на 127.0.0.1
Перезапускаем dnsmasq:
sudo /etc/init.d/dnsmasq restart

Возможно потребуется поправитьфайл /etc/resolv.conf, вписав первой строчкой
nameserver 127.0.0.1

Если IP-адрес вам выдаёт DHCP, то настройки resolv.conf при следующей загрузке будут утеряны. Для исправления ситуации в файле /etc/dhcp3/dhclient.conf раскомментируем строку:
prepend domain-name-servers 127.0.0.1;

Эти танцы с бубном нужны для того, чтобы задать последовательность обращения к dns серверам - в первую очередь локальный (127.0.0.1).

Готово! У меня всё заработало, а у Вас?


Тэги: apache dns dnsmasq Linux ubuntu
+ 8 -
Похожие Поделиться

doromones 28.03.2011 12:38 #
у меня что-то dnsmasq работать не хочет?
в логе есть ignoring nameserver 127.0.0.1 - local interface
All4DK 28.03.2011 13:33 #
Я-бы попробовал в /etc/dnsmasq.conf раскомментировать 41-ю строку:
no-resolv
alvelin 28.03.2011 16:50 #
Могу лишь ответить примитивным:
server {
listen 80;
server_name example.com *.example.com;
root /var/www/example.com/$subdomain;
set $subdomain "";
if ($host ~* ^(+)\.example.com$) {
set $subdomain $1;
}
if ($host ~* ^www.example.com$) {
set $subdomain "";
}
}
kstep 23.01.2012 02:26 #
Это меня глючит или движок? Я поставил плюс этому человеку, но я вижу оценку «0» за этот комментарий. В логах глосований значится два голоса «плюс», то есть должно быть +2, но тут по прежнему «0».
mironov_orig 23.01.2012 09:45 #
Предположу, что до твоего голоса у данного комментария была оценка "-1", потому как, все голосования которые были на новом движке, но до введения этой фичи, отображаются так, будто все голосовали в +, потому что до введения фичи, записывался только сам факт голоса.
ladykosha 22.01.2012 12:15 #
Тем, кто использует wicd стоит дополнить /etc/wicd/dhclient.conf.template
То же самое, что и в dhclient.conf
Deniz 18.10.2015 05:03 #
А как быть если назвать папку "this.my.site.com" ?