Почему apache2 не уважает мой файл envvars?

Мои файлы envvar имеют следующие строки:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

В моем apache2.conf есть следующие строки:

# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

Но когда я запустил apache2 -M I получите это:

apache2: bad user name ${APACHE_RUN_USER}

Временное исправление заключается в жестком коде www-data в этом файле apache2.conf. Здесь было несколько предположений, что это связано с тем, что какой-то скрипт конфигурации не заменил env vars правильно в моем файле apache2.conf. Независимо от того, как я могу заставить apache2 обращаться к моему файлу envvars?

Как показывает другая точка данных здесь , указывает, что envvars генерируется при сборке, но читается apache2ctl во время выполнения, что указывает на то, что этот файл не просто оставлен в процессе сборки.

1
задан 13 April 2017 в 15:24

1 ответ

Из http://httpd.apache.org/docs/2.2/configuring.html:

Значения переменных окружения оболочки могут использоваться в файлах конфигурационных файлов с использованием синтаксиса $ {ENVVAR}. Если «ENVVAR» - это имя допустимой переменной окружения, значение этой переменной заменяется на это место в строке файла конфигурации, и обработка продолжается так, как если бы этот текст был найден непосредственно в файле конфигурации. (Если переменная ENVVAR не найдена, символы «$ {ENVVAR}» остаются неизменными для использования на последующих этапах обработки файла конфигурации.)

Таким образом, переменная действительно извлекается из среды как ожидается. Теперь, где это происходит?

В /etc/init.d/apache2, APACHE_ENVVARS установлен в путь к файлу envvars, который основан на пути initscript. Обычно это приводит к установке APACHE_ENVVARS=/etc/apache2/envvars. Теперь, поскольку это значение равно значениям по умолчанию, установленным в apache2ctl, оно не экспортируется.

Из /usr/sbin/apache2ctl:

# the path to the environment variable file
test -z "$APACHE_ENVVARS" && APACHE_ENVVARS="$APACHE_CONFDIR/envvars"
# pick up any necessary environment variables
if test -f $APACHE_ENVVARS; then
  . $APACHE_ENVVARS
fi

Объяснение: if APACHE_ENVVARS пуст, используйте путь по умолчанию, который является /etc/apache2/envvars. Если этот файл существует, «source» его (выполните команды из этого файла в текущей среде).

Убедитесь, что файл envvars не содержит синтаксических ошибок. Для выполнения такой проверки используйте:

sh -n /etc/apache2/envvars && echo Syntax OK || echo FAIL

Ошибки печатаются, если они есть.

6
ответ дан 25 May 2018 в 10:35
  • 1
    Я выполнил проверку и могу проверить, что мои envvars не содержат никаких синтаксических ошибок. Я нашел решение; см. мой ответ ниже. – Avery Chan 6 June 2012 в 07:08

Другие вопросы по тегам:

Похожие вопросы: