我想在系统和 httpd 中设置一个环境变量。
我设置了变量,比如说IMPORTANT_FOLDER = /MY/PATH
,/etc/profile
它适用于所有系统用户。
我想要做的是将此变量带入 httpd,以便某些 php 代码可以使用它。我设法仅通过添加SetEnv IMPORTANT_FOLDER = /MY/PATH
我的 httpd 配置即可使该变量可用。
您能否提供一种将系统变量传递到 apache 的方法?对我来说,重要的是使其集中化。
apache 2.4
我在7 上使用redhat
。
谢谢。
答案1
我相信您可以在 Apache 配置文件中使用 SetEnv 指令。此文件可以是 httpd.conf 文件,也可以在 /etc/httpd/conf.d 中或文件所在的任何位置创建一个单独的文件。
例如:
SetEnv IMPORTANT_FOLDER = /MY/PATH
当 Apache 服务器启动时,您应该能够在 Apache 环境中“看到”该变量。
另一种方法是修改 HTTPD 初始化脚本 (/etc/init.d/httpd)。在下面的例子中,我创建了一个函数,在启动 Apache 服务器之前,读取 keychain(用于管理 ssh-agent 进程的实用程序)创建的文件的输出并将其放置在特定的配置文件中。
这里的原理是,在启动 Apache 之前,使用 init shell 脚本来修改 Apache 配置文件(在本例中位于 /etc/httpd/conf.d)。
setKeychain() {
if [ -a $(cat /etc/passwd | grep ^apache: | cut -d':' -f6)/.keychain/$(uname -n | cut -d' ' -f1)-sh ] ; then
SSH_AUTH_SOCK=$(cat $(cat /etc/passwd | grep ^apache: | cut -d':' -f6)/.keychain/$(uname -n | cut -d' ' -f1)-sh | cut -d'=' -f2 | cut -d' ' -f1 | head -1 | sed 's/;$//g')
SSH_AGENT_PID=$(cat $(cat /etc/passwd | grep ^apache: | cut -d':' -f6)/.keychain/$(uname -n | cut -d' ' -f1)-sh | cut -d'=' -f2 | cut -d' ' -f1 | tail -1 | sed 's/;$//g')
echo "SetEnv SSH_AGENT_PID $SSH_AGENT_PID" > /etc/httpd/conf.d/keychain.conf
echo "SetEnv SSH_AUTH_SOCK $SSH_AUTH_SOCK" >> /etc/httpd/conf.d/keychain.conf
chmod 644 /etc/httpd/conf.d/keychain.conf
fi
}
在初始化脚本的“启动”函数中,我在开头添加了以下内容:
start() {
setKeychain
这将执行上一个函数,该函数在启动 Apache 之前“动态”设置值。您可以修改它以拾取任何类型的系统变量。