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

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

Проблема виртуальных хостов становится достаточно острой, когда вам нужно создать 2 или более хостов. Для их администрирования обычным «localhost» не обойтись. С помощью виртуальных хостов и сервера Apache эту проблему вполне можно решить.

Создание виртуальных хостов Apache, это совсем несложная и быстрая работа.

Итак, вы установили и настроили Apache, как написано в статье «Настройка Apache и PHP» и получили, таким образом, директорию «C:\web_server\apache\htdocs\» для хранения документов. Однако в интернете вы поддерживаете (или, скорее всего, будете поддерживать) несколько серверов, а Apache создал только один. Конечно, можно структуру этих нескольких серверов хранить на одном сервере, однако проще и удобнее было бы создать несколько виртуальных хостов.

Мы создадим виртуальные хосты с использованием одного общего IP-адреса. Советую имена виртуальных хостов называть так же, как и на нынешнем Web-сервере, но только без суффикса «.net» или «.com» — это может многое упростить при программировании скриптов. Например, создадим виртуальный хост «profiphp«.

Для установки виртуальных хостов необходимо сделать некоторые изменения в файле конфигурации Apache «C:\web_server\apache\conf\httpd.conf«, а также в некоторых файлах Windows.

Создаем папку «localhost» в корневом каталоге диска (C:\localhost\). Далее создаем в ней каталог виртуального хоста — «profiphp» (C:\localhost\profiphp\). Именно в этой папке и будут содержаться файлы виртуального хоста.

Далее необходимо включить поддержку виртуальных хостов. Откройте файл «C:\web_server\apache\conf\httpd.conf» и добавьте следующие строки в самом конце файла после всех комментариев:

# localhost
NameVirtualHost 127.0.0.1
# Контейнер конфигурации виртуального хоста
<VirtualHost localhost>
# Домен по которому Вы сможете обращаться к виртуальному хосту.
ServerName localhost:80
# Папка, в которой будет корень хоста.
DocumentRoot "C:/web_server/apache/htdocs"
# Файл, в который будут записываться ошибки.
ErrorLog "c:/web_server/apache/htdocs/error.log"
# Файл журнала доступа к хосту.
CustomLog "c:/web_server/apache/htdocs/access.log" common
</VirtualHost>
# profiphp
<VirtualHost profiphp>
ServerName profiphp:80
DocumentRoot "C:/localhost/profiphp"
ErrorLog "c:/localhost/profiphp/error.log"
CustomLog "c:/localhost/profiphp/access.log" common
</VirtualHost>

Директива «NameVirtualHost» говорит серверу, что указанный IP-адрес может использоваться несколькими виртуальными хостами, поэтому для обработки запросов, поступающих на этот адрес, нужно использовать протокол HTTP 1.1.

При необходимости можно добавить и другие параметры в блоки «<VirtualHost>» (например, DirectoryIndex и т.д.). Не переопределенные параметры наследуются виртуальным хостом от главного. Однако не советую злоупотреблять настройками в этих секциях — лучше сделать их в файле «.htaccess» в директории нужного хоста, так как компания, которая предоставляет настоящие виртуальные хосты в интернете, вряд ли позволит менять эти блоки.

Также следует заметить, что включить поддержку виртуальных хостов можно и другим вариантом. Для этого необходимо в файле «C:\web_server\apache\conf\httpd.conf» раскомментировать строку:

Include conf/extra/httpd-vhosts.conf

И редактировать файл «C:\web_server\apache\conf\extra\httpd-vhosts.conf«, в котором прописаны все виртуальные хосты. Данный вариант более понятный, поскольку у нас есть отдельный файл с настройками виртуальных хостов. Но если виртуальных хостом немного, тогда проще добавить настройки в конфигурационный файл Apache напрямую чем подключать отдельный файл.

Если виртуальных хостов много, то работа по их конфигурированию в одном файле «httpd.conf» может осложниться. Решением этой проблемы является создание специального конфигурационного файла для каждого виртуального узла и присоединение этих файлов с помощью директивы «include«. В конфигурационные файлы помещаются только контейнер «<VirtualHost>» и директивы внутри него.

Следующий шаг создания виртуального хоста — это изменение файла «C:\WINDOWS\system32\drivers\etc\hosts» операционной системы. Откройте данный файл и добавьте в него строки:

127.0.0.1 localhost
127.0.0.1 profiphp

Если у Вас уже есть запись «localhost«, то второй добавлять не нужно.

При возникновении проблем с изменением данного файла, прочитайте тему Редактирование и защита файла hosts в Windows.

Теперь запустите сервер Apache, откройте браузер, введите в адресной строке «http://profiphp/» и вы окажетесь в своем виртуальном хосте.

Если у вас по каким то причинам виртуальные хосты не работают, необходимо проверить файл логов, который находится по адресу: «/apache/logs/error.log«. Например, может содержаться уведомление:

AH00548: NameVirtualHost has no effect and will be removed in the next release /apache/conf/httpd.conf:553

Дело в том, что до версии Apache 2.3.11, директива NameVirtualHost должна была инструктировать сервер о конкретном IP-адресе и комбинации портов, которые могут использоваться в качестве виртуального хоста на основе имени. Версия 2.3.11 и более поздние, когда IP-адрес и комбинация портов используются на нескольких виртуальных хостах, виртуальный хост на основе имени автоматически включается для этого адреса. Поэтому в настоящее время эта директива не действует. Единственным решением данной проблемы является удаление директивы NameVirtualHost. Также необходимо заменить все значения VirtualHost:

<VirtualHost *: 80>

Измененный код:

<VirtualHost *:80>
ServerName localhost:80
DocumentRoot "C:/web_server/apache/htdocs"
ErrorLog "c:/web_server/apache/htdocs/error.log"
CustomLog "c:/web_server/apache/htdocs/access.log" common
</VirtualHost>
# profiphp
<VirtualHost *:80>
ServerName profiphp
DocumentRoot "C:/localhost/profiphp"
ErrorLog "c:/localhost/profiphp/error.log"
CustomLog "c:/localhost/profiphp/access.log" common
</VirtualHost>
Добавить комментарий

Ваш адрес email не будет опубликован.