Встановлення змінної середовища Apache2 PATH


13

Як можна встановити PATHзмінну середовища для Apache2? Я намагався встановити його в /usr/sbin/envvarshttpd.conf і SetEnv PATH(і передати його до SSI разом із PassEnv), але він просто не переймається.


1
Потрібна додаткова інформація. Це залежить від розглянутої ОС. Windows робить інакше, ніж Un * xes. FreeBSD, RedHat і Ubuntu - все це обробляють у різних файлах.
Стефан Ласєвський

Ви кажете, що деякі підходи "не працюють для PATH". Вам потрібно показати нам, як ви її тестуєте.

Відповіді:


15

Як говорили інші, ви робите це за допомогою файлу змінної середовища. Я надам більш детальну інформацію у цій відповіді та покажу доказ того, що вона працює.

Цей файл змінної середовища повинен бути джерелом apachectl. У вікні Ubuntu цей файл знаходиться в /etc/apache2/envvars. На RedHat, це на /etc/sysconfig/httpd. У FreeBSD це встановлено /etc/rc.conf(я думаю). Як альтернативу, ви також можете встановити цю інформацію в сценарії запуску ( /etc/init.d/httpdабо apachectlтощо). Однак я думаю, що найкраще залишати сценарії запуску в спокої, якщо це можливо. Найкраще місце займає призначений сценарій змінних середовища.

  1. Перевірте розташування цього файлу envvars. У Ubuntu /etc/init.d/apache2ctlпоказує, що він джерело /etc/apache2/envvars:

    # the path to the environment variable file
    test -z "$APACHE_ENVVARS" && APACHE_ENVVARS='/etc/apache2/envvars'
    # pick up any necessary environment variables
    if test -f $APACHE_ENVVARS; then
       . $APACHE_ENVVARS
    fi
    
  2. Для перегляду змінних я використовую скрипт Perl printenv.cgi та надав його на веб-сторінці http://example.org/cgi-bin/printenv.cgi . Сценарій показує мені наступний ПАТ:

    PATH = /usr/local/bin:/usr/bin:/bin
    
  3. Щоб змінити ці змінні, я редагую файл envvars:

    $ sudo vim /etc/apache2/envvars 
    
  4. Змініть свій PATH у цьому файлі. У цьому прикладі я додаю /opt/local/binсвій ПАТ. У деяких випадках може знадобитися використання, export PATHа не тільки PATH:

    export PATH=$PATH:/opt/local/bin
    
  5. Перезапустіть апаш

    $ sudo service apache2 restart
     * Restarting web server apache2
     ... waiting    ...done.
    $
    
  6. Перегляньте результати на http://example.org/cgi-bin/printenv.cgi , які тепер показують, що PATH тепер містить новий елемент:

    PATH = /usr/local/bin:/usr/bin:/bin:/opt/local/bin
    

Якщо вищезазначене не працює, може статися щось незвичне. Можливо, ваш сценарій ігнорує або перезаписує PATH.


Переконайтесь, що ви перезапустили httpd - я намагався використовувати graceful, і це не спричинило зміни.
Бойкот SE для Моніки Селліо

На fedora 23: «Цей файл більше не використовується для налаштування додаткових змінних середовища для процесу httpd. Його замінили systemd. » paste.debian.net/361218
Немо



1

Переконайтеся, що ви завантажили mod_env.

Правильний синтаксис: (приклад):

SetEnv LD_LIBRARY_PATH /usr/local/lib

Це працювало для мене.


Працює, але не дляPATH
Маттео,

Як ви завантажуєте mod_env? Чи не завантажується вона за замовчуванням, оскільки вона вбудована та статично складена?
Чейз Т.

1

Ви можете встановити його у start()функції сценарію init, приблизно так:

start() {
        echo -n $"Starting $prog: "
        check13 || exit 1
        export PATH=${PATH}:/var/ossec/bin
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}

Створіть сценарій Perl, щоб перелічити всі змінні середовища:

#!/usr/bin/perl -wT
print "Content-type: text/html\n\n";

foreach $key (sort keys(%ENV)) {
  print "$key = $ENV{$key}<p>";
}

Помістіть його /var/www/cgi-binі перевірте http://domain.com/cgi-bin/env.cgi, ви побачите нижче:

PATH = /sbin:/usr/sbin:/bin:/usr/bin:/var/ossec/bin

1

На RedHat з Apache 2.4.x, зібраний з джерела з --prefix=/usr --enable-layout=RedHatфайлом envvars, розташований на /usr/sbin/envvars. Я можу підтвердити, що встановлення відповідного PATH у цьому файлі робить його таким, що Apache та PHP знають про це.

Я використовував той самий підхід, що і Стефан Ласєвський, щоб визначити це. Для Apache 2.4.12 , то /usr/sbin/envvarsфайл використовується в рядку 49 /usr/sbin/apachectl.


У fedora 23 натомість /usr/sbin/apachectlзгадується /etc/sysconfig/httpd, що містить: «Цей файл більше не використовується для налаштування додаткових змінних середовища для процесу httpd. Його замінили systemd. » paste.debian.net/361218
Немо

1

Відредагуйте файл плістів Apache2 будь-яким редактором (наприклад, використовуючи vim):

$ sudo vim /System/Library/LaunchDaemons/org.apache.httpd.plist

Додайте до файлу plist:

<key>EnvironmentVariables</key>
<dict>
  <key>PATH</key>
  <string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
</dict>

Якщо EnvironmentVariablesключ вже існує, просто додайте

<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>

до <dict>

Примітка. Для Mac OSX 10.11 (EL Capitan) або вище вам потрібно запустити команду csrutil disable в терміналі після перезавантаження та натискання CMD + R, і тоді ви зможете редагувати цей файл.

Перезапустіть Apache2

$ sudo /usr/sbin/apachectl stop
$ sudo /usr/sbin/apachectl start

0

У моїй системі Apache2 я виявив, що багато відвідувачів хотіли розграбувати мою ретельно складену колекцію Smileys / смайликів (серйозно!), Тож я вирішив використати випадково генерований симпосилання на шлях до каталогу, який буде вибрано як Змінна Apache2, і ділитися посиланнями було практично неможливо.

Отже, кожні 30 хвилин, cron запускав сценарій perl, який переписав би файл .htaccess і включив SetEnv, як ви бачите нижче:

....
SetEnv SMILEYDIR "QyQGTZ8cgcK3zMVL0aNJ"

Потім у верхній частині моїх сторінок PHP я прочитав подібну змінну, а пізніше на сторінці з’явиться та змінна, яка використовується для побудови шляху до придатного смайлика:

$SMILEYDIR = apache_getenv("SMILEYDIR");
....
....
echo '<img src="/'.$SMILEYDIR.'//SMILEY_yay!.gif" border="0" hspace="3">';

Працює для мене, і сподіваюся, це допоможе тобі!


Працює, але не дляPATH
Маттео,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.