Поиск по сайту:

Как настроить виртуальные хосты 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, чтобы проверить конфигурацию, если вы используете тестовые значения. Это позволит вам проверить свою конфигурацию с домашнего компьютера, даже если ваш контент не будет доступен через доменное имя другим посетителям.

Шаг первый — создайте структуру каталогов

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

Наш корневой каталог документа (каталог верхнего уровня, который 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.

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

Теперь у нас есть структура каталогов для наших файлов, но они принадлежат нашему пользователю 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

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

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

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

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

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

  1. 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>

Сохраните и закройте файл (в 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
<html>
  <head>
    <title>Welcome to Test.com!</title>
  </head>
  <body> <h1>Success! The test.com virtual host is working!</h1>
  </body>
</html>

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

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

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

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

Мы начнем с одного домена, настроим его, скопируем для второго домена, а затем внесем необходимые дополнительные корректировки. Конфигурация Ubuntu по умолчанию требует, чтобы каждый файл виртуального хоста заканчивался на .conf.

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

Начните с копирования файла для первого домена:

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

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

  1. 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>

На этом этапе сохраните и закройте файл.

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

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

Начните с его копирования:

  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

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

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

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

Шаг шестой — настройте файл локальных хостов (необязательно)

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

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

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

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

  1. sudo nano /etc/hosts

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

Детали, которые вам нужно добавить, — это общедоступный 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 на наш компьютер и отправит их на наш сервер. Это то, что нам нужно, если мы на самом деле не являемся владельцами этих доменов, чтобы протестировать наши виртуальные хосты.

Шаг седьмой — проверьте свои результаты

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

http://example.com

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

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

http://test.com

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

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

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

Заключение

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

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