Шаблонизатор конфигурационных файлов

Материал из ISPWiki
Перейти к: навигация, поиск

Для ISPmanager Lite и ISPmanager Business реализован новый механизм генерации конфигурационных файлов Apache и Nginx. Механизм основан на разборе шаблона, который позволяет использовать логические ветвления и подстановку параметров, и дает большую гибкость в создании, редактировании конфигурационных файлов веб серверов. Благодаря шаблонному подходу появилась возможность использовать необходимые параметры для настройки веб-серверов Apache и Nginx. Кроме того, после дополнения конфигурационного файла параметрами пользователя, никакие операции шаблонизатора не изменят эти данные. Начиная с версии 5.57 ISPmanager использует по умолчанию данный механизм. В этой статье будет рассказано, как начать использовать шаблонизатор, об общих принципах работы и его синтаксических конструкциях.

Как начать использовать шаблонизатор?

Если вы используете свежую установку ISPmanager Lite или ISPmanager Business версии 5.57 и старше, то шаблонизатор используется по умолчанию для генерации конфигурационных файлов модуля WWW-домены. Если вы обновили панель управления до версии 5.57 или до более поздней версии, тогда необходимо установить параметр Option EnableWebTemplate в конфигурационном файле панели управления ISPmanager Lite /usr/local/mgr5/etc/ispmgr.conf и для ISPmanager Business в /usr/local/mgr5/etc/ispmgr.conf расположенный на локальном узле кластера, после чего необходимо перезапустить панель управления.

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

Общие принципы работы шаблонизатора

В модуле WWW-домены каждой функции соответствует свой шаблон конфигурационного файла. Например, функциям создания и редактирования веб-домена соответствует шаблон записанный в файле /usr/local/mgr5/etc/templates/default/apache2-vhosts.template для конфигурационного файла Apache и /usr/local/mgr5/etc/templates/default/nginx-vhosts.template для конфигурационного файла Nginx.


Файлы с шаблонами конфигураций могут быть переопределены пользовательскими параметрами. Для этого просто скопируйте файл с шаблоном в директорию /usr/local/mgr5/etc/templates с тем же именем. Если в директории /usr/local/mgr5/etc/templates есть файл шаблона, шаблон в директории /usr/local/mgr5/etc/templates/default/ игнорируется. При обновлении панели файлы в директории /usr/local/mgr5/etc/templates/default/ будут перезаписаны, поэтому все правки нужно производить в /usr/local/mgr5/etc/templates/.


Ниже, в таблице, указано соответствие файла с шаблоном вызываемой функции в модуле WWW-домены.

Функция Шаблон Nginx Шаблон Apache
Создание/Редактирование WWW-домена nginx-vhosts.template

nginx-vhosts-ssl.template

apache2-vhosts.template

apache2-vhosts-ssl.template

Создание/Редактирование/Удаление cтраницы ошибки nginx-error-page.template apache2-error-page.template
Создание/Редактирование/Удаление редиректов nginx-rewrite.template apache2-redirect.template
Создание/Удаление доступов nginx-access.template apache2-access.template
Включение/Выключение WWW-домена nginx-suspend.template apache2-suspend.template

Обратите внимание, что файлы без SSL содержат указание на файлы с SSL, потому после копирования необходимо будет исправить путь до этих файлов.

Синтаксис

Все шаблонные конструкции должны быть расположены между парой тегов {% и %}. Например, переменная должна быть записана следующим образом: {% $VARIABLE_NAME %}.

Переменные

Имя переменной должно соответствовать следующим требованиям:

  • записано в верхнем регистре
  • начинается со знака $
  • совпадает с именем параметра, передаваемого панелью управления в сессию.

Если в шаблоне конфигурационная строка будет содержать переменную, которой нет в сессии, то эта строка будет проигнорирована. Рассмотрим пример, в котором шаблонизатор создаст секцию VirtualHost, для конфигурационного файла Apache. В данном примере мы будем использовать переменную {%$LISTEN_ON %}, которая хранит в себе адрес и порт: 192.168.0.1:80.

<VirtualHost {% $LISTEN_ON %}>
</VirtualHost>

В результате, в конфигурационном файле будет создана секция VirtualHost, если её не было:

<VirtualHost 192.168.0.1:80>
</VirtualHost>

Условия

Условия — это основной инструмент выбора. Проще говоря, он выбирает, какой параметр нужно добавить, а какой удалить, в зависимости от значения переменных в момент проверки условия. Условия должны начинаться с инструкции if и заканчиваться инструкцией endif. Для начала рассмотрим простое условие, состоящее из одной инструкции if.

{% if $VARIABLE_NAME == VALUE %}
    ParameterName ParameterValue;
{% endif %}

Если результат данного условия будет истинным, тогда каждый параметр, размещенный между инструкциями if и endif, будет добавлен в конфигурационный файл, если, добавляемый параметр, в нём отсутствует. Если результат будет ложным, тогда каждый параметр, размещенный между инструкцией if и endif, будет удален из конфигурационного файла.

Расширенные условия

Простое условие может быть расширено инструкцией else. Параметры размещенные между инструкциями else и endif будут добавлены в конфигурационный файл, если результат инструкции if - ложь; или удалены из конфигурационного файла, если результат инструкции if - истина. Рассмотрим пример в котором, в зависимости от используемой версии веб-сервера Apache, необходимо добавить или удалить параметр:

<VirtualHost {% $LISTEN_ON %}>
{% if $APACHEITK == ON %}
    AssignUserID owner group
{% else %}
    SuexecUserGroup owner group
{% endif %}
</VirtualHost>

В результате, в конфигурационном файле будет создана секция VirtualHost, если ее не было, и если используется ApacheITK, в секцию VirtualHost будет добавлен параметр AssignUserID owner group, а параметр SuexecUserGroup owner group будет удален из секции VirtualHost, если он присутствовал в этой секции. Ниже показано какие параметры будет содержать конфигурационный файл, если используется ApacheITK:

<VirtualHost 192.168.0.1:80>
    AssignUserID owner group
</VirtualHost>

Если используется другая версия Apache, то конфигурационный файл будет содержать следующие параметры:

<VirtualHost 192.168.0.1:80>
    SuexecUserGroup owner group
</VirtualHost>

Условия множественного выбора

Условие может быть расширено до множественного выбора с помощью инструкции elif. Подобная конструкция может использоваться в ситуации, когда одна переменная может иметь разные значения и все необходимо обработать. Например, при создании или редактировании веб-домена ISPmanager дает возможность выбрать режим работы PHP. В качестве примера рассмотрим ситуацию с выбором режима PHP. Предположим, что у нас уже был создан веб-домен с режимом работы PHP как модуль Apache. Наш текущий конфигурационный файл имеет следующий вид:

<VirtualHost 192.168.0.1:80>
    ServerName domain.ru
    ServerAlias www.domain.ru
    <FilesMatch "\.ph(p[3-5]?|tml)$">
        SetHandler application/x-httpd-php
    </FilesMatch>
    <FilesMatch "\.phps$">
        SetHandler application/x-httpd-php-source
    </FilesMatch>
</VirtualHost>

Отредактировав параметры веб-домена мы установили режим работы PHP как CGI. Шаблон, представленный ниже, отвечает за добавление или удаление подсекций FilesMatch относительно выбранного режима работы PHP.

<VirtualHost {% $LISTEN_ON %}>
{% if $PHP_MODE == MODULE_APACHE %}
    <FilesMatch "\.ph(p[3-5]?|tml)$">
        SetHandler application/x-httpd-php
    </FilesMatch>
    <FilesMatch "\.phps$">
        SetHandler application/x-httpd-php-source
    </FilesMatch>
{% elif $PHP_MODE == CGI %}
    <FilesMatch "\.ph(p[3-5]?|tml)$">
        SetHandler application/x-httpd-php5
    </FilesMatch>
{% endif %}
</VirtualHost>

В результате, в конфигурационном файле не будет создано секции VirtualHost, т.к. она уже присутствует, все изменения произойдут в существующей секции VirtualHost. Из условия нашего примера результат инструкции if будет ложный, а значит все параметры, размещенные между инструкциями if и elif, будут удалены из секции VirtualHost. Параметры, размещенные между elif и endif, будут добавлены в секцию VirtualHost. В конечном итоге конфигурационный файл будет иметь вид:

<VirtualHost 192.168.0.1:80>
    ServerName domain.ru
    ServerAlias www.domain.ru
    <FilesMatch "\.ph(p[3-5]?|tml)$">
        SetHandler application/x-httpd-php5
    </FilesMatch>
</VirtualHost>

Таблица операторов сравнения

Ниже приведенные операторы сравнения, которые могут использоваться в условиях.

Оператор Описание
== Равенство. Условие верно, если два операнда равны
!= Неравенство. Условие верно, если два операнда неравны
> Больше. Условие верно, если первый операнд больше второго
< Меньше. Условие верно, если первый операнд меньше второго

Комментирование строк

С помощью символов {#} можно комментировать строки в шаблоне конфигурационного файла. Все, что записано после знака комментария будет проигнорировано шаблонизатором. Например:

<VirtualHost {% $LISTEN_ON %}>
    ServerName {% $NAME %} {#} Комментарий
    {#} ServerAlias {% $ALIASES %}
</VirtualHost>

После обработки шаблона конфигурационный файл будет иметь вид:

<VirtualHost 192.168.0.1:80>
    ServerName domain.ru
</VirtualHost>

Импортирование шаблона

В шаблон конфигурационного файла могут быть импортированы другие шаблоны. Импортировать шаблон можно с помощью конструкции import. Например:

<VirtualHost {% $LISTEN_ON %}>
    {% import /path/to/template/apache-params.template %}
</VirtualHost>

Путь до импортируемого шаблона должен быть абсолютный.

Параметры идентифицирующие секции

Для каждого типа конфигурационных файлов определены параметры, благодаря которым шаблонизатор идентифицирует секции. Например, для конфигурационного файла Nginx в качестве ключевых параметров выбраны server_name и ssl. Т.е. когда необходимо что-то добавить или удалить из конфигурационного файла, шаблонизатор точно знает, в какой именно секции нужно выполнить действия. Однако, если попытаться изменить эти параметры, в конфигурационном файле, в обход панели управления, то появляется вероятность, что изменения не попадут в ожидаемую секцию, а будут применены в новой секции.

Поиск измененного параметра по ключевым значениям

Существует дополнительная пара тегов — [% и %]. В них могут быть записаны только переменные, например [% $VARIABLE_NAME %]. Данное выражение интерпретируется как обычная переменная, однако для него выделена отдельная роль в поиске параметра. Эти теги определяют значения, которые не будут участвовать в поиске параметра. Для примера предположим, что конфигурационный файл нашего веб-домена имеет следующий вид:

<VirtualHost 192.168.0.1:80>
    ServerName domain.ru
    ServerAlias www.domain.ru
</VirtualHost>

Для работы со страницей ошибки используем шаблон:

<VirtualHost {% $LISTEN_ON %}>
{% if $ERROR == on %}
    ErrorDocument {% $CODE %} [% $URI %]
{% endif %}
</VirtualHost>

Если значение переменной $ERROR будет равно on, тогда в секцию VirtualHost будет добавлен параметр ErrorDocument со значениями переменных $CODE и $URI. Значения $CODE и $URI задаются в панели управления, на форме создания страницы ошибки. В процессе создания страницы ошибки переменная $ERROR принимает значение on, следовательно условие выполнилось и наш конфигурационный файл имеет следующий вид:

<VirtualHost 192.168.0.1:80>
    ServerName domain.ru
    ServerAlias www.domain.ru
    ErrorDocument 404 /404.php
</VirtualHost>

Далее, мы решили самостоятельно изменить в конфигурационном файле путь /404.php на /404.html. Наш конфигурационный файл будет иметь вид:

<VirtualHost 192.168.0.1:80>
    ServerName domain.ru
    ServerAlias www.domain.ru
    ErrorDocument 404 /404.html
</VirtualHost>

В таком виде параметр ErrorDocument существенно отличается от того, что у нас записано в панели управления. Если мы решим удалить страницу ошибки из панели управления, то шаблонизатор не сможет найти нужный параметр в конфигурационном файле и удалить его. Но так как в шаблоне значение $URI отмечено как незначащее, то для поиска будет использована строка ErrorDocument 404. В процессе удаления страницы-ошибки переменная $ERROR принимает значение off, следовательно условие, используемое в шаблоне, не выполнится. Для поиска нашего параметра будет использована не полная строка, а её часть — ErrorDocument 404, что поможет найти параметр в конфигурационном файле и удалить его.

Список стандартных переменных

Каждая вызванная функция использует свой набор параметров, которые передаются в сессию. Ниже мы рассмотрим для каждой функции управления WWW-доменом список стандартных переменных.

Создание/Изменение WWW-домена

В таблице ниже представлен список переменных независимый от используемого типа связки веб-серверов.

Имя переменной Описание переменной
Основные параметры WWW-домена
$NAME Имя WWW-домена
$ALIASES Псевдонимы WWW-домена
$DOCROOT Корневая директория
$HOME Домашняя директория владельца WWW-домена
$OWNER Владелец WWW-домена
$OWNER_GROUP Группа владельца WWW-домена
$UID UID владельца WWW-домена
$GID GID владельца WWW-домена
$PRESET Шаблон по которому был создан владелец WWW-домена

Только для ISPmanager Lite

$USER_PRESET Шаблон по которому был создан владелец WWW-домена

Только для ISPmanager Business и если реселлер не является владельцем пользователя

$RESELLER_NAME Имя реселлера

Только для ISPmanager Business

$RESELLER_PRESET Шаблон по которому был создан реселлер

Только для ISPmanager Business

$IPADDRS Прослушиваемые IP-адреса
$LISTEN_ON Прослушиваемые IP-адреса и порт
$EMAIL E-Mail администратора
$CHARSET Кодировка
$DIRINDEX Индексная страница
$SSL WWW-домен использует защищенное соединение. Имеет значения:
  • on — используется
  • off — не используется
$REDIRECT_HTTP Перенаправлять HTTP-запросы в HTTPS. Имеет значения:
  • on — перенаправлять
  • off — не перенаправлять
$SSL_PORT Прослушиваемый порт защищенного соединения
$LISTEN_ON_SSL Прослушиваемые IP-адреса и порт защищенного соединения
$SSL_CRT Путь до SSL сертификата
$SSL_KEY Путь до SSL ключа
$STRICT_SSL Используется повышенная безопасность SSL. Имеет значения:
  • on — используется
  • off — не используется
$SSL_SECURE_PROTOCOLS Используемые SSL протоколы
$SSL_SECURE_CHIPHERS Используемый набор криптографических алгоритмов
$SSI Включена обработка SSI web-сервером. Имеет значения:
  • on — включена
  • off— выключена
$FOREGROUND Текущий WWW-домен является приоритетным. Имеет значения:
  • on — является приоритетным
  • off — не является приоритетным
Журналирование
$LOG_ACCESS Разрешено журналирование запросов к ресурсам этого WWW-домена. Имеет значения:
  • on — журналирование разрешено
  • off — журналирование запрещено
$ACCESS_LOG_PATH Путь до лог-файла запросов к ресурсам
$LOG_ERROR Разрешено журналирование ошибок, возникающих при обработке запросов к ресурсам этого WWW-домена. Имеет значения:
  • on — журналирование разрешено
  • off — журналирование запрещено
$ERROR_LOG_PATH Путь до лог-файла ошибок
$ROTATION_PERIOD Период ротации. Имеет значения:
  • every_day — ежедневно
  • every_week — еженедельно
  • every_month — ежемесячно
  • by_size — по размеру
$ROTATION_COUNT Параметр указывает, какое количество старых копий необходимо сохранять
$ANALYZER Использовать генератор отчетов. Имеет значения:
  • off
  • awstats
  • webalizer
Значения зависят от установленных возможностей
$ANALYZER_PERIOD Период генерации отчетов. Имеет значения:
  • rotate — в момент ротации
  • every_hour — каждый час
  • every_day — ежедневно
  • every_week — еженедельно
  • every_month — ежемесячно
$ANALYZER_LANG Язык отчета
$ANALYZER_SECURE Ограничить доступ к статистике. Имеет значения:
  • on — доступ ограничен
  • off — доступ не ограничен
$ANALYZER_PASSWD Пароль ограничения доступа к статистике
Дополнительные возможности
$AUTOSUBDOMAIN Используемый тип автоподдомена. Имеет значения:
  • off — отключено
  • autosubdomain_dir — в отдельной директории
  • autosubdomain_subdir — в поддиректории домена
$PHP Разрешена обработка PHP скриптов. Имеет значения:
  • on — обработка разрешена
  • off — обработка не разрешена
$PHP_MODE Режим работы PHP
$PHP_NATIVE_VERSION Используемая версия PHP

Переменные веб-сервера Apache

Имя переменной Описание переменной
$LISTEN_ON Прослушиваемые IP-адреса и порт
$APACHEITK В роли веб-сервера используется Apache ITK. Имеет значения:
  • on — используется Apache ITK
  • off — используется другая версия веб-сервера
$CGI Разрешено исполнение CGI-скриптов. Имеет значения:
  • on — Исполнение разрешено
  • off — Исполнение запрещено
$CGI_EXT Дополнительные расширения файлов CGI-скриптов
$CGI_EXT_PATH Путь до директории cgi-bin
$INCLUDE Путь до конфигурационного файла пользовательских ресурсов WWW-домена

Переменная устанавливается для ISPmanager Business

$INCLUDE_PHP Путь до конфигурационного файла пользовательских ресурсов WWW-домена (для режима PHP как модуль Apache)

Переменная устанавливается для ISPmanager Business

$SSL_BUNDLE Цепочка SSL сертификатов включающая корневой и промежуточный сертификаты. Параметр доступен только если веб-сервер Apache работает в режиме фронтэнда (Nginx не установлен)

Переменные веб-сервера Nginx

Имя переменной Описание переменной
$NGINX_LISTEN_ON Прослушиваемые IP-адреса и порт
$NO_TRAFF_COUNT Включена статистика по трафику. Имеет значения:
  • on — включена
  • off — выключена
$AUTOSUBDOMAIN_SUBDOMAIN_PART Имя корневой директории домена
$USER_NGINX_RESOURCES_PATH Путь до конфигурационного файла пользовательских ресурсов WWW-домена

Переменная устанавливается для ISPmanager Business

$NGINX_VHOST_INCLUDES Путь до служебных настроек Nginx
$SRV_GZIP Используется сжатие. Имеет значения:
  • on — используется
  • off — не используется
$GZIP_LEVEL Уровень сжатия
$SRV_CACHE Используется кэширование. Имеет значения:
  • on — используется
  • off — не используется
$EXPIRES_VALUE Значение периода кэширования
$WEBSTAT_LOCATION Размещение директории со статистикой
$WEBSTAT_ENCODING Кодировка статистики
$REDIRECT_TO_APACHE Перенаправлять запрос к веб-серверу Apache. Имеет значения:
  • on — запрос перенаправляется
$BACKEND_BIND_URI Адрес и порт прослушиваемый веб-сервером Apache
$REDIRECT_TO_PHPFPM Используется режим работы PHP как FastCGI (Nginx + PHP-FPM). Имеет значения:
  • on — используется режим FastCGI (Nginx + PHP-FPM)
  • В других случаях переменная не устанавливается

Значение устанавливается в режиме работы PHP как FastCGI (Nginx + PHP-FPM)

$PHPFPM_USER_SOCKET_PATH Путь до unix сокета

Значение устанавливается в режиме работы PHP как FastCGI (Nginx + PHP-FPM)

$DDOSSHIELD Включена защита от DDoS-атаки. Имеет значения:
  • on — включена
  • off— выключена
$NGINX_LIMITREQUEST Количество запросов в секунду
$NGINX_BURSTREQUEST Максимальный размер всплеска
$SSL_CRT_BUNDLE_PATH Путь до файла, включающего сам SSL-сертификат, а также соответствующую цепочку сертификатов

Страницы ошибок

Имя переменной Описание переменной
$NAME Имя WWW-домена
$ALIASES Псевдонимы WWW-домена
$OWNER Владелец WWW-домена
$LISTEN_ON Прослушиваемые IP-адреса и порт
$SSL WWW-домен использует защищенное соединение. Имеет значения:
  • on — использует защищенное соединение
  • off— не использует защищенное соединение
$LISTEN_ON_SSL Прослушиваемые IP-адреса и порт защищенного соединения
$ERROR Имеет значения:
  • on — если страница ошибки создается или редактируется
  • off— страница ошибки удаляется
$CODE Код ошибки, к которому будет привязан URI страницы
$URI Адрес страницы, которая будет отдаваться при возникновении ошибки

Редиректы

Имя переменной Описание переменной
$NAME Имя WWW-домена
$ALIASES Псевдонимы WWW-домена
$OWNER Владелец WWW-домена
$LISTEN_ON Прослушиваемые IP-адреса и порт
$SSL WWW-домен использует защищенное соединение. Имеет значения:
  • on — использует защищенное соединение
  • off— не использует защищенное соединение
$LISTEN_ON_SSL Прослушиваемые IP-адреса и порт защищенного соединения
$REDIRECT Имеет значения:
  • on — перенаправление создается или редактируется
  • off— редирект удаляется
$PATH Относительный путь, который будет перенаправляться на другой URL
$URL URL, на который будет выполняться перенаправление
$FLAG Флаг прекращения обработки директив. Имеет значение:
  • permanent
  • redirect
  • last

Параметр имеет значения только при обработке шаблона nginx-rewrite.template

Доступ

Имя переменной Описание переменной
$NAME Имя WWW-домена
$ALIASES Псевдонимы WWW-домена
$OWNER Владелец WWW-домена
$SSL WWW-домен использует защищенное соединение. Имеет значения:
  • on — использует защищенное соединение
  • off— не использует защищенное соединение
$LOCATION_PATH Относительный путь к директории для которой устанавливается ограничение доступа
$ACCESS Имеет значения:
  • on — ограничение доступа создается
  • off— ограничение доступа удаляется
$AUTH_FILE Файл, в котором хранятся имена и пароли пользователей
$AUTH_REALM Название диалогового окна авторизации

Параметр устанавливается только при обработке шаблона apache-access.template

Набор параметров на вашем сервере может отличаться от приведенного выше, в зависимости от активированных возможностей, установленных плагинов и т.д. Актуальный набор параметров, для вызванной функции, вы всегда можете узнать в лог-файле панели управления /usr/local/mgr5/var/ispmgr.log. Вызов функции, в лог-файле, обозначен зеленым цветом. Также переданные параметры можно посмотреть в консоли вашего веб-браузера, после отправки формы на сервер.

Пример использования

Рассмотрим ситуацию, когда в зависимости от типа шаблона учетной записи, по которому был создан пользователь, необходимо сгенерировать разные параметры конфигурационного файла. В примере будет всего два типа шаблона учетных записей: для пользователей CMS «1C-Bitrix» и веб-фреймворка «Django». Для начала создадим шаблоны учетных записей. В ISPmanager Lite перейдем в модуль «Шаблоны», расположенный в разделе меню «Настройки» и создадим новый шаблон учетной записи с названием «Bitrix». Параметры «Ограничения» могут быть выставлены произвольным образом, в разделе «Доступ» установим параметр Может использовать PHP как модуль apache, кодировку домена установим UTF-8 и Тип обработчика PHP как модуль Apache. Далее создадим шаблон учетной записи для Django. В качестве названия пишем Django, ограничения и доступы могут быть выставлены произвольным образом, раздел «Значения по умолчанию» устанавливаем по аналогии с предыдущим шаблоном.

Для работы сайта под управлением CMS «1С-Bitrix» достаточно в шаблоне apache2-vhost.template определить дополнительные параметры, однако для работы сайта под управлением веб-фреймворка Django необходимо установить модуль «mod_wsgi» для Apache. Для Linux дистрибутива Debian данный модуль устанавливается командной:

# apt-get install libapache2-mod-wsgi

Для Linux дистрибутива CentOS данный модуль устанавливается командной:

# yum install mod_wsgi

Также для обработки запросов нам понадобится интерфейс к модулю «mod_wsgi». Исходный код интерфейса можно найти на ресурсах посвященных веб-фреймворку «Django». В данном пример определим только имя интерфейса — django.wsgi, который нужно будет расположить в корневой директории веб-домена.

Теперь нужно подготовить шаблон конфигурационного файла. Скопируем шаблон /usr/local/mgr5/etc/templates/default/apache2-vhosts.template в директорию /usr/local/mgr5/etc/templates/, как было написано в разделе Общие принципы работы шаблонизатора, и добавим в конец секции <VirtualHost {% $LISTEN_ON %}> параметры:

{% if $PRESET == Bitrix %}
    php_admin_value mbstring.func_overload 2
    php_admin_value mbstring.internal_encoding UTF-8
    php_admin_value opcache.revalidate_freq 0
    php_admin_value display_errors on
{% elif $PRESET == Django %}
    WSGIScriptAlias / {% $DOCROOT %}/django.wsgi
    WSGIDaemonProcess [% $NAME %] processes=2 maximum-requests=5 threads=1
    WSGIProcessGroup {% $NAME %}
{% endif %}

В итоге шаблон секции VirtualHost будет выглядеть таким образом:

<VirtualHost {% $LISTEN_ON %}>
	ServerName {% $NAME %}
	ServerAlias {% $ALIASES %}
	DocumentRoot {% $DOCROOT %}
	ServerAdmin {% $EMAIL %}
	DirectoryIndex {% $DIRINDEX %}
	AddDefaultCharset {% $CHARSET %}
{% if $APACHEITK == on %}
	AssignUserID {% $OWNER %} {% $OWNER_GROUP %}
{% else %}
	SuexecUserGroup {% $OWNER %} {% $OWNER_GROUP %}
{% endif %}
{% if $LOG_ACCESS == on %}
	CustomLog {% $ACCESS_LOG_PATH %} combined
{% else %}
	CustomLog /dev/null combined
{% endif %}
{% if $LOG_ERROR == on %}
	ErrorLog {% $ERROR_LOG_PATH %}
{% else %}
	ErrorLog /dev/null
{% endif %}
{% if $CGI == on %}
	ScriptAlias /cgi-bin/ {% $CGI_EXT_PATH %}
{% endif %}
{% if $INCLUDE %}
	Include {% $INCLUDE %}
{% endif %}
{% if $PHP == on and $FILES_MATCH == on %}
	<FilesMatch "\.ph(p[3-5]?|tml)$">
		SetHandler {% $PHP_HANDLER %}
{% if $APACHE_FCGID == on %}
		FCGIWrapper {% $PHP_BIN_WRAPPER %}
		Options ExecCGI
{% endif %}
	</FilesMatch>
{% endif %}
{% if $PHP_MODE == php_mode_mod %}
	<FilesMatch "\.phps$">
		SetHandler application/x-httpd-php-source
	</FilesMatch>
{% if $INCLUDE_PHP %}
	Include {% $INCLUDE_PHP %}
{% endif %}
	php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f {% $EMAIL %}"
	php_admin_value upload_tmp_dir "{% $MOD_TMP_PATH %}"
	php_admin_value session.save_path "{% $MOD_TMP_PATH %}"
{% if $OPEN_BASEDIR != / %}
	php_admin_value open_basedir "{% $OPEN_BASEDIR %}"
{% endif %}
{% elif $PHP_MODE == php_mode_cgi %}
	ScriptAlias /php-bin/ {% $PHP_BIN_DIR %}
	AddHandler application/x-httpd-php5 .php .php3 .php4 .php5 .phtml
	Action application/x-httpd-php5 /php-bin/php
{% elif $PHP_MODE == php_mode_fcgi_apache and $APACHE_FCGID != on %}
	AddType application/x-httpd-fastphp .php .php3 .php4 .php5 .phtml
	Alias /php-fcgi/ {% $PHP_BIN_DIR %}
{% endif %}
{% if $VIRTUAL_DOCROOT == on %}
	VirtualDocumentRoot {% $VIRTUAL_DOCROOT_PATH %}
{% endif %}
{% if $PRESET == Bitrix %}
    php_admin_value mbstring.func_overload 2
    php_admin_value mbstring.internal_encoding UTF-8
    php_admin_value opcache.revalidate_freq 0
    php_admin_value display_errors on
{% elif $PRESET == Django %}
    WSGIScriptAlias / {% $DOCROOT %}/django.wsgi
    WSGIDaemonProcess [% $NAME %] processes=2 maximum-requests=5 threads=1
    WSGIProcessGroup {% $NAME %}
{% endif %}
</VirtualHost>

Теперь при создании веб-домена, в зависимости от того по какому шаблону учетных записей создан пользователь, будут генерироваться конфигурационные данные для использования CMS «1C-Bitrix» или веб-фреймворка «Django».