Apache2 구성 변수가 정의되지 않았습니다


65

우분투 13.10에 apache2를 설치했습니다. 사용하여 다시 시작하려고하면

sudo /etc/init.d/apache2 restart

이 메시지가 나타납니다.

AH00558 : apache2 : 127.0.1.1을 사용하여 서버의 완전한 도메인 이름을 안정적으로 판별 할 수 없습니다. 이 메시지를 억제하려면 'ServerName'지시문을 전체적으로 설정하십시오.

httpd.conf파일을 편집해야한다는 것을 읽었습니다 . 그러나 /etc/apache2/폴더에서 찾을 수 없으므로이 명령을 사용하여 찾으려고했습니다.

/usr/sbin/apache2 -V

그러나 내가 얻는 결과는 다음과 같습니다.

[Fri Nov 29 17:35:43.942472 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
[Fri Nov 29 17:35:43.942560 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_PID_FILE} is not defined
[Fri Nov 29 17:35:43.942602 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_RUN_USER} is not defined
[Fri Nov 29 17:35:43.942613 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_RUN_GROUP} is not defined
[Fri Nov 29 17:35:43.942627 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Fri Nov 29 17:35:43.947913 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Fri Nov 29 17:35:43.948051 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Fri Nov 29 17:35:43.948075 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOG_DIR} is not defined

AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf:
Invalid Mutex directory in argument file:${APACHE_LOCK_DIR}

74 행 /etc/apache2/apache2.conf은 다음과 같습니다.

Mutex file:${APACHE_LOCK_DIR} default

/etc/apache2/envvar파일을 살펴 보았지만 어떻게 처리해야할지 모르겠습니다.

어떻게해야합니까?


envvars 파일에 무엇입니까?
— etagenklo

답변:


60
[Fri Nov 29 17:35:43.942472 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined

이 메시지는 apache2 2 진을 직접 실행했기 때문에 표시됩니다. Ubuntu / Debian에서 Apache 구성은 활성화 된 envvar 파일에 의존합니다.

init 스크립트 또는 apachectl로 아파치를 시작하는 경우

원래 문제는 시스템에 적합한 호스트 이름 (fqdn)이 없다는 것입니다.

당신이 그것을 변경할 수없는 경우, 변경 ServerName에 변수 /etc/apache2/apache2.conf로 localhost또는 선호하는 FQDN.


1
당신은 init 스크립트에 대해 옳습니다. 그럼 추가 ServerName localhost로 apache2.conf(때문에 httpd.conf항상 우분투에서 사용되지 않습니다) 지금은 모든 것이 예상대로 작동합니다. 답변에 세부 정보를 추가하여 허용 된 것으로 표시 할 수 있습니까?
— 커트 부르 바키

1
로 시작해서 apache2ctl나를 위해 작동하지 않았다, 나는 서비스 를 사용해야했다 :sudo service apache2 restart
— Édouard Lopez

그러나 그들은 왜 apache2처음부터 명령을 어겼습니까?
— reinierpost

2
이 솔루션은 해결 AH00558: apache2: Could not reliably determine the server's fully qualified domain name만되지만 해결 되지는 않습니다 Config variable ${APACHE_LOCK_DIR} is not defined.
— Vladimir Vukanac

나에게도 같은 문제가 있습니다.
— indianwebdevil

84

다음과 같이 실행하여 환경을 소싱하십시오.

source /etc/apache2/envvars

그리고

/usr/sbin/apache2 -V

당신은 얻을 것이다 :

el@apollo:/home/el$ apache2 -V
Server version: Apache/2.4.7 (Ubuntu)
Server built:   Apr  3 2014 12:20:28
Server's Module Magic Number: 20120211:27
Server loaded:  APR 1.5.1-dev, APR-UTIL 1.5.3
Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/apache2"
 -D SUEXEC_BIN="/usr/lib/apache2/suexec"
 -D DEFAULT_PIDLOG="/var/run/apache2.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="mime.types"
 -D SERVER_CONFIG_FILE="apache2.conf"

/etc/apache2/envvars존재하지 않음
— Mark Richman

6
파일이 우분투 시스템에 존재하지만 셸이 셸 스크립트로 인식하지 못하므로 다음이 필요합니다. source / etc / apache2 / envvars; apache2 -V
— Ben Crowell

6
apachectl -V환경 변수를 수동으로로드 하는 대신 사용할 수 있습니다.
— Sam Sehnert

여전히 작동하지 않으면 위와 같이 답변을 시도 source /etc/apache2/envvars && sudo -E apache2 -V하거나 로그인하십시오 root. sudo를 사용해야하는 일반 사용자에게 apache2 env를 소싱하면 "-E"없이 작동하지 않습니다. 일반 사용자 권한은 다른 문제 중에서 인증서 개인 폴더를 읽을 수 없습니다. 오류가 발생합니다. sudo -E를 수행하거나 루트 계정으로 완전히 실행해야합니다.
— bshea

이것은 docker foreground cmd로 Apache를 실행하는 데 매우 유용합니다. 예 :CMD . /etc/apache2/envvars; /usr/sbin/apache2 -DFOREGROUND
— Alastair McCormack

7

/etc/apache2/envvarsAPACHE_LOCK_DIR을 확인하십시오 . 내 우분투 12.04에서 이것은 /var/lock/apache2$SUFFIXSUFFIX가 일반적으로 비어 있습니다.

디렉토리가 존재하고 쓰기 가능한지 확인하십시오.

envvars 파일이 올바르게 소스되지 않았을 수 있습니까? 당신이 살펴보면 /etc/init.d/apache2그것이 출처임을 알 수 있습니다.

내 (기본) /etc/apache2/envvars:

# envvars - default environment variables for apache2ctl

# this won't be correct after changing uid
unset HOME

# for supporting multiple apache2 instances
if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
    SUFFIX="-${APACHE_CONFDIR##/etc/apache2-}"
else
    SUFFIX=
fi

# Since there is no sane way to get the parsed apache2 config in scripts, some
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_PID_FILE=/var/run/apache2$SUFFIX.pid
export APACHE_RUN_DIR=/var/run/apache2$SUFFIX
export APACHE_LOCK_DIR=/var/lock/apache2$SUFFIX
# Only /var/log/apache2 is handled by /etc/logrotate.d/apache2.
export APACHE_LOG_DIR=/var/log/apache2$SUFFIX

## The locale used by some modules like mod_dav
export LANG=C
## Uncomment the following line to use the system default locale instead:
#. /etc/default/locale

export LANG

## The command to get the status for 'apache2ctl status'.
## Some packages providing 'www-browser' need '--dump' instead of '-dump'.
#export APACHE_LYNX='www-browser -dump'

## If you need a higher file descriptor limit, uncomment and adjust the
## following line (default is 8192):
#APACHE_ULIMIT_MAX_FILES='ulimit -n 65536'

아무것도 작동하지 않으면 패키지를 다시 설치하려고 시도합니다.


2

다른 말했듯이, 당신은 직접 또 다른 옵션은 사용하는 것입니다 실행하기 전에 (소스) 환경을로드 할 수 있습니다 : apache2ctl예

sudo apache2ctl -S

내 호스트를 덤프


2

TL; DR; 이미 가지고있는 것을 사용하여 apache2를 시작해야합니다.

sudo /etc/init.d/apache2 {start|stop|restart}

상세한:

AH00558 : apache2 : 127.0.1.1을 사용하여 서버의 완전한 도메인 이름을 안정적으로 판별 할 수 없습니다. 이 메시지를 억제하려면 'ServerName'지시문을 전체적으로 설정하십시오.

이 메시지는 서버 이름 / 도메인 이름을 정의해야 함을 의미합니다. 로컬 호스트 / 프로덕션 테스트를 위해 반드시 할 필요는 없으므로 걱정할 필요가 없습니다.

을 사용하여 다른 방법으로 실행하려고하면 apache2이전에 말한 오류 메시지가 나타납니다.에서 환경 변수는에서 기본 스크립트 사용을 시작할 때 정의됩니다 init.d.


-1

어쩌면 이것이 문제를 해결할 것입니다

sudo bash -c '. /etc/apache2/envvars ; apache2'

1
먼저이 줄을 정확히 읽으십시오. 왜 정확한 대답이 아닌지 설명되었습니다.
— asdmin

-2

DocumentRoot를에서 /var/www/html로 업데이트해야 합니다./var/www

다음과 같이 /etc/apache2/sites-available/000-default.conf 파일을 편집하십시오.

DocumentRoot /var/www

-2

이것은 나를 위해 작동

sudo -u root bash -c "source /etc/apache2/envvars; apache2 -V"

이 질문에는 문제 (ServerName에 대한 오류 메시지)와 실패한 디버그 방법 (환경 변수를 소싱하지 않아 발생)이있었습니다. 답변은 문제가 아닌 디버그 방법을 해결합니다.
— asdmin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.