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 дописать:
Для редактирования этого файла потребуются права супер-пользователя. Вариант решения:
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).
Готово! У меня всё заработало, а у Вас?
Я-бы попробовал в /etc/dnsmasq.conf раскомментировать 41-ю строку:
no-resolv
no-resolv
Могу лишь ответить примитивным:
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 "";
}
}
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 "";
}
}
Это меня глючит или движок? Я поставил плюс этому человеку, но я вижу оценку «0» за этот комментарий. В логах глосований значится два голоса «плюс», то есть должно быть +2, но тут по прежнему «0».
Предположу, что до твоего голоса у данного комментария была оценка "-1", потому как, все голосования которые были на новом движке, но до введения этой фичи, отображаются так, будто все голосовали в +, потому что до введения фичи, записывался только сам факт голоса.
Тем, кто использует wicd стоит дополнить /etc/wicd/dhclient.conf.template
То же самое, что и в dhclient.conf
То же самое, что и в dhclient.conf
в логе есть ignoring nameserver 127.0.0.1 - local interface