Настройка виртуальных хостов Apache на Ubuntu

Apache ― это популярный веб-сервер, на котором работает 24% веб-сайтов в интернете. В статье Что такое Apache мы рассказывали о истории его создания, принципах работы и преимуществах. В этой статье мы расскажем, для чего нужны в Apache виртуальные хосты и как их настроить в Ubuntu 18.04 и 20.04.

Что такое виртуальный хост

Виртуальный хост ― это сущность, которая позволяет работать множеству сайтов на одном сервере. Хосты совместно и максимально эффективно используют доступные ресурсы сервера.

Файлы сайтов хранятся на серверах в отдельных директориях. На одном сервере может быть размещено множество сайтов. Чтобы сервер понимал, какую директорию использовать, когда пользователь переходит на сайт, нужно связать домен и директорию между собой. За это отвечают виртуальные хосты. Они связывают доменное имя сайта с директорией, в которой находятся нужные файлы. 

Настройка хостов при помощи связи домена с директорией называется Name-based (на основании имени). Есть и другие способы настройки виртуальных хостов. Например, Port-based (на основании порта) и IP-based (на основании IP-адреса). 

Мы рассмотрим вариант настройки виртуального хоста на основании домена и покажем, как это сделать в Apache на сервере с Ubuntu 18.04 и 20.04.

Как настроить виртуальные хосты Apache

Если на вашем сервере нет Apache, установите его. Для этого:

Обновите список пакетов:

sudo apt update

Установите Apache:

sudo apt install apache2

Готово, этого будет достаточно, чтобы настроить виртуальный хост и протестировать его работу при помощи HTML. Если в дальнейшем вы хотите запустить сайт на PHP с базой данных, выполните установку остальных компонентов LAMP (Linux, Apache, MySQL/MariaDB, PHP) по инструкции.

Дальше в инструкции мы будем использовать тестовый домен faq-2d.ru. При работе с инструкцией вы можете использовать как его, так и собственный домен.

Всю процедуру настройки виртуального хоста мы разделили на шаги. 

Шаг 1. Создание каталогов и настройка прав

Стандартная корневая директория для хостов ― /var/www. Здесь в отдельных каталогах хранятся виртуальные хосты. Создайте директорию для faq-2d.ru:

sudo mkdir -p /var/www/faq-2d.ru

Смените владельца директории на текущего пользователя, под которым вы авторизованы:

chown -R $USER:$USER /var/www/faq-2d.ru

Задайте права для этой директории:

sudo chmod -R 755 /var/www

Шаг 2. Настройка конфигурационных файлов

У каждого виртуального хоста есть свой конфигурационный файл (конфиг). Конфиги отвечают за настройку хоста и за поведение Apache при получении запросов. Они хранятся в директории /etc/apache2/sites-available. Там же есть стандартный файл конфигурации 000-default.conf, который можно использовать в качестве шаблона для новых виртуальных хостов. 

Чтобы создать конфигурационный файл для нового виртуального хоста (faq-2d.ru в нашем случае), воспользуйтесь шаблоном:

1. Скопируйте содержимое файла 000-default.conf в новый файл:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/faq-2d.ru.conf

Вместо faq-2d.ru введите имя вашего домена.

2. Откройте новый файл при помощи текстового редактора:

sudo nano /etc/apache2/sites-available/faq-2d.ru.conf

3. В файле есть директивы и комментарии (строки, которые начинаются с символа #). Если исключить комментарии, останутся следующие директивы:

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

Где:

  • <VirtualHost *:80> и </VirtualHost> ― это раздел виртуального хоста. Все директивы, которые находятся внутри этого раздела, применяются к запросам, которые поступают на 80 порт;
  • ServerAdmin webmaster@localhost ― это электронная почта администратора. Замените webmaster@localhost на свой почтовый ящик;
  • DocumentRoot /var/www/html ― это корневая директория сайта, которую вы создали на 1 шаге. Вместо /var/www/html укажите путь к корневой папке виртуального хоста;
  • ErrorLog и CustomLog ― это логи ошибок и доступа. 


3. Добавьте 3 новые директивы после строки <VirtualHost *:80>:

ServerName faq-2d.ru
ServerAlias www.faq-2d.ru
DirectoryIndex index.html

Где: 

  • ServerName faq-2d.ru ― это основной домен виртуального хоста;
  • ServerAlias www.faq-2d.ru ― это псевдоним основного домена. Нужен для того, чтобы сайт открывался и по поддомену www.
  • DirectoryIndex index.html ― эта директива указывает, что файл index.html ― это главная страница сайта. Этот файл будет открываться при переходе по домену.

В итоге в файле будут следующие директории:

<VirtualHost *:80>
ServerName faq-2d.ru
ServerAlias www.faq-2d.ru
DirectoryIndex index.html
ServerAdmin admin@faq-2d.ru
DocumentRoot /var/www/faq-2d.ru
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Готово, вы настроили конфигурационный файл виртуального хоста.

Шаг 3. Создание тестовой HTML-страницы

Чтобы проверить работу хоста, создайте страницу с простым кодом на HTML. Для этого выполните команду:

echo "<h1>faq-2d.ru</h1>" > /var/www/faq-2d.ru/index.html

Вместо /var/www/faq-2d.ru/ введите путь до корневой директории виртуального хоста. 

Готово, вы создали тестовую страницу. 

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

1. Отключите стандартный конфиг:

sudo a2dissite 000-default.conf

2. Активируйте новый виртуальный хост:

sudo a2ensite faq-2d.ru.conf

Вместо faq-2d.ru введите имя вашего домена. 

3. Перезапустите веб-сервер Apache:

sudo systemctl restart apache2

Готово, файл для проверки создан. 

Шаг 5. Проверка работы виртуального хоста

Если ваш домен привязан к виртуальному серверу, перейдите по домену. Если вы правильно настроили хост, на сайте вы увидите текст, который добавили на 3 шаге:Результат проверки работы виртуальных хостов

Если вы использовали домен faq-2d.ru или любой другой домен, который не привязан к серверу или не существует, добавьте в файл hosts запись по инструкции:

123.123.123.123 faq-2d.ru www.faq-2d.ru

Где:

123.123.123.123 ― IP-адрес сервера,
faq-2d.ru ― домен, который вы использовали. 

Готово, вы настроили и проверили работу виртуального хоста.

Если вы не нашли ответ, спросите у нас!
Запросить поддержку