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

Вступление

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

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

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

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

Предпосылки

Для завершения этого урока вам понадобится:

В этом руководстве мы создадим виртуальные хосты для + example.com + и + test.com +, но вы можете заменить свои собственные домены или значения, следуя далее. Чтобы указать ваши доменные имена на вашем сервере, следуйте нашему руководству Имя с помощью DigitalOcean.

Если у вас нет доступных доменов для игры, вы можете использовать + example.com + и + test.com + и следовать шагу 5 этого руководства, чтобы настроить файл локальных хостов для сопоставления этих доменов с IP-адресом вашего сервера. , Это позволит вам проверить вашу конфигурацию с вашего локального компьютера.

Шаг 1 - Создание структуры каталогов

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

Наш document root, каталог верхнего уровня, на который Apache смотрит, чтобы найти контент для обслуживания, будет настроен на отдельные каталоги в каталоге + / var / www +. Мы создадим каталог для каждого виртуального хоста, который мы настроим.

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

Создайте каталоги, используя следующие команды:

sudo mkdir -p /var/www//public_html
sudo mkdir -p /var/www//public_html

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

sudo chown -R $USER:$USER /var/www//public_html
sudo chown -R $USER:$USER /var/www//public_html

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

Мы также должны немного изменить наши разрешения, чтобы обеспечить доступ для чтения к общему веб-каталогу и ко всем файлам и папкам, которые он содержит, чтобы страницы могли правильно обслуживаться. Выполните эту команду, чтобы изменить права доступа к папке + / var / www + и ее дочерним элементам:

sudo chmod -R 755 /var/www

Если вы новичок в управлении разрешениями в Linux, см. Https://www.digitalocean.com/community/tutorials/an-introduction-to-linux-permissions[thsutorial].

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

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

Шаг 2 - Создание страниц по умолчанию для каждого виртуального хоста

Давайте создадим простую страницу + index.html для каждого сайта. Это поможет нам обеспечить правильную настройку наших виртуальных хостов в дальнейшем.

Давайте начнем со страницы для + example.com +. Отредактируйте новый файл + index.html + с помощью следующей команды:

nano /var/www//public_html/index.html

В этом файле создайте простой HTML-документ, который указывает, что посетитель просматривает домашнюю страницу + example.com +:

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

<html>
 <head>
   <title>Welcome to !</title>
 </head>
 <body>
   <h1>Success! The  virtual host is working!</h1>
 </body>
</html>

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

Теперь скопируйте этот файл на сайт + test.com +:

cp /var/www//public_html/index.html /var/www//public_html/index.html

Затем откройте файл в вашем редакторе:

nano /var/www//public_html/index.html

Измените файл так, чтобы он ссылался на + test.com + вместо + example.com +:

/var/www/test.com/public_html/index.html

<html>
 <head>
   <title>Welcome to !</title>
 </head>
 <body> <h1>Success! The  virtual host is working!</h1>
 </body>
</html>

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

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

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

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

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

Откройте новый файл в вашем редакторе:

sudo nano /etc/apache2/sites-available/.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>

Этот виртуальный хост совпадает с any запросами, которые отправляются на порт + 80 +, порт HTTP по умолчанию. Давайте внесем несколько изменений в эту конфигурацию и добавим несколько новых директив.

Сначала измените директиву + ServerAdmin + на электронную почту, по которой администратор сайта может получать электронные письма.

/etc/apache2/sites-available/example.com.conf

ServerAdmin

Далее нам нужно добавить две новые директивы. Первый, называемый + ServerName +, устанавливает базовый домен для этого определения виртуального хоста. Второй, называемый + ServerAlias ​​+, определяет дополнительные имена, которые должны совпадать, как если бы они были базовыми. Это полезно для сопоставления дополнительных хостов, которые вы определили, поэтому оба + example.com + и + www.example.com + оба работают, если оба этих хоста указывают на IP-адрес этого сервера.

Добавьте эти две директивы в файл конфигурации сразу после строки + ServerAdmin +:

/etc/apache2/sites-available/example.com.conf

<VirtualHost *:80>

       ServerAdmin webmaster@localhost


       DocumentRoot /var/www/html
...

Затем измените местоположение корня документа для этого домена, изменив директиву + DocumentRoot +, чтобы указать каталог, который вы создали для этого хоста:

DocumentRoot /var/www//public_html

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

/etc/apache2/sites-available/example.com.conf

<VirtualHost *:80>
       ServerAdmin


       DocumentRoot /var/www//public_html
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

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

Затем создайте второй файл конфигурации, создав копию этого файла:

sudo cp /etc/apache2/sites-available/.conf /etc/apache2/sites-available/.conf

Откройте новый файл в вашем редакторе:

sudo nano /etc/apache2/sites-available/.conf

Затем измените соответствующие настройки для ссылки на ваш второй домен. Когда вы закончите, ваш файл будет выглядеть так:

/etc/apache2/sites-available/test.com.conf

<VirtualHost *:80>
   ServerAdmin
   ServerName
   ServerAlias
   DocumentRoot /var/www//public_html
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

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

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

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

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

Активировать первый сайт:

sudo a2ensite .conf

Вы увидите следующий вывод, если в вашем файле не было синтаксических ошибок или опечаток:

OutputEnabling site example.com.
To activate the new configuration, you need to run:
 service apache2 reload

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

sudo a2ensite .conf

Вы увидите похожее сообщение о том, что сайт был включен:

OutputEnabling site test.com.
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-адреса вашего сервера, вы можете пропустить следующий шаг. Но если ваши домены еще не распространены, или вы просто тестируете, читайте дальше, чтобы узнать, как протестировать эту настройку на локальном компьютере.

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

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

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

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

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

sudo nano /etc/hosts

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

notepad %windir%\system32\drivers\etc\hosts

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

/ и т.д. / хосты

127.0.0.1   localhost
...

Это будет направлять любые запросы к + example.com + и + test.com + на ваш компьютер и отправлять их на ваш сервер по адресу + 111.111.111.111 +.

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

Шаг 6 - Тестирование ваших результатов

Теперь, когда у вас настроены виртуальные хосты, вы можете легко протестировать их, перейдя на домены, которые вы настроили в веб-браузере. Посетите первый сайт по адресу + http: // example.com +, и вы увидите страницу, которая выглядит следующим образом:

изображение: https: //assets.digitalocean.com/articles/apache_vhosts_debian8/hPVmDq1.png [результат Apache example.com]

Аналогично, если вы можете посетить второй хост по адресу + http: // test.com +, вы увидите файл, созданный для второго сайта:

изображение: https: //assets.digitalocean.com/articles/apache_vhosts_debian8/Mh9EbW3.png [результат Apache test.com]

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

Заключение

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

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

Чтобы использовать Apache для предоставления защищенного содержимого, следуйте учебному руководству How To Secure Apache с Let’s Encrypt на Debian 8. Чтобы использовать Apache перед вашим веб-приложением, следуйте https://www.digitalocean.com/community/tutorials/how-to-use-apache-as-a-reverse-proxy-with-mod_proxy-on-debian-8 Как использовать Apache в качестве обратного прокси-сервера с mod_proxy в Debian 8.

Related