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

Моментальное создание поддоменов в Apache Порой возникает необходимость чтобы на сервере было множество сайтов, которые добавляются и удаляются в больших количествах и естественно разными пользователями. С такой задачей часто сталкиваются разработчики сайтов когда необходимо продемонстрировать или разделить сайты для заказчика. Да конечно многие демонстрируют сайты в стиле http://localhost или http://127.0.0.1, но согласитесь лучше демонстрировать сайт уже с более понятным именем для заказчика http://films.wf. И естественно не тратить силы на ковыряние в настройках сервера или бродить по папкам, а тем более когда работает группа над сайтом то всех пускать в /var/www не очень хочется. Конечно самим разработчикам проще создать папку с именем проекта и автоматом ее открыть в браузере, а не искать админа и ждать пока он все настроит и подключит. Решение сложившейся задачи решается с помощью:
  • модуль Apache mod_vhost_alias для web сервера
  • dnsmasq для обработки поддоменов

Подготовка сервера

Настройка производится на базе Debian. Для других дистрибутивов все пакеты будут идентичны, единственное утоните процесс установки для вашей системы. 1) Установка web сервера Apache с поддержкой PHP: # apt-get install apache2 php5 libapache2-mod-php5 2) Установка СУБД MySQL (если требуется): # apt-get install mysql-server mysql-client php5-mysql 3) PHPmyAdmin для удобной работы с базами (если требуется): # apt-get install phpmyadmin 4) Включение модуля Rewrite в Apache (если требуется): # a2enmod rewrite 5) Включение модуля vhost: # a2enmod vhost_alias 6) Установка dnsmasq: # apt-get install dnsmasq

Настройка Apache2

1) Для настройки vhost_alias достаточно в /etc/apache2/sites-enabled/000-default дописать: ServerName wf ServerAlias *.wf VirtualDocumentRoot /home/web/%-2/public LogLevel warn AllowOverride All Options -Indexes Order allow,deny Allow from all Для редактирования этого файла потребуются права супер-пользователя. # nano /etc/apache2/sites-enabled/000-default Перезапускаем apache: # /etc/init.d/apache2 restart Нужно обрать внимание на то, что мы обрабатываем запросы вида *.wf
Если вы хотите настроить ваши виртуальные хосты как-то по другому, то рекомендую к прочтению: http://www.softtime.ru/info/apache.php?id_article=103
Теперь проверим, создав директорию /home/web/test/public и дописав в /etc/hosts test.wf 127.0.0.1 мы обратимся к этой новой директории как к отдельному хосту! Следует обратить внимание на то, что индивидуальные настройки хоста следует проводить файлом .htaccess Если работает, то возвращаем hosts к исходному виду.

Настройка dnsmasq

Смысл в том, что мы хотим запросы вида *.wf адресовывать на адрес 127.0.0.1, т.е. на нашу локальную машину. Сделает это для нас маленький DNS сервер. Хочу сразу обратить ваше внимание, что dnsmasq обладает гораздо большими возможностями, чем мы сейчас будем использовать! В конфигурационном файле /etc/dnsmasq.conf раскомментируем и отредактируем одну единственую строку: address=/wf/127.0.0.1 Этой строкой мы сообщаем нашему dns серверу, что все запросы *.wf хотим перенаправлять на 127.0.0.1 Перезапускаем dnsmasq: # /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;