Одна из первых поставленных задач после установки веб-сервера 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 можно наоборот выключить виртуальный хост, если он стал не нужен.