22.11. Многодоменный хостинг в Apache
Проблема
Необходимо настроить один сервер Apache для обслуживания нескольких доменов, использующих один и тот же IP-адрес. Все доменные имена уже зарегистрированы, и для каждого домена настроена информация DNS.
Решение
Для поддержки многодоменного хостинга используется директива Apache VirtualHost
, которая позволяет каждому домену иметь отдельные настройки и директории. Пример файла httpd.conf
для обслуживания двух доменов:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.tuxcomputing.com
ServerAlias tuxcomputing.com *.tuxcomputing.com
DocumentRoot /var/www/tuxcomputing
ServerAdmin admin@tuxcomputing.com
</VirtualHost>
<VirtualHost *:80>
ServerName www.bratgrrl.com
ServerAlias bratgrrl.com *.bratgrrl.com
DocumentRoot /var/www/bratgrrl
ServerAdmin admin@bratgrrl.com
</VirtualHost>
Для каждого домена создаётся отдельный корневой каталог, где хранятся файлы сайта. Это позволяет легко добавлять субдомены, например, webmail.bratgrrl.com
и wacko.games.tuxcomputing.com
. Однако для корректной работы каждого домена и субдомена нужно создать соответствующие DNS-записи типа А.
ПРИМЕЧАНИЕ
При использовании виртуальных хостов для каждого домена необходима отдельная директива VirtualHost
. Эти директивы заменяют глобальные настройки из httpd.conf
и могут включать почти все директивы, что позволяет детально настраивать каждый виртуальный хост.
Комментарий
Конфигурация виртуальных хостов — это эффективный способ обслуживания нескольких доменов на одном сервере Apache. Однако настройка большого количества записей типа А для субдоменов может оказаться трудоёмкой. Альтернативный подход с использованием доменных групповых обозначений (wildcards) может привлечь нежелательный трафик, включая случайные и нежелательные обращения, например:
randomstuff.bratgrrl.com
really.weird.randomstuff.bratgrrl.com
Спамеры могут злоупотреблять wildcard-записями, поэтому настройка точных DNS-записей для конкретных субдоменов предпочтительнее. В директивах VirtualHost
групповые обозначения безопаснее, поскольку они обрабатывают только трафик, адресованный именам, явно указанным в DNS.
Рекомендации по настройке многодоменного хостинга
- Настройка логов: Для удобства анализа можно настроить отдельные журналы ошибок и доступа для каждого домена. Например, добавить директивы
ErrorLog
иCustomLog
внутри блокаVirtualHost
для сохранения логов в разные файлы. - Права доступа: Убедитесь, что для каждого домена настроены правильные права доступа к корневым директориям, чтобы ограничить доступ к данным между различными виртуальными хостами.
- Безопасность: Для защиты каждого домена рекомендуется использовать директивы безопасности Apache, такие как
Options -Indexes
для предотвращения листинга директорий. - DNS-поддержка: Для каждого домена и субдомена обязательно создайте DNS-записи типа А, чтобы каждый домен был корректно доступен пользователям.
См. также