Apache2 PATH環境変数の設定


13

PATHApache2 の環境変数はどのように設定できますか?私はそれを/usr/sbin/envvarshttpd.confで設定してSetEnv PATH(そしてPassEnvでSSIに渡す)試みましたが、それはうまくいきません。


1
さらに情報が必要です。これは、問題のOSに依存します。Windowsは、Un * xesとは異なる方法で処理します。FreeBSD、RedHat、Ubuntuはすべてこれを異なるファイルで処理します。
ステファンLasiewski

いくつかのアプローチは「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を表示します。

    PATH = /usr/local/bin:/usr/bin:/bin
    
  3. これらの変数を変更するには、envvarsファイルを編集します。

    $ sudo vim /etc/apache2/envvars 
    
  4. このファイルのPATHを変更します。この例では/opt/local/bin、PATHに追加します。いくつかのケースでは、あなたが使用する必要があるかもしれexport PATHないだけにしてPATH

    export PATH=$PATH:/opt/local/bin
    
  5. Apacheを再起動します

    $ 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をどのようにロードしますか?組み込みで静的にコンパイルされているため、デフォルトではロードされませんか?
チェイスT. 14年

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

--prefix=/usr --enable-layout=RedHatenvvarsファイルを使用してソースからコンパイルされたApache 2.4.xを使用するRedHatでは、にあります/usr/sbin/envvars。そのファイルに適切なPATHを設定すると、ApacheとPHPが認識できるようになります。

私はそれを決定するためにStefan Lasiewskiと同じアプローチを使用しました。以下のためのApache 2.4.12/usr/sbin/envvarsファイルはのライン49に供給されます/usr/sbin/apachectl


フェドーラ23で、/usr/sbin/apachectl言及していない/etc/sysconfig/httpdが含まれ、代わりに:«このファイルは、もはやhttpdプロセスのための追加の環境変数を設定するために使用されます。systemdに置き換えられました。» paste.debian.net/361218
Nemo

1

任意のエディターでApache2 plistファイルを編集します(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システムでは、多くの訪問者が慎重にコンパイルされたスマイリー/絵文字のコレクションを略奪したいだけであることがわかったので、ディレクトリパスへのランダムに生成されたシンボリックリンクを使用することにしましたApache2変数。リンクを共有することは事実上不可能でした。

したがって、30分ごとに、cronは.htaccessファイルを書き換え、以下に示すようにSetEnvを含めるperlスクリプトを実行しました。

....
SetEnv SMILEYDIR "QyQGTZ8cgcK3zMVL0aNJ"

次に、PHPページの上部にあるように変数を読み取ります。ページの後半には、適切なスマイリーへのパスを作成するために使用される変数があります。

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

私のために働いて、それがあなたを助けることを願っています!


それはのために動作しますがないPATH
マッテオ・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.