La variable de configuration Apache2 n'est pas définie

65

J'ai installé apache2 sur Ubuntu 13.10. Si j'essaie de le redémarrer en utilisant

sudo /etc/init.d/apache2 restart

Je reçois ce message:

AH00558: apache2: impossible de déterminer de manière fiable le nom de domaine complet du serveur à l'aide de 127.0.1.1. Définissez la directive 'ServerName' globalement pour supprimer ce message

Alors j'ai lu que je devrais éditer mon httpd.conffichier. Mais, comme je ne le trouve pas dans le /etc/apache2/dossier, j'ai essayé de le localiser à l'aide de cette commande:

/usr/sbin/apache2 -V

Mais le résultat obtenu est le suivant:

[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 ligne 74 de /etc/apache2/apache2.confest la suivante:

Mutex file:${APACHE_LOCK_DIR} default

J'ai jeté un coup d'œil à mon /etc/apache2/envvardossier, mais je ne sais pas quoi en faire.

Que devrais-je faire?

Kurt Bourbaki
la source
Qu'y a-t-il dans votre fichier envvars?
etagenklo

Réponses:

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

Ce message s'affiche car vous avez directement exécuté le binaire apache2. Dans Ubuntu / Debian, la configuration d’apache repose sur le fichier envvar qui n’est activé que.

Si vous démarrez Apache avec le script init ou apachectl.

Votre problème initial est que vous n’avez pas un nom d’hôte correct (fqdn) pour votre ordinateur.

Si vous ne pouvez pas le changer, changer la ServerNamevariable /etc/apache2/apache2.confpour localhostou votre FQDN preferred.

ah83
la source
1
Vous avez raison à propos du script init. Puis j’ai ajouté ServerName localhostà apache2.conf(car httpd.confn’est pas toujours utilisé sur Ubuntu) et maintenant tout fonctionne comme il se doit. Pourriez-vous s'il vous plaît ajouter des détails à vos réponses, afin que je puisse le marquer comme accepté?
Kurt Bourbaki
1
commençant par apache2ctlne fonctionnait pas pour moi, je devais utiliser le service :sudo service apache2 restart
Édouard Lopez
Mais pourquoi ont-ils brisé le apache2commandement en premier lieu?
Reinierpost
2
Cette solution ne fait que résoudre AH00558: apache2: Could not reliably determine the server's fully qualified domain namemais ne résout pas Config variable ${APACHE_LOCK_DIR} is not defined.
Vladimir Vukanac
pour moi aussi je vois le même problème.
indianwebdevil
84

Source vos envvars en le lançant comme ceci:

source /etc/apache2/envvars

puis

/usr/sbin/apache2 -V

Tu devrais obtenir:

[email protected]:/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
la source
/etc/apache2/envvarsn'existe pas
Mark Richman
6
Le fichier existe sur mon système Ubuntu, mais le shell ne le reconnaît pas comme un script shell. J'ai donc besoin de ceci: source / etc / apache2 / envvars; apache2 -V
Ben Crowell
6
Pourrait simplement utiliser apachectl -Vau lieu de charger dans les variables d'environnement manuellement.
Sam Sehnert
Si cela ne fonctionne toujours pas, essayez source /etc/apache2/envvars && sudo -E apache2 -Vou connectez-vous comme rootindiqué ci-dessus. Faire passer l’environnement apache2 à un utilisateur régulier qui doit ensuite utiliser sudo ne fonctionnera pas sans "-E". Les utilisateurs permanents ne peuvent pas lire le dossier privé du certificat parmi d'autres problèmes. Vous obtiendrez une erreur. Vous devez exécuter sudo -E ou exécuter le compte root complètement.
bshea
Ceci est très utile pour exécuter Apache en tant que cmd dgrounder foreground. Par exempleCMD . /etc/apache2/envvars; /usr/sbin/apache2 -DFOREGROUND
Alastair McCormack le
7

Vérifiez votre /etc/apache2/envvarsAPACHE_LOCK_DIR. Dans mon Ubuntu 12.04, /var/lock/apache2$SUFFIXSUFFIX est normalement vide.

Vérifiez si le répertoire existe et est accessible en écriture.

Le fichier envvars n’est-il pas correctement acheté? Si vous regardez, /etc/init.d/apache2vous pouvez voir que cela provient.

Mon (par défaut) /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'

Si rien ne fonctionne, je tenterais de réinstaller le (s) paquet (s).

erny
la source
2

Comme autre dit, vous devez charger (source) votre environnement avant de l' exécuter directement Une autre option consiste à utiliser: apache2ctlpar exemple ,

sudo apache2ctl -S

vider mes hôtes

amd
la source
2

TL; DR; Vous devriez commencer apache2 en utilisant ce que vous avez déjà:

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

Détaillé:

AH00558: apache2: impossible de déterminer de manière fiable le nom de domaine complet du serveur à l'aide de 127.0.1.1. Définissez la directive 'ServerName' globalement pour supprimer ce message

Ce message signifie que vous devez définir votre nom de serveur / nom de domaine. Il n'est pas essentiel de le faire pour un hôte local / des tests de production, vous n'avez pas à vous en préoccuper.

Lorsque vous essayez de l'exécuter dans l'autre sens, en utilisant uniquement apache2, vous obtiendrez ces messages d'erreur en raison de ce qui a été dit précédemment: les variables d'environnement sont définies lorsque vous commencez à utiliser le script par défaut dans init.d.

George
la source
-1

Peut-être que cela résoudra votre problème

sudo bash -c '. /etc/apache2/envvars ; apache2'
Eugen Konkov
la source
1
lire en premier, c’est exactement cette ligne qui a déjà été fournie et qui explique également pourquoi ce n’est pas une réponse correcte.
asdmin
-2

Vous devez mettre à jour DocumentRoot de /var/www/htmlà/var/www

Editez le fichier /etc/apache2/sites-available/000-default.conf comme suit

DocumentRoot /var/www
utilisateur219404
la source
-2

Ça marche pour moi

sudo -u root bash -c "source /etc/apache2/envvars; apache2 -V"
Lihnjo
la source
Dans la question, il y avait un problème (un message d'erreur à propos de ServerName) et une méthode de débogage défaillante (qui est provoquée par l'absence de recherche des variables d'environnement). Votre réponse concerne la méthode de débogage et non la question.
asdmin