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