Поддержка виртуальных хостов Apache на основе IP
Что такое виртуальный хостинг на основе IP
Виртуальный хостинг на основе IP — это метод применения различных директив на основе IP-адреса и порта, на котором принимается запрос. Чаще всего это используется для обслуживания разных веб-сайтов на разных портах или интерфейсах.
Во многих случаях виртуальные хосты на основе имени (name-based virtual hosts) более удобны, так как они позволяют многим виртуальным хостам использовать один адрес/порт. Чтобы помочь вам принять решение, ознакомьтесь со статьей Сравнение виртуальных хостов на основе имени и IP.
Требования системы
Как указывает термин IP-based, сервер должен иметь разные комбинации IP-адрес/порт для каждого виртуального хоста на основе IP. Этого можно добиться, используя несколько физических сетевых подключений машины или виртуальные интерфейсы, поддерживаемые большинством современных операционных систем (см. документацию системы для получения подробной информации; часто они называются "ip-псевдонимами", а для их настройки обычно используется команда «ifconfig»), и/или использовать несколько номеров портов.
В терминологии сервера Apache HTTP Server использование одного IP-адреса, но нескольких TCP-портов, также является виртуальным хостингом на основе IP.
Как настроить Apache
Существует два способа настройки Apache для поддержки нескольких хостов. Либо запуск отдельного httpd демона для каждого имени хоста, либо запуск одного демона, который поддерживает все виртуальные хосты.
Используйте несколько демонов, когда:
- Существуют проблемы с разграничением безопасности, например, компания 1 не хочет, чтобы кто-либо из компании 2 мог просматривать их данные, кроме как через веб-сайт. В этом случае вам понадобятся два демона, каждый из которых работает с различными
User,Group,Listen, иServerRootнастройками. - Вы можете позволить себе требования к памяти и дескрипторам файлов для прослушивания всех IP-псевдонимов на машине. Вы можете прослушивать только «подстановочный» адрес или определенные адреса. Поэтому, если вам нужно прослушивать определенный адрес по какой-либо причине, вам придется прослушивать все конкретные адреса. (Хотя один
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