web-dev-qa-db-ja.com

WindowsでApache固有の環境変数を設定する

私はUbuntuでApacheを使用したことがあります。 Apacheサービスで使用される環境変数を含むenvvarsファイルがあります。 Windows用のそのようなファイルを見つけることができません。

私がそれに対処するために見つけた2つのアプローチがあります。 ApacheがWindows環境変数を読み取ることがわかりました。しかし、これらはグローバルであり、アプリケーション固有ではないため、私はこれが好きではありません。

私が見つけた他のオプションは、.batファイルを作成し、環境変数を設定してからhttpd.exeを開始することです。しかし、これに伴う問題は、Apacheサービスでは機能しないことです。

私が見つけた別のオプションは、 nssm を使用することです。これにより、サービス固有の環境変数を使用してカスタムサービスを作成できます。しかし、使用するとAH00141: Could not initialize random number generatorエラーが発生します。

私が使用できる他の代替オプションはありますか?

3
VarunAgw

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
VarunAgw

ApacheでSetEnvディレクティブを使用して、アプリケーションに固有の独自の環境変数を設定できます。

詳細はこちら https://httpd.Apache.org/docs/2.4/mod/mod_env.html#setenv これらの値は仮想ホストまたはhttpd.conf内に置くことができます

1