Mit Sierra gelieferter Apache wird nicht angehalten oder neu gestartet oder eine neue Konfiguration akzeptiert

2443
TheEnvironmentalist

Ich habe vor kurzem PHP-7.1 über Homebrew unter MacOS Sierra installiert und alles funktioniert nicht mehr. Ungewöhnliche Fehler, Berechtigungsprobleme usw. Jetzt versuche ich, Apache zu stoppen (der im Lieferumfang von Sierra enthalten ist) und Apache wird einfach nicht sterben.

Töte es:

$ sudo apachectl stop AH00557: httpd: apr_sockaddr_info_get() failed for My-MacBook-Pro.local AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message httpd (no pid file) not running 

Überprüfen Sie, ob es läuft:

$ sudo lsof -i:80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 3722 _www 4u IPv6 0x123456789abcdef 0t0 TCP *:http (LISTEN) httpd 3724 _www 4u IPv6 0x123456789abcdef 0t0 TCP *:http (LISTEN) httpd 3725 _www 4u IPv6 0x123456789abcdef 0t0 TCP *:http (LISTEN) httpd 56048 root 4u IPv6 0x123456789abcdef 0t0 TCP *:http (LISTEN) httpd 56055 _www 4u IPv6 0x123456789abcdef 0t0 TCP *:http (LISTEN) 

Triff Apache mit einer Statusüberprüfung:

$ apachectl status Go to http://localhost:80/server-status in the web browser of your choice. Note that mod_status must be enabled for this to work. 

Versuchen wir diesen Link:

$ curl http://localhost:80/server-status <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don't have permission to access /server-status on this server.<br /> </p> </body></html> 

Okay, dann versuchen wir, httpd.conf zu reparieren und Apache neu zu starten:

$ sudo nano /etc/apache2/httpd.conf $ sudo apachectl restart AH00557: httpd: apr_sockaddr_info_get() failed for My-MacBook-Pro.local AH00558: httpd: Could not reliably determine the server's fully  qualified domain name, using 127.0.0.1. Set the 'ServerName' directive  globally to suppress this message 

Oh, und nur zur Bestätigung in /etc/apache2/httpd.conf habe ich diese beiden Zeilen unkommentiert:

ServerName localhost  LoadModule status_module libexec/apache2/mod_status.so 

Was ist los mit Apache und wie höre ich alles auf, damit ich von vorne anfangen kann?

3
Ein Blick auf das Problem und die Befehle .. Und noch immer wollte ich Sie bitten, sicherzustellen, dass auch Ihr Apache aktualisiert wird. Ich habe das mehr als einmal gemacht. PHP aktualisieren, woohoo! Gebrochen. Update Apache in Ordnung. Gehen Sie auf die Apache-Site, klicken Sie auf alle aktualisierten Links und aktualisieren Sie alle Links. Manchmal funktioniert das neue PHP nicht, wenn die Updates nicht von etwas anderem übernommen wurden. Einschließlich des C ++ - Links, den es auch benötigt. ejbytes vor 7 Jahren 0

2 Antworten auf die Frage

2
moonpoint

Wenn Sie Apache erfolgreich mit dem Befehl beenden sudo apachectl stop, sehen Sie immer noch die Ausgabe, die Sie bei der Ausgabe des apachectl statusBefehls gesehen haben. Ich kann beispielsweise sehen, dass Apache an Port 80 auf meinem OS X El Capitan-System mit dem Befehl netstat überwacht, den Status stoppt, den Status überprüft, der dieselbe Nachricht anzeigt, die Sie gepostet haben, aber überprüfen, dass Apache an Port 80 nicht mehr zuhört .

$ netstat -an | grep '.80' | grep -i Listen tcp46 0 0 *.80 *.* LISTEN $ sudo apachectl stop Password: $ apachectl status Go to http://localhost:80/server-status in the web browser of your choice. Note that mod_status must be enabled for this to work. $ netstat -an | grep '.80' | grep -i Listen $ 

Die Ausgabe von zu sehen apachectl statusbedeutet nicht, dass Apache noch läuft. Sie können mit dem Befehl netstat -an | grep '.80' | grep -i Listenüberprüfen, ob Port 80 nicht mehr überwacht wird, oder prüfen, ob der Apache- Prozess httpd ausgeführt wird (siehe unten).

$ ps aux | grep httpd | grep -v grep _www 45379 0.0 0.0 2509492 1084 ?? S 6:27PM 0:00.00 /usr/sbin/httpd -D FOREGROUND root 45376 0.0 0.1 2511540 11292 ?? Ss 6:27PM 0:00.19 /usr/sbin/httpd -D FOREGROUND $ sudo apachectl stop Password: $ ps aux | grep httpd | grep -v grep $ 

Die Fehlermeldung "403 Forbidden" kann auf ein Problem mit den Dateiberechtigungen zurückzuführen sein . Wenn Sie eine HTML-Datei im DocumentRoot-Verzeichnis ablegen, die allen Lesezugriff gewährt hat, z. B. chmod 644 index.htmlund versuchen Sie, darauf zuzugreifen, was sehen Sie? Sie können auch einen Hinweis auf das aufgetretene Problem finden, indem Sie die Apache-Fehlerprotokolldatei untersuchen. Sie können den Speicherort der Datei mit dem apachectl -SBefehl anzeigen. Z.B:

$ apachectl -S AH00557: httpd: apr_sockaddr_info_get() failed for GSSLA15122293 AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message VirtualHost configuration: *:80 myserver.example.com (/private/etc/apache2/extra/httpd-vhosts.conf:24) ServerRoot: "/usr" Main DocumentRoot: "/Library/WebServer/Documents" Main ErrorLog: "/private/var/log/apache2/error_log" Mutex proxy: using_defaults Mutex default: dir="/private/var/run/" mechanism=default Mutex mpm-accept: using_defaults Mutex proxy-balancer-shm: using_defaults PidFile: "/private/var/run/httpd.pid" Define: DUMP_VHOSTS Define: DUMP_RUN_CFG User: name="_www" id=70 not_used Group: name="_www" id=70 not_used 

Die Ausgabe oben ist, was ich auf meinem System sehe. Obwohl Apache beschwert, dass es „kann nicht zuverlässig den Fully Qualified Domain Namen des Servers bestimmen“, so kann ich die Datei index.html greift ich in meinem DocumentRoot Verzeichnis über platziert http: // localhost, obwohl ich festgelegt ServerNameund DocumentRootin einem Virtual Abschnitt in /private/etc/apache2/extra/httpd-vhosts.conf . "Der vollständig qualifizierte Domänenname des Servers konnte nicht zuverlässig ermittelt werden" bedeutet nicht, dass Apache nicht auf Verbindungen wartet. Dies ist, wenn Sie beim Versuch, auf eine Seite auf dem Server zuzugreifen, die Fehlermeldung "403 Forbidden" erhalten, da dies eine Fehlermeldung ist, die vom Webserver zurückgegeben wird.

2
kenorb

Da Sie PHP über Homebrew installiert haben, glaube ich, dass Sie Apache mehrfach installiert haben. Stellen Sie also sicher, dass Sie die richtige Version ausführen.

Zunächst einmal überprüfen verschiedene Versionen apachectlvon ausgeführt wird : which -a apachectl.

Um zu überprüfen, welche Apache-Konfigurationsdatei mit welcher verknüpft ist apachectl, führen Sie Folgendes aus:

apachectl -t -D DUMP_INCLUDES 

Wenn Sie vorhaben, Apache mit Sierra auszuliefern, geben Sie den richtigen Pfad an, z.

/usr/sbin/apachectl -t -D DUMP_INCLUDES /usr/sbin/apachectl start