Установка переменных среды Apache в Windows

Я использовал Apache в Ubuntu, это прошлое. Существует файл envvars , содержащий переменные среды, используемые службой Apache. Я не могу найти такой файл для Windows.

Я нашел два подхода, чтобы справиться с этим. Я обнаружил, что Apache читает переменные среды Windows. Но мне это не нравится, поскольку они глобальны, а не зависят от приложения.

Другой вариант, который я нашел, - это создание файла .bat, установка переменных env и запуск httpd.exe . Но проблема в том, что он не работает со службой Apache.

Другой вариант, который я нашел, - использовать nssm . Это позволяет создавать настраиваемые службы с переменными среды, специфичными для службы. Но я получаю AH00141: Не удалось инициализировать генератор случайных чисел , если я его использую.

Есть ли другой альтернативный вариант, который я могу использовать?

3
задан 9 March 2016 в 13:04
2 ответа

В итоге я написал обертку, которая заменила httpd.exe. Я переименовал httpd.exe в httpd2.exe и использовал эту обертку httpd.sh для ее выполнения. В основном она временно устанавливает системные переменные окружения перед запуском службы apache. После запуска службы она их удаляет.

#!/bin/bash

PHP_INI_SCAN_DIR="C:\Server\PHP\7.0\conf;C:\Server\Config\PHP"

if [ "stop" == "$*" ]; then
    exec /c/Server/Apache/bin/httpd2.exe -k stop
elif [ "" == "$*" ]; then
    export PHP_INI_SCAN_DIR
    echo "Starting Apache in console mode"
    /c/Server/Apache/bin/httpd2.exe
elif [ "start" == "$*" ]; then
    /bin/regtool set "/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment/PHP_INI_SCAN_DIR" "$PHP_INI_SCAN_DIR" -s
    /c/Server/Apache/bin/httpd2.exe -k start
    /bin/regtool unset "/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment/PHP_INI_SCAN_DIR"  
elif [ "restart" == "$*" ]; then
    #/bin/regtool set "/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment/PHP_INI_SCAN_DIR" "$PHP_INI_SCAN_DIR" -s
    #/c/Server/Apache/bin/httpd2.exe -k stop
    #/c/Server/Apache/bin/httpd2.exe -k start
    #/bin/regtool unset "/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment/PHP_INI_SCAN_DIR"
    /c/Server/Apache/bin/httpd2.exe -k restart # ENV don't reload this way :(
else
    /c/Server/Apache/bin/httpd2.exe "$*"
fi 
0
ответ дан 3 December 2019 в 07:25

Вы можете использовать директиву SetEnv в Apache для установки собственных переменных окружения, специфичных для вашего приложения.

Подробнее здесь https://httpd.apache.org/docs/2.4/mod/mod_env.html#setenv. Вы можете поместить эти значения на ваш виртуальный хост или httpd.conf

.
1
ответ дан 3 December 2019 в 07:25

Теги

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