Создание виртуальных хостов в Apache

Справочник системного администратора

Одна из первых поставленных задач после установки веб-сервера Apache, это настройка виртуальных хостов. Это удобно для тех, кто хочет использовать один веб-сервер, чтобы раздавать несколько сайтов используя один IP-адрес. В этом руководстве я расскажу как настроить виртуальные хосты в Apache на Debian.

Полагаем у вас уже есть настроенный и действующий веб-сервер. Как подготовить его я описывал в этой статье.

Шаг 1. Создание директорий для виртуальных хостов

Создавая виртуальный хост для определенного домена (в нашем примере мы будем использоваться мой домен – evs.msk.ru), необходимо подготовить директорию в которой будут храниться файлы сайта, который Apache будет выдавать, если к нему обратиться по заданному домену.

Создадим директорию командой:

sudo mkdir -p /var/www/evs.msk.ru/public_html

Сделаем пользователя www-data (пользователь Apache) владельцем данной директории:

sudo chown -R www-data:www-data /var/www/example.com/public_html

Шаг 2. Создание конфигурации нового виртуального хоста

По умолчанию в Apache имеется файл виртуального хоста 000-default.conf, который мы будем использовать в качестве шаблона и создадим из него новый конфигурационный файл.

Скопируем файл 000-default.conf в evs.msk.ru.conf:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/evs.msk.ru.conf

Теперь мы можем ковырять файл evs.msk.ru.conf не боясь в нем напортачить. Если мы что то сделаем неправильно, всегда можно удалить его и создать заново вышеописанной командой.

Открываем файл для редактирования:

sudo nano /etc/apache2/sites-available/evs.msk.ru.conf

В принципе из него можно удалить все комментарии, оставив лишь описание конфигурации, в итоге файл должен выглядеть примерно так:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Изменяем директиву ServerAdmin на адрес электронной почты, на который администратор сайта будет получать электронные письма.

Затем необходимо добавить две новые директивы. Первая – ServerName, она будет устанавливать основной домен, который должен соответствовать названию виртуального хоста. Это должно быть ваше доменное имя. Вторая – ServerAlias, она определяет другие имена, которые будут интерпретироваться так, как будто это ваш основной домен. Это удобно для использования дополнительных доменных имен, например, с использованием www.

ServerName evs.msk.ru
ServerAlias www.evs.msk.ru

Последнее, что нам осталось изменить в файле виртуального хоста, это расположение корневого каталога этого домена. Так как мы уже создали нужную директорию, нам осталось только изменить директиву DocumentRoot, чтобы она ссылалась на созданную нами директорию:

DocumentRoot /var/www/evs.msk.ru/public_html

Теперь наш конфигурационный файл должен выглядеть следующим образом:

<VirtualHost *:80>
ServerAdmin admin@example.com
ServerName evs.msk.ru
ServerAlias www.evs.msk.ru
DocumentRoot /var/www/evs.msk.ru/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Сохраняем файл комбинацией Ctrl+X и выходим из редактора.

Шаг 3. Включение нового виртуального хоста

Теперь, когда мы создали файл виртуального хоста, нам необходимо его активировать в Apache. Для этого мы будем использовать команду a2ensite.

Выполняем команду:

sudo a2ensite evs.msk.ru.conf

Теперь необходимо перезагрузить Apache:

sudo service apache2 restart

Теперь, для проверки отрабатывает ли Apache созданный нами виртуальный хост, нам надо в корневой директории виртуального хоста поместить какую ни будь демо-страницу с именем index.html

Создадим демо-страницу:

nano /var/www/evs.msk.ru/public_html/index.html

И поместим в нее следующий код:

<html>
<head>
<title>Hello World!</title>
</head>
<body>
<h1>Virtual Host is working!</h1>
</body>
</html>

Сохраняем файл комбинацией Ctrl+X и выходим из редактора.

Убедитесь, что порты 80 и 443 проброшены на вашем маршрутизаторе во внешнюю сеть и ссылаются на IP-адрес вашего веб-сервера, а вашему домену назначена А-запись с вашим внешним IP-адресом. Проверяем работу виртуального хоста, открываем в браузере наш домен, мы должны увидеть веб-страницу с текстом, который указали в коде выше.

Другой командой – a2dissite можно наоборот выключить виртуальный хост, если он стал не нужен.