Apache2 PATH 환경 변수 설정


13

PATHApache2 의 환경 변수를 어떻게 설정할 수 있습니까? 나는 그것을 /usr/sbin/envvarshttpd.conf 에 설정하고 SetEnv PATH(PassEnv를 사용하여 SSI에 전달 하려고 시도했지만 ) 수행되지는 않았다.


1
더 많은 정보가 필요합니다. 이것은 해당 OS에 따라 다릅니다. Windows는 Un * xes와 다르게 작동합니다. FreeBSD, RedHat 및 Ubuntu는 모두 다른 파일에서이를 처리합니다.
— Stefan Lasiewski

당신은 일부 접근 방식이 "PATH에서 작동하지 않는다"고 말합니다. 테스트 방법을 보여 주어야합니다.

답변:


15

다른 사람들이 말했듯이 환경 변수 파일을 사용 하여이 작업을 수행합니다. 이 답변에 자세한 내용을 제공하고 작동한다는 증거를 보여 드리겠습니다.

이 환경 변수 파일은의 소스 여야합니다 apachectl. 내 우분투 상자에서이 파일은에 /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/binPATH를 추가하겠습니다 . 경우에 따라 다음 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변경 사항이 적용되지 않았습니다.
— Monica Cellio의 보이콧 SE

fedora 23에서 :«이 파일은 더 이상 httpd 프로세스에 대한 추가 환경 변수를 구성하는 데 사용되지 않습니다. systemd로 대체되었습니다.» paste.debian.net/361218
— Nemo



1

mod_env를로드했는지 확인하십시오.

올바른 구문은 (예)입니다.

SetEnv LD_LIBRARY_PATH /usr/local/lib

이것은 나를 위해 일했습니다.


그것은 작동하지만하지 않는PATH
— 마테오

mod_env를 어떻게로드합니까? 내장되어 있고 정적으로 컴파일 될 때 기본적으로로드되지 않습니까?
— Chase T.

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와 같은 접근법을 사용했습니다. 들어 아파치 2.4.12 는 /usr/sbin/envvars파일의 라인 49에 공급된다 /usr/sbin/apachectl.


fedora 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 시스템에서 많은 방문자가 신중하게 컴파일 된 Smileys / 이모티콘 (심각하게!) 모음 만 약탈하고 싶기 때문에 무작위로 생성 된 디렉토리 경로에 대한 심볼릭 링크를 무작위로 사용하기로 결정했습니다. Apache2 변수이며 링크를 공유하는 것은 사실상 불가능했습니다.

따라서 cron은 30 분마다 .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.