ProfiPHPProfiPHP
Категория: Веб сервер

Создание виртуальных хостов 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>

Добавить комментарий

Имя:
Текст комментария: