PATHApache2 의 환경 변수를 어떻게 설정할 수 있습니까? 나는 그것을 /usr/sbin/envvarshttpd.conf 에 설정하고 SetEnv PATH(PassEnv를 사용하여 SSI에 전달 하려고 시도했지만 ) 수행되지는 않았다.
PATHApache2 의 환경 변수를 어떻게 설정할 수 있습니까? 나는 그것을 /usr/sbin/envvarshttpd.conf 에 설정하고 SetEnv PATH(PassEnv를 사용하여 SSI에 전달 하려고 시도했지만 ) 수행되지는 않았다.
답변:
다른 사람들이 말했듯이 환경 변수 파일을 사용 하여이 작업을 수행합니다. 이 답변에 자세한 내용을 제공하고 작동한다는 증거를 보여 드리겠습니다.
이 환경 변수 파일은의 소스 여야합니다 apachectl. 내 우분투 상자에서이 파일은에 /etc/apache2/envvars있습니다. RedHat에서이 위치는 /etc/sysconfig/httpd입니다. FreeBSD에서 이것은 /etc/rc.conf(제 생각에) 설정됩니다 . /etc/init.d/httpd또는 시작 스크립트 ( 또는 apachectl등) 에서이 정보를 설정할 수도 있습니다 . 그러나 가능하면 시작 스크립트를 그대로 두는 것이 가장 좋습니다. 가장 좋은 장소는 지정된 환경 변수 스크립트에 있습니다.
이 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
변수를 보려면 Perl printenv.cgi 스크립트를 사용하고 있으며 http://example.org/cgi-bin/printenv.cgi 에서 사용할 수 있습니다 . 스크립트는 다음 PATH를 보여줍니다.
PATH = /usr/local/bin:/usr/bin:/bin
이러한 변수를 변경하려면 envvars 파일을 편집하십시오.
$ sudo vim /etc/apache2/envvars
이 파일에서 PATH를 수정하십시오. 이 예에서는 /opt/local/binPATH를 추가하겠습니다 . 경우에 따라 다음 export PATH과 같은 것이 아니라 사용해야 할 수도 있습니다 PATH.
export PATH=$PATH:/opt/local/bin
아파치 다시 시작
$ sudo service apache2 restart
* Restarting web server apache2
... waiting ...done.
$
http://example.org/cgi-bin/printenv.cgi 의 결과 를 보면 PATH에 이제 새 요소가 포함되어 있음을 알 수 있습니다.
PATH = /usr/local/bin:/usr/bin:/bin:/opt/local/bin
위의 방법으로 문제가 해결되지 않으면 비정상적인 문제가 발생할 수 있습니다. 스크립트가 PATH를 무시하거나 덮어 쓰고있을 수 있습니다.
graceful변경 사항이 적용되지 않았습니다.
2.2에서는 PATH 환경 변수를 Setenv를 사용하여 설정할 수 없습니다.
내 시스템에서는 /etc/apache2/envvars입니다.
PATH
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
--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.
/usr/sbin/apachectl에서는 /etc/sysconfig/httpd대신 다음을 포함합니다.«이 파일은 더 이상 httpd 프로세스에 대한 추가 환경 변수를 구성하는 데 사용되지 않습니다. systemd로 대체되었습니다.» paste.debian.net/361218
원하는 편집기로 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
내 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