Веб-сервер Apache — популярный способ размещения сайтов в Интернете. Согласно оценкам, в 2019 году на базе этого веб-сервера работали 29% всех активных сайтов. Он обеспечивает разработчикам преимущества гибкости и надежности. Используя Apache, администратор может настроить один сервер для хостинга нескольких доменов или сайтов через единый интерфейс или IP-адрес, используя систему сопоставления.
Каждый домен или сайт («виртуальный хост»), настроенный с помощью Apache, направляет посетителя в определенную директорию, где хранятся данные этого сайта. При этом не показывается никаких признаков того, что этот же сервер обслуживает другие сайты. Эта схема поддерживает расширение без программных ограничений, пока сервер сможет выдерживать нагрузку. Базовая единица, описывающая отдельный сайт или домен, называется виртуальный хост
.
В этом руководстве мы рассмотрим настройку виртуальных хостов Apache на сервере Ubuntu 18.04. Во время этого процесса вы научитесь предоставлять разный контент разным посетителям в зависимости от того, какие домены они запрашивают.
Прежде чем начать прохождение этого обучающего руководства, создайте пользователя без привилегий root.
Для выполнения этих шагов у вас должен быть установлен сервер Apache. Если вы еще не установили Apache, вы можете сделать это с помощью диспетчера пакетов apt
:
- sudo apt update
- sudo apt install apache2
Если вам требуются более подробные инструкции или информация по настройке брандмауэра, воспользуйтесь обучающим руководством Установка веб-сервера Apache в Ubuntu 18.04.
Для целей настоящего руководства наша конфигурация предусматривает создание виртуального хоста для example.com
и еще одного для test.com
. В руководстве будут размещаться ссылки на них, однако вам следует использовать собственные домены или значения при выполнении указаний.
Если вы используете DigitalOcean, вы можете научиться настраивать домены из указаний в документации Добавление доменов. Для информации о других поставщиках следует ознакомиться с соответствующей документацией по продукции. Если у вас нет доменов, вы можете использовать тестовые значения.
Позднее мы покажем, как нужно отредактировать локальный файл hosts для тестирования конфигурации, если вы используете тестовые значения. Это позволит вам проверять конфигурацию с домашнего компьютера, даже если ваш контент не будет доступен другим посетителям через доменное имя.
Прежде всего, нам потребуется создать структуру директорий, где будут храниться данные сайтов, которые мы будем выводить посетителям.
Наша корневая директория документов
(директория верхнего уровня, где Apache ищет выводимый контент) будет задана как отдельные директории в директории /var/www
. Здесь мы создадим директории для каждого из виртуальных хостов, которые мы планируем создать.
В каждом из этих директорий мы создадим папку public_html
для хранения файлов. Это даст нам определенную гибкость в отношении хостинга.
Например, мы будем создавать директории для наших сайтов следующим образом. Если вы используете реальные домены или альтернативные значения, замените выделенный текст соответствующим образом.
- sudo mkdir -p /var/www/example.com/public_html
- sudo mkdir -p /var/www/test.com/public_html
Выделенные красным части представляют доменные имена, которые мы хотим обслуживать через VPS.
Теперь у нас имеется структура директорий для наших файлов, но они принадлежат пользователю root. Если мы хотим, чтобы обычный пользователь имел возможность изменять файлы в веб-директориях, мы можем изменить структуру владения следующим образом:
- sudo chown -R $USER:$USER /var/www/example.com/public_html
- sudo chown -R $USER:$USER /var/www/test.com/public_html
Переменная $USER
будет принимать значение текущего пользователя в системе при нажатии клавиши ENTER
. Так наш обычный пользователь теперь является владельцем субдиректорий public_html
, где мы будем хранить наш контент.
Также нам необходимо изменять разрешения, чтобы обеспечить доступ для чтения к общей веб-директории и всем содержащимся в ней файлам и папкам, чтобы страницы могли выводиться надлежащим образом:
- sudo chmod -R 755 /var/www
Теперь ваш веб-сервер должен иметь необходимые разрешения для вывода контента, а ваш пользователь должен иметь права создания контента в соответствующих папках.
Теперь у нас имеется структура директорий. Давайте создадим контент для вывода.
Для демонстрационных целей мы создадим страницу index.html
для каждого сайта.
Начнем с example.com
. Мы можем открыть файл index.html
в текстовом редакторе, в данном случае мы используем nano:
- 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
) после завершения редактирования.
Мы можем скопировать этот файл и использовать его в качестве основы для нашего второго сайта:
- 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>
Сохраните и закройте этот файл. Теперь у нас имеются все необходимые страницы для тестирования конфигурации виртуальных хостов.
Файлы виртуального хоста указывают фактическую конфигурацию виртуальных хостов и задают способ ответа веб-сервера 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
Без комментариев этот файл будет выглядеть примерно так:
<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>
Сохраните и закройте файл.
Теперь у нас есть первый файл виртуального хоста, и мы можем создать второй файл посредством копирования первого и его надлежащей настройки.
Для начала скопируйте файл:
- 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
Теперь вам нужно изменить все элементы информации, чтобы они ссылались на второй домен. После завершения все будет выглядеть следующим образом:
<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
.
- sudo a2ensite example.com.conf
- sudo a2ensite test.com.conf
Отключите сайт по умолчанию, заданный в файле 000-default.conf
:
- sudo a2dissite 000-default.conf
После завершения нужно перезапустить Apache для вступления изменений в силу и использовать команду systemctl status
для подтверждения успешного перезапуска.
- sudo systemctl restart apache2
- sudo systemctl status apache2
-
-
Теперь наш сервер должен быть настроен для обслуживания двух сайтов.
Если вы использовали для тестирования этой процедуры фиктивные доменные имена, вы можете проверить функциональность этого процесса, временно изменив файл hosts
на локальном компьютере.
В результате этого изменения все запросы настроенных доменов будут перехватываться и перенаправляться на сервер VPS, как это делала бы система DNS, если бы мы использовали зарегистрированные домены. Это будет работать только на локальном компьютере и только для целей тестирования.
Для этих шагов необходимо использовать локальный компьютер, а не сервер VPS. Вам нужно знать пароль администратора вашего компьютера или входить в группу администраторов.
Если вы используете компьютер под управлением Mac или Linux, отредактируйте локальный файл с привилегиями администратора, введя следующую команду:
- 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, так что вы можете создать столько доменных имен, сколько ваш сервер может обслуживать на аппаратном уровне.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
How to install SSL Let’s Encrypt to this mutiple sites?