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

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

Например:

"/ и т.д. / 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

1 ответ

Решение

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

Фон:

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

Путаница:

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