Назад | Перейти на главную страницу

Изменения в директивах SetEnv не видны в скриптах

Мне нужно прочитать переменную среды в скрипте ScriptAlias. Так что я SetEnv директивы для установки этих переменных в следующей конфигурации apache.

<VirtualHost *:80>
ServerName ...
DocumentRoot /srv/www
ServerAlias git
DocumentRoot /srv/www/git-web
<Location />
   # Crowd auth 
   AuthType Basic
   AuthName "Git repositories"
   AuthBasicProvider crowd
   CrowdAppName ...
   CrowdAppPassword ...
   CrowdURL http://localhost:8080/crowd/
   CrowdGroupsEnvName REMOTE_USER_GROUPS
   Require valid-user
</Location>

SuexecUserGroup git git
SetEnv GIT_PROJECT_ROOT /home/dev_tools/git
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv GITOLITE_HTTP_HOME /home/dev_tools/git
SetEnv REMOTE_USER $REDIRECT_REMOTE_USER

ScriptAliasMatch "(?x)^/(.*/(HEAD | info/refs | objects/(info/[^/]+ | [0-9a-f]{2}/[0-9a-f]{38} | pack/pack-[0-9a-f]{40}\.(pack|idx)) | git-(upload|receive)-pack))$" /srv/www/gitolite_suexec_wrapper.sh/$1

<Directory /srv/www>
  <Files gitolite_suexec_wrapper.sh>
    Order allow,deny
    Allow from all
  </Files>
</Directory>

<Directory "/srv/www/git-web">
    Options ExecCGI
    AllowOverride None
    AddHandler cgi-script .cgi
    DirectoryIndex gitweb.cgi
    Order allow,deny
    Allow from all
</Directory>
</VirtualHost>

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

Когда я меняю конфигурацию, я restart apache2, который требует повторного анализа файла, который я изменил (если я напишу неразборчивый контент в этот файл, apache2 сообщает мне, что он не может запуститься).

Чтобы увидеть среду в /srv/www/gitolite_suexec_wrapper.sh, я использую:

#!/bin/bash
printenv >> log_file

Следующее предупреждение дается для SetEnv директива:

Переменные внутренней среды, устанавливаемые этой директивой, устанавливаются после запуска большинства директив ранней обработки запросов, таких как контроль доступа и сопоставление URI-файла с именем файла. Если переменная среды, которую вы устанавливаете, предназначена в качестве входных данных для этой ранней фазы обработки, такой как директива RewriteRule, вам следует вместо этого установить переменную среды с помощью SetEnvIf.

Но я не думаю, что меня устраивает это предупреждение, поскольку мой скрипт видит некоторые переменные среды и SetEnv/ScriptAliasMatch используется в нескольких руководствах для настройки git на http-сервере.

Кто-нибудь знает, почему мой файл журнала всегда заполняется одним и тем же окружением, даже когда я меняю конфигурацию apache2?

Версия сервера: Apache / 2.2.15 (Linux / SUSE) Сервер построен: 2011-11-29 15: 51: 01.000000000 +0000

Мне удалось перенаправить пользовательские переменные через suexec, добавив к ним префикс HTTP_ который находится в жестко закодированном списке разрешенных переменных среды suexec.

Я очень удивлен, что это настолько скрытое поведение, что я даже не могу снова найти свои источники в Google.

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

Но все равно исправил мою проблему.