Windows

在 Windows 中設置 Apache 特定的環境變數

  • June 10, 2016

我在 Ubuntu 中使用 Apache 已經是過去式了。有一個envvars文件包含 Apache 服務使用的環境變數。我無法為 Windows 找到這樣的文件。

我發現有兩種方法可以處理它。我發現 Apache 讀取了 Windows 環境變數。但我不喜歡這樣,因為它們是全球性的,而不是特定於應用程序的。

我發現的其他選項是創建一個 .bat 文件,設置環境變數,然後啟動 .bat 文件httpd.exe。但問題在於它不適用於 Apache 服務。

我發現的另一個選擇是使用nssm。它允許使用特定於服務的環境變數創建自定義服務。但是AH00141: Could not initialize random number generator如果我使用它,我會得到錯誤。

我可以使用任何其他替代選項嗎?

我最終編寫了一個替換httpd.exe. 我重命名httpd.exehttpd2.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 

您可以使用 Apache 中的 SetEnv 指令來設置您自己的特定於您的應用程序的環境變數。

更多詳細資訊在這裡https://httpd.apache.org/docs/2.4/mod/mod_env.html#setenv 您可以將這些值放入您的虛擬主機或 httpd.conf

引用自:https://serverfault.com/questions/762600