Spec-Zone.ru › Apache HTTP Server

Поддержка виртуальных хостов на основе IP в Apache

Что такое виртуальный хостинг на основе IP

Виртуальный хостинг на основе IP — это метод применения различных директив в зависимости от IP-адреса и порта, на который поступает запрос. Чаще всего он используется для обслуживания разных веб-сайтов на разных портах или интерфейсах.

Во многих случаях виртуальные хосты на основе имен более удобны, поскольку они позволяют нескольким виртуальным хостам использовать один и тот же адрес/порт. См. раздел Виртуальные хосты на основе имен в сравнении с хостами на основе IP, чтобы сделать выбор.

Системные требования

Как следует из термина на основе IP, сервер должен иметь отдельную комбинацию IP-адреса и порта для каждого виртуального хоста на основе IP. Это может быть достигнуто наличием у машины нескольких физических сетевых подключений или за счет использования виртуальных интерфейсов, которые поддерживаются большинством современных операционных систем (подробности см. в системной документации, часто они называются «ip aliases», а для их настройки чаще всего используется команда «ifconfig»), и/или использованием нескольких номеров портов.

В терминологии Apache HTTP Server использование одного IP-адреса, но нескольких TCP-портов также считается виртуальным хостингом на основе IP.

Как настроить Apache

Существует два способа настройки Apache для поддержки нескольких хостов: либо путем запуска отдельного демона httpd для каждого имени хоста, либо путем запуска одного демона, который поддерживает все виртуальные хосты.

Используйте несколько демонов, когда:

  • Существуют вопросы разграничения безопасности, например, company1 не хочет, чтобы кто-либо из company2 мог читать их данные иначе как через веб. В этом случае вам понадобятся два демона, каждый из которых работает с разными настройками User, Group, Listen и ServerRoot.
  • Вы можете позволить себе требования к памяти и файловым дескрипторам для прослушивания каждого псевдонима IP на машине. Можно выполнить Listen только для адреса с подстановочным знаком («wildcard») или для конкретных адресов. Поэтому, если вам по какой-либо причине необходимо прослушивать определенный адрес, вам потребуется прослушивать все конкретные адреса. (Хотя один httpd может прослушивать N-1 адресов, а другой — оставшийся адрес.)

Используйте один демон, когда:

  • Совместное использование конфигурации httpd между виртуальными хостами допустимо.
  • Машина обслуживает большое количество запросов, и поэтому потеря производительности при запуске отдельных демонов может быть значительной.

Настройка нескольких демонов

Создайте отдельную установку httpd для каждого виртуального хоста. Для каждой установки используйте директиву Listen в файле конфигурации, чтобы выбрать, какой IP-адрес (или виртуальный хост) обслуживает этот демон, например:

Listen 192.0.2.100:80

Рекомендуется использовать IP-адрес вместо имени хоста (см. предостережения относительно DNS).

Настройка одного демона с виртуальными хостами

В этом случае один httpd будет обслуживать запросы для основного сервера и всех виртуальных хостов. Директива VirtualHost в файле конфигурации используется для установки различных значений конфигурационных директив ServerAdmin, ServerName, DocumentRoot, ErrorLog и TransferLog или CustomLog для каждого виртуального хоста, например:

<VirtualHost 172.20.30.40:80>
    ServerAdmin webmaster@www1.example.com
    DocumentRoot "/www/vhosts/www1"
    ServerName www1.example.com
    ErrorLog "/www/logs/www1/error_log"
    CustomLog "/www/logs/www1/access_log" combined
</VirtualHost>

<VirtualHost 172.20.30.50:80>
    ServerAdmin webmaster@www2.example.org
    DocumentRoot "/www/vhosts/www2"
    ServerName www2.example.org
    ErrorLog "/www/logs/www2/error_log"
    CustomLog "/www/logs/www2/access_log" combined
</VirtualHost>

Рекомендуется использовать IP-адрес вместо имени хоста в директиве <VirtualHost> (см. предостережения относительно DNS).

Конкретные IP-адреса или порты имеют приоритет над их эквивалентами с подстановочными знаками, а любой совпадающий виртуальный хост имеет приоритет над базовой конфигурацией сервера.

Практически любая директива конфигурации может быть помещена в директиву VirtualHost, за исключением директив, управляющих созданием процессов, и некоторых других директив. Чтобы узнать, можно ли использовать директиву внутри VirtualHost, проверьте контекст в алфавитном указателе директив.

SuexecUserGroup может использоваться внутри директивы VirtualHost, если используется оболочка suEXEC.

БЕЗОПАСНОСТЬ: При указании места записи файлов журналов помните о рисках безопасности, которые возникают, если кто-либо, кроме пользователя, запускающего Apache, имеет доступ на запись в каталог, куда они записываются. Подробности см. в документе советы по безопасности.

© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/vhosts/ip-based.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API