У меня все поправки ниже стабильно работают на свежеустановленом apache2 в ubuntu 8.04
Создал файл: /etc/apache2/conf.d/virtual.conf
NameVirtualHost *
Насколько я помню эта строка должна упоминаться один раз и именно тут
дальше в виртуальных хостах используется только ServerName и если надо то ServerAlias
повторное умоминание NameVirtualHost приведет к ошибкам которые тут выше были кем то указаны
вот болванка для виртуального хоста: /etc/apache2/sites-available/skelet
<VirtualHost *>
ServerAdmin webmaster@localhost
ServerName localhost
ServerAlias www.localhost
ErrorLog /var/log/apache2/XX-error.log
LogLevel warn
CustomLog /var/log/apache2/XX-access.log combined
ServerSignature Off
DocumentRoot /home/www/site-xxx/
<Directory /home/www/site-xxx/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Копируете этот скелет в той же папке в допустим файл: /etc/apache2/sites-available/vhost1
редактируете его под свои пожелания
потом включаете его: a2ensite vhost1
или выключаете: a2dissite vhost1
после включения или выключения апач нужно релоадить: /etc/init.d/apache2 reload
Никаких особых изголений с ДНС не требовалось вообще (у меня primary и secondary DNS висят у nic.ru)
но для локалки пропишите их в /etc/hosts на себя
Для размножения виртуальных хостов просто копируете скелетик в vhost2 и т.д.
в общем дальше все должно быть понятно, естессно скелет настроен немножко под меня, можете сократить но это я считаю минимумом
тут все видно что для каждого виртуального хоста свои логи которые хранятся там же где и остальные и при этот по дефолту ротейтятся
домашние папки у каждого хоста тоже индивидуальные
Мой /etc/apache2/ports.conf (я его вообще не трогаю)
Listen 80
<IfModule mod_ssl.c>
Listen 443
</IfModule>
p.s. тоже когда то наступил на эти грабли, а проблема то была в самом первом файле, почему у меня его небыло, не понимаю