dynamic vhosts and dns
1:43 ночи... Утром на работу. Буду пугать сотрудников красными глазами.
Но все-таки в неравной борьбе с DNS я победил, хотя и не до конца.
Что имеем: домашний сервак с кеширующим dns'ом (BIND9), воркстейшн (Вынь) и машинку devil (VMWare, apache+php+mysql).
Что надо сделать: динамический виртуальный хостинг
Зачем: для облегчения работы с проектами.
Зачем было трогать DNS? Не проще ли в hosts прописывать?
Кому-то может и проще, но это неспортивно. Чтобы можно было обращаться к проектам как http://test1.devil , http://projectname.devil понадобилось настроить DNS. Проверка показала, что через hosts этого сделать нельзя.
В общем, доку по DNS я только начал читать, поэтом по данному пункут все комментарии приетствуются.
В файлике /etc/bind/named.conf я прописал зону devil:
[cc lang="ini"]zone "devil" in {
type master;
file "/etc/bind/devil";
};[/cc]
и в указанный файлик /etc/bind/devil вписал следующее:
[cc lang="ini"]$TTL 604800 ;
$ORIGIN devil.
@ IN SOA devil. root.devil. (
1
604800
86400
2419200
604800 )
@ IN NS devil.
devil. IN A 10.1.1.21
*.devil. IN A 10.1.1.21[/cc]
Что значат цифры между (...) я представляю с трудом. $TTL - время, сколько запись может существовать в кеше имен. $ORIGIN - это согласно RFC, указываем сдесь имя домена. Потом символом "@" можем его заменять. Остальное писалось методом проб и ошибок из разных мануалов, потому как должно быть - не знаю.
В результате такое извращение привело к тому, что на всех машинках сети ping some.devil дает положительный результат, ping devil также работает везде, кроме как на сервере с DNS. Почему - не знаю.
А дальше по доке апача настроил вирт. хостинг. Идея заключается в том, что в определенной папке можно создать свою папку с именем сайта (например, pupkin/www) и сразу же обратиться к ней из браузера (http://pupkin.devil).
В доке апача приводится следующий пример:
[cc lang="apache"] # get the server name from the Host: header
UseCanonicalName Off
# this log format can be split per-virtual-host based on the first field
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon
# include the server name in the filenames used to satisfy requests
VirtualDocumentRoot /www/hosts/%0/docs
VirtualScriptAlias /www/hosts/%0/cgi-bin
[/cc]
Я выбрал именно такой метод. Его, правда, пришлось несколько подправить.
%0 - все имя, т.е. создав папку test.com сервер отдаст ее если к нему придет запрос http://test.com. По условию, мне это не подхошло. Пойдя по ссылке и описанию, я нашел, что %0 следует заменить на %1 - из примера это будет test.
Но опять-таки, просто так все не запустилось. Надо было добавить модуль апача mod_vhost_alias.
ln -s /etc/apache2/mods-available/vhost_alias.load /etc/apache2/mods-enabled/
и в результате это вылилось в такую конструкцию:
[cc lang="apache"]VirtualDocumentRoot /var/www/%1/www
VirtualScriptAlias /var/www/%1/cgi-bin
[/cc]
и симлинку на /var/www ко мне в хому с возможностью записи (chmod 777 /var/www).
Вот, собственно, и все. С чувством выполненного долга можно идти спать.