Термин 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). Содержимое этого файла можно просто удалить — оно нам не понадобится.
Виртуальные хосты описываются в контейнере <VirtualHost>. Внутри этого контейнера можно указать практически любые директивы Apache. Но обязательными являются только две:
- ServerName — определяет само имя хоста
- DocumentRoot — определяет, какие файлы показывать для этого имени, то есть содержит путь до сайта этого хоста
Секций <VirtualHost> может быть любое количество — столько, сколько вам нужно виртуальных хостов на данном сервере.
Ещё одно правило: первый раздел VirtualHost используется для сбора всех запросов, которые не соответствуют ServerName или ServerAlias в любом другом блоке <VirtualHost>. То есть первая секция является как бы дефолтной — для всех остальных запросов, которые не предназначены для виртуальных хостов. Поэтому нам нужно сделать как минимум два контейнера <VirtualHost>:
- Будет собирать запросы, которые не предназначены ни для какого из хостов. Обычные запросы, например, к localhost или 127.0.0.1
- Контейнер самого хоста (у меня хост называется 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:\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%)
- Для чего нужна и как использовать open_basedir (RANDOM — 50%)
Данное руководство предназначено для использования в локальной среде тестирования на Windows. Инструкции подходят для Apache 2.4 и более поздних версий.
- Создайте вложенную папку внутри
C:\vhostsдля каждого виртуального хоста, который вы хотите добавить на сервер Apache. - Откройте
C:\WINDOWS\system32\drivers\etc\hostsв блокноте или в любом другом текстовом редакторе. Найдите следующую строку в нижней части документа:127.0.0.1 localhost
- На отдельной пустой строке введите 127.0.0.1, затем поставьте пробел и введите имя виртуального хоста, который необходимо зарегистрировать. Например, чтобы создать виртуальный хост с именем mysite, введите следующую команду:
127.0.0.1 mysite
- Добавьте нужное количество дополнительных виртуальных хостов, каждый из которых должен быть введён на отдельной строке с указанием того же IP-адреса (127.0.0.1). Сохраните файл хостов, и закройте его.
- Откройте конфигурационный файл Apache,
httpd.conf, в текстовом редакторе. Он находится в файлах Apache в папкеconf. Если вы используете XAMPP, этот файл находится по адресуC:\xampp\apache\conf\httpd.conf. Прокрутите вниз до конца раздела Supplemental configuration и найдите следующий раздел (приблизительно около 500 строки):#Virtual hosts #Include conf/extra/httpd-vhosts.conf
- Сотрите # около начала второй строки, раздел теперь должен выглядеть так:
#Virtual hosts Include conf/extra/httpd-vhosts.conf
- Сохраните файл
httpd.confи закройте его. - Откройте
extra\httpd-vhosts.confв блокноте или в любом другом текстовом редакторе. Если вы используете XAMPP, то адрес будет такимC:\xampp\apache\conf\extra\httpd-vhosts.conf. Главный раздел выглядит так:В XAMPP все строки будут закомментированы. Вам нужно удалить # в начале строки, содержащей следующую директиву:
NameVirtualHost *.80
- Переместите курсор в область пустого пространства, расположенного на 15 строке в предыдущем скриншоте, и вставьте туда следующие три строки кода:
<Directory C:/vhosts> Require all granted </Directory>
Это позволяет установить правильные разрешения для папки, содержащей сайты, которые нужно рассматривать в качестве виртуальных хостов.
- На скриншоте в строках с 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>
- Сохраните
httpd-vhosts.confи перезапустите Apache. Все сайты в корневом каталоге сервера будет по-прежнему доступны черезhttр://localhost/sitename/. Все, что в виртуальном хосте будет доступен через прямой адрес, например,httр://mysite/. - Если у вас есть трудности с доступом к виртуальным хостам, убедитесь, что вы добавили
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:\server\Apache\bin\ создайте файл httpd-S.cmd с содержимым:
“D:\server\Apache\bin\httpd.exe” –S
pause
После запуска этого файла вы увидите окно с отчетом о проверке, Syntax OK в конце говорит о том, что все настройки в порядке.
Теперь нужно прописать созданные хосты в файл C:\Windows\system32\drivers\etc\hosts. Для этого открываем его текстовым редактором и вносим следующие записи:
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%Apache\conf\extra\httpd-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%\system32\drivers\etc\hosts
@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%Apache\bin\httpd.exe -k restart
Теперь для создания хоста просто запустите этот файл, впишите в ответ имя нового хоста и IP, который будет указываться в секции VirtualHost файла httpd-vhosts.conf. По окончанию работы программа сама закроется. Вам останется только проверить созданный хост, набрав в адресной строке браузера имя, которое вы вписали в программу. Если все успешно прошло, то вы увидите страницу с именем нового хоста.
Обратите внимание, программа рассчитана на то, что структура каталогов сервера соответствует той, которую я указывал в первой статье. Если у вас установлен сервер по другим путям, поправьте файл в соответствии с ними.
Виртуальные хосты могут быть привязаны к имени хоста (например, 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:\work\localhost1\www\index.htmlдобавляем текст «localhost1» - в файл
D:\work\localhost2\www\index.htmlдобавляем текст «localhost2» - в файл
D:\work\localhost3\www\index.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:\wamp\apache\conf\httpd.conf надо найти и раскоментировать строку:
Include conf/extra/httpd-vhosts.conf
В файле C:\wamp\apache\conf\extra\httpd-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:\Windows\System32\drivers\etc\hosts строки
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:\wamp\apache\conf\extra\httpd-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:\Windows\System32\drivers\etc\hosts строки
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:\wamp\apache\conf\extra\httpd-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.
Hello, how are you? In a previous article, we saw how to install Apache in Windows 10. Consequently, we can use all the possibilities offered by this powerful web server. In this opportunity, I will show you how to enable Apache Virtual Host in Windows 10.
Enable Virtual Host in Apache
As mentioned above, we have learned how to install Apache. However, the configuration applied only allows you to set up a single website through the localhost address. On the negative side, This configuration does not offer enough flexibility of work, as it limits to a single website. This is inconvenient, as it is likely to require more than one website to be mounted on the server. Especially for those applications that do not need a dedicated server. Fortunately, Apache allows the configuration of multiple virtual hosts. On these hosts, it is also possible to interpret the PHP language. Let’s see how to do it!
Edit the index.php file
The first thing we need to do is to modify the index.php file located in the next path: C:\Apache24\htdocs. If you want to know how to do it, check our post about PHP in Windows 10.
With this modification what we will do is change the message of the site to show Default website. This is to work more comfortable and not to confuse with the two virtual sites that we are going to add. After saving the file, reload the browser and the page should look like this:
Edit the httpd-vhosts.conf file
Next, we are going to edit the virtual host configuration in Apache. With this intention, please go to this address C:\Apache24\conf\extra, once there select the httpd-vhosts.conf file and modify it with your favorite text editor:
In the shaded area that we saw in the previous image, we can see the information that we have to edit. In this opportunity, we are going to add two virtual hosts called osradar1.com and osradar2.com. Please note that you can assign the name of your preference, you just have to modify the file to your liking. In addition, we have also enabled port 80, but it is also possible to enable port 443. Thus, we’re going to replace that code with the following lines:
<VirtualHost osradar1.com:80>
ServerAdmin [email protected]
DocumentRoot "/sites/osradar1.com"
ServerName osradar1.com
ServerAlias www.osradar1.com
<Directory "c:/sites/osradar1.com">
AllowOverride All
Require all granted
Options Indexes FollowSymLinks
</Directory>
ErrorLog "logs/osradar1.com-error.log"
CustomLog "logs/osradar1.com-access.log" common
</VirtualHost>
<VirtualHost osradar2.com:80>
ServerAdmin [email protected]
DocumentRoot "/sites/osradar2.com"
ServerName osradar2.com
ServerAlias www.osradar2.com
<Directory "c:/sites/osradar2.com">
AllowOverride All
Require all granted
Options Indexes FollowSymLinks
</Directory>
ErrorLog "logs/osradar2.com-error.log"
CustomLog "logs/osradar2.com-access.log" common
</VirtualHost>
Save the file to make the changes effective.
Edit the httpd.conf file
Next, we are going to modify the Apache configuration to load the Virtual Host module. With this in mind go to the next address: C:\Apache24\conf. Then select the httpd.conf file and open it with the text editor. Look for a line with the text vhost, approximately line number 515. Then delete the number sign (#).
-
Default setting -
Configuration to load the vhost module.
By removing the numeral sign, then the line is used and the extra configuration that has just been modified is downloaded. Save the file to continue. Without leaving the file modification, please locate line 187 corresponding to vhost_alias_module modules/mod_vhost_alias.so. In the same way that was done with the previous line, it is necessary to delete the numeral sign.
-
Default setting -
Configuration that allows Apache to host more than one module.
This modification will allow Apache to be able to host more than one website. Press Save to continue.
Create folders to host virtual websites.
As you may remember, in the previous steps we modified Apache to host two virtual sites called osradar1.com and osradar2.com. Well, it is necessary to manually create the folders where the necessary files will be stored so that the sites load correctly. First, go to the root of the C drive and create a folder named sites. Once inside it please create two new folders with the name of the website. In this case osradar1.com and osradar2.com:
Then enter the folder osradar1.com and create a new file called index.php:
Now it is necessary to add the following configuration to the newly created index.php file. Thereupon, opens the file with the text editor and copies the following code:
<html>
<body>
<h1>Osradar 1</h1>
<p>Welcome to Osradar 1 site</p>
</body>
</html>
This procedure has to be followed in the folder osradar2.com:
In the same way, we have to modify the index.php file adding the following lines of code. Open the file with the text editor and paste the following text:
<html>
<body>
<h1>Osradar 2</h1>
<p>Welcome to Osradar 2 site</p>
</body>
</html>
Save the files to continue. Please remember that every time we make a change in the Apache configuration, it is necessary to restart the service. This way the changes will be effective.
Edit the hosts file in Windows.
Finally, we are going to edit the host file in Windows 10. This will allow the system to load correctly the virtual hosts we have just created. In that case, opens a CMD as administrator and enters the following commands:
cd drivers cd etc dir notepad hosts
The last command will launch the notepad and it is necessary to add the following lines to the hosts file:
127.0.0.1 osradar1.com www.osradar1.com
127.0.0.1 osradar2.com www.osradar2.com
What we have done is added the IP address and the names of the websites we have just created. This way the system will be able to load them correctly.
Testing virtual hosts in the browser.
If you have followed to the letter the instructions I have given you, then it will already be possible to host more than one website on our Apache server. Remember that if you get any errors, then check if the files were edited correctly. To check if everything is OK, open the web browser and enter localhost. Open two more tabs and enter the name of the websites we created, in this case, http://www.osradar1.com// and http://www.osradar2.com// And all three websites will be running simultaneously on the Apache server.
Conclusion
Finally, we have seen how to enable Apache virtual host in Windows 10. This configuration will allow loading more than one website in the Apache server. Consequently, it will give us more flexibility to program websites. This is all for the time being, until the next time.
— Advertisement —
Everything Linux, A.I, IT News, DataOps, Open Source and more delivered right to you.
Subscribe
«The best Linux newsletter on the web»
