Apache виртуальные хосты: Apache — HTTP Apache 2.2

Настройка виртуальных хостов Apache — Losst

Apache — это один из самых популярных веб-серверов для размещения сайтов на хостингах и VPS, а также для создания тестовых окружений. Если на вашем сервере один сайт, то все довольно просто, все запросы, поступающие к серверу, отправляется этот единственный сайт. А что если сайтов несколько? Как Apache будет понимать кому адресован запрос?

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

Содержание статьи:

Как работают виртуальные хосты Apache?

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

Обычно, на хостингах один веб-сервер обслуживает десятки, а то и сотни сайтов. И как вы понимаете, все запросы поступают на один ip. Для распределения их между папками на сервере используется имя домена, которое передается вместе с запросом в HTTP заголовке «Host». Именно поэтому нужно выполнять парковку домена не только на DNS сервисе, но и на вашем сервере.

Вы настраиваете виртуальные хосты Apache, а затем веб-сервер сравнивает домен, переданный в заголовке «Host» с доступными виртуальными доменами и если находит совпадение, то возвращает содержимое настроенной папки или содержимое по умолчанию, или ошибку 404. Нужно сказать, что вы можете настроить виртуальный хост для любого домена, например, vk.com или losst.pro. Но пользователи смогут получить доступ к этому домену у вас, только если к вам будут поступать запросы от браузеров, в которых будет значиться этот домен. А теперь детальнее про настройку.

Настройка виртуальных хостов Apache?

Я уже подробно рассматривал как настроить Apache в отдельной статье. Поэтому не буду полностью расписывать здесь все конфигурационные файлы. Остановимся на файлах виртуальных хостов. Для удобства они вынесены в отдельные папки:

  • /etc/apache2/sites-available
  • /etc/apache2/sites-enabled

Ясно, что это разделение очень условно. Вы можете его убрать и добавлять свои виртуальные хосты прямо в основной конфигурационный файл. Все файлы из этих папок подключаются к нему с помощью директив Include. Но ведь так намного удобнее. В папке sites-available находятся все конфигурационные файлы, но они пока еще не активированы и отсюда не импортируются никуда. При активации нужного хоста на него просто создается ссылка в папку /etc/apache2/sites-enabled.

Для примера, создадим новый конфигурационный файл для виртуального хоста site1.ru. Для этого просто скопируем существующую конфигурацию для хоста по умолчанию — 000-default:

$ sudo cp /etc/apache2/sites-enabled/000-default.conf /etc/apache2/sites-enabled/site1.ru.conf

Сначала рассмотрим синтаксис того, что вы увидите в этом файле:

<VirtualHost адрес_хоста_для прослушивания:порт> ServerName домен ServerAlias псевдоним_домена ServerAdmin емейл@администратора DocumentRoot /путь/к/файлам/сайта ErrorLog /куда/сохранять/логи/ошибок/error. log CustomLog /куда/сохранять/логи/доступа/access.log combined </VirtualHost>

Это минимальная конфигурация, которую вам нужно указать, чтобы создать виртуальный хост Apache. Конечно, здесь вы можете использовать и другие директивы Apache, такие как Deny, Allow и многие другие. А теперь рассмотрим наш пример для тестового сайта site1.ru:

<VirtualHost *:80> ServerName site1.ru ServerAdmin webmaster@localhost DocumentRoot /var/www/html/site1.ru/ ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>

Здесь мы используем звездочку вместо ip адреса, это значит, что веб-сервер будет слушать соединения на всех адресах, как на внешнем, так и на localhost. Порт 80, это порт по умолчанию. Затем указываем домен, электронный адрес администратора, и путь к папке, в которой будут находиться данные сайта. Две строчки Log говорят куда сохранять логи, но добавлять их необязательно. Дальше, нам нужно активировать этот хост. Мы можем вручную создать ссылку или использовать уже заготовленную команду:

sudo a2ensite site1.ru

Затем перезапустите Apache:

sudo systemctl restart apache2

И нам осталось все это протестировать. Если ваш сервер имен еще не направляет запросы к домену на ваш ip, а вы хотите уже проверить как все работает, можно пойти обходным путем. Для этого достаточно внести изменения в файл /etc/hosts на машине, с которой вы собрались открывать сайт. Этот файл, такой себе локальный DNS. Если компьютер находит ip для домена в нем, то запрос в интернет уже не отправляется. Если вы собираетесь тестировать с той же машины, на которую установлен Apache2, добавьте:

sudo vi /etc/hosts

127.0.0.1 site1.ru

Если же это будет другой компьютер, то вместо 127.0.0.1 нужно использовать адрес вашего сервера, на котором установлен Apache. Затем можете открыть сайт в браузере:

site1. ru

Настройка виртуальных хостов с SSL

Если вы хотите использовать современный безопасный протокол https для работы вашего виртуального хоста, то вам кроме обычного хоста на порту 80 будет необходимо создать виртуальный хост на порту 443. Здесь будет не так много отличий, вот пример, для нашего сайта site1.ru:

<IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ServerName site1.ru ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> </VirtualHost> </IfModule>

Теперь о каждой новой строчке более подробно:

  • <IfModule mod_ssl.c> — весь код в этой секции будет выполнен только в том случае, если активирован модуль mod_ssl.
    Это нужно для безопасности, чтобы если модуль не активирован, то код не вызывал ошибок;
  • SSLEngine — включает поддержку SSL;
  • SSLCertificateFile, SSLCertificateKeyFile — пути к файлам сертификата и приватного ключа;
  • SSLOptions — для скриптов php, cgi и других мы передаем стандартные SSL опции.

Вот и все. Как видите, не так сложно. Осталось перезапустить Apache и проверить как все работает:

sudo a2enmod ssl sudo a2ensite site1.ru-ssl sudo systemctl restart apache2

Затем откройте https адрес в браузере:

https://site1.ru

 

Выводы

В этой статье мы рассмотрели как выполняется настройка виртуальных хостов Apache. Как видите, один веб-сервер может обслуживать сотни сайтов, а создание виртуальных хостов apache совсем не сложно. Надеюсь, эта статья была вам полезной. Если у вас остались вопросы, спрашивайте в комментариях!

Создание виртуальных хостов на Apache

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

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

Для работы нам понадобится предварительно настроенный сервер на Ubuntu или сервер с установленным программным стеком LAMP.

Установка Apache (опционально)

Если на сервере ещё не установлен Apache, сделаем это с помощью стандартного менеджера apt. Обновим список пакетов apt:

После обновления можно устанавливать сам Apache:

После установки добавим Apache в список разрешённых приложений фаервола:

Далее запустим его:

Проверим, что Apache запущен:

Если ваш VPS расположен на Джино, то для установки Apache можно воспользоваться пакетами приложений. В разделе Управление — Пакеты приложений выберите Apache httpd. Программа установит последнюю из доступных версий Apache.

Веб-сервер установлен и запущен! Можно переходить к созданию и настройке виртуальных хостов.

Настройка виртуальных хостов

Создание директорий

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

Флаг -P в данном случае означает, что будет создана не только конечная директория, но и весь путь к ней, если таких папок ещё не существует.

Теперь передадим права на изменения файлов внутри этих директорий нашему пользователю:

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

Индексные страницы

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

В открывшемся окне поместим код:

Сделаем то же самое для второго хоста:

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

Виртуальный хост

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

По умолчанию такой файл в Apache — 000-default.conf. Вместо него мы создадим два новых файла с правилами для наших сайтов и укажем их в качестве конфигурационных файлов.

Скопируем содержимое файла 000-default.conf в файл с настройками нашего первого виртуального хоста:

Теперь откроем и исправим его:

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

Здесь нам нужно исправить значения в строках ServerAdmin и DocumentRoot, а также добавить две новые: ServerName и ServerAlias.

Укажем наши значения для первого виртуального хоста. В итоге файл примет вид:

Скопируем содержимое файла первого виртуального хоста в файл с конфигурацией для второго:

Откроем и исправим его по образцу первого:

Активация файлов виртуального хоста

Чтобы Apache использовал в качестве конфигурационных файлов виртуальных хостов наши новые файлы, их нужно активировать:

Также необходимо отключить файл, использующийся по умолчанию:

Изменения вступят в силу только после перезапуска веб-сервера:

После перезагрузки можно проверить работу наших виртуальных хостов. Для этого откроем браузер и в адресной строке укажем example_1.com или example_2.com. Если в ходе работы не возникло никаких ошибок, мы должны увидеть собщения:

Теперь у нас есть веб-сервер, поддерживающий одновременную работу двух сайтов на разных доменах. Следуя этой инструкции, можно создать любое число виртуальных хостов — основным ограничением в данном случае будут не возможности Apache, а серверные мощности, поддерживающие работу сайтов.

Поддержка виртуального хоста на основе имени — Apache HTTP Server версии 2.4

Поддержка виртуального хоста на основе имени — Apache HTTP Server версии 2.4

Apache HTTP Server версии 2.4

Apache > HTTP-сервер > Документация > Версия 2.4 > Виртуальные хосты

Доступные языки:  de  | ru  | фр  | я | ко | tr 

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

  • Виртуальные хосты на основе имени и на основе IP
  • Как сервер выбирает правильный виртуальный хост на основе имени
  • Использование виртуальных хостов на основе имен

См. также

  • Поддержка виртуальных хостов на основе IP
  • Подробное обсуждение сопоставления виртуальных хостов
  • Динамически настроенный массовый виртуальный хостинг
  • Примеры виртуальных хостов для общих настроек
  • Комментарии
  • 7 виртуальных хостов на основе IP использовать IP-адрес подключения к определить правильный виртуальный хост для обслуживания. Поэтому вам нужно иметь отдельный IP-адрес для каждого хоста.

    При виртуальном хостинге на основе имени сервер полагается на клиента для сообщить имя хоста как часть заголовков HTTP. Используя эту технику, один и тот же IP-адрес может использоваться многими разными хостами.

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

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

    Важно понимать, что первый шаг к созданию виртуальных разрешение хоста — это разрешение на основе IP. Виртуальный хост на основе имени разрешение выбирает только наиболее подходящий виртуальный хост на основе имени после сужения кандидатов до лучшего совпадения на основе IP. Использование подстановочного знака (*) для IP-адреса во всех директивах VirtualHost делает это Отображение на основе IP не имеет значения.

    При поступлении запроса сервер найдет наилучшее (наиболее конкретное) соответствие аргумент на основе IP-адрес и порт, используемые запросом. Если имеется более одного виртуального хоста содержащий эту комбинацию адреса наилучшего совпадения и порта, Apache сравните директивы ServerName и ServerAlias ​​ с именем сервера присутствует в запросе.

    Если опустить ServerName директивы с любого виртуального хоста на основе имени, сервер по умолчанию на полное доменное имя (FQDN), полученное из системного имени хоста. Это неявно заданное имя сервера может привести к нелогичному виртуальному хосту. соответствует и не рекомендуется.

    Виртуальный хост по умолчанию на основе имени для комбинации IP-адреса и порта

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

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

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

    Главный хост уходит

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

    При добавлении виртуального хоста на основе имени к существующему серверу и аргументы виртуального хоста соответствуют ранее существовавшим комбинациям IP и портов, запросы теперь будут обрабатываться явным виртуальным хостом. В этом случае, обычно целесообразно создать виртуальный хост по умолчанию с ServerName совпадает с именем базовый сервер. Новые домены на том же интерфейсе и порту, но требующие отдельных конфигураций, затем могут быть добавлены как последующие (не по умолчанию) виртуальные хосты.

    Наследование ServerName

    Лучше всего всегда явно указывать ServerName в каждом виртуальном хосте на основе имени.

    Если VirtualHost не указывает a ServerName , имя сервера будет наследуется от базовой конфигурации сервера. Если имя сервера не было указывается глобально, один обнаруживается при запуске через обратное разрешение DNS первого адреса прослушивания. В любом случае это унаследованное имя сервера будет влиять на разрешение виртуального хоста на основе имени, поэтому лучше всегда явно указать ServerName в каждом виртуальный хост на основе имени.

    Например, предположим, что вы обслуживаете домен www.example.com и вы хотите добавить виртуальный хост other.example.com , что указывает на тот же IP-адрес. Затем вы просто добавляете в httpd.conf следующее:

     
        # Этот первый виртуальный хост также используется по умолчанию для *:80
        Имя сервера www.example.com
        Псевдоним сервера example.com
        DocumentRoot "/www/домен"
    
    <Виртуальный хост *:80>
        Имя_сервера other.example.com
        DocumentRoot "/www/otherdomain"
     

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

    Многие серверы хотят быть доступны более чем по одному имени. Это возможно с ServerAlias ​​ директива, помещенная внутри Раздел . Например, в первом блоке выше, Директива ServerAlias ​​ указывает, что перечисленные имена — это другие имена, которые люди могут использовать, чтобы увидеть то же самое веб-сайт:

     ServerAlias ​​example.com *.example.com 

    , то запросы для всех хостов в домене example.com будут обслуживаться виртуальным хостом www.example.com . Подстановочный знак символов * и ? можно использовать для сопоставления имен. Конечно, вы не можете просто придумать имена и поместить их в ServerName или ServerAlias ​​ . Вы должны сначала правильно настройте DNS-сервер для сопоставления этих имен с IP-адресом адрес, связанный с вашим сервером.

    Виртуальные хосты на основе имен для наиболее подходящего набора из s обработаны в том порядке, в котором они указаны в конфигурации. Первое совпадение ServerName или ServerAlias ​​ используется без другого приоритета для подстановочных знаков (ни для ServerName против ServerAlias).

    Полный список имен в VirtualHost директива обрабатывается так же, как (без подстановочного знака) Псевдоним сервера .

    Наконец-то можно точно настроить конфигурацию виртуальных хостов путем размещения других директив внутри контейнеров . Большинство директив могут быть помещается в эти контейнеры и затем изменит конфигурацию только соответствующий виртуальный хост. Чтобы узнать, разрешена ли конкретная директива, проверить контекст директива. Директивы конфигурации, установленные в основной контекст сервера (вне любого контейнер) будут использоваться только в том случае, если они не переопределены виртуальным хостом. настройки.

    Обратите внимание:
    Это не раздел вопросов и ответов. Комментарии, размещенные здесь, должны указывать на предложения по улучшению документации или сервера и могут быть удалены нашими модераторами, если они реализованы или считаются недействительными/не по теме. Вопросы о том, как управлять HTTP-сервером Apache, следует направлять либо на наш IRC-канал #httpd, на Libera.chat, либо в наши списки рассылки.

    Поддержка виртуального хоста Apache на основе IP

    Поддержка виртуального хоста Apache на основе IP — Apache HTTP Server версии 2.4

    Apache HTTP Server версии 2.4

    Apache > HTTP-сервер > Документация > Версия 2.4 > Виртуальные хосты

    Доступные языки:  en  | фр  | я | ко | tr 

    • Что такое виртуальный хостинг на базе IP
    • Системные требования
    • Как настроить Apache
    • Настройка нескольких демонов
    • Настройка одного демона с виртуальными хостами

    См. также

    • Поддержка виртуальных хостов на основе имен
    • Комментарии

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

    Во многих случаях на основе имени виртуальные хосты более удобны, так как позволяют несколько виртуальных хостов для совместного использования одного адреса/порта. См. раздел «На основе имени» и «на основе IP». Виртуальные хосты, чтобы помочь вам принять решение.

    Как указывает термин на базе IP , сервер должен иметь другую комбинацию IP-адреса/порта для каждого IP-адреса. виртуальный хост . Этого можно добиться с помощью машины наличие нескольких физических сетевых подключений или использование виртуальные интерфейсы, которые поддерживаются большинством современных операционных системы (подробности см. в системной документации, это часто называемые «псевдонимами IP», а команда «ifconfig» чаще всего используется для их настройки) и/или с использованием нескольких номера портов.

    В терминологии HTTP-сервера Apache использование одного IP-адреса но несколько портов TCP, также является виртуальным хостингом на основе IP.

    Существует два способа настройки Apache для поддержки нескольких хосты. Либо запустив отдельный демон httpd для каждое имя хоста или запустив один демон, который поддерживает все виртуальные хосты.

    Использовать несколько демонов, когда:

    • Существуют проблемы с секционированием безопасности, например, компания1 не хочет, чтобы кто-либо в компании2 мог читать их данных, кроме как через Интернет. В этом случае вам понадобится два демоны, каждый из которых работает с разными User , Group , Listen и ServerRoot настройки.
    • Вы можете позволить себе память и файловый дескриптор требования прослушивания каждого псевдонима IP на машина. Возможно только Прослушать до «шаблона» адрес или по конкретным адресам. Поэтому, если у вас есть потребность слушать конкретный адрес по какой-либо причине, то вы нужно будет слушать все конкретные адреса. (Хотя один httpd мог слушать N-1 из адресов, а другой мог прослушайте оставшийся адрес.)

    Используйте один демон, когда:

    • Совместное использование конфигурации httpd между виртуальными хостами является приемлемым.
    • Машина обслуживает большое количество запросов, поэтому потеря производительности при запуске отдельных демонов может быть значительный.

    Создайте отдельную установку httpd для каждого виртуальный хост. Для каждой установки используйте Слушайте директиву в файл конфигурации для выбора IP-адреса (или виртуального хоста) этот демон обслуживает. например

     Listen 192.0.2.100:80 

    Рекомендуется использовать IP-адрес вместо имя хоста (см. предупреждения DNS).

    В этом случае один httpd будет обслуживать запросы к основному серверу и всем виртуальным хостам. Директива VirtualHost в файле конфигурации используется для установки значений ServerAdmin , ServerName , DocumentRoot , ErrorLog и TransferLog или CustomLog директивы конфигурации для разных значений для каждого виртуального хозяин. например

     <Виртуальный хост 172.20.30.40:80>
        Администратор сервера webmaster@www1.example.com
        DocumentRoot "/www/vhosts/www1"
        Имя сервера www1.example.com
        ErrorLog "/www/logs/www1/error_log"
        CustomLog "/www/logs/www1/access_log" в сочетании
    
    <Виртуальный хост 172.20.30.50:80>
        Администратор сервера webmaster@www2.example.org
        DocumentRoot "/www/vhosts/www2"
        Имя сервера www2.example.org
        ErrorLog "/www/logs/www2/error_log"
        CustomLog "/www/logs/www2/access_log" в сочетании
     

    Рекомендуется использовать IP-адрес вместо имя хоста в директиве (см. предостережения относительно DNS).

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

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

    SuexecUserGroup может использоваться внутри Директива VirtualHost, если suEXEC используется обертка.

    БЕЗОПАСНОСТЬ: При указании места для записи файлов журнала знать о некоторых угрозах безопасности, которые присутствуют, если кто-либо кроме пользователя, который запускает Apache, имеет доступ на запись к каталог, в котором они записаны. См. документ с советами по безопасности для деталей.

    Обратите внимание:
    Это не раздел вопросов и ответов. Комментарии, размещенные здесь, должны указывать на предложения по улучшению документации или сервера и могут быть удалены нашими модераторами, если они реализованы или считаются недействительными/не по теме. Вопросы о том, как управлять HTTP-сервером Apache, следует направлять либо на наш IRC-канал #httpd, на Libera.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *