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

Apache является одним из самых популярных веб-серверов в мире.

Компоненты и функции Apache разделены на отдельные элементы, которые можно индивидуально устанавливать и настраивать. Одним из базовых элементов, отвечающим за индивидуальные параметры сайта или домена, является виртуальный хост.

Виртуальные хосты позволяют администратору использовать один сервер для размещения нескольких сайтов (в рамках одного интерфейса или IP-адреса). Каждый домен, настроенный таким образом, будет направлять посетителя на соответствующий сайт. Количество виртуальных хостов на одном сервере ограничивается исключительно ресурсами этого сервера.

Данное руководство поможет настроить виртуальные хосты на выделенном сервере Ubuntu 16.04, что позволит обслуживать разный контент в зависимости от запрашиваемого домена.
Требования

Предварительно настроенный сервер Ubuntu 16.04.
Не-root пользователь с расширенными привилегиями.
Установленный веб-сервер Apache:

sudo apt-get update
sudo apt-get install apache2

Примечание: В руководстве используются условные домены example.com и test.com; не забудьте заменить их своим доменным именем.

Если у вас нет доменного имени, в конце руководства показано, как протестировать настройку с фиктивными значениями.
1: Создание структуры каталогов

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

Каталог document root (каталог, содержащий контент для Apache) по умолчанию находится в /var/www; в нём нужно создать отдельный каталог для каждого виртуального хоста. В каждом таком каталоге будет размещен каталог public_html, в котором будут находиться нужные файлы. Благодаря этому хостинг становится более гибким.

Необходимые каталоги можно создать при помощи следующих команд:

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

Примечание: Не забудьте указать свои доменные имена в командах.
2: Настройка прав

Структура каталогов готова, но все они принадлежат пользователю root. Чтобы не-рутовый пользователь мог вносить изменения в файлы веб-каталога, нужно изменить права на эти файлы при помощи следующей команды:

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

Переменная $USER примет имя текущего пользователя. После этого подкаталоги каталоги public_html, содержащие контент сайтов, будут принадлежать текущему пользователю.

Также нужно изменить привилегии и открыть веб-каталог и всё его содержимое для чтения, в противном случае страницы будут отображаться некорректно.

sudo chmod -R 755 /var/www

Теперь все права установлены верно; можно приступать к созданию контента в специальных каталогах.
3: Создание демо-страниц для виртуальных хостов

Создайте тестовый контент; для пробной настройки хостов простых страниц будет достаточно. Просто создайте страницы index.html для каждого сайта.

Начнём с example.com; откройте файл index.html в текстовом редакторе:

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

В этом файле создайте простой HTML-документ, который указывает, к какому сайту подключена страница. В данном случае этот файл выглядит так:

Success! The example.com virtual host is working!

Сохраните и закройте файл.

Затем можно скопировать этот файл и использовать его как шаблон для второго сайта:

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
Success! The test.com virtual host is working!

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

Файлы виртуальных хостов задают настройки отдельных сайтов и помогают Apache корректно отвечать на запросы.

Apache поставляется со стандартным файлом хоста по имени 000-default.conf, который можно использовать в качестве шаблона. Скопируйте его, чтобы создать виртуальный хост для каждого доменного имени.

Примечание: По умолчанию настройки Ubuntu требуют, чтобы файлы виртуальных хостов заканчивались на .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

С опущенными комментариями файл будет выглядеть примерно так:

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

Как видите, файл не такой уж объёмный. Теперь нужно внести данные о первом домене и добавить несколько директив. Этот виртуальный хост будет отвечать на запросы, отправляемые на стандартный HTTP-порт 80.

Сначала нужно изменить директиву ServerAdmin, указав электронный адрес администратора сайта.

ServerAdmin admin@example.com

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

ServerName example.com
ServerAlias www.example.com

Осталось внести в файл хоста последнее изменение – указать нахождение document root этого домена. Укажите в DocumentRoot ранее созданный каталог:

DocumentRoot /var/www/example.com/public_html

В результате файл хоста выглядит так:

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

Сохраните и закройте файл.

Скопируйте только что созданный файл и используйте его как шаблон для виртуального хоста второго сайта, отредактировав соответствующие данные.

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

Теперь осталось отредактировать соответствующие данные, чтобы файл мог обслуживать второй домен. В результате второй файл виртуального хоста имеет такой вид:

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

Сохраните и закройте файл.
5: Включение виртуальных хостов

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

К примеру, для этого можно использовать a2ensite:

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

Затем отключите стандартный виртуальный хост 000-default.conf:

sudo a2dissite 000-default.conf

Перезапустите Apache, чтобы активировать изменения:

sudo systemctl restart apache2

Обратите внимание: система Ubuntu 16.04 использует systemctl.

Также можно использовать команду:

sudo service apache2 restart

Эта команда ещё поддерживается, однако она может вернуть нестандартный результат.
6: Настройка локальных хостов (опционально)

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

Примечание: Убедитесь, что вы перешли на локальную машину. Для выполнения данного раздела нужны учётные данные администратора.

В системах Mac или Linux отредактируйте файл hosts с привилегиями администратора.

sudo nano /etc/hosts

Примечание: Пользователи Windows могут найти необходимые инструкции по этой ссылке.

В этом файле нужно указать IP-адрес сервера, а затем доменное имя, которое будет использоваться для доступа к серверу.

К примеру, если IP-адрес сервера — 111.111.111.111, в конец файла хоста нужно внести следующие строки

127.0.0.1 localhost
127.0.1.1 guest-desktop
111.111.111.111 example.com
111.111.111.111 test.com

Теперь все запросы к example.com и test.com будут отправлены на локальный компьютер, а оттуда — на IP-адрес сервера.

Сохраните и закройте файл.
7: Результаты

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

http://example.com

В данном случае на экране появится сообщение:

Success! The example.com virtual host is working!

Примечание: Результат, появившийся на экране, зависит от содержания файла, созданного в разделе 3.

Точно так же нужно проверить и второй сайт:

http://test.com

На экране появится следующий результат:

Success! The test.com virtual host is working!

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

Теперь сервер Ubuntu 16.04 поддерживает два сайта на отдельных доменах. В целом, количество хостов, которое может поддерживать Apache, зависит только от ресурсов виртуального выделенного сервера. Чтобы добавить на сервер новый виртуальный хост, просто повторите весь вышеописанный процесс.