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

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


Введение

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

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

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

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

Предпосылки

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

  • Сервер Debian 8 с пользователем без полномочий root с привилегиями sudo. Вы можете настроить пользователя с этими привилегиями в нашем руководстве по начальной настройке сервера с Debian 8.
  • Apache установлен и настроен, как показано в разделе Установка стека Linux, Apache, MySQL, PHP (LAMP) в Debian 8.

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

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

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

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

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

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

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

  1. sudo mkdir -p /var/www/example.com/public_html
  2. sudo mkdir -p /var/www/test.com/public_html

Поскольку мы создали каталоги с помощью sudo, они принадлежат нашему пользователю 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, где мы будем хранить наш контент.

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

  1. sudo chmod -R 755 /var/www

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

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

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

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

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

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

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

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

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

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

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

  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

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

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

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

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

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

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

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

Примечание. Конфигурация Apache по умолчанию в Debian 8 требует, чтобы каждый файл виртуального хоста заканчивался на .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, определяет дополнительные имена, которые должны совпадать, как если бы они были базовым именем. Это полезно для сопоставления дополнительных определенных вами хостов, поэтому и example.com , и www.example.com работают, при условии, что оба этих хоста указывают на IP-адрес этого сервера.

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

<VirtualHost *:80>

        ServerAdmin webmaster@localhost
        ServerName example.com
        ServerAlias www.example.com
        DocumentRoot /var/www/html
...

Затем измените расположение корня документа для этого домена, изменив директиву 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

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

  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>

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

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

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

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

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

  1. sudo a2ensite example.com.conf

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

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

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

  1. sudo a2ensite test.com.conf

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

Output
Enabling site test.com. To activate the new configuration, you need to run: service apache2 reload

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

  1. sudo a2dissite 000-default.conf

Теперь перезапустите Apache:

  1. sudo systemctl restart apache2

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

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

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

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

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

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

  1. sudo nano /etc/hosts

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

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

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

127.0.0.1   localhost
...

111.111.111.111 example.com
111.111.111.111 test.com

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

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

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

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

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

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

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

Заключение

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

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

Чтобы использовать Apache для обслуживания защищенного контента, следуйте руководству How To Use Apache as a Reverse Proxy with mod_proxy on Debian 8.