Назад | Перейти на главную страницу

Установите переменную среды как в Apache, так и в системе

Я хотел бы установить переменную среды как в system, так и в httpd.

Я установил переменную, допустим IMPORTANT_FOLDER = /MY/PATH, в /etc/profile и это работает для всех пользователей системы.

Что я хочу сделать, так это перенести эту переменную в httpd, чтобы ее можно было использовать в каком-то php-коде. Мне удалось сделать var доступным только добавив SetEnv IMPORTANT_FOLDER = /MY/PATH в моих конфигурациях httpd.

Не могли бы вы предоставить мне способ передать системную переменную в apache? Для меня важно сделать его централизованным.

я использую apache 2.4 на redhat 7.

Спасибо.

Я считаю, что вы можете использовать директиву SetEnv в файле конфигурации Apache. Этим файлом может быть файл httpd.conf, или вы создаете отдельный файл в /etc/httpd/conf.d, или где бы ни находились ваши файлы.

Например:

SetEnv IMPORTANT_FOLDER = /MY/PATH

Когда сервер Apache запускается, вы должны «видеть» эту переменную в среде Apache.

Альтернативой этому могло бы быть изменение сценария инициализации HTTPD (/etc/init.d/httpd). В следующем примере я создал функцию, которая считывает вывод созданного файла связки ключей (утилиты для управления процессами ssh-agent) и помещает его в определенный файл конфигурации перед запуском сервера Apache.

Принцип заключается в том, что вы используете сценарий оболочки инициализации для изменения файла конфигурации Apache (в данном случае он находится в /etc/httpd/conf.d) перед запуском Apache.

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 сценария инициализации я добавляю в начало следующее:

start() {

        setKeychain

Это выполняет предыдущую функцию, которая «динамически» устанавливает значение перед запуском Apache. Вы можете изменить это, чтобы использовать любую системную переменную.