Виртуальный хост в Apache - CentOS Wiki

Контроль виртуальных хостов по умолчанию в Apache

1. Введение

При запуске нескольких веб-сайтов на сервере в качестве нескольких виртуальных хостов, могут возникнуть ошибки, например опечатка в host configuration. Результат - вместо требуемого содержания будет отображаться содержание первого по порядку хоста. Это не является желательным, поэтому лучше задать определенную общую страницу для этого случая.

2. Проблемы

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

3. Решение

Добавить общий виртуальный хост, который будет использоваться вместо нынешнего первого.

4. Задание виртуальных хостов в httpd.conf

Наиболее простым методом добавления виртуальных контейнергов является редактирование файла - /etc/httpd/conf/httpd.conf.

Чтобы сконфигурировать виртуальные хосты на базе имен, нам понадобиться раскомментировать дериктиву NameVirtualHost с аргументом * (шаблон, означающий "все имена хостов"), за которым следует столько разных блоков <VirtualHost *:80>, сколько нам нужно.

 

NameVirtualHost *:80

 

<VirtualHost *:80>
ServerAdmin username1@example.com
DocumentRoot /home/username1/www/user1domain.ru
ServerName user1domain.ru ServerAlias www.user1domain.ru
ErrorLog logs/user1domain.ru-error_log
CustomLog logs/user1domain.ru-access_log common
</VirtualHost> <VirtualHost *:80>
ServerAdmin username2@example.org
DocumentRoot /var/www/html/user2.example.ru
ServerName user2.example.ru
ErrorLog logs/user2.example.ru-error_log
CustomLog logs/user2.example.ru-access_log common
</VirtualHost>

Внутри контейнера <VirtualHost * :80> директива ServerName определяет имя хоста, с которым сравнивается заголовок Host:, и при совпадении включается соответствующий набор переопределений. DocumentRoot специфицирует, где в файловой системе нужно искать файлы, указанные в принятом запросе, а директивы ErrorLog и CustomLog задают альтернативные файлы протоколов для каждого виртуального хоста. ServerAlias предостовляет возможность перечислить альтернативные имена для каждого виртуального хоста. Вы можете включать различные директивы по своему вкусу, до тех пор, пока они допускаются внутри блока <VirtualHost * :80>. Для проверки отсутствия ошибок в конфигурации выполните:

# apachectl configtest

Виртуальные хосты могут конфигурироваться различными способами, позволяя вам указывать разные IP-адреса и порты для соответствия определенным группам блоков <VirtualHost>. Примеры синтаксиса можно посмотреть в http://httpd.apache.org/docs/2.2/sections.

5. Файлы виртуальных хостов Apache

Второй способ конфигурирования виртуальных контейнеров Apache - размещение их в отдельных файлах в выделенной для этого директории. Эта процедура описана подробно в 'виртуальные хосты Apache в отдельных файлах'.

При вставке в качестве первого хоста (в нашем случае странички-заглушки), имя файла должно распологаться первым, как 0Default.conf. А последний хост в списке соответственно - zDefault.conf.

6. Первый виртуальный хост

Что произойдет при обращении к серверу по несуществующему имени или по IP?

Если оставить все как в примере выше, то будет открываться первый сайт user1domain.ru. Поэтому перед секциями рабочих сайтов разместим секцию заглушку:

<VirtualHost *:80> 
ServerName default DocumentRoot /var/www/html/default
</VirtualHost>

Теперь "по умолчанию" все идут в /var/www/html/default/, в котором можно разместить файлик 'index.htm'.

7. Последний виртуальный хост

Как отловить все запросы хостам, то есть соответствовать всем? Это можно сделать (в принципе не обязательно) вот так:

<VirtualHost *:80>
ServerAlias *
</VirtualHost>

8. Перезапуск Apache

Чтобы изменения вступили в силу, перезапустите Apache.

service httpd graceful

9. Apache: доступ к домашним папкам

По умолчанию директория, в которой может хозяйничать apache /var/www. За этим зорко следит selinux.

setsebool -P httpd_enable_homedirs 1

Эта команда разрешает апачу обращаться к домашним директориям.

chcon -R -t httpd_sys_content_t /home/myprojects/sitename 
Пометить данную папку как объект разрешенный апачу.

Автор: Александр