Моментальное создание поддоменов в Apache
Решил облегчить себе жизнь и настроить работу с хостами в моей любимой Ubuntu.
Задача: Создаём директорию new_site в /home/web/ и браузер успешно находит new_site.dk (dk — имя машины). Первой мыслью было написание скриптов, сканирующих /home/web/ и вносящих изменения в настройки apache и файл hosts. Мне этот вариант не понравился. Но решение есть!
Как это сделать я спросил ТУТ и умные люди подсказали, в какую сторону нужно копать:
Поставил, проверил — всё работает!
Ну а теперь подробнее от начала до конца (рассмотрим настройку для Ubuntu):
1) Установка web сервера Apache с поддержкой PHP:
2) Установка СУБД MySQL (если требуется):
3) PHPmyAdmin для удобной работы с базами (если требуется):
4) Включение модуля Rewrite в Apache (если требуется):
5) Включение модуля vhost:
Пришло время всё это хозяйство настроить! Всего несколько шагов:
1) Для настройки vhost_alias достаточно в /etc/apache2/sites-enabled/000-default дописать:
Для редактирования этого файла потребуются права супер-пользователя. Вариант решения:
Перезапускаем apache:
Нужно обрать внимание на то, что мы обрабатываем запросы вида *.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 раскомментируем и отредактируем одну единственую строку:
Этой строкой мы сообщаем нашему dns серверу, что все запросы *.dk хотим перенаправлять на 127.0.0.1
Перезапускаем dnsmasq:
Возможно потребуется поправитьфайл /etc/resolv.conf, вписав первой строчкой
Если IP-адрес вам выдаёт DHCP, то настройки resolv.conf при следующей загрузке будут утеряны. Для исправления ситуации в файле /etc/dhcp3/dhclient.conf раскомментируем строку:
Эти танцы с бубном нужны для того, чтобы задать последовательность обращения к dns серверам — в первую очередь локальный (127.0.0.1).
Задача: Создаём директорию new_site в /home/web/ и браузер успешно находит 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 дописать:
<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 комментариев