Количество сайтов растет, а количество внешних IP остается на прежнем уровне, и на каждый сайт не будешь ведь ставить отдельный сервер. В общем возникла задача, которую нужно решить.
Принцип работы виртуальных доменов заключается в умении Web-сервера обрабатывать запросы согласно имен, указанных в них.
Настройку зон DNS я пропускаю, о ней как нибудь в другой раз.
Приступаем к решению. Всё оказывается очень просто, вся настройка производится в конфигурации apache и занимает несколько минут.
В каталоге /etc/apache2/sites-available находятся файлы конфигурации хостов. За основу берем файл default:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory «/usr/lib/cgi-bin»>
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ «/usr/share/doc/»
<Directory «/usr/share/doc/»>
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
и создаем новые конфигурации.
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/site1.ru
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/site2.ru
Далее файл конфигурации site1.ru приводим к виду (Изменить 2 строки, добавить одну.):
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName site1.ru
DocumentRoot /var/www /site1
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/site1/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory «/usr/lib/cgi-bin»>
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ «/usr/share/doc/»
<Directory «/usr/share/doc/»>
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
Для site2.ru по аналогии.
Создаём каталоги для сайтов (в них размещаем сами сайты):
sudo mkdir /var/www/site1
sudo mkdir /var/www/site2
Практически всё готово. Добавляем новые хосты:
sudo a2ensite site1.ru; a2ensite site2.ru;
И заставляем Apache перечитать конфигурацию:
/etc/init.d/apache2 reload
Всё сделано, теперь набрав в адресной строке браузера http://site1.ru и http://site2.ru мы увидим свои сайты.
Если потребуется отключить виртуальный хост:
a2dissite site1.ru