Данное руководство предназначено для использования в локальной среде тестирования на 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
.
Термин 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%)
- Почему в логах ошибок Apache не сохраняются записи об ошибке 404 (RANDOM — 53.4%)
Виртуальные хосты могут быть привязаны к имени хоста (например, 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.
Создаем папку websites на диске C:\
В ней папку нашего локального сервера test.loc
В ней создаем еще 3 папки
c:\websites\test.loc\
log //тут будут храниться наши логи
conf //тут будет храниться наш файл конфигурации
www //тут будут храниться файлы нашего сайта
Далее правка файла hosts
Сам файл должен находится в папке «C:\windows\system32\drivers\etc\»
В любом месте пишем
127.0.0.1 test.loc www.test.loc
Далее создаем в c:\websites\test.loc\conf
наш файл конфигурации test.loc.conf
В нем пишем
<VirtualHost *:80>
#Основное название сайта
ServerName test.loc
#Дополнительные названия сайта
#*.test.loc — доступны все поддомены для test.loc
ServerAlias *.test.loc
DocumentRoot «c:/websites/test.loc/www»
ServerAdmin webmaster@test.loc
#Пути к логам сайта
ErrorLog «c:/websites/test.loc/log/error.log»
CustomLog «c:/websites/test.loc/log/access.log» combined
# Настройки директории сайта
<Directory «c:/websites/test.loc»>
Options Indexes FollowSymLinks
//Если напишем -Indexes, то запретим просмотр каталога, если файла index.php или index.html не будет.
AllowOverride All //All — разрешает файл .htaccess, его можно создать в корне test.loc
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
В папке c:\websites\test.loc\www
создаем наш тестовый файл index.php.
Внутри его пишем <?php echo phpinfo(); ?>
Теперь открываем c:/Apache/conf/httpd.conf»
В файле httpd.conf пишем, можно в самом конце добавить
#Подключение виртуальных хостов
NameVirtualHost *:80
#Загрузка настроечных файлов для каждого сайта
Include «c:/websites/test.loc/conf/test.loc.conf»
Ищем также эту директиву и добавляем
<IfModule dir_module>
DirectoryIndex index.php index.html //Apache будет искать index.php, если его нет, то index.html
</IfModule>
Сохраняем все и перезапускаем Apache
Открываем браузер и пишем test.loc
Если все настроено правильно, то Apache не выдаст ошибок и откроется страница с описанием PHP и его модулей.
Таким способом, вы можете создать сколько угодно сайтов.
!!!Тут еще есть один нюанс, теперь если вы в браузере наберете
localhost, то выведется тот локальный сайт, который первый подключен в httpd.conf,
а мы с вами первым подключили test.loc
Вернуть наш localhost можно следующим образом
Создаем в «c:/Apache/htdocs/conf»
наш файл конфигурации htdocs.conf
В нем пишем
<VirtualHost *:80>ServerName localhost
DocumentRoot «c:/Apache/htdocs»
</VirtualHost>
Либо вот так, чтобы не лазить в с основной httpd.conf файл
<VirtualHost *:80>
ServerName localhost
DocumentRoot «c:/Apache/htdocs»
<Directory «c:/Apache/htdocs»>
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Теперь открываем c:/Apache/conf/httpd.conf»
В файле httpd.conf пишем, нужно в самом начале добавить
#Загрузка настроечных файлов для каждого сайта
Include «c:/Apache/htdocs/conf/htdocs.conf»
Include «c:/websites/test.loc/conf/test.loc.conf»
Author: Admin/Publisher |finished | checked
In this post, we will see how to configure virtual hosts for Apache on Windows. Many times, we install XAMPP, MAMP, or WAMP on Windows, but we find that to access our projects, we have to go through URLs like “localhost/test/” or “localhost/examples/project1.” Wouldn’t it be more convenient to have a local domain like “miproject1.local,” “miproject2.local,” and so on?
As you may guess, setting up virtual hosts allows us to have multiple websites on a single physical machine.
In this case, we will see how to do it in our local environment, but keep in mind that you can use virtual hosts to have multiple sites on the same VPS host. Also, note that we are not hosting our own domain. If you want to learn about hosting domains, you can search for Bind9.
Windows hosts file
The hosts file is an extensionless text file located in the Windows operating system, and it is used to map domain names to IP addresses. It provides a simple and manual way to establish an association between a domain name and a specific IP address at a local level.
IMPORTANT: The hosts file requires administrator permissions to be modified.
One helpful approach is to open the hosts file with Visual Studio Code, as it will prompt us to save changes as an administrator.
Let’s find out where the hosts file is located and examine its contents.
By default, it is typically found at C:\Windows\System32\drivers\etc\hosts.
Let’s take a look at its contents:
C:\Windows\System32\drivers\etc\hosts
# Copyright (c) 1993-2009 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # # This file contains the mappings of IP addresses to host names. Each # entry should be kept on an individual line. The IP address should # be placed in the first column followed by the corresponding host name. # The IP address and the host name should be separated by at least one # space. # # Additionally, comments (such as these) may be inserted on individual # lines or following the machine name denoted by a '#' symbol. # # For example: # # 102.54.94.97 rhino.acme.com # source server # 38.25.63.10 x.acme.com # x client host # localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost # ::1 localhost
The localhost IP
See that the hosts file is typically a file where all lines are commented, and some lines provide instructions on how to use it. Additionally, there are two commonly used lines that we will utilize.
#127.0.0.1 localhost
#::1 localhost
127.0.0.1 is the IPv4 address of localhost, and ::1 is the IPv6 address of localhost. The local IP address 127.0.0.1, also known as the loopback address or “localhost,” is a special address used to access the local machine from itself. In other words, it is a way to refer to the own machine without relying on an external network connection.
On my computer, I am using XAMPP, so I will uncomment the IPv4 line. Please note that by doing this, we are associating the localhost domain with the current machine.
If we write the following in the hosts file:
hosts
127.0.0.1 localhost 127.0.0.1 project1.local 127.0.0.1 project2.local
Understanding ip vinculation in hosts
These 3 domains are related with the IP 127.0.0.1 now, be clear that this is for our machine. For example, if I do the following line:
hosts
127.0.0.1 google.com
¿What will happen here?
Well if we check it on our browser, it will not find the page, we directly are saying that google.com is in our machine(PC). Take In consideration that I don’t up the Apache server, if we take the server up probably when I check in the browser I will see the XAMPP dashboard
IMPORTANT ALERT: My recommendation is to never log in to a website, such as Facebook, Instagram, a bank, etc., on a PC that is not yours.
Why? As you can see in the example, I could forge the Google page for the machine I am using, which could result in a phishing attempt.
The fact that I haven’t created the page yet gives us a false sense of security, thinking that even if someone does this, they won’t be able to trick us. However, this is a completely false sense of security.
In the following sections, we will see how to do this because we want to present our clients with a local address.
Setting the Virtual Host in our PC
Please note that we are talking about Apache, and in my particular case, I am using XAMPP on my PC, which installs Apache, MySQL, and PHP as part of the package.
To activate our Virtual Host, we need to access the folder where Apache is installed.
In XAMPP, this is relatively easy.
Once inside the Apache folder, I need to go to the “config” folder and then open the httpd.conf file.
The httpd.config file
Inside the httpd.conf file, we will look for these lines.
# Virtual hosts # Include conf/extra/httpd-vhosts.conf
And we will remove the #
comment symbol in front of “Include conf/extra/httpd-vhosts.conf”.
Save the file and we’re done.
Configuring the virtual host
Now, we need to go to the httpd-vhosts.conf file, which is located as indicated by the include statement: Path inside Apache’s “conf/extra/httpd-vhosts.conf”.
Inside this file, we can define our virtual host. But let’s first see what the file contains.
httpd-vhosts.conf
# Virtual Hosts # # Required modules: mod_log_config # If you want to maintain multiple domains/hostnames on your # machine you can setup VirtualHost containers for them. Most configurations # use only name-based virtual hosts so the server doesn't need to worry about # IP addresses. This is indicated by the asterisks in the directives below. # # Please see the documentation at # # for further details before you try to setup virtual hosts. # # You may use the command line option '-S' to verify your virtual host # configuration. # # Use name-based virtual hosting. # ##NameVirtualHost *:80 # # VirtualHost example: # Almost any Apache directive may go into a VirtualHost container. # The first VirtualHost section is used for all requests that do not # match a ##ServerName or ##ServerAlias in any block. # ## ##ServerAdmin webmaster@dummy-host.example.com ##DocumentRoot "D:/xampp/htdocs/dummy-host.example.com" ##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 webmaster@dummy-host2.example.com ##DocumentRoot "D:/xampp/htdocs/dummy-host2.example.com" ##ServerName dummy-host2.example.com ##ErrorLog "logs/dummy-host2.example.com-error.log" ##CustomLog "logs/dummy-host2.example.com-access.log" common ##
As we can see within our httpd-vhosts.conf file, there is a lot of information that we can use, including examples and a direct link to the documentation ( http://httpd.apache.org/docs/2.4/vhosts/).
Configuring multiple virtual hosts
Let’s see how to create multiple virtual hosts. Firstly, we’ll need our localhost and another virtual host, for example a “google.com” virtualhost.
Let’s assume that we create WordPress themes too, and have a virtualhost for that.
httpd-vhosts.conf
<VirtualHost *:80> ServerName localhost DocumentRoot D:\xampp\htdocs <Directory "D:\xampp\htdocs"> </Directory> </VirtualHost> <VirtualHost *:80> ServerName examplelang.local DocumentRoot D:\xampp\htdocs\Exercise_langChange <Directory "D:\xampp\htdocs\Exercise_langChange"> </Directory> </VirtualHost> <VirtualHost *:80> ServerName wthemes.local DocumentRoot D:\xampp\htdocs\wordpress_themes <Directory "D:\xampp\htdocs\wordpress_themes"> </Directory> </VirtualHost>
Specifying the directory is very important, don’t forget it. If you don’t specify the directory, the virtual hosts may not work as desired. The following are simple examples of virtual hosts. If you need to do something more elaborate, refer to the documentation.
In these cases, when I visit “localhost,” you’ll notice that the path is “D:\xampp\htdocs” in my case. This may vary depending on where you have XAMPP or the installation package you’re using.
Therefore, when you type “localhost” in the address bar, it refers to the htdocs folder. If everything is set up correctly in XAMPP, it will redirect you to the well-known “localhost/dashboard/” page.
If I enter “wthemes.local” in the address bar, it won’t search for that page on the internet. Instead, it will access the site located in “D:\xampp\htdocs\wordpress_themes.” While this site may exist on the internet, I have instructed my machine to treat that URL as “127.0.0.1” (my loopback address).
As a result, it will access that file and indicate that “wthemes.local” is located in “D:\xampp\htdocs\wordpress_themes,” and we will see the site hosted in that location.
The same concept applies if I have a “google.com” entry in the hosts file pointing to my localhost. It will direct to the folder specified in my httpd-vhosts.conf file.
For these reasons, some educational institutions tend to use programs that restore the machine to a previous state. These programs include DEEP FREEZE, Clean Slate, SmartShield, Dafturn Ofris, etc.
Understanding the concepts
Let’s create a fake “google.com” just to wrap up the concept: I will create a folder named fakegoogle with an “index.html” file in my htdocs folder. Then, I will add “google.com” to the hosts file and finally set up the virtual host.
[fakegoogle]index.html
<h1>Fake Google</h1>
hosts
127.0.0.1 google.com
httpd-vhosts.conf
<VirtualHost *:80> ServerName google.com DocumentRoot D:\xampp\htdocs\fakegoogle <Directory "D:\xampp\htdocs\fakegoogle"> </Directory> </VirtualHost>
Let’s see what we have here by running “google.com” in a browser:
As you can see, Edge allows this to happen, while Chrome, on the other hand, protects us against it and shows us the real page. This doesn’t mean it protects us from other types of fake pages. As I mentioned before, I used your own PC as an example to enter sites that require login information.
Something wrong?
If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.