Как настроить VirtualHost в Apache на Windows

VirtualHost в Apache позволяет запускать несколько сайтов на одном компьютере или сервере.

Например, вместо адресов вида:

  • http://localhost/site1/
  • http://localhost/site2/

можно использовать нормальные локальные домены:

  • http://site1.local/
  • http://site2.local/

Каждый домен будет открывать свою папку.

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

Что такое VirtualHost

VirtualHost, или виртуальный хост, — это отдельная конфигурация сайта внутри Apache.

Один экземпляр Apache может обслуживать несколько сайтов. Apache определяет, какой сайт нужно показать, по имени хоста из HTTP-запроса или по IP-адресу и порту.

Существует два основных варианта:

  • name-based VirtualHost — несколько сайтов используют один IP-адрес, а Apache различает их по доменному имени;
  • IP-based VirtualHost — для разных сайтов используются разные IP-адреса или комбинации IP и портов.

Для обычной локальной разработки почти всегда достаточно name-based VirtualHost. Apache прямо рекомендует его как более простой вариант в большинстве случаев.

Пример задачи

Допустим, у нас есть сайт в папке:

  • C:\Sites\example

и мы хотим открывать его в браузере по адресу:

  • http://example.local/

Для этого нужно сделать три вещи:

  1. добавить VirtualHost в Apache;
  2. добавить доменное имя в файл hosts Windows;
  3. проверить конфигурацию и перезапустить Apache.

Где находится конфигурация VirtualHost

Путь зависит от того, как установлен Apache.

При обычной установке Apache 2.4 структура может выглядеть так:

  • C:\Apache24\

Основной конфигурационный файл:

  • C:\Apache24\conf\httpd.conf

А виртуальные хосты часто хранятся отдельно:

  • C:\Apache24\conf\extra\httpd-vhosts.conf

В httpd.conf должна быть подключена эта конфигурация:

				
					Include conf/extra/httpd-vhosts.conf
				
			
Если строка начинается с #, уберите символ комментария:
				
					#Include conf/extra/httpd-vhosts.conf
				
			
должно стать:
				
					#Include conf/extra/httpd-vhosts.conf
				
			

Настройка VirtualHost

Откройте файл:

  • conf\extra\httpd-vhosts.conf

и добавьте:

				
					<VirtualHost *:80>
    ServerName example.local
    DocumentRoot "C:/Sites/example"

    <Directory "C:/Sites/example">
        Require all granted
    </Directory>
</VirtualHost>
				
			

Минимально важные директивы здесь:

  • ServerName — доменное имя сайта.
    • ServerName example.local
  • DocumentRoot — каталог, из которого Apache будет отдавать файлы.
    • DocumentRoot «C:/Sites/example»

Apache рекомендует явно задавать ServerName для каждого name-based VirtualHost. Если этого не сделать, поведение при выборе виртуального хоста может оказаться неожиданным.

Зачем нужен блок Directory

Одного DocumentRoot может быть недостаточно.

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

				
					<Directory "C:/Sites/example">
    Require all granted
</Directory>
				
			

Без этого при открытии сайта можно получить ошибку:

  • 403 Forbidden

В Apache 2.4 для управления доступом используются директивы семейства Require.

Настройка файла hosts в Windows

Сам Apache уже знает о example.local, но Windows пока не знает, куда направлять такое имя. Нужно добавить его в файл:

  • C:\Windows\System32\drivers\etc\hosts

Откройте редактор от имени администратора и добавьте:

  • 127.0.0.1 example.local

Теперь Windows будет направлять запросы к example.local на локальный компьютер.

После сохранения можно проверить:

				
					ping example.local
				
			

Имя должно разрешаться в:

  • 127.0.0.1

Проверка конфигурации Apache

Перед перезапуском обязательно проверьте синтаксис:
				
					httpd.exe -t
				
			

Если всё нормально:

  • Syntax OK

Если есть ошибка, Apache обычно покажет файл и строку конфигурации, где она обнаружена.

После этого полезно посмотреть, как Apache видит виртуальные хосты:

				
					httpd.exe -S
				
			

Для Windows Apache прямо рекомендует httpd.exe -S как инструмент диагностики VirtualHost-конфигурации.

Вы увидите список виртуальных хостов, портов и файлов конфигурации.

Перезапуск Apache

После успешной проверки:
				
					httpd.exe -k restart
				
			

или через Windows Services:

				
					Win + R
services.msc
				
			

найдите службу Apache и выберите Перезапустить.

После этого откройте:

  • http://example.local/

Несколько сайтов на одном Apache

Допустим, есть два проекта:

  • C:\Sites\site1
  • C:\Sites\site2

Можно настроить:

				
					<VirtualHost *:80>
    ServerName site1.local
    DocumentRoot "C:/Sites/site1"

    <Directory "C:/Sites/site1">
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName site2.local
    DocumentRoot "C:/Sites/site2"

    <Directory "C:/Sites/site2">
        Require all granted
    </Directory>
</VirtualHost>
				
			

В hosts:

  • 127.0.0.1 site1.local
  • 127.0.0.1 site2.local

После перезапуска Apache:

  • http://site1.local/

откроет первый проект, а:

  • http://site2.local/

— второй.

Именно для этого VirtualHost обычно и используется в локальной разработке.

ServerAlias

Если один сайт должен открываться по нескольким именам, используется ServerAlias.

Например:

				
					<VirtualHost *:80>
    ServerName example.local
    ServerAlias www.example.local
    DocumentRoot "C:/Sites/example"

    <Directory "C:/Sites/example">
        Require all granted
    </Directory>
</VirtualHost>
				
			

В hosts нужно добавить оба имени:

  • 127.0.0.1 example.local
  • 127.0.0.1 www.example.local

ServerAlias предназначен именно для дополнительных имён одного виртуального хоста.

Нужен ли NameVirtualHost в Apache 2.4

Нет.

В старых инструкциях можно встретить:

				
					NameVirtualHost *:80
				
			

Для Apache 2.4 эта директива не нужна.

Достаточно:

				
					<VirtualHost *:80>
				
			

и корректно заданных ServerName.

Поэтому при обновлении очень старых конфигураций строку NameVirtualHost переносить в новую настройку не требуется.

Почему открывается не тот сайт

Это одна из самых частых проблем VirtualHost.

Если Apache не находит ServerName или ServerAlias, соответствующий имени из запроса, он может использовать первый подходящий VirtualHost для данного IP и порта.

Проверяйте:

				
					httpd.exe -S
				
			

и убедитесь, что:

  • у каждого VirtualHost есть ServerName;
  • имена не дублируются;
  • нужный конфигурационный файл действительно подключён;
  • запрос приходит на правильный порт.

Ошибка 403 Forbidden

Если домен открывается, но Apache отвечает:

  • 403 Forbidden

проверьте блок:

				
					<Directory "C:/Sites/example">
    Require all granted
</Directory>
				
			

Также убедитесь:

  1. каталог существует;
  2. путь указан правильно;
  3. Apache имеет доступ к нему;
  4. настройки родительских каталогов не запрещают доступ.

Домен не открывается вообще

Проверьте файл hosts:
				
					127.0.0.1 example.local
				
			
Затем:
				
					ping example.local
				
			

Если имя не разрешается, проблема находится ещё до Apache.

Можно очистить DNS-кэш Windows:

  • ipconfig /flushdns

и повторить проверку.

Apache не запускается после добавления VirtualHost

Сразу выполните:
				
					httpd.exe -t
				
			

Частые причины:

  • пропущена закрывающая директива ;
  • ошибка в пути;
  • лишняя кавычка;
  • неправильная директива;
  • конфликт порта;
  • ошибка в подключаемом конфигурационном файле.

После исправления снова добейтесь:

				
					Syntax OK
				
			
и только потом перезапускайте Apache.

VirtualHost на другом порту

Можно использовать не только порт 80.

Например:

				
					Listen 8080

<VirtualHost *:8080>
    ServerName example.local
    DocumentRoot "C:/Sites/example"

    <Directory "C:/Sites/example">
        Require all granted
    </Directory>
</VirtualHost>
				
			

Тогда адрес:

  • http://example.local:8080/

Если для виртуальных хостов используется другой порт, Apache должен слушать его через Listen.

VirtualHost и HTTPS

Для HTTPS обычно используется отдельный виртуальный хост на порту 443:

				
					<VirtualHost *:443>
    ServerName example.com
    DocumentRoot "C:/Sites/example"

    SSLEngine on
    ...
</VirtualHost>
				
			

Но здесь уже понадобятся SSL-сертификат и дополнительные настройки TLS.

Для обычной локальной разработки без HTTPS этот блок не нужен.

Короткий рабочий пример

Apache:
				
					<VirtualHost *:80>
    ServerName example.local
    DocumentRoot "C:/Sites/example"

    <Directory "C:/Sites/example">
        Require all granted
    </Directory>
</VirtualHost>
				
			

Windows hosts:

  • 127.0.0.1 example.local

Проверка:

				
					httpd.exe -t
httpd.exe -S
				
			
Перезапуск:
				
					httpd.exe -k restart
				
			

После этого:

  • http://example.local/

должен открывать содержимое:

  • C:\Sites\example
Свежие записи
Команда RD

Команда RD и RMDIR позволяют удалять как каталоги, так и

Команда RENAME

RENAME что это? Команда RENAME позволяет переименовать файл или каталог.

Команда MD

Команда md позволяет создавать каталог или промежуточные каталоги в указанном

Разработка сайтов
help2site
Изучение HTML. Вёрстка сайта из PSD шаблона.

В данной статье речь пойдёт о сайтах, которые разработчики создают вручную, т. е. верстают. Статья предназначена для пользователей, знакомых с HTML и CSS. Также желательно знать хотя бы основы Adobe Photoshop

CMS и сайты
help2site
Бизнес сайт на wordpress

Сайт на wordpress: юзабилити & некоторые «фишечки». Бизнес сайт на wordpress для заработка в сети интернет – это … Даже если вы не интернет-предприниматель и

SEO и диагностика сайтов
help2site
Оптимизация сайта. Внутренняя и внешняя

Оглавление Сайт: внутренняя оптимизация, внешняя оптимизация. Оптимизация сайта – это тема сегодняшней статьи. А если быть точнее – то эта статья будет продолжением предыдущей стать. И в

Windows и Windows Server
help2site
Команда DEL

Команда DEL и ERASE позволяют удалять один или несколько файлов в указанном пути. Команда DEL | ERASE удаляют только файлы и не имеют никакого отношения

CMS и сайты
help2site
ШОРТКОДЫ [SHORTCODES]

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

Серверы и администрирование
help2site
Перезапуск сервера Apache

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

CMS и сайты
help2site
Движок wordpress — первое знакомство.

Движок wordpress (вордпресс) – это тема сегодняшнего урока по курсу как сделать сайт на wordpress. В первом знакомстве с системой вордпресс мы поговорим только о функционале,

Разработка сайтов
help2site
Памятка по форматированию контента

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