Если возникла необходимость размещения на Linux VPS сервере нескольких сайтов, то Apache для этих целей предоставляет возможность настройки виртуальных хостов (virtual hosts). Виртуальные хосты бывают двух видов: name-based virtual hosts, то есть привязанные к доменному имени, и IP-based virtual hosts, то есть привязанные к IP-адресу. Виртуальные хосты первого типа используют разные имена для одного IP-адреса, а второго типа – используют для каждого сайта отдельный IP-адрес. Создание виртуальных хостов в Apache необходимы, если на вашем сервере есть несколько сайтов, а их настройка необходима для корректного отображения всех сайтов.
Наиболее распространенным является использование виртуальных хостов на базе имен (name-based virtual hosts), привязанных к одному IP-адресу. Таким образом, можно хранить множество сайтов на одном IP.
Самым простым способом добавления и последующей настройки виртуальных хостов Apache является редактирование конфигурационного файла веб-сервера, который имеет разные названия и места расположения в зависимости от операционной системы:
В Red-Hat/CentOS/Fedora:
/etc/httpd/conf/httpd.conf
Debian/Ubuntu:
/etc/apache2/apache2.conf
Вторым способом настройки является использование собственных .conf файлов, которые должны размещаться по пути:
В Red-Hat/CentOS/Fedora:
/etc/httpd/conf.d/filename.conf
Debian/Ubuntu:
/etc/apache2/conf.d/filename.conf
Как правило, в конфигурационном файле httpd.conf или apache2.conf раздел управления виртуальными хостами располагается в самом конце. Для добавления виртуального хоста нужно будет открыть этот файл и раскомментировать в нём (убрать #) директиву NameVirtualHost *:80 (Аргумент * обозначает «все имена хостов»). Если будет использоваться способ размещения конфигурации в conf.d, то указанную директиву не нужно раскомментировать, а следует определить её в самом создаваемом файле.
После NameVirtualHost следует блок VirtualHost *:80. Подобные блоки и являются конфигурацией ваших виртуальных хостов. Выглядит это все примерно следующим образом:
NameVirtualHost *:80 <Directory var/www/> AllowOverride All Options All </Directory> <VirtualHost *:80> ServerAdmin username@site1.com DocumentRoot /var/www/site1.ru ServerName site1.ru ServerAlias www.site1.ru ErrorLog logs/site1.ru-error_log CustomLog logs/site1.ru-access_log common </VirtualHost> <VirtualHost *:80> ServerAdmin username@site2.org DocumentRoot /var/www/site2.ru ServerName site2.ru ServerAlias www.site2.ru ErrorLog logs/site2.ru-error_log CustomLog logs/site2.ru-access_log common </VirtualHost>
Именно здесь и производятся все настройки виртуальных хостов, а также, подключение или отключение определенных опций.
Рассмотрим более детально, за что отвечает каждая указанная выше директива.
1. Директива ServerAdmin указывает электронный адрес администратора сервера, на который приходят все уведомления с хоста, касающиеся его администрирования.
2. Директива DocumentRoot указывает корневую директорию с файлами сайта, которые должны будут выдаваться веб-сервером клиенту (браузеру).
3. Директива Server Name определяет имя хоста, по запросу которого должны будут выдаваться файлы, расположенные в DocumentRoot.
4. Директива ServerAlias служит для задания альтернативных имен хоста (алиасов, псевдонимов), на которые он откликается.
5. Директива ErrorLog задает файлы протоколов ошибок для каждого хоста, а CustomLog – файлы протоколов для всего остального, кроме ошибок.
До блоков с виртуалхостами, как вы заметили, есть еще запись:
<Directory var/www/> AllowOverride All </Directory>
В тегах <Directory> </Directory> заключается перечень директив (параметров), которые будут применяться к конкретной директории, которая указывается в открывающем теге. В примере выше – это var/www/. Указанная директива AllowOverride указывает, использовать ли файлы .htaccess и если да, то какие глобальные директивы веб-сервера в можно переопределять в таких файлах. В представленном выше примере значение AllowOverride установленно в All, что разрешает обрабатывать файлы .htaccess и все указанные в нём директивы. Существуют и другие возможные значения:
AuthConfig – разрешает использовать директивы авторизации (AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, require, и т.д..).
FileInfo – разрешает использовать директивы, управляющие типами документов (AddEncoding, AddLanguage, AddType, DefaultType, ErrorDocument, LanguagePriority, и т.д..).
Indexes – разрешает использовать директивы для управления индексацией каталогов (AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName, и т.д..).
Limit – разрешает использовать директивы управления доступом (allow, deny и order).
Options – разрешает использовать директивы, с помощью которых можно управлять специфическими особенностями каталога (Options и XBitHack).
Это одна из многих возможных директив, с которыми вы можете ознакомиться на сайте разработчиков.
После сохранения изменений в файле необходимо проверить новые настройки на наличие ошибок. Для выполнения проверки можно использовать следующие команды:
apachectl configtest apachectl -S apachectl -d
Если получено сообщение “Syntax OK”, значит ошибок нет и можно перезагружать веб-сервер, чтобы применились изменения. Сделать это можно с помощью следующих команд:
Red-Hat/CentOS/Fedora:
service httpd restart
или
/etc/init.d/ httpd restart
Debian/Ubuntu:
service apache2 restart
или
/etc/init.d/apache2 restart
Далее вы можете столкнуться со следующей проблемой. При поступлении запроса Apache проходит по всему списку виртуальных хостов в поисках соответствующего, и, если не находит соответствия, выдает первый по порядку хост. Чтобы устранить данную неприятность, специалисты придумали так называемую секцию-заглушку, которую следует вставить перед первой секцией VirtualHost реального сайта. Выглядит она приблизительно следующим образом:
<VirtualHost *:80> ServerName default DocumentRoot /var/www/default </VirtualHost>
Таким образом, все неправильные запросы будут отсылаться по пути var/www/default, где можно создать индексную страницу, которая будет сообщать о неправильном запросе.
Также, Apache по умолчанию не имеет доступа к вашим домашним директориям, а только к директории /var/www. Если вы используете на своем сервере SElinux, то для предоставления Apache доступа к домашним директориям используйте следующие команды:
setsebool -P httpd_enable_homedirs 1
или
setsebool -P apache2_enable_homedirs 1
Для того чтобы Apache имел доступ к определенной директории, например, к /home/mydir следует использовать команду:
chcon -R -t httpd_sys_content_t /home/mydir
или
chcon -R -t apache2_sys_content_t /home/mydir
При отключенном SELinux для предоставления Apache доступа к той или иной домашней директории сайта, вам нужно будет вручную отредактировать его конфигурационный файл (/etc/httpd/conf/httpd.conf в CentOS/Fedora или /etc/apache2/apache2.conf в Debian/Ubuntu).
Открыв конфигурационный файл веб-сервера для редактирования, найдите строку DocumentRoot (при использовании редактора nano ее можно отыскать с помощью комбинации клавиш Ctrl+W). Замените значение в кавычках /var/www/html на абсолютный путь к домашней директории сайта (например, /home/username/site.com). Сохраните изменения и выйдите из меню редактора (Ctrl+O и Ctrl+X). Перезапустите Apache.
Если у вас на VPS установлена ОС Debian/Ubuntu, то править строку DocumentRoot необходимо в файле /etc/apache2/sites-available/default. Откройте его для редактирования и замените стандартное значение /var/www на абсолютный путь к домашней директории сайта. Выполните перезапуск веб-сервера.
На этом базовая настройка виртуальных хостов окончена.