# Создание виртуальных хостов на Apache
Apache — один из наиболее популярных веб-серверов наряду с Nginx. Apache позволяет поддерживать одновременную работу нескольких сайтов на одном сервере. В зависимости от запрошенного домена он перенаправляет запрос на виртуальный хост, содержащий данные нужного сайта.
В этой инструкции мы расскажем, как при помощи Apache создать два виртуальных хоста для сайтов с разными доменными именами.
Для работы нам понадобится предварительно настроенный сервер на Ubuntu или сервер с установленным программным стеком LAMP.
# Установка Apache (опционально)
Если на сервере ещё не установлен Apache, сделаем это с помощью стандартного менеджера apt. Обновим список пакетов apt:
sudo apt update
sudo apt upgrade
После обновления можно устанавливать сам Apache:
sudo apt install apache2
После установки добавим Apache в список разрешённых приложений фаервола:
sudo ufw allow “Apache FULL”
Далее запустим его:
sudo systemctl enable apache2
sudo systemctl start apache2
Проверим, что Apache запущен:
sudo systemctl status apache2
# Output
apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-02-23 08:40:45 UTC; 1h 21min ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 1088 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 1092 (apache2)
Tasks: 6 (limit: 19660)
Memory: 36.6M
Если ваш VPS расположен на Джино, то для установки Apache можно воспользоваться пакетами приложений. В разделе Управление — Пакеты приложений выберите Apache httpd
. Программа установит последнюю из доступных версий Apache.
Веб-сервер установлен и запущен! Можно переходить к созданию и настройке виртуальных хостов.
# Настройка виртуальных хостов
# Создание директорий
Сначала создадим директории, в которых будут храниться все данные наших сайтов. По умолчанию Apache использует один виртуальный хост, расположенный в /var/www
. Чтобы разместить несколько виртуальных хостов и сделать управление ими более гибким и функциональным, создадим новые директории внутри /var/www
:
sudo mkdir -P /var/www/example_1.com/public_html
sudo mkdir -P /var/www/example_2.com/public_html
Флаг -P
в данном случае означает, что будет создана не только конечная директория, но и весь путь к ней, если таких папок ещё не существует.
Теперь передадим права на изменения файлов внутри этих директорий нашему пользователю:
sudo chown -R $USER:$USER /var/www/example_1.com/public_html
sudo chown -R $USER:$USER /var/www/example_2.com/public_html
Чтобы страницы могли отображаться правильно, нужно изменить права на всю директорию www
:
sudo chmod -R 755 /var/www
# Индексные страницы
Создадим начальные страницы для каждого из виртуальных хостов. Для нашей инструкции это будут простые html-страницы, выводящие приветственную надпись:
vim /var/www/example_1.com/public_html/index.html
В открывшемся окне поместим код:
<html>
<head>
<title>Example_1</title>
</head>
<body>
<h1>Success! 1st virtual host is working!</h1>
</body>
</html>
Сделаем то же самое для второго хоста:
vim /var/www/example_2.com/public_html/index.html
<html>
<head>
<title>Example_2</title>
</head>
<body>
<h1>Success! 2nd virtual host is working!</h1>
</body>
</html>
Итак, у нас созданы директории для размещения данных сайтов и индексные страницы. Теперь можно переходить к созданию конфигурационных файлов для виртуальных хостов.
# Виртуальный хост
В файлах виртуального хоста Apache указана фактическая конфигурация хостов и правила ответа Apache на запросы к указанным доменам.
По умолчанию такой файл в Apache — 000-default.conf
. Вместо него мы создадим два новых файла с правилами для наших сайтов и укажем их в качестве конфигурационных файлов.
Скопируем содержимое файла 000-default.conf
в файл с настройками нашего первого виртуального хоста:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example_1.com.conf
Теперь откроем и исправим его:
sudo vim /etc/apache2/sites-available/example_1.com
Если исключить закомментированные пояснения, то содержимое файла будет выглядеть так:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Здесь нам нужно исправить значения в строках ServerAdmin
и DocumentRoot
, а также добавить две новые: ServerName
и ServerAlias
.
Укажем наши значения для первого виртуального хоста. В итоге файл примет вид:
<VirtualHost *:80>
ServerAdmin admin@example_1.com
ServerName example_1.com
ServerAlias www.example_1.com
DocumentRoot /var/www/example_1.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Скопируем содержимое файла первого виртуального хоста в файл с конфигурацией для второго:
sudo cp /etc/apache2/sites-available/example_1.com.conf /etc/apache2/sites-available/example_2.com.conf
Откроем и исправим его по образцу первого:
sudo vim /etc/apache2/sites-available/example_2.com.conf
<VirtualHost *:80>
ServerAdmin admin@example_2.com
ServerName example_2.com
ServerAlias www.example_2.com
DocumentRoot /var/www/example_2.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# Активация файлов виртуального хоста
Чтобы Apache использовал в качестве конфигурационных файлов виртуальных хостов наши новые файлы, их нужно активировать:
sudo a2ensite example_1.com.conf
sudo a2ensite example_2.com.conf
Также необходимо отключить файл, использующийся по умолчанию:
sudo a2dissite 000-default.conf
Изменения вступят в силу только после перезапуска веб-сервера:
sudo systemctl restart apache2
После перезагрузки можно проверить работу наших виртуальных хостов. Для этого откроем браузер и в адресной строке укажем example_1.com
или example_2.com
. Если в ходе работы не возникло никаких ошибок, мы должны увидеть собщения:
Теперь у нас есть веб-сервер, поддерживающий одновременную работу двух сайтов на разных доменах. Следуя этой инструкции, можно создать любое число виртуальных хостов — основным ограничением в данном случае будут не возможности Apache, а серверные мощности, поддерживающие работу сайтов.