Zmienna konfiguracyjna Apache2 nie jest zdefiniowana

65

Zainstalowałem apache2 na Ubuntu 13.10. Jeśli spróbuję uruchomić go ponownie za pomocą

sudo /etc/init.d/apache2 restart

Dostaję tę wiadomość:

AH00558: apache2: Nie można wiarygodnie określić w pełni kwalifikowanej nazwy domeny serwera, używając 127.0.1.1. Ustaw globalnie dyrektywę „ServerName”, aby ukryć ten komunikat

Czytam więc, że powinienem edytować mój httpd.confplik. Ale ponieważ nie mogę go znaleźć w /etc/apache2/folderze, próbowałem go zlokalizować za pomocą tego polecenia:

/usr/sbin/apache2 -V

Ale wynik jest następujący:

[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}

Wiersz 74 /etc/apache2/apache2.confto:

Mutex file:${APACHE_LOCK_DIR} default

Rzuciłem okiem na mój /etc/apache2/envvarplik, ale nie wiem, co z nim zrobić.

Co powinienem zrobić?

Kurt Bourbaki
źródło
Co znajduje się w twoim pliku envvars?
etagenklo

Odpowiedzi:

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

Ten komunikat jest wyświetlany, ponieważ bezpośrednio wykonałeś plik binarny apache2. W Ubuntu / Debian konfiguracja apache opiera się na pliku envvar, który jest tylko aktywowany.

Jeśli uruchomisz apache ze skryptu init lub apachectl.

Pierwotny problem polega na tym, że nie masz prawidłowej nazwy hosta (fqdn) dla swojego komputera.

Jeśli nie możesz tego zmienić, zmień ServerNamezmienną /etc/apache2/apache2.confna localhostlub preferowaną nazwę FQDN.

ah83
źródło
1
Masz rację co do skryptu inicjującego. Potem dodaje ServerName localhostsię apache2.conf(bo httpd.confnie zawsze jest stosowana na Ubuntu) i teraz wszystko działa tak jak powinno. Czy możesz dodać szczegóły do ​​swoich odpowiedzi, abym mógł oflagować je jako zaakceptowane?
Kurt Bourbaki,
1
na początku apache2ctlnie działało dla mnie, musiałem skorzystać z usługi :sudo service apache2 restart
Édouard Lopez
Ale dlaczego apache2przede wszystkim złamali polecenie?
reinierpost
2
To rozwiązanie tylko rozwiązuje, AH00558: apache2: Could not reliably determine the server's fully qualified domain nameale nie rozwiązuje Config variable ${APACHE_LOCK_DIR} is not defined.
Vladimir Vukanac,
dla mnie też widzę ten sam problem.
indianwebdevil
84

Źródło envvars, uruchamiając go w następujący sposób:

source /etc/apache2/envvars

i wtedy

/usr/sbin/apache2 -V

Powinieneś wziąć:

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"
nadavkav
źródło
/etc/apache2/envvarsnie istnieje
Mark Richman
6
Plik istnieje w moim systemie Ubuntu, ale powłoka nie rozpoznaje go jako skryptu powłoki, więc potrzebuję tego: source / etc / apache2 / envvars; apache2 -V
Ben Crowell
6
Można po prostu użyć apachectl -Vzamiast ręcznie ładować zmienne środowiskowe.
Sam Sehnert
Jeśli nadal nie działa, spróbuj source /etc/apache2/envvars && sudo -E apache2 -Vzalogować się jako rooti wykonaj powyższą odpowiedź. Pozyskanie apache2 env do zwykłego użytkownika, który następnie musi użyć sudo, nie będzie działać bez „-E”. Zwykłe uprawnienia użytkownika nie mogą odczytać prywatnego folderu certyfikatu wśród innych problemów. Otrzymasz błąd. Musisz sudo -E lub całkowicie uruchomić konto root.
bshea,
Jest to bardzo przydatne do uruchamiania Apache jako cmd pierwszego planu dokowania. Np.CMD . /etc/apache2/envvars; /usr/sbin/apache2 -DFOREGROUND
Alastair McCormack
7

Sprawdź swój /etc/apache2/envvarsAPACHE_LOCK_DIR. W moim Ubuntu 12.04 oznacza to /var/lock/apache2$SUFFIX, że SUFFIX zwykle jest pusty.

Sprawdź, czy katalog istnieje i czy można go zapisać.

Czy to możliwe, że plik envvars nie jest poprawnie pozyskiwany? Jeśli spojrzysz na /etc/init.d/apache2to, zobaczysz, że pochodzą.

Mój (domyślnie) /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'

Jeśli nic nie działa, spróbuję ponownie zainstalować pakiety.

Erny
źródło
2

Jak inni powiedzieli, musisz załadować (źródło) swoje środowisko przed bezpośrednim uruchomieniem. Inną opcją jest użycie: apache2ctlnp

sudo apache2ctl -S

zrzucić moich gospodarzy

amd
źródło
2

TL; DR; Powinieneś uruchomić apache2 używając tego, co już masz:

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

Szczegółowe:

AH00558: apache2: Nie można wiarygodnie określić w pełni kwalifikowanej nazwy domeny serwera, używając 127.0.1.1. Ustaw globalnie dyrektywę „ServerName”, aby ukryć ten komunikat

Ten komunikat oznacza, że ​​musisz zdefiniować nazwę serwera / nazwę domeny. Nie jest to konieczne dla lokalnego hosta / testowania produkcji, nie musisz się tym martwić.

Gdy spróbujesz uruchomić go w inny sposób, używając tylko apache2, otrzymasz te komunikaty o błędach z powodu tego, co zostało powiedziane wcześniej: zmienne środowiskowe są definiowane, gdy zaczynasz używać domyślnego skryptu w init.d.

Jerzy
źródło
-1

Może to rozwiąże problem

sudo bash -c '. /etc/apache2/envvars ; apache2'
Eugen Konkov
źródło
1
przeczytaj najpierw, dokładnie ta linia została już podana, a także wyjaśniono, dlaczego nie jest to poprawna odpowiedź.
asdmin
-2

Musisz zaktualizować DocumentRoot z /var/www/htmldo/var/www

Zmodyfikuj plik /etc/apache2/sites-available/000-default.conf w następujący sposób

DocumentRoot /var/www
użytkownik219404
źródło
-2

To działa dla mnie

sudo -u root bash -c "source /etc/apache2/envvars; apache2 -V"
Lihnjo
źródło
W pytaniu wystąpił problem (komunikat o błędzie dotyczący nazwy serwera) i nieudana metoda debugowania (spowodowana brakiem pozyskiwania zmiennych środowiskowych). Twoja odpowiedź dotyczy metody debugowania, a nie pytania.
asdmin