${SRVROOT} и SRVROOT

В последних версиях Apache в конфигурационном файле появилась строка ${SRVROOT}. По своей сути она является переменной, обозначающий корневую папку веб-сервера, то есть то, что устанавливает директива ServerRoot.

Ранее конфигурационный файл обходился без этой переменно и, на самом деле, сейчас также можно указать абсолютный путь с любой директивой, где используется ${SRVROOT}. Видимо, по задумке применение этой переменной должно упростить настройку конфигурационного файла.

В принципе так и есть — при, например, перемещении файлов Apache, достаточно поменять значение только ${SRVROOT}, то есть достаточно отредактировать конфигурационный файл в одном месте, а не в нескольких.

Но у такого подхода есть и негативное последствие — при указании пути до корневой папки сайтов получается, что она должна быть внутри ServerRoot. На самом деле, это совершенно необязательно — в качестве корневой папки для сайтов можно использовать любую папку на компьютере.

Впервые в конфигурационном файле SRVROOT встречается в следующим виде:

Define SRVROOT "c:/Apache24"

ServerRoot "${SRVROOT}"

Первая строка, используя директиву Define (о ней будет рассказано ниже), затем идёт имя переменной SRVROOT, которой присваивается значение "c:/Apache24". Обратите внимание, что переменная при присвоении пишется без символа $ – такой синтаксис аналогичен синтаксису присвоения значения и использования переменных в Bash.

Во второй строке директиве ServerRoot присваивается то значение, которое содержит ${SRVROOT}, то есть "c:/Apache24".

На всякий случай напомню, ServerRoot это верх в дереве директорий, в котором хранятся файлы конфигураций сервера, файлы ошибок и журнала доступа. В конце значения ServerRoot не надо добавлять слэш.

В дальнейшем все относительные пути в конфигурационном файле Apache считаются относительно ServerRoot.

Если одна и та же папка используется в качестве ServerRoot для нескольких демонов httpd, то нужно по крайней мере изменить PidFile.

Затем SRVROOT встречается в конфигурационном файле в следующих строках:

DocumentRoot "${SRVROOT}/htdocs"
<Directory "${SRVROOT}/htdocs">
…………...
</Directory>

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

А Directory собирает вместе несколько директив, имеющих действие на указанную папку.

Если вы не хотите помещать корневую папку сайтов внутри ServerRoot, то вместо использования этой переменной просто пропишите желаемый путь.

Далее SRVROOT встречается в строке:

ScriptAlias /cgi-bin/ "${SRVROOT}/cgi-bin/"

ScriptAlias: определяет, какие каталоги содержат серверные скрипты.

ScriptAliases по сути такой же, как и Aliases, за исключением того, что документы в целевом каталоге обрабатываются как приложения и запускаются сервером по запросу, а не как документы, отправляемые клиенту. К директивам ScriptAlias применяются те же правила о конце "/", что и к Alias.

SRVROOT есть ещё в одном месте конфигурационного скрипта:

<Directory "${SRVROOT}/cgi-bin">
……….
</Directory>

Как можно понять, здесь устанавливаются правила для директории с CGI.

Директива Define

Директива Define определяет (устанавливает) значение переменной.

Синтаксис:

Define имя-параметра [значение-параметра]

Контекст: конфигурация сервера, виртуальные хосты.

В форме с одним параметром Define эквивалентен передаче аргумента -D в httpd. Его можно использовать для переключения использования разделов <IfDefine> без необходимости изменять аргументы -D в любых скриптах запуска.

В дополнение к этому, если задан второй параметр, для переменной конфигурации устанавливается это значение. Переменная может использоваться в конфигурации с использованием синтаксиса ${VAR}. Переменная всегда определяется глобально и не ограничена областью действия окружающего раздела конфигурации.

<IfDefine TEST>
  Define servername test.example.com
</IfDefine>
<IfDefine !TEST>
  Define servername www.example.com
  Define SSL
</IfDefine>

DocumentRoot "/var/www/${servername}/htdocs"

Имена переменных не могут содержать двоеточия ":", чтобы избежать конфликтов с синтаксисом RewriteMap.

Область действия виртуального хоста и подводные камни

Хотя эта директива поддерживается в контексте виртуального хоста, её изменения видны для любых более поздних директив конфигурации, в любом вложенном виртуальном хосте.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *