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

15

J'ai un problème où Apache ne démarre pas après la mise à jour vers High Sierra 10.13.1. Il n'y a rien qui s'affiche dans les journaux d'erreurs, mais quand j'essaye, apachectl startrien ne se passe. Si je cours, apachectl configtestje reçois "Syntaxe OK

J'ai utilisé des commandes comme sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plisten vain. Apache ne démarre pas. Je peux courir sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.httpd.plistet ça ne marche pas non plus.

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

J'ai essayé beaucoup de choses différentes, et ce que je trouve, c'est que si je regarde dans le fichier system.log, je trouve 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 d'arrêt, j'obtiens "httpd (pas de fichier pid) non exécuté.
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 avec High Sierra qui empêche Apache de fonctionner quand il fonctionnait bien dans Sierra?

Alcyeonnero
la source
1
Vous mélangez Apache httpd de brew et Apache httpd d'Apple (dont les démons de lancement démarrent différents binaires)! D'où obtenez-vous le statut httpd (c.-à-d. Indicateur jaune vs vert)? Quel guide de configuration initiale avez-vous utilisé?
klanomath
Je ne les mélange pas, je passais par les étapes de l'utilisation de la bière et de l'apache d'Apple, lorsque j'effectue une liste de brew services list' I receive a yellow indicator, I checked with all of the available users and ran services de brassage »et ils affichent tous le même indicateur. Quant à un guide de configuration, Ansible a été utilisé pour configurer apache. Cela a été fait sur 5 autres MacBook, ils exécutent toujours Sierra. Ce MacBook a eu un problème et un Apple a exécuté un diagnostic et réinitialisé le système d'exploitation, tout en mettant à jour le système d'exploitation vers High Sierra
Alcyeonnero
Avec le mixage, je veux dire: vous avez au moins deux binaires apachectl et httpd installés (et deux fichiers de configuration). Habituellement, l'apachectl de brew est préféré (en raison du contenu par défaut de la variable PATH, le vôtre peut être différent cependant). Apachectl de AFAIR brew ne démarrera pas httpd d'Apple avec l'option de démarrage par défaut (ie apachectl start). Pareil avec ... configtest!
klanomath
Avec "Ansible a été utilisé pour configurer apache", vous voulez dire ce guide: Mac Development Ansible Playbook ? Il est préférable d'ajouter un lien vers un / le guide d'utilisation ou de configuration. Les différents guides de configuration pour les différentes versions de macOS contiennent tous des configurations légèrement différentes / créent des envs différents.
klanomath
Je viens de passer à High Sierra ce week-end et j'ai exactement le même problème. J'utilise la httpdformule Homebrew , et maintenant apache ne répond pas. Quand je fais brew services list, je reçois aussi startedpour httpd en jaune, et quand je lance sudo apachectl stop, il me dit quehttpd (pid 87?) not responding.
wonder95

Réponses:

16

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

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

Apache d'Apple:

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

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 démarrer en les chargeant avec (sudo) launchctl load ....

Si vous n'avez pas modifié les fichiers de configuration httpd ou les scripts apachectl, la branche Apple utilisera le fichier httpd.conf d'Apple dans / var et 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 (sudo) brew services listcommande appropriée pour vérifier l'état:

Si vous le démarrez en tant que root, puis répertoriez-le avec les privilèges root:

sudo brew services start httpd > sudo brew services list

ou avec des privilèges utilisateur:

brew services start httpd> brew services list.


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

  • sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
  • supprimer tout homebrew.mxcl.httpd.plist installé manuellement
  • arrêter tout service httpd homebrew 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 souhaitez utiliser httpd de homebrew sur des ports privilégiés - entrez:

sudo brew services start httpd

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

klanomath
la source
Lorsque vous tentez le correctif que vous avez fourni, je reçois la même sortie que moi. apachectl stopfournit la sortie de httpd (no pid file) not runninget lorsque sudo brew services httpd start sudo brew services list j'exécute indique apache2 (httpd) starteddans une couleur jaune Lorsque j'essaie d'accéder à quoi que ce soit de la page Web, je ne peux pas. Je me demande si la mise à jour vers 10.13 a modifié quelque chose dans apache l'empêchant de démarrer.
Alcyeonnero
14

Concernant l'homebrew httpd, un problème que j'ai récemment rencontré était un ancien fichier httpd.pid restant qui empêchait httpd de démarrer. Le symptôme a été apachectl startdit que httpd est déjà en cours d'exécution, mais ce n'était pas le cas.

La cause était un ancien fichier ici:

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

La solution était de supprimer ce fichier pid, puis httpd a commencé.

Eduard Rozenberg
la source
génial! c'est mon problème lorsque mon MBP décide qu'il ne va pas se réveiller du sommeil et que je dois le redémarrer.
frumbert
2
Cette solution a également fonctionné dans MacOS Mojave. Brew pensait qu'Apache était en cours d'exécution mais il n'y avait pas httpdde moniteur d'activité. Cela l'a corrigé.
Vahid Amiri
Cela m'a sauvé beaucoup de problèmes!
SEJU
Cela a également fonctionné pour moi. Je n'ai pas pu charger de site Web et j'ai continué à recevoir ERR_CONNECTION_REFUSED. Lorsque j'ai tenté de répertorier les services qui fonctionnaient avec, brew services listj'obtenais le statut jaune «démarré», ce qui signifiait qu'il y avait un problème avec le statut actif du serveur. La suppression du pid a corrigé cela et maintenant la liste des services affiche le statut actif comme vert 'commencé' à la place maintenant. Merci pour ça!
Mike Kormendy
Si votre machine a redémarré à la suite d'une panique du noyau / d'une coupure de courant / etc., c'est probablement votre problème. Merci!
Dom Stubbs
2

J'ai fait face au même problème après ma mise à niveau vers High Sierra plus tôt dans la journée. J'ai trouvé que les fichiers apache suivants ont été remplacés par de nouvelles versions. Heureusement pour tous ces fichiers, il existait un fichier FILE ~ précédent dans le même dossier. Je viens de recopier la ~ version précédente dans la version d'origine, de redémarrer Apache et tout allait bien.

Dans le dossier /etc/apache2:

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

Exemple:

cp /etc/apache2/httpd.conf~previous /etc/apache2/httpd.conf
Unmesh
la source
Dans le dossier, /etc/apache2/extra/il y a environ 10 fichiers avec ~ précédent ajouté à eux, si tous ceux-ci doivent être modifiés, ou juste les deux que vous mentionnez dans le /etc/apache2/extra/dossier
Alcyeonnero
Je commencerais par les fichiers httpd.conf et httpd-vhosts.conf. Si vous avez une configuration SSL, vous devrez également mettre à jour httpd-ssl.conf. Le reste dépend si vous les avez modifiés plus tôt. J'utiliserais un diff pour voir si les fichiers ont changé, par exemple diff httpd.conf httpd.conf ~ précédent sur tous les autres fichiers
Unmesh
J'ai commencé avec ces fichiers, cela n'a rien changé.
Alcyeonnero
1

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 s'est arrêté anormalement.

J'ai ensuite démarré 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 autorisations, 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 commencé 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.

Hans Pikkemaat
la source
1

Je l'ai rencontré récemment. La cause est que homebrew installe apache2 / httpd dans des dossiers accessibles par l'utilisateur et s'exécute en tant qu'utilisateur (en exécutant la commande: brew services start httpd).

Ne pas fonctionner en tant qu'utilisateur normal signifie que httpd ne peut pas écouter sur les ports privilégiés (1024 et inférieurs).

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

La particularité est 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 abandonne ensuite les privilèges en cours d'exécution en tant qu'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 réclame certains dossiers pour root, ce qui, je suppose, est correct mais pas nécessaire car sudo apachectl start ne nécessite pas d'autorisations de fichiers et / ou de changements de propriétaire.

CésarS
la source
0

Je dirais au contraire ce que HomeBrew dit toujours exécuter httpd par sudo. Là, si vous faites ps -aef | grep httpd, vous le verrez répertorié comme en cours d'exécution. Faire sans sudo ne produit aucune sortie ps qui peut donner une mauvaise impression que httpd n'est pas en cours d'exécution.

De plus, je ne sais pas s'il existe des configurations différentes ou les mêmes dans les deux cas. J'ai installé PHP et créé le fichier test.php avec phpinfo dans le répertoire DocumentRoot. Si vous démarrez apache avec sudo, vous pouvez voir phpinfo avec localhost / test.php lors de l'utilisation des services de brassage, démarrer httpd vous donnera une erreur si DocumentRoot se trouve dans la zone où l'accès root est requis.

Sébastien
la source