15 votes

Apache2 (Httpd) ne fonctionne pas après la mise à jour vers High Sierra

J'ai un problème où Apache ne démarre pas après la mise à jour vers High Sierra 10.13.1. Rien ne s'affiche dans les journaux d'erreurs, mais lorsque j'essaie de apachectl start rien ne se passe. Si je lance apachectl configtest Je reçois "Syntaxe OK

J'ai utilisé des commandes comme sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist en vain. Apache ne démarre pas. Je peux exécuter sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.httpd.plist et cela ne fonctionne pas non plus.

J'ai jeté un coup d'œil à la liste des services de Brew et httpd apparaît dans la liste avec d'autres processus (mysql) mais le statut de httpd affiche un "démarré" jaune au lieu d'un vert.

J'ai essayé de nombreuses choses différentes, et ce que je constate, c'est que si je regarde dans le fichier system.log, je trouve que com.apple.xpc.launchctl[1] (homebrew.mxcl.httpd24[11780]): Service exited with abnormal code:1

Si j'exécute apachectl start, la commande semble fonctionner, mais lorsque j'exécute la commande stop, j'obtiens "httpd (no pid file) not running.
Je reçois également la sortie de com.;apple.xpc.launchd[1] (org.apache.httpd) : Veuillez passer de OnDemand à KeepAlive.

Y a-t-il quelque chose dans High Sierra qui empêche Apache de fonctionner alors qu'il fonctionnait bien dans Sierra ?

17voto

klanomath Points 63400

À mon avis, vous avez endommagé vos différents démons de lancement/ mécanismes de démarrage de httpd en exécutant trop de commandes liées à httpd.

Avec homebrew et apache-httpd installé et le PATH par défaut, vous avez six façons de lancer httpd.

L'Apache d'Apple :

  • sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
  • sudo /usr/sbin/apachectl start

L'Apache de Homebrew :

  • sudo apachectl start
  • apachectl start
  • sudo brew services start httpd
  • brew services start httpd

Si vous avez copié le fichier homebrew.mxcl.httpd.plist manuellement dans ~/Library/LaunchAgents/ ou /Library/LaunchDaemons/ vous avez deux autres options pour le lancer en les chargeant avec (sudo) launchctl load ... .

Si vous n'avez pas modifié les fichiers de configuration de httpd ou les apachectl scripts lourdement, la branche Apple utilisera le fichier httpd.conf d'Apple dans /var et le DocumentRoot dans le dossier /Library.

La branche homebrew utilise des sous-dossiers dans /usr/local/.

Certaines méthodes de lancement ne fonctionneront pas si vous avez lié les ports httpd à des ports inférieurs à 1024 !

Si vous utilisez (sudo) brew services ... pour démarrer httpd, vous devez utiliser la commande appropriée (sudo) brew services list pour vérifier l'état :

Si vous le démarrez en tant que Root, vous le listerez avec les privilèges de Root :

sudo brew services start httpd > sudo brew services list

ou avec des privilèges d'utilisateur :

brew services start httpd > brew services list .


Pour résoudre votre problème, déchargez le httpd d'Apple :

  • sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

  • supprimer toute installation manuelle homebrew.mxcl.httpd.plist

  • arrêter tout service homebrew httpd avec (sudo) brew services stop httpd

  • arrêter tout httpd démarré par apachectl :

    apachectl stop
    sudo apachectl stop
    sudo /usr/sbin/apachectl stop
  • Ouvrez le moniteur d'activité et vérifiez qu'aucun processus httpd n'est en cours d'exécution.

  • Redémarrer

Maintenant - en supposant que vous voulez utiliser le httpd de homebrew sur les ports privilégiés - entrez :

sudo brew services start httpd

Vérifiez le démarrage réussi avec sudo brew services list .

17voto

Eduard Rozenberg Points 178

En ce qui concerne le homebrew httpd, un problème que j'ai rencontré récemment était un ancien fichier httpd.pid qui empêchait httpd de démarrer. Le symptôme était le suivant apachectl start dit que httpd est déjà en marche, mais il ne l'était pas.

Parce qu'il y avait un vieux dossier ici :

/usr/local/var/run/httpd/httpd.pid

La solution a été de supprimer ce fichier pid et ensuite httpd a démarré.

2voto

Unmesh Points 121

J'ai été confronté au même problème après avoir effectué la mise à niveau vers High Sierra plus tôt dans la journée. J'ai constaté que les fichiers apache suivants ont été remplacés par de toutes nouvelles versions. Heureusement, pour tous ces fichiers, il existait un fichier FILE~previous dans le même dossier. J'ai simplement copié la version ~previous sur les fichiers originaux, redémarré apache et tout est rentré dans l'ordre.

Dans le dossier /etc/apache2 :

./httpd.conf
./extra/httpd-vhosts.conf
./extra/httpd-ssl.conf

Ejemplo:

cp /etc/apache2/httpd.conf~previous /etc/apache2/httpd.conf

1voto

Hans Pikkemaat Points 11

J'ai eu le même problème

com.apple.xpc.launchctl[1] (homebrew.mxcl.httpd24[11780]): Service exited with abnormal code:1

Cela signifie que httpd est sorti anormalement.

J'ai ensuite lancé manuellement httpd pour voir quel était le problème.

> httpd
(13)Permission denied: AH00091: httpd: could not open error log file /usr/local/var/log/httpd/error_log.

En regardant les permissions, c'était assez clair

> ll /usr/local/var/log/httpd/
total 96
-rw-r--r--  1 root  admin    242 15 apr 12:38 access_log
-rw-r--r--  1 root  admin  42062 20 jun 11:01 error_log

Je pense que j'ai démarré httpd en tant que Root, ce qui a causé ce problème. J'ai supprimé les fichiers et après

brew services restart httpd

tout allait bien.

1voto

CaesarS Points 111

J'ai rencontré ce problème récemment. La cause est que homebrew installe apache2/httpd dans des dossiers accessibles à l'utilisateur et s'exécute en tant qu'utilisateur (en lançant la commande : brew services start httpd).

Le fait de ne pas s'exécuter en tant qu'utilisateur normal signifie que httpd ne peut pas écouter sur les ports privilégiés (1024 et moins).

Ainsi, même si httpd.conf est configuré pour écouter les ports 80 et 443, httpd ne peut pas recevoir de requêtes via ces ports.

La particularité est que lorsque vous démarrez httpd en exécutant la commande : sudo apachectl start. Cette commande démarre httpd en tant qu'utilisateur Root. L'utilisateur Root est autorisé à écouter sur les ports 80 et 443. httpd perd ensuite ses privilèges en fonctionnant sous l'utilisateur _www.

Donc la réponse courte est d'exécuter homebrew httpd sur les ports 80 et 443 est de le démarrer en utilisant : sudo apachectl start. Vous pouvez également le démarrer avec : sudo brew services start httpd. Brew vous dira qu'il revendique certains dossiers pour Root, ce qui, je suppose, est bien mais pas nécessaire puisque sudo apachectl start ne requiert pas de permissions de fichiers et/ou de changements de propriétaires.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X