Apache startet nicht, Adresse wird bereits verwendet (aber nicht wirklich)

58

Ich versuche eine VM mit Ubuntu 12.04 einzurichten. Ich habe zwei virtuelle Hosts mit Port 80 konfiguriert, aber Apache startet nicht.

Ich erhalte diesen Fehler:
(98) Address already in use: make_sock: could not bind to address 0.0.0.0:80

Die Ausgabe von netstat -tulpnzeigt, dass Port 80 nicht verwendet wird. Was könnte dies möglicherweise verursachen?

Gunner Barnes
quelle
Beginnen Sie es als root? Standardmäßig können nur Root - Ports öffnen unter 1024.
onse
Ja bin ich. Es lief zu einem Zeitpunkt, als ich nur einen virtuellen Host konfiguriert hatte. Daher habe ich seitdem den anderen virtuellen Host entfernt, um das Problem zu beheben, aber auch damit hatte ich kein Glück.
Gunner Barnes
Läuft auf Ihrem Host etwas auf Port 80 und befindet sich der Gast im Bridged-Modus? Ich weiß nicht, dass es das tun würde, aber es scheint wahrscheinlich
RobotHumans
Haben Sie versucht, die Vorschläge von Starten von Apache schlägt fehl (konnte nicht an Adresse 0.0.0.0:80 binden) ? Und bitte geben Sie auch die Ausgabe von grep -ri listen /etc/apacheund an sudo netstat -ntlp | grep 80.
Gertvdijk
2
grep -ri listen /etc/apache2Ausgaben: etc / apache2 / httpd.conf: Listen 80 /etc/apache2/httpd.conf: Listen 443 /etc/apache2/ports.conf: Listen 80 /etc/apache2/httpd.conf: Listen 443 / etc / apache2 / httpd.conf: Listen 443 sudo netstat -ntlp | grep 80gibt überhaupt nichts aus.
Gunner Barnes

Antworten:

38

Listen 80Stellen Sie sicher, dass Sie in .conf-Dateien nicht zweimal deklarieren.

Zum Beispiel könnten Sie es sowohl im ports.confals auch im Gasthaus haben sites-enabled/www.conf.

Um dies herauszufinden, verwenden Sie: grep -ri listen /etc/apache2

An Listen 80einem einzigen Ort aufbewahren.

Ravi
quelle
19

Antworten auf die Art und Weise, wie ich dieses Problem gelöst habe. Kann jemandem in Zukunft hilfreich sein.

Versuchen netstat -ltnp | grep :80

Dies würde so etwas wie zurückgeben

tcp6 0 0 ::: 80 ::: * LISTEN 1047 / apache2

Dann renne

sudo kill -9 1047

Wobei 1047 die PID des Programms ist, das auf Port 80 ausgeführt wird. Sie können die PID ersetzen, die Sie von erhalten haben netstat

Anonymes Schnabeltier
quelle
wow! ... und hier bin ich 48 stunden nach dem senden eines tickets an inmotionhosting und warten auf eine antwort. Vielen Dank
Amjo
2
Was bedeutet das? Ich bekomme keine PID oder keinen Namen. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
Aaron Franke
@AaronFranke Können Sie versuchen, diesen Befehl im Terminal auszuführen, nachdem Sie das Fenster maximiert haben?
Anonym Schnabeltier
2
@AaronFranke starte es mit sudo. Möglicherweise verfügen Sie nicht über die Berechtigung zum Anzeigen.
Advait S
13

Als ich dieses Problem hatte, stellte sich heraus, dass mein Apache beim Booten nicht gestartet werden konnte, da ich eine SSL-Site hatte, für die ein Kennwort für das Zertifikat eingegeben werden musste.

Eine gute Möglichkeit, um festzustellen, ob dies bei Ihnen der Fall ist, besteht darin, Folgendes auszuführen ps -ef | grep apache: Wenn dies Prozesse zurückgibt, die aussehen /bin/bash /usr/share/apache2/ask-for-passphrase mysite.com:443 RSA, wartet es darauf, dass in einem Terminal ein Kennwort eingegeben wird, das Sie nie sehen werden.

Zuerst habe ich den hängen gebliebenen Prozess beendet (das Senden eines kill -HUPan die Prozess-ID für / usr / sbin / apache2 sollte ausreichen, um auch die anderen zu beenden, aber machen Sie einen anderen ps -ef | grep apache, um sicherzugehen).

Dann habe ich die Anweisungen in diesem Beitrag befolgt , um eine SSL-Kennwortdatei zu erstellen, für die kein Kennwort eingegeben werden musste. Dann hat a service apache2 startprima funktioniert, und Apache hat nach einem Neustart ordnungsgemäß gestartet.

Brendan Quinn
quelle
11

Ich habe diesen Fehler bei einer Neuinstallation beim Starten von Apache2 Ubuntu 12.10 erhalten.

Es ist ein Fehler in der Apache2. Es hängt im Hintergrund. Hier ist meine Anleitung, wo die Fehler in der Software sein könnten.

Hier ist der Fehler, den ich bekommen habe:

el@titan:~$ sudo service apache2 start
 * Starting web server apache2               
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
                                                                         [fail]

Adresse bereits vergeben? Was könnte es benutzen? Hör zu:

el@titan:~$ grep -ri listen /etc/apache2
/etc/apache2/apache2.conf:#   supposed to determine listening ports for incoming connections, and which
/etc/apache2/apache2.conf:# Include list of ports to listen on and which to use for name based vhosts
/etc/apache2/ports.conf:Listen 80
/etc/apache2/ports.conf:    Listen 443
/etc/apache2/ports.conf:    Listen 443

Das bedeutet, dass Apache2 den Start von Apache2 verhindert. Bizarr. Dies wird bestätigen:

el@titan:~$ ps -ef | grep apache2
root      1146   954  0 15:51 ?        00:00:00 /bin/sh /etc/rc2.d/S91apache2 start
root      1172  1146  0 15:51 ?        00:00:00 /bin/sh /usr/sbin/apache2ctl start
root      1181  1172  0 15:51 ?        00:00:00 /usr/sbin/apache2 -k start
root      1193  1181  0 15:51 ?        00:00:00 /bin/bash /usr/share/apache2/ask-for-passphrase 127.0.1.1:443 RSA
el        5439  5326  0 16:23 pts/2    00:00:00 grep --color=auto apache2

Ja, in diesem Fall wird Apache2 ausgeführt. Ich habe versucht, Apache2 ein zweites Mal auf demselben Port zu starten.

Was mich verwirrt ist, dass serviceberichtet wird, dass apache2 NICHT läuft:

el@titan:~$ sudo service apache2 status
Apache2 is NOT running.

Und wenn Sie apache2ctl nach seinem Status abfragen, bleibt es hängen.

root@titan:~# /usr/sbin/apache2ctl status
**hangs until Ctrl-C is pressed.

Daher scheint Ubuntu Probleme zu haben, Apache2 beim Booten zu verwalten. Zeit, Apache2 zu stoppen:

root@titan:~# /usr/sbin/apache2ctl stop
httpd (no pid file) not running

Ein großer Hinweis! Sie versuchen, Apache2 zu stoppen und es hat die Prozess-ID verloren! Deshalb kann Ubuntu apache2 nicht stoppen, weil es nicht weiß, wo es ist!

Sie würden denken, ein Neustart würde das Problem beheben, aber dies ist nicht der Fall, da apache2 beim Booten gestartet wird und hängen bleibt. Der normale Startvorgang für Apache2 funktioniert nicht richtig.

Also, wie man es repariert?

Ich konnte dies beheben, indem ich die psBefehlsausgabe analysierte . Beachten Sie, dass der psBefehl uns mitteilt, dass dieser Prozess mit "/etc/rc2.d/S91apache2 start" gestartet wurde.

Das ist das beleidigende Programm, das einen schnellen Kick braucht.

/etc/rc2.d/S91apache2ist der symbolische Link, der verwendet wird, um Apache2 beim Start des Computers für Sie zu starten. Aus irgendeinem Grund scheint es Apache2 zu starten und hängt dann. Wir müssen es also sagen, um das nicht zu tun.

Also schauen Sie sich das an /etc/rc2.d/S91apache2.

el@titan:/etc/rc2.d$ ls -l
lrwxrwxrwx   1 root root    17 Nov  7 21:45 S91apache2 -> ../init.d/apache2*

Es ist eine symbolische Verbindung, die wir nicht wollen, dass sie da ist. So verhindern Sie, dass Apache2 beim Booten gestartet wird:

root@titan:~# sudo update-rc.d -f apache2 remove
 Removing any system startup links for /etc/init.d/apache2 ...
   /etc/rc0.d/K09apache2
   /etc/rc1.d/K09apache2
   /etc/rc2.d/S91apache2
   /etc/rc3.d/S91apache2
   /etc/rc4.d/S91apache2
   /etc/rc5.d/S91apache2
   /etc/rc6.d/K09apache2

Starten Sie den Computer neu, um sicherzustellen, dass Apache2 nicht startet und hängen bleibt. OK gut. Jetzt KÖNNTEN Sie Apache2 so zurücksetzen, wie es war, aber das würde es wieder zum Scheitern bringen.

root@titan:~$ sudo update-rc.d apache2 defaults     //(don't do this)
 Adding system startup for /etc/init.d/apache2 ...
   /etc/rc0.d/K20apache2 -> ../init.d/apache2
   /etc/rc1.d/K20apache2 -> ../init.d/apache2
   /etc/rc6.d/K20apache2 -> ../init.d/apache2
   /etc/rc2.d/S20apache2 -> ../init.d/apache2
   /etc/rc3.d/S20apache2 -> ../init.d/apache2
   /etc/rc4.d/S20apache2 -> ../init.d/apache2
   /etc/rc5.d/S20apache2 -> ../init.d/apache2

Starten Sie den Apache2 stattdessen wie folgt:

sudo service apache2 start

Und der Apache2 ist wieder in Betrieb und bedient die Seiten erneut. Es scheint einige schwerwiegende Fehler mit Apache2 / Ubuntu 12.10 zu geben, die dazu führen, dass Apache2 startet und hängt. Dies ist ein Workaround. Ich vermute, der Fix besteht darin, neuere Versionen von Apache2 und Ubuntu zu installieren und auf das Beste zu hoffen.

Eric Leschinski
quelle
Viel Spaß beim Lesen und Verwenden Ihrer Tipps! Vielen Dank, dass Sie 'so geschrieben haben, wie Sie es getestet haben'!
Ram
10

Ich hatte einen Nginx-Server, der auf meinem AWS EC2-Server lauschte. Ich glaube, er wurde konfiguriert, als ich den EC2 erstellte. Daher wurde der Fehler "Adresse bereits verwendet" gemeldet. Also habe ich den Dienst beendet und den Apache2-Dienst gestartet:

sudo service nginx stop
sudo service apache2 start
Dodger
quelle
Danke vielmals! Nach allen Versuchen hat das bei mir geklappt.
Vivek
4

Ich habe es herausgefunden. Ich hatte doppelte Listen 80-Befehle sowohl in meiner httpd.conf als auch in meiner ports.conf

Außerdem habe ich beim Kopieren der Konfigurationsdatei für den zu virtualisierenden Server nicht bemerkt, dass das Fehlerprotokollverzeichnis geändert wurde. In diesem Fehlerprotokoll habe ich festgestellt, dass das Verzeichnis für die mime.typesKonfigurationsdatei in meiner httpd.confDatei nicht korrekt ist . Ich habe diesen Parameter aktualisiert, und der Server wurde ordnungsgemäß gestartet.

Gunner Barnes
quelle
3
Ich hatte auch doppelte Listen 80Befehle in meinem httpd.confundports.conf
Gunner Barnes
2

Das bedeutet, dass Port 80 bereits verwendet wird. Ändern Sie entweder den Port für Apache2 (was ich nicht empfehle), indem Sie Folgendes bearbeiten:

/etc/apache2/ports.conf

Oder schließen Sie die Anwendung, die auf Port 80 ausgeführt wird:

netstat -antp | grep 80

Um herauszufinden, was auf Port 80 läuft.

Dylan Dodds
quelle
netstat -antp | grep 80gibt auch nichts aus.
Gunner Barnes
können Sie Ihre Ausgabe von netstat -antp | kopieren und einfügen? grep 80?
Dylan Dodds
Es erfolgt buchstäblich keine Ausgabe.
Gunner Barnes
hmm das ist seltsam, versuchen Sie, den Port auf 81 zu ändern, wenn dies nicht der Fall ist, wird der Port blockiert. Es gibt einen weiteren Fehler, den Sie in /var/log/apache2/error.log
Dylan Dodds
2

Nur ein Hinweis für alle, die vielleicht VirtualBox mit NAT-Netzwerken betreiben. Ich stellte fest, dass eine NAT-Regel zwischen meinem Gast und meinem Host eingerichtet wurde, die den Port bindet

mschr
quelle
2

Nicht nur doppelte Erwähnungen von

Listen 80

aber erwähne dies auch zusätzlich zu Listen 80

Include ports.conf
Scott Stensland
quelle