Раздел 3. Документация по виртуальному хосту Apache RU EN Пункт 30. Динамически настраиваемый массовый виртуальный хостинг В этом документе описывается, как эффективно обслуживать произвольное количество виртуальных хостов с помощью HTTP-сервера Apache. В отдельном документе обсуждается использование
МотивацияОписанные здесь приемы представляют интерес, если у вас
<Виртуальный хост 111.22.33.44> имя_сервера customer-1.example.com DocumentRoot "/www/hosts/customer-1.example.com/docs" ScriptAlias "/cgi-bin/" "/www/hosts/customer-1.example.com/cgi-bin" </ виртуальный хост> <Виртуальный хост 111.22.33.44> имя_сервера customer-2.example.com DocumentRoot "/www/hosts/customer-2.example.com/docs" ScriptAlias "/cgi-bin/" "/www/hosts/customer-2.example.com/cgi-bin" </ виртуальный хост> <Виртуальный хост 111.22.33.44> Имя_сервера клиент-N.example.com DocumentRoot "/www/hosts/customer-N.example.com/docs" ScriptAlias "/cgi-bin/" "/www/hosts/customer-N.example.com/cgi-bin" </ виртуальный хост> Мы хотим заменить эти несколько
Главный недостаток заключается в том, что у вас не может быть отдельного файла журнала для каждого виртуального хоста; однако, если у вас много виртуальных хостов, делать это в любом случае может быть плохой идеей из-за количества необходимых файловых дескрипторов. Лучше вести журнал в канал или fifo, а процесс на другом конце разделить файлы журнала на один для каждого виртуального хоста. Один из примеров такого процесса можно найти в утилите split-logfile. ОбзорВиртуальный хост определяется двумя частями информации: его IP-адресом и содержимым заголовка Оба этих модуля по умолчанию отключены; вы должны включить один из них при настройке и сборке Apache httpd, если хотите использовать этот метод. Из запроса нужно определить пару вещей, чтобы динамический виртуальный хост выглядел как обычный. Наиболее важным является имя сервера, которое используется сервером для создания самореферентных URL-адресов и т. д. Оно настраивается с помощью директивы
Еще одна вещь, которую необходимо определить, — это корень документа (настроенный Динамические виртуальные хосты с mod_vhost_aliasЭтот отрывок из # получить имя сервера из заголовка Host: UseCanonicalName Выкл. # этот формат журнала может быть разделен для каждого виртуального хоста на основе первого поля # с помощью утилиты split-logfile. LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon CustomLog "logs/access_log" vcommon # включить имя сервера в имена файлов, используемых для удовлетворения запросов VirtualDocumentRoot "/www/hosts/%0/docs" VirtualScriptAlias "/www/hosts/%0/cgi-bin" Эту конфигурацию можно превратить в решение для виртуального хостинга на основе IP, просто Упрощенные динамические виртуальные хостыЭто настройка вышеупомянутой системы, адаптированная для сервера веб-хостинга интернет-провайдера. Используя UseCanonicalName Выкл. LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon Журналы CustomLog/access_log vcommon # включить часть имени сервера в имена файлов VirtualDocumentRoot "/home/%2/www" # один каталог cgi-bin ScriptAlias "/cgi-bin/" "/www/std-cgi/" Использование нескольких систем виртуального хостинга на одном сервереПри более сложных настройках вы можете использовать обычные директивы httpd
UseCanonicalName Выкл. LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon <Каталог "/www/commercial"> Параметры Разрешить переопределить все </Каталог> <Каталог "/www/homepages"> Параметры Аллововеррайд </Каталог> <Виртуальный хост 111.22.33.44> Имя сервера www.commercial.example.com CustomLog "logs/access_log.commercial" vcommon VirtualDocumentRoot "/www/commercial/%0/docs" VirtualScriptAlias "/www/commercial/%0/cgi-bin" </ виртуальный хост> <Виртуальный хост 111.22.33.45> Имя сервера www.homepages.example.com CustomLog "logs/access_log.homepages" vcommon VirtualDocumentRoot "/www/homepages/%0/docs" ScriptAlias "/cgi-bin/" "/www/std-cgi/" </ виртуальный хост> ПримечаниеЕсли первый блок VirtualHost не включает директиву
Более эффективный виртуальный хостинг на основе IPИзменения конфигурации, предложенные для превращения первого примера в настройку виртуального хостинга на основе IP, приводят к довольно неэффективной настройке. Для каждого запроса требуется новый поиск DNS. Чтобы избежать этих накладных расходов, файловая система может быть организована таким образом, чтобы она соответствовала IP-адресам, а не именам хостов, тем самым устраняя необходимость поиска DNS. Ведение журналов также должно быть приспособлено к этой системе. # получить имя сервера из обратного DNS IP-адреса UseCanonicalName DNS # включить IP-адрес в журналы, чтобы они могли быть разделены LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon CustomLog "logs/access_log" vcommon # включить IP-адрес в имена файлов VirtualDocumentRootIP "/www/hosts/%0/docs" VirtualScriptAliasIP "/www/hosts/%0/cgi-bin" Массовые виртуальные хосты с mod_rewrite
Массовый виртуальный хостинг также может быть реализован с помощью
|