[How To] Настройка виртуальных хостов Apache на Ubuntu 16.04

Виртуальные хосты Apache

Вступление

Веб-сервер Apache является наиболее популярным способом размещения веб-контента в Интернете. Более половины всех активных сайтов во всем мире используют именно его, так как Apache это крайне мощный и гибкий инструмент размещения веб-контента.

Apache разбит на отдельные блоки, каждый из которых отвечает за свою конкретную задачу и может быть настроен независимо от остальных блоков.  Базовый блок, отвечающий за организацию использования доменов на вашем сервере, называется virtual host.

Virtual host позволяет администратору размещать несколько доменов или сайтов на одном сервере и одном ip-адресе. Это актуально для тех, кто желает размещать несколько сайтов на одном VPS.

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

В этой статье вы научитесь настраивать Virtual hosts в системе Ubuntu 16.04 и предоставлять разным пользователям различное содержимое, в зависимости от домена, который они указали в адресной строке.

 

Подготовка

Прежде чем начать выполнять действия, описанные в этой статье, крайне рекомендуется создать  пользователя с Root-привилегиями, если вы этого еще не сделали. Как это сделать вы можете прочитать в этой статье, выполнив шаги №1-4.

Кроме того, у вас должен быть установлен веб-сервер Apache2. Если вы этого еще не сделали, установите его выполнением следующих команд:

sudo apt-get update
sudo apt-get install apache2

После выполнения вышеперечисленных шагов, мы можем начинать.

Для наглядности, в данном руководстве будут созданы виртуальные хосты для доменов example.com и test.com.  В процессе всей статьи эти домены будут использованы во всех командах и конфигурационных файлах, когда же вы будете настраивать свой сервер, вы должны будете заменить эти два домена на те, что хотите использовать вы.

Если у вас еще нет доменов или вы какой-либо причине не хотите привязывать их к вашему VPS, в шестом шаге данного руководства есть инструкции, как можно эмулировать использование доменов при помощи файла hosts.

 

Шаг первый – Создаём дерево директорий

Первое, что вы должны сделать – это подготовить директории для ваших доменов. Корневая директория Apache находится по адресу /var/www  и именно тут мы будем создавать каталоги для каждого из доменов, которые хотим использовать.  В каждом из этих каталогов мы создадим папку public_html, где будем размещать файлы наших сайтов.

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

sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html

Красным цветом выделены домены, которые вы собираетесь обслуживать при помощи вашего VPS.

 

Шаг второй – назначение прав доступа

Мы создали структуру каталогов для наших доменов, но на данном этапе доступ к этим каталогам есть только у root пользователя. Если мы хотим, чтобы обычный пользователь имел возможность изменять файлы, мы должны настроить права доступа, выполнив следующие команды:

sudo chown -R $USER:$USER /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/test.com/public_html

Переменная $USER принимает значение имени пользователя, под которым вы сидите в данный момент, сразу после нажатия кнопки Enter. Таким образом, после выполнения данных команд владельцем директорий public_html, в которых вы будете хранить контент ваших сайтов, назначается наш текущий пользователь.

Помимо полного права доступа для текущего пользователя, вы должны быть убеждены что все ваши веб-папки открыты для чтения «для всех», это необходимо для корректной обработки запросов и отображения сайтов:

sudo chmod -R 755 /var/www

Теперь наш сервер имеет необходимые права доступа для показа контента посетителям, а наш пользователь может создавать и изменять этот контент в директориях.

 

Шаг третий – создание тестовых страниц для каждого виртуального хоста

Мы создали структуру директорий и настроили права на них. Пришло время размещать контент.
На данном этапе нам нужно будет лишь убедиться, что все правильно настроено и работает, поэтому ограничимся простенькими файлами index.html для каждого хоста.
Давайте начнем с example.com. Вы можете создать index.html и открыть его в текстовом редакторе, выполнив команду:

nano /var/www/example.com/public_html/index.html

Внутри этого файла разместим небольшой html-код, благодаря которому сможем понять, что попали на нужный нам сайт. Например такой:

<html>
  <head>
    <title>Добро пожаловать на Example.com!</title>
  </head>
  <body>
    <h1>Работает!  Виртуальный хост example.com настроен правильно!</h1>
  </body>
</html>

Сохраните и закройте файл.
Сделаем копию только что созданного файла, чтобы использовать её в качестве базы для аналогичного файла домена test.com:

cp /var/www/example.com/public_html/index.html /var/www/test.com/public_html/index.html

Откроем копию файла и изменим в ней несколько значений:

nano /var/www/test.com/public_html/index.html
<html>
  <head>
    <title>Добро пожаловать на Test.com!</title>
  </head>
  <body> <h1>Работает!  Виртуальный хост test.com настроен правильно!</h1>
  </body>
</html>

Сохраните и закройте файл. Теперь у нас есть страницы для проверки работы Виртуальных хостов.

 

Шаг четвёртый – создание конфигурационных файлов виртуальных хостов

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

 

Создадим первый конфигурационный файл

Начнем с копирования файла 000-default.conf для нашего первого домена:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf

Откройте новый файл в текстовом редакторе с привилегиями root пользователя:

sudo nano /etc/apache2/sites-available/example.com.conf

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

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

Как вы можете видеть, структура конфига довольно проста. Мы изменим несколько параметров, а также добавим несколько своих, чтобы этот файл описывал наш первый домен. Благодаря этому файлику будут обрабатываться любые запросы, поступившие на 80 порт – стандартный порт HTTP-запросов.

Для начала изменим параметр ServerAdmin, поместим туда адрес электронной почты, на которую администратор сайта будет получать сообщения:

ServerAdmin admin@example.com

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

ServerName example.com
ServerAlias www.example.com

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

DocumentRoot /var/www/example.com/public_html

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

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

Сохраним и закроем его.

Скопируем первый Виртуальный Хост и настроим его для обработки второго домена

Теперь, когда первый конфигурационный файл готов, мы можем скопировать его и настроить под второй домен.

sudo cp /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-available/test.com.conf

Откроем новый файл с привилегиями root:

sudo nano /etc/apache2/sites-available/test.com.conf

Теперь мы должны изменить все параметры, настроив их под второй домен. Должно получится что-то вроде этого:

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

Когда закончите, сохраните и закройте файл.

 

Шаг пятый – активация виртуальных хостов

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

Используйте инструмент a2ensite для активации ваших хостов. Пример использования:

sudo a2ensite example.com.conf
sudo a2ensite test.com.conf

После выполнения данных команд, необходимо отключить стандартный хост:

sudo a2dissite 000-default.conf

Чтобы изменения вступили в силу, необходимо перезапустить Apache:

sudo systemctl restart apache2

Для перезапуска вы также можете использовать другую команду:

sudo service apache2 restart

Эта команда также сработает, но вы можете не получить результат если попробуете использовать её в других дистрибутивах, в отличии от systemctl.

 

Шаг шестой – настройка файла hosts (не обязательно)

Если вы настроили ваши виртуальные хосты для реально существующих доменов и настроили DNS так, чтобы запросы на домены перенаправлялись на ваш сервер, то все хорошо. Если же у вас еще нет доменов или же вы по какой-то причине пока что не хотите прицеплять их к вашему серверу, вы можете использовать файл hosts вашего локального компьютера, чтобы имитировать переход через нужный домен для проверки работы virtual host.
При выполнении описанных ниже действий запросы на определенные домены с вашего локального компьютера будут перехватываться и принудительно перенаправляться на ip-адрес вашего VPS, в обход DNS-серверов. При этом данные перенаправления будут обрабатываться исключительно для вашего локального компьютера, что очень удобно для тестирования различных систем на этапе создания сайтов, в том числе для тестирования virtual host.

Убедитесь что вы настраиваете локальный компьютер, а не VPS. У вас должны быть права администратора или вы должны знать пароль от учетной записи администратора для внесения изменений в файл hosts. Если вы используете операционную систему семейства Linux или Mac, выполните следующую команду:

sudo nano /etc/hosts

Если вы используете операционную систему Windows, вы найдете файл hosts по адресу:

C:\Windows\System32\drivers\etc\hosts

В системе Windows данный файл скрыт и является системным, возможно вам придется включить отображение скрытых и системных файлов в настройках папок.

Вы должны добавить в файл домены, которые использовали в данном руководстве и публичный ip-адрес вашего VPS. Для доменов, которые использовал я, при условии что ip-адрес моего VPS 111.111.111.111 записи, которые необходимо добавить, будут выглядеть так:

 

127.0.0.1   localhost
111.111.111.111 example.com
111.111.111.111 test.com

Сохраните и закройте файл. Теперь все запросы на домены example.com и test.com будут автоматически перенаправляться на наш VPS 111.111.111.111 и обрабатываться виртуальными хостами так, как если бы мы использовали реальные домены.

 

Шаг седьмой – проверка работоспособности

Теперь все настроено и вы можете проверить работу Virtual hosts, введя в адресую строку вашего браузера examle.com. Если всё хорошо, вы увидите следующую страницу:

Вывод страницы example.com при использовании virtual hosts

Аналогично, при запросе к домену test.com вы увидите соответствующую страницу:

Вывод страницы test.com при использовании virtual hosts

Если обе страницы открываются нормально, можно считать что на вашем сервере настроены и исправно работают два виртуальных хоста. Если вы вносили изменения в файл hosts, можете удалить их чтобы не засорять системные настройки ненужной информацией.

 

Заключение

Если вы внимательно выполнили все пункты данного руководства, то ваш сервер успешно настроен на работу двух виртуальных хостов. Вы можете продолжить и, повторив все пункты, добавить столько доменов, сколько считаете необходимым. Можете не стесняться, Apache не имеет программных ограничений на количество virtual hosts, количество доменов и сайтов, которые может обрабатывать сервер, ограничено лишь техническими возможностями железа, на котором установлен Apache.

 

Перевод статьи Digitalocean community. Автор оригинальной статьи Brennen Bearnes.