Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Настройка виртуальных узлов на примере HTTP-сервера Apache

Оригинал: How to configure virtual hosts in Apache HTTP server
Автор: Dan Nanni
Дата публикации: 24 августа 2015 г.
Перевод: А.Панин
Дата перевода: 17 августа 2016 г.

Настройка виртуальных узлов на примере HTTP-сервера Apache

Технология виртуального хостинга позволяет размещать на физическом сервере более одного веб-сайта с доменом (то есть, к примеру, использовать домены site1.com, site2.com для отдельных веб-сайтов). Данная технология чаще всего используется на хостинг-площадках, где для размещения сотен или большего количества веб-сайтов или блогов используется один выделенный сервер с целью сокращения расходов.

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

Из-за своей востребованности, технология виртуального хостинга поддерживается всеми современными веб-серверами, такими, как Apache, Nginx, Lighttpd, IIS. В данной статье я продемонстрирую методику создания и активации виртуальных узлов на примере HTTP-сервера Apache, используемого в окружении Linux. В данном случае имеются значительные различия в конфигурации основанных на Debian и основанных на RedHat систем. Я постараюсь освещать эти различия по мере повествования.

Перед тем как начать, я хотел бы обратить внимание на то, что HTTP-сервер Apache должен быть уже установлен на вашем Linux-сервере. Если вы еще не установили его, вы можете обратиться к соответствующим руководствам для систем, основанных на Debian и RedHat, и выполнить все необходимые шаги перед продолжением.

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

Первый шаг: Создание корневой директории для ресурса, связанного с доменом abc.com

Начнем с создания директории для хранения всех веб-станиц, которые относятся к ресурсу, связанному с доменом abc.com. Эта директория нередко называется "корневой директорией" ("document root") ресурса, связанного с доменом. В соответствии с устоявшейся практикой, давайте будем размещать все корневые директории ресурсов в директории /var/www и использовать в качестве их имен имена соответствующих доменов. Также давайте создадим отдельную директорию для хранения файлов журнала веб-сервера для ресурса, связанного с доменом abc.com, с именем /var/log.

$ sudo mkdir /var/www/abc.com
$ sudo mkdir /var/log/apache2/abc.com (Debian, Ubuntu, Mint)
$ sudo mkdir /var/log/httpd/abc.com (Fedora, CentOS, RHEL)

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

$ sudo vi /var/www/abc.com/index.html
<html>
  <head>
    <title>Welcome to Abc.com</title>
  </head>
  <body>
    <h1>Sample page</h1>
    This page is powered by Apache Virtual Host!
  </body>
</html>

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

В Debian, Ubuntu или Linux Mint:

$ sudo chown -R www-data:www-data /var/www/abc.com

В Fedora, CentOS или RHEL:

$ sudo chown -R apache:apache /var/www/abc.com

Второй шаг: создание файла конфигурации виртуального узла

На следующем шаге следует создать файл конфигурации виртуального узла для ресурса, связанного с доменом abc.com. Имя каждого из файлов конфигурации виртуальных узлов должно заканчиваться расширением .conf. Стандартными директориями для размещения файлов конфигурации виртуальных узлов являются:

  • Debian, Ubuntu или Linux Mint: /etc/apache2/sites-available/
  • Fedora, CentOS или RHEL: /etc/httpd/conf.d/

Давайте создадим файл конфигурации виртуального узла для ресурса, связанного с доменом abc.com.

В Debian, Ubuntu или Linux Mint:

$ sudo vi /etc/apache2/sites-available/abc.com.conf

В Fedora, CentOS или RHEL:

$ sudo vi /etc/httpd/conf.d/abc.com.conf

А так должен выглядеть сам файл конфигурации виртуального узла.

В Debian, Ubuntu или Linux Mint:

<VirtualHost *:80>
    ServerName abc.com
    ServerAlias www.abc.com
    ServerAdmin webmaster@abc.com
    DocumentRoot /var/www/abc.com
    CustomLog /var/log/apache2/abc.com/access.log common
    ErrorLog /var/log/apache2/abc.com/error.log
</VirtualHost>

В Fedora, CentOS или RHEL:

<VirtualHost *:80>
    ServerName abc.com
    ServerAlias www.abc.com
    ServerAdmin webmaster@abc.com
    DocumentRoot /var/www/abc.com
    CustomLog /var/log/httpd/abc.com/access.log common
    ErrorLog /var/log/httpd/abc.com/error.log
</VirtualHost>

Важно, чтобы в качестве значения параметра DocumentRoot использовался корректный путь к корневой директории ресурса, которую мы создали ранее. Кроме того, имя домена должно быть указано в качестве значения параметра ServerName. Дополнительное доменное имя может при необходимости указываться в качестве значения параметра ServerAlias. С помощью параметров CustomLog и ErrorLog вы можете указать пути к отдельным файлам журналов событий и ошибок для данного виртуального узла соответственно.

Если вы хотите поставить в соответствие домену отдельный IP-адрес (например, 172.20.30.41), вы можете заменить директиву <VirtualHost *:80> на директиву <VirtualHost 172.20.30.41:80>. В зависимости от предназначения виртуального узла, вы можете дополнительно модифицировать его файл конфигурации, используя другие директивы, которые поддерживаются веб-сервером Apache.

В системах, основанных на Debian (Debian, Ubuntu или Linux Mint) после создания виртуального узла необходимо явным образом активировать его:

$ sudo a2ensite abc.com.conf

Третий шаг: перезапуск HTTP-сервера Apache

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

$ apache2ctl -t

В Fedora, CentOS или RHEL:

$ httpd -t

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

Проверка корректности синтаксиса файла конфигурации виртуального узла

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

В Debian, Ubuntu или Linux Mint:

$ sudo service apache2 reload

В Fedora, CentOS и RHEL:

$ sudo systemctl reload httpd.service

Четвертый шаг: настройка межсетевого экрана

Это необязательный шаг, который требуется выполнить лишь в том случае, если вы используете межсетевой экран со стандартной политикой отбрасывания пакетов на вашем сервере (что актуально для систем на основе RedHat). В процессе работы межсетевого экрана вам придется открыть HTTP-порт, используемый виртуальным узлом.

Если вы используете iptables:

$ sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$ sudo /etc/init.d/iptables save 

Если вы используете FirewallD:

$ sudo firewall-cmd --permanent --zone=public --add-service=http
$ sudo firewall-cmd --reload

Пятый шаг: настройка DNS-сервера для виртуального узла

Наконец, вам придется связать домен abc.com с IP-адресом веб-сервера. Для этого нужно добавить соответствующую ресурсную запись (запись типа "A") для домена на уровне сервера DNS, установленного на устройстве, на котором осуществляется распределение IP-адресов. Данный шаг может выполняться различными способами в зависимости от того кто осуществляет непосредственное распределение IP-адресов. Если вы получаете IP-адрес от компании, у который арендуется виртуальный частный сервер, эта компания должна предоставить вам возможность добавления ресурсной записи типа "A" для домена, который вы связываете с вашем виртуальным частным сервером. Например, компания Digital Ocean предоставляет следующий интерфейс:

Панель управления параметрами домена провайдера DigitalOcean

Если вы хотите просто протестировать новый виртуальный узел без создания записи сервера DNS для домена abc.com, вы можете воспользоваться простым приемом, заключающимся в добавлении директивы соответствия домена и IP-адреса в файл /etc/hosts.

То есть, на клиентском компьютере, с которого вы хотите посещать веб-сайт, к которому привязан домен abc.com, следует открыть файл /etc/hosts и добавить в него следующую строку:

<IP-адрес-сервера-Apache>    abc.com

Данная директива позволяет клиентскому компьютеру считать, что домен abc.com существует и связан с IP-адресом сервера Apache без необходимости добавления публичной записи сервера DNS для домена abc.com.

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

Тестовая страница виртуального узла

Заключение

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

Если вы сталкиваетесь с периодической необходимостью добавления или удаления виртуальных узлов при работе с вашим виртуальным частным сервером, вы можете рассмотреть возможность использования одной из панелей управления хостингом (например, Ajenti), которая позволит вам управлять виртуальными узлами с помощью удобного интерфейса.