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

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

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

  1. модуль Apache mod_vhost_alias для web сервера
  2. 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 дописать:

<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
Если вы хотите настроить ваши виртуальные хосты как-то по другому, то рекомендую к прочтению: 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).

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.