Как использовать setEnv с другим Env?

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

Например:

"/ etc / apache2 / envvars"

...
export SSL_ROOT_DIR=/etc/letsencrypt/live
export DEFAULT_HOME_DIR=/var/www/html
...

" /etc/apache2/sites-available/domain.tld.conf"

...
SetEnv SERVERNAME domain.tld
SetEnv HOME_DIR ${DEFAULT_HOME_DIR}/${SERVERNAME}
SetEnv LOG_DIR ${APACHE_LOG_DIR}/${SERVERNAME}
SetEnv SSL_DIR ${SSL_ROOT_DIR}/${SERVERNAME}
...
DocumentRoot ${HOME_DIR}
<Directory "${HOME_DIR}">
  ...
</Directory>
...
SSLCertificateFile ${SSL_DIR}/cert.pem
SSLCertificateKeyFile ${SSL_DIR}/privkey.pem
SSLCertificateChainFile ${SSL_DIR}/chain.pem
...

Без env эта конфигурация работает!

Вывод ошибок

[core:warn] [pid 13844] AH00111: Config variable ${SERVERNAME} is not defined
[core:warn] [pid 13844] AH00111: Config variable ${SERVERNAME} is not defined
[core:warn] [pid 13844] AH00111: Config variable ${SERVERNAME} is not defined
[core:warn] [pid 13844] AH00111: Config variable ${SERVERNAME} is not defined
[core:warn] [pid 13844] AH00111: Config variable ${HOME_DIR} is not defined
[core:warn] [pid 13844] AH00111: Config variable ${HOME_DIR} is not defined
[core:warn] [pid 13844] AH00111: Config variable ${LOG_DIR} is not defined
[core:warn] [pid 13844] AH00111: Config variable ${LOG_DIR} is not defined
[core:warn] [pid 13844] AH00111: Config variable ${SSL_DIR} is not defined
[core:warn] [pid 13844] AH00111: Config variable ${SSL_DIR} is not defined
[core:warn] [pid 13844] AH00111: Config variable ${SSL_DIR} is not defined
0
задан 25 December 2015 в 18:36
1 ответ

У вас есть концептуальное непонимание того, как они работают в Apache, но это не ваша вина. Это очень заблуждение в Apache и очень распространённое недоразумение.

Background:

В Apache есть два типа переменных окружения - нативные переменные окружения в масштабе всего процесса и переменные окружения на запрос (которые станут первыми для CGI, если CGI будет запущен)

Путаница:

  • Переменные формы ${FOO} интерполируются при startup, они могут быть только родными переменными окружения (обычно исходят от bin/envvars перед запуском apachectl/httpd)
  • Директивы типа SetEnv и SetEnvIf устанавливают переменные окружения для каждого запроса. Даже когда они кажутся безусловными, они не выполняются до обработки запроса и не устанавливают родные переменные окружения.
0
ответ дан 5 December 2019 в 11:11

Теги

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