Pourquoi mon Apache ne fonctionne-t-il pas après une mise à niveau vers Ubuntu 14.04?

35
[[email protected]:~$ apache2
[Mon Apr 21 17:36:38.019213 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
[Mon Apr 21 17:36:38.019345 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_PID_FILE} is not defined
[Mon Apr 21 17:36:38.019370 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_RUN_USER} is not defined
[Mon Apr 21 17:36:38.019385 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_RUN_GROUP} is not defined
[Mon Apr 21 17:36:38.019414 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Mon Apr 21 17:36:38.028756 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Mon Apr 21 17:36:38.029032 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Mon Apr 21 17:36:38.029056 2014] [core:warn] [pid 4134] 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}

Cela correspond au contenu du fichier /etc/apache2/apache2.conf .

    
posée Amandeep Singh 21.04.2014 - 14:14
la source

8 réponses

30

J'ai eu ce problème: la cause est dans le fichier

/etc/apache2/sites-available/000-default.conf 

où la racine a changé:

avant la mise à niveau = /var/www
après la mise à niveau = /var/www/html

Alors modifiez pour modifier ce fichier

sudo gedit /etc/apache2/sites-available/000-default.conf

Et redémarrer apache

sudo service apache2 restart
    
réponse donnée TrackGmao 21.04.2014 - 14:38
la source
47

J'ai eu ce problème même si Apache travaillait pour moi. Je voulais simplement faire un rapide

$ /usr/sbin/apache2 -V

pour trouver la valeur de SERVER_CONFIG_FILE . Parce que ce n'est pas la manière de démarrer apache2, cela échoue avec les erreurs que les messages OP affichent. Une solution simple et rapide consiste simplement à définir les paramètres manquants en premier:

$ source /etc/apache2/envvars
$ /usr/sbin/apache2 -V

Ceci définit la variable APACHE_LOCK_DIR et tout va bien ( -D SERVER_CONFIG_FILE="apache2.conf" ).

    
réponse donnée lane 06.10.2014 - 16:24
la source
14

Symptômes et solution

Dans de nombreux sites Web ou forums de questions et réponses, les gens confondent les symptômes et les causes réelles. Je viens de mettre à niveau un serveur Ubuntu de 13.10 à 14.04.1 et j'ai rencontré exactement les mêmes symptômes décrits par l'OP, notamment:
1- apache apparemment ne fonctionne pas. 2- La variable de configuration apache non définie. 3- l'erreur de syntaxe mentionnée par l'OP.

Le problème est que tous ces symptômes ne sont pas réellement liés au problème réel et ne servent que de distraction à ceux qui font de leur mieux pour aider.

Des problèmes de racine différents peuvent amener les administrateurs à accéder à des sites comme celui-ci avec à peu près la même description: "J'ai mis à jour le système d'exploitation et apache ne fonctionne plus ..."

Une cause spécifique

Ayant exactement les mêmes symptômes apparents que le PO, j'ai été attiré par cette question. Malheureusement, la seule réponse contenant un indice valide à la cause réelle de mon problème a été abaissée (-1), publiée par user1469291 avec un représentant de 1! J'ai donc recherché d'autres sites Web jusqu'à ce que je trouve une explication claire du problème (et donc de la solution).

La solution qui suit ne résoudra peut-être pas le problème réel du PO, mais je suis sûr que cela aidera les autres personnes susceptibles d’être attirées par cette question pour les mêmes raisons que moi.

/etc/apache2/apache2.conf contient:

# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf

# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf

ce qui signifie que seuls les fichiers de configuration du site dans / etc / apache2 / sites-enabled / se terminant par .conf seront chargés. Les liens symboliques plus anciens dans ce répertoire seront ignorés.

Auparavant, il s'agissait simplement de sites activés / *. C'est pourquoi tous mes fichiers de configuration d'hôte virtuel que j'ai simplement nommés ww1.example.com, ww2.example.com, etc., fonctionnaient mais soudainement et au départ, inexplicablement, ils ont cessé de fonctionner après la mise à niveau.

Donc, changez la directive ci-dessus et rechargez apache, ou, comme je l'ai fait, supprimez manuellement tous les anciens liens symboliques dans sites-enabled /, renommez tous les fichiers de sites-available / pour ajouter le suffixe. -activé chaque site individuellement.

De plus, la directive par défaut dans apache.conf est plus stricte:

<Directory />
  Options FollowSymLinks
  AllowOverride None
  Require all deny
</Directory>
<Directory /var/www/>
  Options Indexes FollowSymLinks
  AllowOverride None
  Require all granted
</Directory>

Donc, si vous hébergez vos sites virtuels dans / home / utilisateur / quelque part, assurez-vous de remplacer la directive de manière appropriée.

    
réponse donnée augustin 17.09.2014 - 12:42
la source
6

En regardant de près votre problème, vous ne faites qu'exécuter apache2 . Pour démarrer apache dans Ubuntu, exécutez la commande suivante:

sudo apache2ctl start

La configuration d’Apache est divisée en plusieurs fichiers, l’un de ces fichiers étant des variables d’environnement. Lorsque vous exécutez uniquement apache2 , ces variables ne sont pas définies.

Le script apache2ctl va charger les variables (et en faire d’autres si nécessaire) avant de démarrer apache avec apache2 -k start .

    
réponse donnée Dan 21.04.2014 - 14:39
la source
4

Modifiez la configuration: sudo leafpad /etc/apache2/apache2.conf :

# Include the virtual host configurations:

#before upgrade = 
IncludeOptional sites-enabled/*
#after upgrade = 
/IncludeOptional sites-enabled/*.conf

ou supprimer un fichier.

    
réponse donnée Mauro Leites 20.08.2014 - 20:56
la source
2

Augustin réponse a fonctionné pour moi lorsque tous mes hôtes virtuels ont disparu suite à une mise à niveau du serveur de 12.04 LTS à 14.04 LTS. Je le ferais si j'avais la réputation de le faire.

La commande suivante ajoutera le suffixe .conf à tous les liens symboliques dans /etc/apache2/sites-enabled qui ne l’ont pas déjà:

sudo find /etc/apache2/sites-enabled -type l ! -name '*.conf' -exec rename 's/$/.conf/' {} \;

En outre, le passage de la syntaxe Allow from / Deny from à Require dans le fichier mod_authz_host module ( ici est le lien de la documentation 2.2) .

La commande suivante éditera l’usage commun de Order allow, deny suivi de Allow from all pour être Require all granted à la place:

perl -0777 -pi.bak -e 's/Order\s+allow\s*,\s*deny\s*\n\s*Allow\s+from\s+all/Require all granted/sg' /etc/apache2/sites-available/* 
    
réponse donnée TobyLL 04.02.2015 - 14:46
la source
1

En fait, le docroot change entre précis et fiable de / var / www à / var / www / html. Il est mauvais que le script do-release-upgrade ne régresse pas le docroot.

A) L'un ou l'autre est valide, mais le HTML est plus conventionnel. CentOS est influent à cet égard.    La page "ça marche" est aussi plus mature maintenant.

B) Vous n'avez pas à utiliser / var / www / html, mais si vous le faites ...

  • vous devez migrer votre contenu ou son alias (non recommandé).
  • vous devez mettre à jour l’ancien emplacement référencé.
  • en particulier les scripts de sauvegarde / restauration / personnalisation.

C) Et il est peut-être plus facile de construire à partir de zéro et de migrer.

D) Ce symptôme se produira si vous "sudo apache2 -k gracieux" hors de la boîte sous Trusty, mise à niveau ou non en raison de l'envars n'est pas dans la portée? Utilisez "sudo apache2ctl start / stop / restart" à la place.

    
réponse donnée mckenzm 15.12.2014 - 10:08
la source
0

Dans mon cas:

  • Le sous-dossier html de /var/www/ existait déjà mais je recevais toujours l'erreur: AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf
  • J'avais déjà décidé d'héberger mes sites Web dans ma racine d'utilisateur, par exemple /home/{user}/sites/ au lieu de la valeur par défaut /var/www/html
  • J'utilise Apache 2.4.7 (vous pouvez vérifier votre version avec apache2 -v )

Comment j'ai résolu le problème en cinq étapes simples:

  1. Dans /etc/apache2/apache2.conf , j'ai ajouté ce qui suit après la ligne 169:

    <Directory /home/{user}/sites/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    
  2. Je me suis assuré que ma configuration d’hôte virtuel nommée website.conf at /etc/apache2/sites-available avait été copiée à partir de la valeur par défaut 000-default.conf et ressemblait à:

    <VirtualHost *:80>
        ServerAdmin [email protected]
        ServerName website.dev
        ServerAlias www.website.dev
        DocumentRoot /home/{user}/sites/website
    </VirtualHost>
    
  3. J'ai rechargé mon site ( sudo a2dissite website && sudo a2ensite website ) et mon serveur et l'erreur initiale a disparu. WOOHOO! Mais un nouveau a émergé: "AH00035: accès à / refusé (chemin du système de fichiers '/ home / {utilisateur} / sites') car les droits de recherche sont manquants sur un composant du chemin". Ce que j'ai résolu à l'étape 4.

  4. Le nouveau problème était dû aux autorisations, donc je viens de définir chacun des répertoires menant au dossier website sur chmod 755 . Chacun seul! Le dossier home , le dossier {user}, le dossier des sites et même le dossier de mon site Web

  5. Après avoir actualisé mon navigateur à website.dev tout chargé correctement!

P.S. J'avais déjà configuré website.dev dans mon fichier /etc/hosts .

Astuce Bonus : pour vérifier les autorisations d’un dossier particulier, vous pouvez utiliser la commande stat -c %a /path/to/file/or/folder . Pour vérifier les autorisations de chaque partie d'un répertoire, utilisez namei -m /path/to/final/folder .

    
réponse donnée jhbsk 17.04.2015 - 18:35
la source

Lire d'autres questions sur les étiquettes