Apache2 PATH ortam değişkenini ayarlama


13

PATHApache2 için ortam değişkenini nasıl ayarlayabilirsiniz ? Ben /usr/sbin/envvarshttpd.conf ile SetEnv PATH(ve PassEnv ile SSI boyunca geçerek ) ve içinde ayar denedim , ama sadece devam etmez.


1
Daha fazla bilgiye ihtiyacınız var. Bu, söz konusu işletim sistemine bağlıdır. Windows işleri Un * xes'ten farklı yapar. FreeBSD, RedHat ve Ubuntu bunu farklı dosyalarda ele alır.
Stefan Lasiewski

Bazı yaklaşımların "PATH için işe yaramadığını" söylüyorsunuz. Bunu nasıl test ettiğinizi bize göstermeniz gerekiyor.

Yanıtlar:


15

Diğerlerinin söylediği gibi, bunu bir ortam değişkeni dosyasını kullanarak yaparsınız. Bu cevapta daha fazla ayrıntı vereceğim ve işe yaradığına dair kanıt göstereceğim.

Bu ortam değişkeni dosyasının kaynağı olmalıdır apachectl. Ubuntu kutumda, bu dosya adresinde /etc/apache2/envvars. RedHat'ta bu işte /etc/sysconfig/httpd. FreeBSD'de, bu /etc/rc.conf(sanırım) ayarlanır . Alternatif olarak, bu bilgileri bir başlangıç ​​komut dosyasında ( /etc/init.d/httpdveya apachectlvb.) De ayarlayabilirsiniz . Ancak, mümkünse başlangıç ​​komut dosyalarını yalnız bırakmak en iyisidir. En iyi yer belirlenmiş ortam değişkenleri betiğidir.

  1. Bu envvars dosyasının konumunu doğrulayın. Ubuntu'da şunu /etc/init.d/apache2ctlgösterdiğini gösteriyor /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. Değişkenleri görüntülemek için, bir Perl printenv.cgi betiği kullanıyorum ve http://example.org/cgi-bin/printenv.cgi adresinden erişebiliyorum . Senaryo bana şu PATH'ı gösteriyor:

    PATH = /usr/local/bin:/usr/bin:/bin
    
  3. Bu değişkenleri değiştirmek için envvars dosyasını düzenliyorum:

    $ sudo vim /etc/apache2/envvars 
    
  4. Bu dosyada PATH'inizi değiştirin. Bu örnekte, PATH'ime ekleyeceğim /opt/local/bin. Bazı durumlarda, export PATHyalnızca aşağıdakileri kullanmanız gerekebilir PATH:

    export PATH=$PATH:/opt/local/bin
    
  5. Apache'yi yeniden başlat

    $ sudo service apache2 restart
     * Restarting web server apache2
     ... waiting    ...done.
    $
    
  6. Sonuçları artık PATH'ın yeni bir öğe içerdiğini gösteren http://example.org/cgi-bin/printenv.cgi adresinde görüntüleyin :

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

Yukarıdakiler işe yaramazsa, olağandışı bir şey olabilir. Belki senaryonuz PATH'ı görmezden geliyor ya da üzerine yazıyor.


Httpd'yi yeniden başlattığınızdan emin olun - kullanmayı denedim gracefulve bu değişikliklerin etkili olmasına neden olmadı.
Monica Cellio için Boycott SE

Fedora 23'te: «Bu dosya artık httpd işlemi için ek ortam değişkenleri yapılandırmak için kullanılmamaktadır. Yerine systemd girdi. » paste.debian.net/361218
Nemo



1

Mod_env yüklediğinizden emin olun.

Doğru sözdizimi (örnek):

SetEnv LD_LIBRARY_PATH /usr/local/lib

Bu benim için çalıştı.


Çalışıyor ama değilPATH
Matteo

Mod_env'i nasıl yüklersiniz? Yerleşik ve statik olarak derlendiği için varsayılan olarak yüklenmiyor mu?
Chase T.

1

Bunu start()init betiğinin işlevinde ayarlayabilirsiniz , şöyle bir şey:

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
}

Tüm ortam değişkenlerini listelemek için bir Perl betiği oluşturun:

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

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

Yerleştirin /var/www/cgi-binve kontrol edin http://domain.com/cgi-bin/env.cgi, aşağıdakileri göreceksiniz:

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

1

RedHat üzerinde Apache 2.4.x ile kaynaktan --prefix=/usr --enable-layout=RedHatenvvars dosyası ile derlenir /usr/sbin/envvars. Bu dosyada uygun PATH ayarının Apache ve PHP'nin farkında olmasını sağladığını onaylayabilirim.

Bunu belirlemek için Stefan Lasiewski ile aynı yaklaşımı kullandım. İçin Apache 2.4.12 , /usr/sbin/envvarsdosya hattı 49 üzerinde kaynaklı /usr/sbin/apachectl.


Fedora 23'te bunun yerine aşağıdakilerden /usr/sbin/apachectlbahsedilmektedir /etc/sysconfig/httpd: «Bu dosya artık httpd işlemi için ek ortam değişkenleri yapılandırmak için kullanılmamaktadır. Yerine systemd girdi. » paste.debian.net/361218
Nemo

1

Apache2 plist dosyasını istediğiniz düzenleyiciyle düzenleyin (örnek vim kullanarak):

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

Plist dosyasına aşağıdakini ekleyin:

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

Eğer EnvironmentVariablesanahtar zaten var, sadece eklemek

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

-e <dict>

Not: Mac OSX 10.11 (EL Capitan) veya üstü için, csrutil disableCMD + R'yi yeniden başlattıktan ve vurduktan sonra Terminal'de komutu çalıştırmanız gerekir ve ardından bu dosyayı düzenleyebilirsiniz.

Apache2'yi yeniden başlat

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

0

Apache2 sistemimde çok sayıda ziyaretçinin dikkatlice derlediğim Smileys / emoticons koleksiyonumu yağmalamak istediğini gördüm (ciddi olarak!), Bu yüzden dizin yolunda rastgele oluşturulmuş bir sembolik kullanmaya karar verdim. Apache2 değişkeni ve bağlantıları paylaşmak neredeyse imkansızdı.

Yani, her 30 dakikada bir, cron .htaccess dosyasını yeniden yazacak ve aşağıda görebileceğiniz gibi bir SetEnv içerecek bir perl betiği çalıştırdı:

....
SetEnv SMILEYDIR "QyQGTZ8cgcK3zMVL0aNJ"

Sonra, PHP sayfalarımın üstündeki değişkeni bu şekilde okurdum ve sayfada daha sonra uygun gülen yüz için bir yol oluşturmak için kullanılan bu değişken olurdu:

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

Benim için çalışıyor ve umarım sana yardımcı olur!


Çalışıyor ama değilPATH
Matteo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.