Контейнеры виртуальных хостов Apache в отдельных файлах
Контейнеры виртуальных хостов Apache в отдельных файлах
1. Введение
С увеличением количества виртуальных хостов, наступает момент, когда проще найти и внести изменение в виртуальный контейнер узла, если настройки его находятся в отдельном файле конфигурации. В этом разделе описан подход отличающийся от основного минималистичного подхода конфигурации.
В данном случае создается новый каталог для файлов контейнеров виртуальных хостов: /etc/httpd/vhost.d. Такой подход облегчает внесение изменений в конфигурацию виртуального хоста и устраняет возможные проблемы файлов с конфликтующими именами.
2. ./conf.d/
Наиболее распространенным методом является создание файла виртуального хоста в директории conf.d/. Это имеет то преимущество, что каталог уже создан и в файле httpd.conf есть строка вида:
Include conf.d/*.conf
Данная инструкция включает все файлы с расширением ".conf" в директории conf.d/. То есть, какие-либо файлы в этой директории, которые имеют расширение ".conf" будут обрабатываться как файлы конфигурации Apache. Файлы обрабатываются в алфавитном порядке.
3. Опционально ./vhost.d/
Другой метод - создать новую пустую директорию персонально для файлов виртуальных контейнеров, например - vhost.d.
3.1 Примечания
Как и любые другие нестандартные изменения в нашей системе должны быть задокументированы для дальнейшего использования.
3.2 Создадим каталог
Создание каталога с SELinux атрибутами, такими как и у /etc/httpd/conf.d/:
mkdir --context=system_u:object_r:httpd_config_t /etc/httpd/vhost.d
3.3 Обновление свойств SELinux
Проверка свойств SELinux так же проста:
ls -lZ /etc/httpd
должно вернутся что-то подобное ...
drwxr-xr-x root root system_u:object_r:httpd_config_t conf
drwxr-xr-x root root system_u:object_r:httpd_config_t conf.d
lrwxrwxrwx root root system_u:object_r:httpd_log_t logs -> ../../var/log/httpd
lrwxrwxrwx root root system_u:object_r:httpd_modules_t modules -> ../../usr/lib/httpd/modules
lrwxrwxrwx root root system_u:object_r:httpd_config_t run -> ../../var/run
drwxr-xr-x root root system_u:object_r:httpd_config_t vhost.d
мы можем изменить пользователя сами, если не сделали каталог раньше с атрибутами SELinux.
chcon --user=system_u:object_r:httpd_config_t /etc/httpd/vhost.d
3.4 Обновление конфигурации Apache
Предполагая, что файл конфигурации Apache стоит стандартный по умолчанию, просто добавим необходимую строку в конец файла. Так же напомним, что файлы оканчивающиеся на расширение '.conf' в директории vhost.d/ активируют виртуальные контейнеры хостов, поэтому, переименовав для примера файл user_site.conf в user_site.conf_stop, вы предотвратите его подключение.
echo "Include vhost.d/*.conf" >>/etc/httpd/conf/httpd.conf
4. Файлы виртуальных хостов
Файлы виртуальных хостов могут быть размещены в директории непосредственно или путем ссылок. Если используются ссылки, не забудьте обновить SELinux свойства конкретного файла.
4.1 Пример
Файл должен содержать элементы конфигурации специфичные для данного хоста. Пример ...
<VirtualHost *:80>
ServerName example.org
ServerAlias *.example.org
ServerAdmin webmaster@example.org
ErrorLog /var/log/httpd/example.err
CustomLog /var/log/httpd/example.log combined
DocumentRoot /var/www/example.org
<Directory "/var/www/example.org">
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Дополнительно: файл конфигурации с префиксом
Наименование файлов с префиксом, например, vhost-, может стать более понятным и заметным для групп активных и неактивных виртуальных хостов.
Включение директивы
Вместо того, чтобы использовать файлы имеющие окончания на ".conf", мы будем использовать файлы, которые начинаются с приставки "vhost-":
echo "Include vhost.d/vhost-*" >>/etc/httpd/conf/httpd.conf
Отключение виртуального хоста
Отключение производится добавлением подчеркивания "_" в начало названия файла:
mv -v /etc/httpd/vhost.d/{,_}vhost-example.org
Включение виртуального хоста
Включение производится удалением знака подчеркивания в начале файла:
mv -v /etc/httpd/vhost.d/{_,}vhost-example.org
5. Рестарт Apache
Чтобы изменения вступили в силу, перезагрузите Apache
service httpd graceful