Apache является одним из самых популярных веб-серверов в мире, он обеспечивает надежность и гибкость. По состоянию на 2019 год он обслуживает 29% всех активных веб-сайтов. С помощью Apache администратор может разместить несколько доменов или сайтов в рамках одного сервера.
Каждый домен или отдельный сайт в контексте веб-сервера Apache называется «виртуальный хост». Каждый виртуальный хост будет направлять посетителя в определенный каталог, содержащий информацию о запрашиваемом сайте. При этом пользователи не узнают, что тот же сервер обслуживает другие сайты. Эта схема расширяемая: пока ваш сервер может справиться с нагрузкой, в ыможете добавлять новые виртуальные хосты (то есть ресурсы сервера – единственное ограничение). Базовый блок конфигураций, который описывает отдельный сайт или домен, называется виртуальным хостом.
В этом мануале вы узнаете, как настроить виртуальные хосты Apache на сервере Ubuntu 18.04.
Требования
- Настроенный сервер Ubuntu 18.04.
- Пользователь с доступом к sudo (инструкции по настройке – здесь).
- Предварительно установленный веб-сервер Apache (инструкции по установке вы найдёте здесь).
Если вы хотите быстро установить веб-сервер, запустите эти команды:
sudo apt update
sudo apt 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: Настройка привилегий
Поскольку каталоги созданы с помощью sudo, права на них принадлежат пользователю 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
Читайте также: Привилегии в Linux
Теперь каталоги готовы. Можно приступать к созданию контента.
3: Создание демо-страниц для виртуальных хостов
Давайте создадим тестовый контент – страницы index.html для каждого сайта; для пробной настройки будет достаточно простых страниц.
Начнём с домена example.com; откройте файл index.html в текстовом редакторе:
nano /var/www/example.com/public_html/index.html
В этом файле создайте простой HTML-документ, который указывает, к какому сайту подключена страница. В данном случае этот файл выглядит так:
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success! The example.com virtual host is working!</h1>
</body>
</html>
Сохраните и закройте файл.
Затем можно скопировать этот файл и использовать его как шаблон для второго сайта:
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>Welcome to Test.com!</title>
</head>
<body> <h1>Success! The test.com virtual host is working!</h1>
</body>
</html>
Сохраните и закройте файл. Ваши тестовые страницы готовы.
4: Создание файлов виртуальных хостов
Файлы виртуальных хостов содержат настройки отдельных сайтов и помогают Apache правильно обрабатывать запросы.
Apache предоставляет стандартный файл хоста по имени 000-default.conf, который можно использовать в качестве шаблона. Скопируйте его, чтобы создать виртуальный хост для каждого вашего домена.
Примечание: По умолчанию настройки Ubuntu требуют, чтобы файлы виртуальных хостов заканчивались на .conf.
Виртуальный хост для первого сайта
Скопируйте стандартный файл виртуального хоста:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf
Откройте его в редакторе:
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>
Как видите, этот файл не такой уж объёмный. Такой виртуальный хост будет обслуживать запросы, отправляемые на стандартный HTTP-порт 80. Давайте внесем в него данные о первом домене и добавить несколько директив.
Сначала нужно отредактировать директиву 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
Откройте полученный файл в редакторе:
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>
Сохраните и закройте файл.
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
sudo systemctl status apache2
Теперь ваш сервер обслуживает два сайта одновременно.
6: Настройка локальных хостов (опционально)
Если у вас нет домена и вы использовали условный домен вместо настоящего, вы можете протестировать свои настройки, временно отредактировав файл hosts на локальном компьютере.
Он будет перехватывать запросы на настроенные ранее домены и направлять их на VPS (то есть, работать как DNS). Но этот метод работает только на локальной машине и подходит только для тестирования.
Примечание: Убедитесь, что вы перешли на локальную машину. Для выполнения данного раздела нужны учётные данные администратора.
В системах Mac или Linux отредактируйте файл hosts с привилегиями администратора.
sudo nano /etc/hosts
Инструкции для Windows вы найдете здесь.
В этом файле нужно указать IP-адрес сервера, а затем домен, по которому осуществляется доступ к серверу.
Используя условный IP-адрес сервера your_server_IP, мы внесем в конец файла хоста следующие строки:
127.0.0.1 localhost
127.0.1.1 guest-desktop
your_server_IP example.com
your_server_IP test.com
Теперь все запросы к example.com и test.com будут отправлены на локальный компьютер, а оттуда – на IP-адрес сервера.
Сохраните и закройте файл.
7: Тестирование настройки
Чтобы протестировать настройку виртуальных хостов, просто откройте домен в веб-браузере:
http://example.com
сообщение:
Success! The example.com virtual host is working!
Примечание: Результат, появившийся на экране, зависит от содержания файлов ваших тестовых страниц.
Точно так же проверьте и второй сайт:
http://test.com
На экране появится:
Success! The test.com virtual host is working!
Если оба сайта работают, значит, виртуальные хосты успешно настроены.
Если вы редактировали файл hosts на локальном компьютере, после тестирования удалите внесённые в него изменения, чтобы не засорять файл ненужными записями.
Заключение
Теперь ваш сервер поддерживает два сайта одновременно.
Количество хостов, которое может поддерживать Apache, зависит только от ресурсов вашего виртуального сервера. Чтобы добавить на сервер новый виртуальный хост, просто повторите весь вышеописанный процесс.
Читайте также: