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

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

  • автор:

Что такое виртуальный хост (vhost)? — определение из техопедии

Определение — Что означает виртуальный хост (vhost)?

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

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

Техопедия объясняет виртуальный хост (vhost)

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

Что такое виртуальный хост (vhost)? - определение из техопедии

Принципы игры и будущий виртуальный мир

Принципы игры и будущий виртуальный мир

С самого начала создания персональных компьютеров программисты пытались выяснить, как использовать принципы программирования для создания виртуальных миров, миров, в которых все объекты, персонажи и среды .

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

Разберем по этапам понятие «виртуальный хостинг» и технологию его создания (настройки). Он представляет собой методику хранения содержимого Web-сайтов с разными именами доменов или хостов на одном сервере. Например, именам www.mystore.com и www.frankspage.com в DNS может соответствовать один и тот же IP-адрес, и Apache обслуживает оба этих сайта (равно как и собственное имя хоста, которое задано директивой ServerName). Какое программное обеспечение нужно для виртуального хостинга? Для обслуживания всех запросов достаточно одного Apache, что упрощает администрирование и позволяет экономить IP адреса. Однако увеличивается вред при взломе, потому что взломщик получает доступ ко всем сайтам.

Протокол НТТР/1.0 не указывает имя хоста. Поэтому ранее виртуальный хостинг был возможен лишь в том случае, когда каждому имени хоста был поставлен в соответствие отдельный IP-адрес (с последующим созданием IP-псевдонимов, указывающих на одну и ту же Ethernet-карту). Каждый виртуальный хост определялся по IP-адресу, и запрос, приходящий от Web-браузера, всегда получал в ответ страницу соответствующего Web-сайта. Недостатком такого подхода было то, что привязка больших блоков IP-адресов к одной и той же карте становилась громоздкой и приводила и к излишнему потреблению адресного IP-пространства.

С появлением версии протокола НТТР/1.1 данный процесс значительно упростился. Обязательный заголовок Host: указывает искомое имя хоста, поэтому виртуальные хосты, различаемые по имени, стали нормой в современном Internet. Клиенты, не поддерживающие заголовка Host: теперь чрезвычайно редки. Далее обсуждается исключительно новый вариант виртуального хостинга. Если вы заинтересованы в использовании виртуального хостинга на базе IP-адресов, обратитесь к документации, имеющейся на Web-сайте Apache.

Большая часть файла httpd.conf определяет сервер по умолчанию — глобальный набор определений, применяющихся ко всем запросам, получаемым сервером Apache. В сервере по умолчанию директива ServerName используется в первую очередь для конструирования URL-перенаправления с кодом 301. Можно также воспользоваться небольшим набором директив, отменяющим глобальные настройки в том случае, когда заголовок Host: совпадает с определенным именем хоста. Такие наборы правил и представляют собой виртуальные хосты.

Предположим, что сервер называется stripes.somewhere.com. Его имя задано в главной директиве ServerName. Для настройки виртуального хостинга по именам следует воспользоваться директивой NameVirtualHost с аргументом * (этот символ-заместитель означает «все хосты»), за которой следует необходимое число различных блоков :

Пример блока VirtualHost:

NameVirtualHost * ServerName www.somewhere.com DocumentRoot /usr/local/www/data ServerAdmin webmaster@somewhere.com ErrorLog logs/www.somewhere.com-error_log CustomLog logs/www.somewhere.com-access_log common ServerName www.frankspage.com ServerAlias frankspage.com DocumentRoot /home/frank/public_html ServerAdmin frank@frankspage.com ErrorLog logs/www.frankspage.com-error_log CustomLog logs/www.frankspage.com-access_log common

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

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

Пример более корректного блока VirtualHost:

NameVirtualHost * ServerName stripes.somewhere.com ServerAlias *.somewhere.com DocumentRoot /usr/local/www/data ServerAdmin webmaster@somewhere.com ErrorLog logs/www.somewhere.com-error_log CustomLog logs/www.somewhere.com-access_log common ServerName www.frankspage.com ServerAlias frankspage.com DocumentRoot /home/frank/public_html ServerAdmin frank@ frankspage.com ErrorLog logs/www.frankspage.com-error_log CustomLog logs/www.frankspage.com-access_log common

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

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

Для того чтобы добавить виртуальный хост, выполните следующие действия:

  1. Перейдите в меню Файловый сервер > Веб > Веб-ресурсы.
  2. Нажмите на кнопку «Добавить» и выберите «Виртуальный хост».
  3. На вкладке «Общие настройки» введите название виртуального хоста. Оно аналогично имени веб-ресурса, но должно содержать доменное имя сайта, на которое виртуальный хост будет отвечать по HTTP -запросу.
  4. Если требуется, введите описание. Это краткое описание ресурса, которое будет отображаться в списке веб-ресурсов, а также в хранилище файлов рядом с соответствующей папкой.
  5. Выберите источник ресурса. Это директория из структуры хранилища файлов ИКС, в которой будет располагаться содержимое сайта. При необходимости можно создать новую папку в каталоге. Для корректной работы виртуального хоста в большинстве случаев требуется настройка DNS-зон доменного имени.
  6. Флаг «Разрешить листинг директории» позволяет серверу отобразить список всех файлов и папок ресурса, в случае если в корневой папке не обнаружены индексные файлы index.html или index.php .
  7. Флаг «Разрешить выполнение PHP скриптов» разрешает серверу выполнять на HTML-страницах PHP -скрипты.
  8. Если требуется, измените кодировку по умолчанию. Она определяет значение кодировки отображаемых HTML-страниц ресурса по умолчанию.
  9. Флаг «Создать ссылку для www.» предназначен для настройки DNS -записей для приема HTTP-запросов как на имя сайта, указанное в названии, так и на него же с добавлением домена www.
  10. Флаг «Не использовать Web Application Firewall» отключает модуль Web Application Firewall.
  11. В блоке «Настройки HTTPS» выберите настройки обработки HTTPS -запросов. Установите переключатель:
    • использовать настройки веб-сервера — будут использованы настройки веб-сервера;
    • использовать сертификат LetsEncrypt — будут использованы настройки веб-сервера, но с сертификатом LetsEncrypt;
    • указать сертификат вручную — будут использованы настройки веб-сервера с указанным сертификатом. Здесь можно задать сертификат и перенаправление с HTTP на HTTPS (флаг перекрывает действие аналогичного флага в настройках веб-сервера).

Внимание! Если сертификат не указан, то виртуальный хост работать не будет.

  • При необходимости установите флаг «Создать запись на DNS-сервере» — будет создана зона для данного хоста, а также записи на DNS-сервере ИКС.
  • Назначьте права доступа к ресурсу. Для этого установите флаги напротив пользователей в столбце «Чтение».
  • Установка флага «Гостевой вход» разрешает просмотр любым источником.
  • На вкладке «Дополнительно», если требуется, установите флаг «Ограничить скорость обработки запросов» и укажите значения следующих параметров:
    • средняя скорость обработки запросов (r/s) — количество обрабатываемых запросов в секунду;
    • максимальный размер всплеска запросов — количество избыточных запросов, которые задерживаются таким образом, чтобы запросы обрабатывались с указанной выше скоростью. Если число избыточных запросов превысит установленное, запрос завершится с ошибкой;
    • размер зоны разделяемой памяти (Мб) — размер зоны, в которой хранится состояние для различных значений ключа (например, текущее число избыточных запросов).

    Виртуальный хост также можно добавить в модуле «Хранилище файлов».

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

    Термин Virtual Host (виртуальный хост) относится к практике запуска более чем одного сайта (такие как company1.example.com и company2.example.com) на одной машине. Виртуальные хосты могут быть «IP-based», что означает, что у вас есть различные IP адреса для каждого сайта, или «name-based», что означает, что у вас есть несколько имён, работающие на каждом IP адресе. Для конечного пользователя тот факт, что эти сайты работают на одном и том же физическом сервере, не является очевидным, то есть он может об этом и не знать.

    В этой статье я рассмотрю создание виртуальных хостов на основе имени, так как это более распространено, особенно на локальном сервере. О других вариантах, о создании виртуальных хостов на основе IP, в том числе на локальном сервере, а также об автоматическом создании виртуальных хостов, смотрите в статье «Настройка Apache в Windows».

    Можно создать виртуальный хост Apache — один или сразу много. Суть хостов Apache в том, что в браузере вместо ввода IP к сайту можно обратиться по имени хоста — точно также как мы открываем все сайты в Интернете: мы вводим доменное имя, а не IP адрес сайта. Аналогично можно настроить и на локальном веб-сервере: в браузере вместо 127.0.0.1 или вместо localhost можно открывать свои локальные сайты, например, по легко запоминающимся именам.

    Особенности настройки виртуальных хостов Apache в Windows

    Прежде чем приступить к настройке, совсем немного теории: при открытии сайтов по доменному имени или по имени хоста, веб-браузеру всё равно нужно знать IP адрес веб-сервера, куда делается запрос. Эту проблему решают DNS сервера. То есть перед открытием они спрашивают у сервера имён DNS, какой IP имеет сайт, например, apache-windows.ru?

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

    Суть в том, что аналогичные записи, как в DNS сервер, можно добавить в системный файл C:\Windows\System32\drivers\etc\hosts и Windows перед тем, как отправить запрос к DNS серверу, также сделает запрос к этому файлу.

    Допустим я хочу создать виртуальный хост Apache с именем php.test, тогда я открываю файл C:\Windows\System32\drivers\etc\hosts и добавляю в него запись

    127.0.0.1 php.test

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

    В этом файле можно вставлять комментарии — комментариями считаются все строки, которые начинаются с символа # (решётка). Комментарии могут быть как размещены на отдельных строках, так и следовать после имени машины. Итак, мы выполнили подготовительный этап — прописали имя нашего виртуального хоста в файле hosts. В результате запрос, сделанный к этому виртуальному хосту, теперь будет перенаправляться веб-серверу Apache — именно этого мы и добивались.

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

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

    Откройте главный конфигурационный файл httpd.conf (например у меня он расположен по адресу C:\Server\bin\Apache24\conf\httpd.conf).

    Найдите там строку:

    #Include conf/extra/httpd-vhosts.conf

    И раскомментируйте её, чтобы получилось:

    Include conf/extra/httpd-vhosts.conf
    LoadModule log_config_module modules/mod_log_config.so

    и убедитесь, что она раскомментирована.

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

    Теперь откройте сам файл httpd-vhosts.conf (c:\Server\bin\Apache24\conf\extra\httpd-vhosts.conf). Содержимое этого файла можно просто удалить — оно нам не понадобится.

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

    • ServerName — определяет само имя хоста
    • DocumentRoot — определяет, какие файлы показывать для этого имени, то есть содержит путь до сайта этого хоста

    Секций может быть любое количество — столько, сколько вам нужно виртуальных хостов на данном сервере.

    Ещё одно правило: первый раздел VirtualHost используется для сбора всех запросов, которые не соответствуют ServerName или ServerAlias в любом другом блоке . То есть первая секция является как бы дефолтной — для всех остальных запросов, которые не предназначены для виртуальных хостов. Поэтому нам нужно сделать как минимум два контейнера :

    1. Будет собирать запросы, которые не предназначены ни для какого из хостов. Обычные запросы, например, к localhost или 127.0.0.1
    2. Контейнер самого хоста (у меня хост называется php.test)

    Что будет если не сделать первый («дефолтный») контейнер? Все запросы, которые даже те, которые не предназначаются для php.test, всё равно будут обрабатываться как будто бы они пришли для хоста php.test.

    Вместе с контейнером VirtualHost можно указать IP адрес и порт, которые прослушиваются для данного хоста. Если вы используете какой-то нестандартный порт, который ещё не открыт с помощью директивы Listen, то вам нужно добавить эту директиву с соответствующим портом в главный конфигурационный файл или прямо в файл httpd-vhosts.conf. Например, я хочу, чтобы виртуальный хост был привязан к порту 81, тогда перед VirtualHost мне нужно добавить:

    Listen 81

    Для нашего примера я буду использовать стандартный 80 порт, а в качестве IP адреса укажу звёздочку. Дефолтным хостом у меня является localhost, файлы которого расположены по пути C:/Server/data/htdocs/, тогда первый контейнер выглядит так:

     ServerName localhost DocumentRoot "C:/Server/data/htdocs/" 

    Второй контейнер создан для хоста php.test, и его файлы будут располагаться в папке C:/Server/data/htdocs/virthosts/host1/, тогда полностью код контейнера будет выглядеть так:

     ServerName php.test DocumentRoot "C:/Server/data/htdocs/virthosts/host1/" 

    Собираем всё вместе, полное содержимое файла httpd-vhosts.conf:

     ServerName localhost DocumentRoot "C:/Server/data/htdocs/" ServerName php.test DocumentRoot "C:/Server/data/htdocs/virthosts/host1/" 

    Чтобы сделанные изменения вступили в силу, перезапускаем веб-сервер:

    c:\Server\bin\Apache24\bin\httpd.exe -k restart

    Открываю в веб-браузере ссылку http://php.test и вижу там тот файл, который создан для этого хоста (то есть размещён в папке C:/Server/data/htdocs/virthosts/host1/):

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

    Например, кроме ServerName, можно добавить ещё ServerAlias:

    ServerName dummy-host.example.com ServerAlias www.dummy-host.example.com

    Можно установить отдельные файлы логов для каждого виртуального хоста:

    ErrorLog "logs/dummy-host.example.com-error.log" CustomLog "logs/dummy-host.example.com-access.log" common

    Установить с помощью директивы ServerAdmin электронную почту администратора данного виртуального хоста, включить HTTPS отдельно для данного хоста. Кстати, настройки HTTPS нужно прописывать индивидуально для каждого виртуального хоста, поскольку у каждого из них свои собственные SSL сертификаты.

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

    Связанные статьи:

    • Несколько сайтов на Apache (100%)
    • Виртуальный хост Apache по умолчанию. _default_ и catch-all в Apache (100%)
    • Apache для Windows (53.4%)
    • Как запустить Apache на Windows (53.4%)
    • Документация по Apache на русском языке (53.4%)
    • Модуль Apache mod_alias (RANDOM — 53.4%)
  • Добавить комментарий

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