apache2가 envvars 파일을 존중하지 않는 이유는 무엇입니까?


17

내 envvar 파일에는 다음 줄이 있습니다.

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

내 apache2.conf에는 다음과 같은 줄이 있습니다.

# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

그러나 내가 달릴 때 나는 apache2 -M이것을 얻는다 :

apache2: bad user name ${APACHE_RUN_USER}

임시 수정은 www-dataapache2.conf 파일 을 하드 코딩 하는 것입니다. 몇 가지 추측이 있었다 여기에 일부 구성 스크립트는 ENV 내 apache2.conf의 파일에 제대로 바르 대체하지 않았기 때문에이 것을이. 어쨌든 enpavar 파일을 참조하기 위해 apache2를 얻는 방법은 무엇입니까?

다른 데이터 포인트 로서이 사이트 는 envvars가 빌드시 생성되지만 런타임에 apache2ctl이 읽은 것을 나타내는 것으로 보입니다.이 파일은 빌드 프로세스에서 남은 똥이 아니라는 것을 나타냅니다.

답변:


30

@Lekensteyn이 제공 한 답변을 살펴본 후 sudo apache2ctl -Mapache2.conf를 원래 상태로 되돌려 보았습니다 . 이것은 매뉴얼 페이지를 조금 파헤 쳤습니다. man apache2말해야 할 내용 은 다음과 같습니다 .

In  general, apache2 should not be invoked directly, but rather should 
be invoked via /etc/init.d/apache2 or apache2ctl. The default Debian 
configuration requires environment variables that are defined in 
/etc/apache2/envvars  and  are  not  available  if  apache2  is  
started  directly. However, apache2ctl can be used to pass arbitrary 
arguments to apache2.

따라서이 질문에 대한 대답은 다음과 같습니다. 올바르게 사용하고 있지 않습니다 apache2. 사용하는 apache2ctl대신.

올바른 방향으로 나를 가리켜 준 @Lekensteyn에게 감사드립니다.


: 짝수 더 정확한 방법은 초기화 스크립트를 사용하는 것 sudo stop apache2, sudo restart apache2그리고 sudo start apache2( /etc/init.d/apache2 stop등)
Lekensteyn

내 경우에는 umaskenvvars에 설정을 추가하고 있었지만 사용을 다시 시작한 apache2ctl restart후에도 여전히 작동하지 않았지만 사용하여 다시 시작해 service apache2 restart도 작동 service apache2 graceful하지 않았습니다 (작동 하지 않음).
Matt Browne

apachectl 대신 service를 사용하는 것이 좋지만 apachectl -S와 같이 service 명령에 연결되지 않은 명령을 사용해야하는 경우이 답변은 훌륭합니다. upvote
Feida Kila

참고 : 추가 /etc/init.d apache2 reload를하지 않습니다 envvars, 당신은 서버를 중지하고 시작해야합니다
ThaDon

7

에서 http://httpd.apache.org/docs/2.2/configuring.html :

쉘 환경 변수의 값은 $ {ENVVAR} 구문을 사용하여 구성 파일 행에서 사용될 수 있습니다. "ENVVAR"이 유효한 환경 변수의 이름 인 경우, 해당 변수의 값이 구성 파일 행에서 해당 지점으로 대체되고 해당 텍스트가 구성 파일에서 직접 발견 된 것처럼 처리가 계속됩니다. ENVVAR 변수를 찾을 수 없으면 구성 파일 처리의 후반 단계에서 "$ {ENVVAR}"문자를 그대로 사용할 수 있습니다.

따라서 변수는 실제로 예상대로 환경에서 검색됩니다. 이제 어디서 이런 일이 발생합니까?

인은 /etc/init.d/apache2, APACHE_ENVVARS의 경로로 설정 envvars초기화 스크립트 경로를 기반으로 파일. 일반적 APACHE_ENVVARS=/etc/apache2/envvars으로 설정됩니다. 이제이 값이에 설정된 기본값과 같으 apache2ctl므로 내 보내지 않습니다.

보낸 사람 /usr/sbin/apache2ctl:

# the path to the environment variable file
test -z "$APACHE_ENVVARS" && APACHE_ENVVARS="$APACHE_CONFDIR/envvars"
# pick up any necessary environment variables
if test -f $APACHE_ENVVARS; then
  . $APACHE_ENVVARS
fi

설명 : APACHE_ENVVARS비어있는 경우 기본 경로 인를 사용하십시오 /etc/apache2/envvars. 이 파일이 존재하면 "소스"(현재 환경에서 해당 파일의 명령을 실행)하십시오.

envvars파일에 구문 오류가 없는지 확인하십시오 . 이러한 검사를 수행하려면 다음을 사용하십시오.

sh -n /etc/apache2/envvars && echo Syntax OK || echo FAIL

오류가 있으면 인쇄됩니다.


확인을 수행하고 envvars에 구문 오류가 없는지 확인할 수 있습니다. 해결책을 찾았습니다. 아래 내 답변을 참조하십시오.
Avery Chan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.