# Создание виртуальных хостов на 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. Если в ходе работы не возникло никаких ошибок, мы должны увидеть собщения:

1_virt_host

2_virt_host

Теперь у нас есть веб-сервер, поддерживающий одновременную работу двух сайтов на разных доменах. Следуя этой инструкции, можно создать любое число виртуальных хостов — основным ограничением в данном случае будут не возможности Apache, а серверные мощности, поддерживающие работу сайтов.