La variabile di configurazione di Apache2 non è definita


65

Ho installato apache2 su Ubuntu 13.10. Se provo a riavviarlo utilizzando

sudo /etc/init.d/apache2 restart

Ricevo questo messaggio:

AH00558: apache2: Impossibile determinare in modo affidabile il nome di dominio completo del server, utilizzando 127.0.1.1. Impostare la direttiva "ServerName" a livello globale per sopprimere questo messaggio

Quindi ho letto che dovrei modificare il mio httpd.conffile. Ma, dal momento che non riesco a trovarlo nella /etc/apache2/cartella, ho provato a individuarlo usando questo comando:

/usr/sbin/apache2 -V

Ma l'output che ottengo è questo:

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

La riga 74 /etc/apache2/apache2.confè questa:

Mutex file:${APACHE_LOCK_DIR} default

Ho dato un'occhiata al mio /etc/apache2/envvarfile, ma non so cosa farne.

Cosa dovrei fare?


Cosa c'è nel tuo file envvars?
etagenklo,

Risposte:


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

Questo messaggio viene visualizzato perché hai eseguito direttamente il binario apache2. In Ubuntu / Debian la configurazione di apache si basa sul file envvar che è solo attivato.

Se avvii apache con lo script init o apachectl.

Il tuo problema originale è che non hai un nome host appropriato (fqdn) per la tua macchina.

Se non è possibile cambiare, modificare la ServerNamevariabile /etc/apache2/apache2.confper localhosto il vostro preferito nome di dominio completo.


1
Hai ragione riguardo allo script di init. Poi ho aggiunto ServerName localhosta apache2.conf(perché httpd.confnon è sempre utilizzato su Ubuntu) e ora tutto funziona come dovrebbe. Potresti per favore aggiungere dettagli alle tue risposte, in modo che io possa contrassegnarlo come accettato?
Kurt Bourbaki,

1
a partire da apache2ctlnon ha funzionato per me, ho dovuto usare il servizio :sudo service apache2 restart
Édouard Lopez

Ma perché hanno infranto il apache2comando in primo luogo?
reinierpost,

2
Questa soluzione risolve solo AH00558: apache2: Could not reliably determine the server's fully qualified domain namema non risolve Config variable ${APACHE_LOCK_DIR} is not defined.
Vladimir Vukanac,

anche per me vedo lo stesso problema.
indianwebdevil,

84

Fonte i tuoi envvars eseguendolo in questo modo:

source /etc/apache2/envvars

e poi

/usr/sbin/apache2 -V

Dovresti ricevere:

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/envvarsnon esiste
Mark Richman,

6
Il file esiste sul mio sistema Ubuntu, ma la shell non lo riconosce come uno script di shell, quindi ho bisogno di questo: source / etc / apache2 / envvars; apache2 -V
Ben Crowell,

6
Potrebbe semplicemente utilizzare apachectl -Vinvece di caricare manualmente le variabili di ambiente.
Sam Sehnert,

Se il problema persiste, provare source /etc/apache2/envvars && sudo -E apache2 -Vo accedere come roote fare per risposta sopra. Il sourcing di apache2 env a un utente normale che deve utilizzare sudo non funzionerà senza "-E". I permanenti utenti permanenti non possono leggere la cartella privata del certificato tra gli altri problemi. Riceverai un errore. È necessario sudo -E o eseguire completamente con l'account root.
bshea,

Questo è molto utile per eseguire Apache come cmd di primo piano docker. Ad esempioCMD . /etc/apache2/envvars; /usr/sbin/apache2 -DFOREGROUND
Alastair McCormack,

7

Controlla il tuo /etc/apache2/envvarsper APACHE_LOCK_DIR. Nel mio Ubuntu 12.04, questo è /var/lock/apache2$SUFFIX, essendo SUFFIX normalmente vuoto.

Controlla se la directory esiste ed è scrivibile.

Può essere che il file envvars non sia stato inserito correttamente? Se dai un'occhiata /etc/init.d/apache2puoi vedere che proviene.

Mia (impostazione predefinita) /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'

Se non funziona nulla, proverei a reinstallare i pacchetti.


2

Come altri hanno detto, devi caricare (sorgente) il tuo ambiente prima di eseguirlo direttamente Un'altra opzione è quella di utilizzare: apache2ctlad es

sudo apache2ctl -S

per scaricare i miei ospiti


2

TL; DR; Dovresti iniziare apache2 usando quello che hai già:

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

dettagliata:

AH00558: apache2: Impossibile determinare in modo affidabile il nome di dominio completo del server, utilizzando 127.0.1.1. Impostare la direttiva "ServerName" a livello globale per sopprimere questo messaggio

Questo messaggio indica che è necessario definire il nome del server / nome dominio. Non è essenziale farlo per un host locale / test di produzione, non è necessario preoccuparsene.

Quando si tenta di eseguirlo nell'altro modo, utilizzando solo apache2, si otterranno quei messaggi di errore a causa di ciò che è stato detto in precedenza: le variabili di ambiente vengono definite quando si inizia a utilizzare lo script predefinito in init.d.


-1

Forse questo risolverà il tuo problema

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

1
leggi prima, esattamente questa riga è già stata fornita, ed è stato anche spiegato, perché non è una risposta corretta.
asdmin,

-2

È necessario aggiornare DocumentRoot da /var/www/htmla/var/www

Modifica il file /etc/apache2/sites-available/000-default.conf come segue

DocumentRoot /var/www

-2

Questo funziona per me

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

Nella domanda, c'era un problema (un messaggio di errore su ServerName) e un metodo di debug non riuscito (che è causato dal mancato approvvigionamento delle variabili di ambiente). La tua risposta si rivolge al metodo di debug e non alla domanda.
asdmin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.