Мне нужно прочитать переменную среды в скрипте 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.
Кроме того, я до сих пор не понимаю, почему первые значения, которые я установил для других переменных среды, все еще видны, но не могут быть изменены.
Но все равно исправил мою проблему.