Веб-сервер Apache является один из наиболее популярных способов обработке веб-контента в Интернете. На его долю приходится более половины всех активных веб-сайтов в интернете и является чрезвычайно мощным и гибким.
Apache разбивает его функциональные возможности и компоненты в отдельные единицы, которые можно настроить независимо друг от друга. Базовый блок, который описывает отдельный сайт или домен называется виртуальный хост.
При использовании виртуальных хостов, вы можете использовать один сервер для размещения нескольких доменов или сайтов из одного интерфейса или IP с помощью механизма согласования. Настроить запрос на домен, чтобы направить посетителя к конкретному каталогу, содержащего информацию об сайте. Другими словами, вы можете разместить более одного веб-сайта на одном сервере. Эта схема может быть расширена без каких-либо ограничений программного обеспечения до тех пор, пока ваш сервер может справиться с нагрузкой.
На этом уроке мы создадим два виртуальных хоста Apache на сервере Debian 8, с разным содержанием для посетителей на основе домена, которые они посещают.
Для завершения этого урока вам понадобятся:
В этом руководстве мы создадим виртуальные хосты для example.ru
и test.ru
, но вы можете заменить на свои собственные домены или значения, следуя далее.
Если вы не имеете в наличии домены, вы можете использовать example.ru
и test.ru
и следовать Шагу 5 из этого учебника, чтобы настроить файл локальные хосты, чтобы сопоставить эти домены IP — адресу вашего сервера. Это позволит вам проверить вашу конфигурацию с локального компьютера.
Первый шаг, который мы собираемся принять, это сделать структуру каталогов, которая будет содержать данные сайта, которые мы будет выкладывать для посетителей.
Наш корневой документ, каталог верхнего уровня, который указывает на Apache, будут установлены в отдельных каталогах в каталоге /var/www
. Мы создадим каталог для каждого из виртуальных хостов, которые мы настроим.
В каждом из этих каталогов, мы создадим папку public_html
, которая будет содержать веб — страницы. Это дает нам немного больше гибкости в том, как мы применяем более сложные веб — приложения в будущем; папка public_html
будет держать веб — контент и родительская папка, может содержать сценарии или код приложения для поддержки веб — контента.
Создание каталогов с помощью следующих команд:
sudo mkdir -p /var/www/example.ru/public_html sudo mkdir -p /var/www/test.ru/public_html
Так как мы создали каталоги с sudo
, они принадлежат нашим суперпользователю. Если мы хотим, чтобы наш обычный пользователь имел возможность изменять файлы в наших веб — каталогах, мы изменим права собственности, примерно так:
sudo chown -R $USER:$USER /var/www/example.ru/public_html sudo chown -R $USER:$USER /var/www/test.ru/public_html
Переменная $USER
использует значение пользователя, при помощи которого вы вошли в систему при нажатии кнопки ENTER
. Делая это, наш обычный пользователь в настоящее время владеет подкаталогом public_html
, где мы будем хранящие наше содержание.
Мы также должны изменить наши разрешения, чтобы гарантировать, что доступ на чтение разрешен к общему веб — каталогу и все файлы и папки, которые она содержит. Выполните эту команду, чтобы изменить права доступа к папке /var/www
и ее подпапок:
sudo chmod -R 755 /var/www
Теперь Ваш веб-сервер должен иметь разрешения, необходимые для предоставления контента, а пользователь должен иметь возможность создавать контент в нужные папки. Давайте создадим файл HTML для каждого сайта.
Мы создали нашу структуру каталогов. Давайте создадим некоторое содержание.
Давайте создадим простую страницу index.html
для каждого сайта. Это поможет нам гарантировать, что наши виртуальные хосты настроены должным образом.
Давайте начнем с страницы для example.ru
. Отредактируем новый файл index.html
с помощью следующей команды:
nano /var/www/example.ru/public_html/index.html
В этом файле, создадим простой HTML — документ, который указывает на главную страницу, когда посетитель попадает на example.ru
:
<html> <head> <title>Добро пожаловать Example.ru!</title> </head> <body> <h1>успех! Виртуальный хост example.ru работает!</h1> </body> </html>
Сохраните и закройте файл, когда вы закончите.
Теперь скопируйте этот файл на сайт test.ru
:
cp /var/www/example.ru/public_html/index.html /var/www/test.ru/public_html/index.html
Затем откройте файл в редакторе:
nano /var/www/test.ru/public_html/index.html
Изменить файл так, чтобы он ссылался на test.ru
вместо example.ru
:
<html> <head> <title>Добро пожаловать на Test.ru!</title> </head> <body> <h1>Успех! Виртуальный хост test.ru работает!</h1> </body> </html>
Сохраните и закройте этот файл. Теперь у вас есть страницы, необходимые для проверки конфигурации виртуального хоста. Далее, давайте настроим виртуальные хосты.
Файл виртуальных хостов указывает на фактическую конфигурацию наших виртуальных хостов и диктует, как веб-серверу Apache будет реагировать на различные запросы домена.
Apache поставляется с файлом виртуальных хостов по умолчанию под названием 000-default.conf
, которое можно использовать в качестве отправной точки. Скопируйте этот файл для первого домена:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.ru.conf
Примечание : Конфигурация Apache по умолчанию в Debian 8 требует, чтобы каждый файл виртуальных хостов заканчивался расширением .conf
.
Откройте новый файл в редакторе:
sudo nano /etc/apache2/sites-available/example.ru.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.ru
Далее, нам необходимо добавить две новые директивы. Первая из них , называется ServerName
, устанавливает базовый домен для данного виртуального хоста. Вторая называется ServerAlias
, определяет дальнейшие имена, которые должны соответствовать, как если бы они были базовым именем. Это полезно для сопоставления дополнительных узлов, которые вы определили, так как example.ru
и www.example.ru
оба работают, при условии, если оба этих хоста указывают на IP — адрес этого сервера.
Добавьте эти две директивы в файл конфигурации, сразу после строки ServerAdmin
:
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName example.ru ServerAlias www.example.ru DocumentRoot /var/www/html ...
Далее, измените местоположение корневого каталога документов для этого домена, изменив директиву DocumentRoot
, чтобы указать на каталог, созданный для этого хоста:
DocumentRoot /var/www/example.ru/public_html
После того, как вы сделали эти изменения, ваш файл должен выглядеть следующим образом:
<VirtualHost *:80> ServerAdmin admin@example.ru ServerName example.ru ServerAlias www.example.ru DocumentRoot /var/www/example.ru/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Сохраните и закройте файл.
Затем создайте второй файл конфигурации, создав копию этого файла:
sudo cp /etc/apache2/sites-available/example.ru.conf /etc/apache2/sites-available/test.ru.conf
Откройте новый файл в редакторе:
sudo nano /etc/apache2/sites-available/test.ru.conf
Затем измените соответствующие настройки для ссылки на свой второй домен. Когда вы закончите, ваш файл будет выглядеть следующим образом:
<VirtualHost *:80> ServerAdmin admin@test.ru ServerName test.ru ServerAlias www.test.ru DocumentRoot /var/www/test.ru/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Сохраните и закройте файл.
Теперь, когда мы создали файлы виртуальных хостов, мы можем включить их.
Вы создали папки и файлы конфигурации виртуальных хостов, но Apache не будет использовать их , пока вы не включите их. Вы можете использовать инструмент a2ensite
для того, чтобы каждый из ваших сайтов заработал.
Активируйте первый сайт:
sudo a2ensite example.ru.conf
Вы увидите следующий вывод, если не было никаких ошибок синтаксиса или опечатки в вашем файле:
Enabling site example.ru. To activate the new configuration, you need to run: service apache2 reload
Для того, чтобы ваши изменения вступили в силу, вы должны перезагрузить Apache. Но прежде чем сделать, включите другой сайт:
sudo a2ensite test.ru.conf
Вы увидите подобное сообщение, указывающее, что сайт был включен:
Enabling site test.ru. To activate the new configuration, you need to run: service apache2 reload
Затем отключите узел по умолчанию, определенный в 000-default.conf
с помощью команды a2dissite
:
sudo a2dissite 000-default.conf
Теперь перезапустите Apache:
sudo systemctl restart apache2
Сайты теперь настроены. Давайте проверим их. Если вы используете реальные домены, настроенные, указывающие на IP-адрес вашего сервера, вы можете пропустить следующий шаг. Но если ваши домены еще не настроены, или если вы просто сделали тестирование, читайте дальше, чтобы узнать, как проверить нашу установку с помощью локального компьютера.
Если вы не использовали фактические доменные имена, которыми вы владеете, чтобы проверить эту процедуру, используя некоторые примеры доменов вместо реальных, вы можете по крайней мере проверить функциональность этого процесса, временно изменив файл hosts
на локальном компьютере.
Это позволит перехватывать любые запросы для доменов, настроить и направить их на свой VPS сервер, так же, как это делает система DNS, если бы вы использовали зарегистрированные доменов. Это будет работать только с вашего компьютера, хотя, и это полезно только для целей тестирования.
Убедитесь, что вы выполнили следующие действия на локальном компьютере, а не сервере VPS. Вам также необходимо знать пароль администратора локального компьютера или быть членом группы администраторов.
Если вы на компьютере Mac или Linux, редактировать локальный файл с правами администратора, набрав:
sudo nano /etc/hosts
Если вы на Windows, откройте командную строку с правами администратора и введите:
notepad %windir%\system32\drivers\etc\hosts
После того, как у вы откроете файл, добавьте строку, которая отображает публичный IP-адрес вашего сервера для каждого доменного имени, как показано в следующем примере:
127.0.0.1 localhost ... 111.111.111.111 example.ru 111.111.111.111 test.ru
Это позволит направлять любые запросы на example.ru
и test.ru
на вашем компьютере и отправить их на сервер в 111.111.111.111
.
Сохраните и закройте файл. Теперь вы можете проверить вашу установку. Когда вы уверены, что все работает, удалите две строки из файла.
Теперь, когда у вас настроены ваши виртуальные хосты, вы можете протестировать установку легко, перейдя в домены, настроенные в веб — браузере. Посетите первый сайт по адресу http://example.ru
и вы увидите страницу, которая выглядит следующим образом :
Успех! Виртуальный хост example.ru работает!
Точно так же, если вы посетите ваш второй хост по адресу http://test.ru
, вы увидите файл, который вы создали для своего второго сайта:
Успех! Виртуальный хост test.ru работает!
Если оба из этих сайта работают, вы успешно настроили два виртуальных хостов на одном сервере.
Примечание:Если вы настроили файл хостов на вашем домашнем компьютере, как показано на шаге 5, то теперь вы можете удалить эти строки, которые добавили, так как вы уже проверили работоспособность вашей конфигурации. Это позволит предотвратить ваши хосты файл от заполнения записей, которые на самом деле не нужны.
Теперь у вас есть один сервер с двумя отдельными доменными именами. Вы можете расширить этот процесс, выполнив следующие действия, чтобы добавить дополнительные виртуальные хосты.
Там нет ограничения программного обеспечения по количеству доменных имен, которые Apache может обрабатывать, так что не стесняйтесь, сделайте столько, сколько ваш сервер способен обрабатывать.
Чтобы использовать Apache для обслуживания защищенного контента, следуйте учебнику, как установить сертификат SSL и SPDY на Ubuntu с помощью «Let’s Encrypt». Чтобы использовать Apache в передней части вашего веб — приложения, прочитайте гид как использовать Apache в качестве обратного прокси сервера с mod_proxy на Debian 8.