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

Введение

Веб-сервер Apache — популярный способ размещения сайтов в Интернете. Согласно оценкам, в 2019 году на базе этого веб-сервера работали 29% всех активных сайтов. Он обеспечивает разработчикам преимущества гибкости и надежности. Используя Apache, администратор может настроить один сервер для хостинга нескольких доменов или сайтов через единый интерфейс или IP-адрес, используя систему сопоставления.

Каждый домен или сайт («виртуальный хост»), настроенный с помощью Apache, направляет посетителя в определенную директорию, где хранятся данные этого сайта. При этом не показывается никаких признаков того, что этот же сервер обслуживает другие сайты. Эта схема поддерживает расширение без программных ограничений, пока сервер сможет выдерживать нагрузку. Базовая единица, описывающая отдельный сайт или домен, называется виртуальный хост.

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

Предварительные требования

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

Для выполнения этих шагов у вас должен быть установлен сервер Apache. Если вы еще не установили Apache, вы можете сделать это с помощью диспетчера пакетов apt:

  1. sudo apt update
  2. sudo apt install apache2

Если вам требуются более подробные инструкции или информация по настройке брандмауэра, воспользуйтесь обучающим руководством Установка веб-сервера Apache в Ubuntu 18.04.

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

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

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

Шаг 1 — Создание структуры директорий

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

Наша корневая директория документов (директория верхнего уровня, где Apache ищет выводимый контент) будет задана как отдельные директории в директории /var/www. Здесь мы создадим директории для каждого из виртуальных хостов, которые мы планируем создать.

В каждом из этих директорий мы создадим папку public_html для хранения файлов. Это даст нам определенную гибкость в отношении хостинга.

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

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

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

Шаг 2 — Предоставление разрешений

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

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

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

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

  1. sudo chmod -R 755 /var/www

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

Шаг 3 — Создание демонстрационных страниц для каждого виртуального хоста

Теперь у нас имеется структура директорий. Давайте создадим контент для вывода.

Для демонстрационных целей мы создадим страницу index.html для каждого сайта.

Начнем с example.com. Мы можем открыть файл index.html в текстовом редакторе, в данном случае мы используем nano:

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

В этом файле мы создадим документ HTML, указывающий на связанный с ним сайт. Документ будет выглядеть так:

/var/www/example.com/public_html/index.html
<html>
  <head>
    <title>Welcome to Example.com!</title>
  </head>
  <body>
    <h1>Success! The example.com virtual host is working!</h1>
  </body>
</html>

Сохраните и закройте файл (в nano нажмите CTRL + X, затем Y и ENTER) после завершения редактирования.

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

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

Затем мы можем открыть файл и изменить соответствующую информацию:

  1. nano /var/www/test.com/public_html/index.html
/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.

Создание первого файла виртуального хоста

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

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

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

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

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

/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

После этого наш файл виртуального хоста должен выглядеть следующим образом:

/etc/apache2/sites-available/example.com.conf
<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>

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

Копирование первого виртуального хоста и настройка для второго домена

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

Для начала скопируйте файл:

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

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

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

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

/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 для активации каждого из наших сайтов. Дополнительную информацию об этом скрипте можно найти в документации по a2ensite.

  1. sudo a2ensite example.com.conf
  2. sudo a2ensite test.com.conf

Отключите сайт по умолчанию, заданный в файле 000-default.conf:

  1. sudo a2dissite 000-default.conf

После завершения нужно перезапустить Apache для вступления изменений в силу и использовать команду systemctl status для подтверждения успешного перезапуска.

  1. sudo systemctl restart apache2
  2. sudo systemctl status apache2

Теперь наш сервер должен быть настроен для обслуживания двух сайтов.

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

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

В результате этого изменения все запросы настроенных доменов будут перехватываться и перенаправляться на сервер VPS, как это делала бы система DNS, если бы мы использовали зарегистрированные домены. Это будет работать только на локальном компьютере и только для целей тестирования.

Для этих шагов необходимо использовать локальный компьютер, а не сервер VPS. Вам нужно знать пароль администратора вашего компьютера или входить в группу администраторов.

Если вы используете компьютер под управлением Mac или Linux, отредактируйте локальный файл с привилегиями администратора, введя следующую команду:

  1. sudo nano /etc/hosts

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

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

Для доменов, указанных в настоящем руководстве, замените IP-адрес сервера на your_server_IP, и ваш файл будет выглядеть примерно так:

/etc/hosts
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 на нашем компьютере будут перенаправляться на наш сервер. Так мы можем протестировать виртуальные хосты, хотя и не являемся владельцами этих доменов.

Шаг 7 — Тестирование результатов

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

http://example.com

Вы должны увидеть страницу, выглядящую примерно так:

Пример виртуального хоста Apache

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

http://test.com

Тестирование виртуального хоста Apache

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

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

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

Заключение

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

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

Scroll to top