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

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


Введение

Веб-сервер Apache — самый популярный способ обслуживания веб-контента в Интернете. На его долю приходится более половины всех активных веб-сайтов в Интернете, и он чрезвычайно мощный и гибкий.

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

Эти обозначения позволяют администратору использовать один сервер для размещения нескольких доменов или сайтов за пределами одного интерфейса или IP-адреса с помощью механизма сопоставления. Это актуально для всех, кто хочет разместить более одного сайта на одном сервере.

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

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

Предпосылки

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

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

  1. sudo apt-get update
  2. sudo apt-get install apache2

После того, как эти шаги выполнены, мы можем приступить к работе.

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

Позже мы покажем, как отредактировать ваш локальный файл 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 в нашем редакторе, набрав:

  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>

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

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

  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>

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

Шаг 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

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

  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>

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

Шаг 5 — Включение новых файлов виртуального хоста

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

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

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

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

  1. sudo a2dissite 000-default.conf

Когда вы закончите, вам нужно перезапустить Apache, чтобы эти изменения вступили в силу:

  1. sudo systemctl restart apache2

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

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

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

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

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

  1. sudo nano /etc/hosts

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

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

Для доменов, которые я использовал в этом руководстве, предполагая, что мой IP-адрес VPS — 203.0.113.10, я мог бы добавить следующие строки в конец файла hosts:

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

Это будет направлять любые запросы для example.com и test.com на наш компьютер и отправлять их на наш сервер по адресу 203.0.113.10. Это то, что нам нужно, если мы на самом деле не являемся владельцами этих доменов, чтобы протестировать наши виртуальные хосты.

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

Шаг 7 — Проверка ваших результатов

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

http://example.com

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

Аналогичным образом, если вы можете посетить свою вторую страницу:

http://test.com

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

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

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

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

Заключение

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

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