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

Как использовать 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

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

Задний план:

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

Путаница:

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