在 Apache 和系统中设置环境变量

在 Apache 和系统中设置环境变量

我想在系统和 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 之前“动态”设置值。您可以修改它以拾取任何类型的系统变量。

相关内容