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

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

Термин 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:WindowsSystem32driversetchosts и Windows перед тем, как отправить запрос к DNS серверу, также сделает запрос к этому файлу.

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

127.0.0.1               php.test

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

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

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

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

Откройте главный конфигурационный файл httpd.conf (например у меня он расположен по адресу C:ServerbinApache24confhttpd.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:ServerbinApache24confextrahttpd-vhosts.conf). Содержимое этого файла можно просто удалить — оно нам не понадобится.

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

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

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

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

  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/, тогда первый контейнер выглядит так:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "C:/Server/data/htdocs/"
</VirtualHost>

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

<VirtualHost *:80>
    ServerName php.test
    DocumentRoot "C:/Server/data/htdocs/virthosts/host1/"
</VirtualHost>

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

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "C:/Server/data/htdocs/"
</VirtualHost>

<VirtualHost *:80>
    ServerName php.test
    DocumentRoot "C:/Server/data/htdocs/virthosts/host1/"
</VirtualHost>

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

c:ServerbinApache24binhttpd.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.5%)
  • Как запустить Apache на Windows (53.5%)
  • Документация по Apache на русском языке (53.5%)
  • Ошибка «You’re speaking plain HTTP to an SSL-enabled server port» (РЕШЕНО) (RANDOM — 53.5%)

Виртуальные хосты могут быть привязаны к имени хоста (например, host.local) или к IP-адресу (например, 127.0.0.3). Рассмотрим оба способа, и начнём с создания директорий виртуальных хостов. После установки Apache у меня уже есть директория DocumentRoot:

DocumentRoot d:/work/localhost/www
<Directory "d:/work/localhost*/www">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

Внутри директории d:/work создаем еще три: localhost1, localhost2, localhost3. Внутри каждой директории localhost* создаем еще одну директорию www. В каждую папку www добавляем файл index.html с любым содержанием, который позволил бы идентифицировать хост. Например

  • в файл D:worklocalhost1wwwindex.html добавляем текст «localhost1»
  • в файл D:worklocalhost2wwwindex.html добавляем текст «localhost2»
  • в файл D:worklocalhost3wwwindex.html добавляем текст «localhost3»
[D:]
    [work]
        [localhost]
            [www]
                index.html
            access.log
            error.log
        [localhost1]
            [www]
                index.html
            access.log
            error.log
        [localhost2]
            [www]
                index.html
            access.log
            error.log
        [localhost3]
            [www]
                index.html
            access.log
            error.log

В файле C:wampapacheconfhttpd.conf надо найти и раскоментировать строку:

Include conf/extra/httpd-vhosts.conf

В файле C:wampapacheconfextrahttpd-vhosts.conf надо закомментировать (или удалить) те строки, которые приведены по умолчанию.

Виртуальные хосты на основе IP-адреса

Для виртуальных хостов, которые привязаны к IP, требуются несколько IP-адресов. Таковые у нас имеются: это 127.0.0.1, 127.0.0.2, 127.0.0.3, 127.0.0.4, 127.0.0.5 и так далее. И к каждому из них можно привязать виртуальный хост.

Для этого добавляем в файл C:WindowsSystem32driversetchosts строки

127.0.0.1 localhost host.ru www.host.ru
127.0.0.2 localhost1 host1.ru www.host1.ru
127.0.0.3 localhost2 host2.ru www.host2.ru
127.0.0.4 localhost3 host3.ru www.host3.ru

А в файл C:wampapacheconfextrahttpd-vhosts.conf добавляем следующее

#
#   localhost
#
<VirtualHost 127.0.0.1:80>
    ServerAdmin admin@localhost
    ServerName localhost
    DocumentRoot d:/work/localhost/www
    ServerAlias host.ru www.host.ru
    ErrorLog d:/work/localhost/error.log
    CustomLog d:/work/localhost/access.log common
</VirtualHost>
#
#   localhost1
#
<VirtualHost 127.0.0.2:80>
    ServerAdmin admin@localhost1
    ServerName localhost1
    DocumentRoot d:/work/localhost1/www
    ServerAlias host1.ru www.host1.ru
    ErrorLog d:/work/localhost1/error.log
    CustomLog d:/work/localhost1/access.log common
</VirtualHost>
#
#   localhost2
#
<VirtualHost 127.0.0.3:80>
    ServerAdmin admin@localhost2
    ServerName localhost2
    DocumentRoot c:/work/localhost2/www
    ServerAlias host2.ru www.host2.ru
    ErrorLog d:/work/localhost2/error.log
    CustomLog d:/work/localhost2/access.log common
</VirtualHost>
#
#   localhost3
#
<VirtualHost 127.0.0.4:80>
    ServerAdmin admin@localhost3
    ServerName localhost3
    DocumentRoot d:/work/localhost3/www
    ServerAlias host3.ru www.host3.ru
    ErrorLog d:/work/localhost3/error.log
    CustomLog d:/work/localhost3/access.log common
</VirtualHost>

Теперь можно обращаться к виртуальным хостам так:

  • http://127.0.0.1, http://localhost/, http://host.ru/, http://www.host.ru/
  • http://127.0.0.2, http://localhost1/, http://host1.ru/, http://www.host1.ru/
  • http://127.0.0.3, http://localhost2/, http://host2.ru/, http://www.host2.ru/
  • http://127.0.0.4, http://localhost3/, http://host3.ru/, http://www.host3.ru/

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

Для этого добавляем в файл C:WindowsSystem32driversetchosts строки

127.0.0.1 localhost host.ru www.host.ru
127.0.0.1 localhost1 host1.ru www.host1.ru
127.0.0.1 localhost2 host2.ru www.host2.ru
127.0.0.1 localhost3 host3.ru www.host3.ru

А в файл C:wampapacheconfextrahttpd-vhosts.conf добавляем следующее

#
#   localhost
#
<VirtualHost *:80>
    ServerAdmin admin@localhost
    ServerName localhost
    DocumentRoot d:/work/localhost/www
    ServerAlias host.ru www.host.ru
    ErrorLog d:/work/localhost/error.log
    CustomLog d:/work/localhost/access.log common
</VirtualHost>
#
#   localhost1
#
<VirtualHost *:80>
    ServerAdmin admin@localhost1
    ServerName localhost1
    DocumentRoot d:/work/localhost1/www
    ServerAlias host1.ru www.host1.ru
    ErrorLog d:/work/localhost1/error.log
    CustomLog d:/work/localhost1/access.log common
</VirtualHost>
#
#   localhost2
#
<VirtualHost *:80>
    ServerAdmin admin@localhost2
    ServerName localhost2
    DocumentRoot c:/work/localhost2/www
    ServerAlias host2.ru www.host2.ru
    ErrorLog d:/work/localhost2/error.log
    CustomLog d:/work/localhost2/access.log common
</VirtualHost>
#
#   localhost3
#
<VirtualHost *:80>
    ServerAdmin admin@localhost3
    ServerName localhost3
    DocumentRoot d:/work/localhost3/www
    ServerAlias host3.ru www.host3.ru
    ErrorLog d:/work/localhost3/error.log
    CustomLog d:/work/localhost3/access.log common
</VirtualHost>

Теперь можно обращаться к виртуальным хостам так:

  • http://localhost/, http://host.ru/, http://www.host.ru/
  • http://localhost1/, http://host1.ru/, http://www.host1.ru/
  • http://localhost2/, http://host2.ru/, http://www.host2.ru/
  • http://localhost3/, http://host3.ru/, http://www.host3.ru/

Дополнительно

  • Установка веб-сервера (Apache 2.4, MySQL 8.0, PHP 7, phpMyAdmin) на Windows 10
  • Подключение виртуальных хостов Apache в Windows

Поиск:
Apache • Web-разработка • Windows • Установка • Настройка • Виртуальный хост • IP-адрес • VirtualHost

Каталог оборудования

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Производители

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Функциональные группы

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Данное руководство предназначено для использования в локальной среде тестирования на Windows. Инструкции подходят для Apache 2.4 и более поздних версий.

  1. Создайте вложенную папку внутри C:vhosts для каждого виртуального хоста, который вы хотите добавить на сервер Apache.
  2. Откройте C:WINDOWSsystem32driversetchosts в блокноте или в любом другом текстовом редакторе. Найдите следующую строку в нижней части документа:
    127.0.0.1   localhost
  3. На отдельной пустой строке введите 127.0.0.1, затем поставьте пробел и введите имя виртуального хоста, который необходимо зарегистрировать. Например, чтобы создать виртуальный хост с именем mysite, введите следующую команду:
    127.0.0.1   mysite
  4. Добавьте нужное количество дополнительных виртуальных хостов, каждый из которых должен быть введён на отдельной строке с указанием того же IP-адреса (127.0.0.1). Сохраните файл хостов, и закройте его.
  5. Откройте конфигурационный файл Apache, httpd.conf, в текстовом редакторе. Он находится в файлах Apache в папке conf. Если вы используете XAMPP, этот файл находится по адресу C:xamppapacheconfhttpd.conf. Прокрутите вниз до конца раздела Supplemental configuration и найдите следующий раздел (приблизительно около 500 строки):
    #Virtual hosts
    #Include conf/extra/httpd-vhosts.conf
  6. Сотрите # около начала второй строки, раздел теперь должен выглядеть так:
    #Virtual hosts
    Include conf/extra/httpd-vhosts.conf
  7. Сохраните файл httpd.conf и закройте его.
  8. Откройте extrahttpd-vhosts.conf в блокноте или в любом другом текстовом редакторе. Если вы используете XAMPP, то адрес будет таким C:xamppapacheconfextrahttpd-vhosts.conf. Главный раздел выглядит так:

    В XAMPP все строки будут закомментированы. Вам нужно удалить # в начале строки, содержащей следующую директиву:

    NameVirtualHost *.80
  9. Переместите курсор в область пустого пространства, расположенного на 15 строке в предыдущем скриншоте, и вставьте туда следующие три строки кода:
    <Directory C:/vhosts>
      Require all granted
    </Directory>

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

  10. На скриншоте в строках с 27 по 42 расположен код, который показывает примеры определения виртуальных хостов (в XAMPP они закоментированы). Там показаны все команды, которые могут быть использованы, но из них только DocumentRoot и ServerName являются обязательными.

    Когда вы используете виртуальный хостинг, Apache отключает главный корень сервера, поэтому первое определение должно содержать оригинальный корневой каталог. Затем вы добавляете каждый новый виртуальный хост внутри пары тегов <VirtualHost>, используя расположение веб-файлов сайта в качестве значения для DocumentRoot, и имя виртуального хоста для ServerName. Если путь содержит пробелы, то необходимо весь путь заключить в кавычки. Если ваш корневой каталог расположен, как у меня, в C:htdocs, и вы добавляете mysite в качестве виртуального хоста в C:vhosts, измените код на строках с 27 по 42 следуя следующему примеру (в XAMPP, просто добавить эти новые директивы в нижней части файла, и установить DocumentRoot для localhost в C:/xampp/htdocs):

    <VirtualHost *:80>
      DocumentRoot c:/htdocs
      ServerName localhost
    </VirtualHost>
    <VirtualHost *:80>
      DocumentRoot c:/vhosts/phpdw
      ServerName mysite
    </VirtualHost>
    
  11. Сохраните httpd-vhosts.conf и перезапустите Apache. Все сайты в корневом каталоге сервера будет по-прежнему доступны через httр://localhost/sitename/. Все, что в виртуальном хосте будет доступен через прямой адрес, например, httр://mysite/.
  12. Если у вас есть трудности с доступом к виртуальным хостам, убедитесь, что вы добавили index.php в директиву DirectoryIndex в файле httpd.conf.

В прошлых статьях мы установили и настроили на локальном компьютере сервер Apache. В принципе, на этом можно было бы остановиться, так как сервер находится в рабочем состоянии и его можно спокойно использовать в работе. Но, по личному опыту, могу сказать, что использование только одного хоста localhost не очень удобно при разработке нескольких сайтов, так как для каждого сайта нужно будет создавать в каталоге localhost отдельный каталог и со временем в ней (папке localhost) будет очень трудно разобраться и что-то найти. Да и при тестировании разрабатываемого проекта гораздо удобнее набирать в браузере адрес вида test, чем localhost/test. Поэтому мы приступаем к настройке виртуальных хостов на локальном сервере.

Вообще, существует два способа конфигурирования виртуальных хостов: на основе имени и на основе IP-адреса. Но, так как мы настраиваем локальный сервер и у нас только один IP (кстати, для локалки он 127.0.0.1), то вариант с привязкой к IP нам не подходит и мы будем рассматривать вариант с привязкой к имени.

В прошлой статье я уже упоминал, что в файле конфигурации httpd.conf сервера есть строчка Include conf/extra/httpd-vhosts.conf. Мы ее уже раскомментировали, поэтому собственно и переходим к этому файлу. Найти его можно в папке Apache/conf/extra/.

Начнем рассматривать содержимое файла.
Первая директива – это NameVirtualHost *:80 привязывает виртуальные хосты, указываемы далее, к именам сайтов указанных в секциях <VirtualHost …>. Здесь вместо звездочки можно вписать IP 127.0.0.1, но тогда во всех секциях <VirtualHost> нужно будет указать то же самый IP. Принцип работы этой директивы заключается в том, что при обращении, допустим, к адресу localhost, сервер проверяет, соответствует ли входящий адрес и порт, описанным в секциях VirtualHost и имеется ли запись 127.0.0.1:80 в директиве NameVirtualHost. Если соответствует, то он перебирает секции VirtualHost, в заголовках которых указан входящий адрес. Таким образом, запрос 127.0.0.1:80 будет распределяться только между виртуальными хостами, в которых он указан.

Дальше в файле идут секции VirtualHost. Как видно из названия, каждая секция описывает настройки каждого виртуального хоста. Обязательно должна быть хотя бы одна такая секция, которая описывает настройки для localhost.
<VirtualHost *:80>
DocumentRoot “D:/server/localhost/www”
ServerName localhost
ErrorLog “D:/server/logs/localhost.error.log”
CustomLog “D:/server/logs/localhost.access.log” common

Директива DocumentRoot в этой секции указывает на папку, к которой будет происходить обращение при вызове адреса localhost.
ServerName как раз содержит имя нашего виртуального хоста, то есть его адрес. Сюда можно вписывать как адреса вида localhost, test, site, так и адреса localhost.ru, test.com, www.site.org.
В ErrorLog и CustomLog мы указываем, где будут хранится логи этого виртуального хоста. Обратите внимание, имеет смысл для каждого хоста добавлять в имя файла лога название этого хоста, чтобы в будущем было легко найти лог требуемого хоста. Эти директивы можно и не указывать, но тогда логи этого виртуального хоста будут храниться в общих логах сервера.

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

  • ServerAdmin webmaster@site.ru – адрес электронки администратора виртуального хоста
  • ServerAlias www.site.ru – зеркало хоста

Кроме того, можно добавить секции для индивидуальной настройки хоста:

<IfModule alias_module>
ScriptAlias /cgi-bin/ “d:/server/host_name/cgi-bin”

Создает ссылку на папку скриптов cgi-bin для хоста host_name.

<Directory “d:/server/host_name/www”>
Options Indexes Includes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all

Настройки директории хоста host_name, их мы разбирали в прошлой статье.

После настройки файла httpd-vhosts.conf проверим правильность его конфигурации. В каталоге D:serverApachebin создайте файл httpd-S.cmd с содержимым:
“D:serverApachebinhttpd.exe” –S
pause

После запуска этого файла вы увидите окно с отчетом о проверке, Syntax OK в конце говорит о том, что все настройки в порядке.

Теперь нужно прописать созданные хосты в файл C:Windowssystem32driversetchosts. Для этого открываем его текстовым редактором и вносим следующие записи:

127.0.0.1 www.host1.ru host1.ru #Чтобы не набирать www перед именем сайта, создаем зеркало
127.0.0.1 www.host2 host2 #Можно и без .ru создавать хосты
127.0.0.1 host3 #Самый распространенный вариант для локалки
127.0.0.1 localhost # Обычно уже указано, проследите чтобы случайно не удалили и не закомментировали.

Сохраните файл и перезапустите Apache. Попробуйте разместить в каталогах созданных вами виртуальных хостов какие-нибудь тестовые файлы (например index.html) и из браузера открыть хосты по адресам, указанным в директории ServerName каждого хоста.

Если вам приходится часто создавать виртуальные хосты и не очень хочется каждый раз редактировать все эти файлы и перезапускать Apache вручную, создайте в папке сервера (D:server) файл createVH.cmd с таким содержимым:

@cls
@rem Получаем текущую папку. Если у вас структура папок сервера как у меня, но он установлен, например на другом диске, укажите здесь вместо %~dp0 путь с нему (например, D:server) косая черта в конце обязательна.
@set server_path=%~dp0
:dir_exist
@set /P new_dir="Enter new VHost name:"
@set /P ip_add="Enter your IP address:"
@ if exist %server_path%%new_dir% echo "VHost %new_dir% already exist. Please re-enter Vhost name."
@ if exist %server_path%%new_dir% goto dir_exist
@md %server_path%%new_dir%

@rem Здесь указывается путь до конфиг файла виртуальных хостов, если у вас другой , поменяйте
@set outputfile=%server_path%Apacheconfextrahttpd-vhosts.conf
@echo. >> %outputfile%
@echo ^<VirtualHost %ip_add%:80^> >> %outputfile%
@echo ServerName %new_dir% >> %outputfile%
@echo DocumentRoot "%server_path%%new_dir%" >> %outputfile%
@echo ErrorLog "%server_path%logs%new_dir%.error.log" >> %outputfile%
@echo CustomLog "%server_path%logs%new_dir%.access.log" common >> %outputfile%
@echo ^</VirtualHost^> >> %outputfile%
@if %ip_add%==* set ip_host=127.0.0.1
@if not %ip_add%==* set ip_host=%ip_add%
@set hostfile=%windir%system32driversetchosts
@echo. >> %hostfile%
@echo %ip_host% %new_dir% >> %hostfile%
@set htmlfile=%server_path%%new_dir%index.html
@echo ^<html^> >> %htmlfile%
@echo ^<head^> >> %htmlfile%
@echo ^<title^>%new_dir%^</title^> >> %htmlfile%
@echo ^</head^> >> %htmlfile%
@echo ^<body^> >> %htmlfile%
@echo %new_dir% >> %htmlfile%
@echo ^</body^> >> %htmlfile%
@echo ^</html^> >> %htmlfile%
@rem Здесь путь до самого сервера, если у вас другой, поменяйте
@start %server_path%Apachebinhttpd.exe -k restart

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

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

How can I set up virtualhost for multiple domain name on Windows?

I will use it for my own test projects. I have three projects that I need to set up and at the moment I’m using xampplite for the portable Apache.

  1. www.foo-bar.com —> direct to c:xampplitehtdocsfoo-bar
  2. www.abcdef.com —> directo to c:xampplitehtdocsabcdef
  3. www.qwerty.com —> direct to c:xampplitehtdocsqwertyweb

I also need to access on another project, but it just like typing
http://localhost/my-project/

How can I write the vhost configuration for that?

Peter Mortensen's user avatar

asked Apr 17, 2010 at 11:24

nightingale2k1's user avatar

nightingale2k1nightingale2k1

9,96514 gold badges67 silver badges96 bronze badges

You need to do several steps in order to make this work.

  1. Update the hosts file. On Windows XP, you can find it under c:WINDOWSsystem32driversetc. You should already see the first line from below. It takes care of your mentioned other project. Add the additional ones to make any requests to the mentioned virtual hosts routed back to your own machine.

     127.0.0.1       localhost
     127.0.0.1       foo-bar.com
     127.0.0.1       abcdef.com
     127.0.0.1       qwerty.com
    
  2. Update the vhosts file in Apache configuration. Under your XAMPP folder, add the following to apacheconfextrahttpd-vhosts.conf and if needed change the ports (i.e., if you use 8080 instead of port 80).

     <VirtualHost *:80>
         DocumentRoot C:/xampplite/htdocs/foo-bar/
         ServerName www.foo-bar.com
     </VirtualHost>
     <VirtualHost *:80>
         DocumentRoot C:/xampplite/htdocs/abcdef/
         ServerName www.abcdef.com
     </VirtualHost>
     <VirtualHost *:80>
         DocumentRoot C:/xampplite/htdocs/qwerty/web/
         ServerName www.qwerty.com
     </VirtualHost>
    
  3. Do a quick configuration check. Open {XAMPP-folder}apacheconfhttpd.conf your file and make sure that the following part is not commented out by a preceding # character:

     Include conf/extra/httpd-vhosts.conf
    
  4. Restart XAMPP.

… and you should be all setup now. Your other project should be accessible at the URI you mentioned if you just put it under C:/xampplite/htdocs/my-project/.

Peter Mortensen's user avatar

answered Apr 17, 2010 at 13:36

MicE's user avatar

3

To get C:/xampp/htdocs/my-project/ working, I had to add the following (default?) VirtualHost to apacheconfextrahttpd-vhosts.conf (in step 2 of MicE’s tutorial).

<VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs"
    ServerName localhost
</VirtualHost>

Peter Mortensen's user avatar

answered May 27, 2013 at 13:42

JeroenVdb's user avatar

JeroenVdbJeroenVdb

7981 gold badge12 silver badges21 bronze badges

1

127.0.0.5  abcd.com

<  VirtualHost 127.0.0.5 >

    ServerName abcd.com

    DocumentRoot "C:xampphtdocslaravelpublic" 

    <Directory "C:xampphtdocslaravelpublic">

        DirectoryIndex index.php

        AllowOverride All

        Order allow, deny

        Allow from all

    </Directory>

< / VirtualHost > 

Swati's user avatar

Swati

27.4k4 gold badges21 silver badges40 bronze badges

answered May 8, 2019 at 4:59

Anand computer gyaan's user avatar

1


grigoriev

4938

В предидущей статье мы разобрались как установить apache. Теперь давайте разберём зачем создают на apache виртуальный хост и как проводится настройка виртуальных хостов apache windows.

И так давайте разберёмся зачем нам нужен виртуальный хост. После установки apache мы можем к нему обращаться набрав в браузере localhost. А хотелось бы что бы мы могли держать на сервере несколько сайтов и обращаться к ним по отдельному url. Для этого должна быть сделана на apache настройка виртуальных хостов. Для начала создадим на пример на диске С папку «www.Zametki». В папке С:Zametki создадим три папки conf, htdocs, logs, Errors . В папке conf создадим файл zametki.conf.
Откроем файл С:www.Zametkiconfzametki.conf и опишем наш виртуальный хост:

#Виртуальный хост zametki
<VirtualHost *:80>
  #Настройки сервера
  ServerName www.zametki
  ServerAlias zametki
  ServerAdmin webmaster@zametki
  
  #Журналы сервера
  ErrorLog "c:/www.Zametki/logs/error.log"
  CustomLog "c:/www.Zametki/logs/access.log" common
  
  #корневая папка
  DocumentRoot "c:/www.Zametki/htdocs"
  <Directory "c:/www.Zametki/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order deny,allow
    Allow from all
  </Directory>
</VirtualHost>

Сохраняем файл zametki.conf. Теперь нам осталось подключить его к основному файлу конфигурации сервера httpd.conf. Он находится по адресу C:Program FilesApache Software FoundationApache2.2conf. Открываем его и для начала
дописываем в самый низ файла:

NameVirtualHost *:80

<VirtualHost *:80> 
  ServerName localhost
  ServerAdmin admin@localhost
</VirtualHost> 

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

# www.zametki
Include "c:/www.Zametki/conf/zametki.conf"

Теперь нам осталось создать запись о нашем хосте в файле hosts по адресу
C:WINDOWSsystem32driversetc. Это будет замена DNS серверу.

//запись по умолчанию виндовс
127.0.0.1       localhost
//наша запись
127.0.0.1 zametki www.zametki

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

За создание виртуальных папок у нас отвечает директива Alias. Создадим папку
для хранения файлов с ошибками Apache. Добавим в файл zametki.conf в директиву <VirtualHost> … </VirtualHost> нашего виртуального хоста следующее:

  # Папка с сообщениями об ошибках
//назначаем алиас(псевдоним) для папки  
  Alias /err/ "c:/www.Zametki/Errors/"
  <Directory "c:/www.Zametki/Errors/">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order deny,allow
    Allow from all
  </Directory>

Создание своих страниц с ошибками Apache

За сообщение об ошибках у нас отвечает директива ErrorDocument. Создадим в папке c:/www.Zametki/Errors/ файл например 404.html. Это будет наша html страничка, выводящаяся при ошибке сервера 404. В файл zametki.conf добавим
следующие строки:

# Сообщения об ошибках
  ErrorDocument 404 /err/404.html

Поделиться:

You have no rights to post comments

Так как большинство читателей работают с операционной системой Windows, то сначала организуем виртуальные хосты в Windows 7.

Виртуальные хосты в Windows 7

В качестве примера поместим один или несколько проектов на диск D: локального компьютера. Сначала организуем структуру каталогов. На диске D: создаем каталог «mysites», а в нём каталог для первого сайта «site1». В каталоге «site1» сделаем два подкаталога: «www» и «logs». В первом подкаталоге будет располагаться сам сайт, а во втором, журналы виртуального хоста: access.log (журнал доступа) и error.log (журнал ошибок).

Пример структуры каталогов виртуального хоста

Файлы журналов создавать не надо, они будут созданы автоматически. А в каталоге «www», пока нет сайта, поместим простейший файл-заглушку «index.html» следующего содержания:

Файл заглушка

Теперь немного поправим настройки для виртуальных хостов веб-сервера Apache. Открываем C:xamppapacheconfextra httpd-vhosts.conf
Как видим, этот файл уже содержит два примера виртуальных хостов. Не будем их трогать, а ниже разместим следующие строки:

NameVirtualHost *:80
<VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs"
    ServerName localhost
</VirtualHost>
<VirtualHost *:80>
    ServerAdmin webmaster@site1.ru
    DocumentRoot "D:/mysites/site1/www"
    ServerName site1
    ServerAlias www.site1
    ErrorLog "D:/mysites/site1/logs/error.log"
    CustomLog "D:/mysites/site1/logs/access.log" common
   <Directory "D:/mysites/site1/www">
	AllowOverride All
	Require all granted
    </Directory>
</VirtualHost>

 Первая директива NameVirtualHost *:80 включает поименное использование виртуальных хостов на 80-ом порту (обычный http, если нужен https, используем 443 порт).
Следующие четыре строки это общая секция для всех виртуальных хостов. Если клиент обращается к серверу по IP-адресу или по несуществующему имени он попадет на этот виртуальный хост. В нашем случае в корневую директорию веб-сервера. Остальные строки это описание нашего первого виртуального хоста. Если нужно добавить ещё один виртуальный хост, то просто копируем эту секцию, вставляем ниже и по аналогии изменяем данные. Сохраняем файл.
Значение данных в секции виртуального хоста:

  • <VirtualHost *:80> Какой порт используется
  • ServerAdmin webmaster@site1.ru Эл. почта администратора сайта
  • DocumentRoot «D:/mysites/site1/www» Корневой каталог сайта
  • ServerName site1 Имя хоста
  • ServerAlias www.site1 Псевдоним хоста. Можно обращаться, используя псевдоним
  • ErrorLog «D:/mysites/site1/logs/error.log» Расположение журнала ошибок
  • CustomLog «D:/mysites/site1/logs/access.log» common Расположение журнала доступа. Оператор common определяет общую степень детализации журнала. Если нужна более подробная детализация, то вместо common пишем combined
  • <Directory «D:/mysites/site1/www»> Подсекция, в которой определяются права и настройки для конкретного каталога.
  • AllowOverride All Эта директива нужна для правильной работы системы SEF

Из панели управления XAMPP перестартовываем Apache. Изменяем файл C:WindowsSystem32driversetchosts. Дописываем в него две строки:

127.0.0.1     site1
127.0.0.1     www.site1

Вместо 127.0.0.1 можно написать 127.0.0.2, а для следующего виртуального хоста 127.0.0.3, но в этом нет особой нужды. Об этом напишу в другой раз. А сейчас сохраняем файл. Открываем браузер и адресной строке вводим http://site1 или просто site1. Если всё сделано правильно, видим информацию из файла-заглушки.

Результат работы виртуального хоста

Виртуальные хосты в Debian GNU/Linux

Настройка виртуальных хостов в Linux мало чем отличается от их настройки в Windows. Разве что созданием структуры каталогов. Оно и понятно, Apache кроссплатформенное решение, настроечные файлы практически одинаковы.
При установке XAMPP, корневой директорией веб-сервера Apache является каталог /opt/lampp/htdocs. А вот когда Apache устанавливается в Linux отдельным пакетом, то по умолчанию корневой директорией является каталог /var/www. Вот в этот каталог мы и поместим виртуальные хосты.
В качестве примера, создадим каталог /var/www/site1, который будет содержать два подкаталога: logs для журналов и www для файлов сайта.

Пример структуры каталогов виртуального хоста

Делаем владельцем каталога site1 пользователя www-data:

sudo chown -R www-data:www-data /var/www/site1

В каталог /var/www/site1/www помещаем файл-заглушку index.html

 Пример файла-заглушки

 Открываем файл /opt/lampp/etc/extra/httpd-vhosts.conf и удаляем всё его содержимое. Добавляем следующий код:

NameVirtualHost *:80
<VirtualHost *:80>
    DocumentRoot "/opt/lampp/htdocs/"
    ServerName localhost
</VirtualHost>
<VirtualHost *:80>
    ServerAdmin webmaster@site1.ru
    DocumentRoot "/var/www/site1/www"
    ServerName site1
    ServerAlias www.site1
    ErrorLog "/var/www/site1/logs/error.log"
    CustomLog "/var/www/site1/logs/access.log" common
    <Directory "/var/www/site1/www">
	Options Indexes FollowSymLinks Includes ExecCGI
	AddType text/shtml .shtml
	AddOutputFilter INCLUDES .shtml
	AllowOverride All
	Require all granted
    </Directory>
</VirtualHost>

 Последние 15 строк кода – это как раз описание виртуального хоста site1. Если в дальнейшем надо будет добавить ещё один виртуальный хост, то просто скопируйте эти строки и измените пути к директориям.
Открываем файл /opt/lamp/etc/httpd.conf и раскомментируем (т. е. удалим символ решетки) строку 488:

Include etc/extra/httpd-vhosts.conf 

Перестартовываем XAMPP

/opt/lampp/xampp restart

Правим файл /etc/hosts. Ниже строки

127.0.0.1	localhost

Вставляем строку следующие строки:

127.0.0.1	site1
127.0.0.1     www.site1

В адресной строке браузера набираем
http://site1 или просто site1

Пример работы виртуального хоста

Если вы видите страницу-заглушку, значит, всё сделали правильно!

Об авторе:

ZolkinМеня зовут Андрей Золкин. Из более, чем пятнадцати лет работы в сфере информационных технологий, десять лет работаю с системами, базирующимися на открытом исходном коде. На страницах сайта Aitishnik.Ru веду блоги по CMC Joomla и Debian GNU/Linux.

Ещё о сайтостроении

    • Бесплатный сайт с помощью конструктора – преимущества и недостатк…

      Бесплатный сайт с помощью конструктора – преимущества и недостатк...Развитие и совершенствование компьютерных технологий, не перестает удивлять современного человека. К примеру, не так давно позволить себе иметь собственный сайт мог только состоятельный человек, так как это, как вы понимаете,…

    • Где купить хостинг и домен?

      Где купить хостинг и домен?Домен — это имя сайта в глобальной сети Интернет. Домен используется не только в качестве адреса сайта, к домену можно прикрепить электронную почту и другие сервисы. Прежде чем вы будете выбирать провайдера, где купить домен, вам следует…

    • Основная цель выделенного сервера

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

    • Преимущества прокси-сервера

      Преимущества прокси-сервераИспользование прокси-сервера не только дает анонимность вашему ИП-адресу, но также позволяет ограничивать доступ к разным ресурсам Интернета сотрудников компании. Прокси-сервер — это машина, которая функционируют в качестве посредника,…

    • Что входит в техподдержку сайта на Joomla?…

      Что входит в техподдержку сайта на Joomla?...Очень часто посетители нашего сайта интересуются вопросами техподдержки. Многих интересуют вопросы: что такое техническая поддержка, что входит в техподдержку сайта на Joomla. В этом материале мы приводим список работ, которые входят в…

    • Основы юзабилити

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

Понравилась статья? Поделить с друзьями:
  • Настройка заставки экрана в windows 10
  • Настройка границ окон в windows 10
  • Настройка виртуальной памяти windows 10 для озу 16 гб
  • Настройка днс сервера в локальной сети windows
  • Настройка заставка на рабочий стол windows 10