So sieht die Meldung aus
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)Häufige Ursachen
- Apache, eine zweite nginx-Instanz oder ein Panel-Dienst (Plesk, cPanel) lauscht schon auf Port 80 oder 443.
- nginx läuft bereits und wurde ein zweites Mal gestartet, statt neu geladen zu werden.
- Ein Docker-Container veröffentlicht denselben Port, z. B. mit
-p 80:80. - Ein alter nginx-Masterprozess hat einen Absturz oder einen missglückten Neustart überlebt.
- In der eigenen Konfiguration haben zwei Dienste dieselbe
listen-Adresse und denselben Port.
Prüfen
- Wer lauscht auf Port 80 und 443?
ss -ltnp | grep -E ':(80|443) ' - Ist die Konfiguration gültig? (ein Portkonflikt zeigt sich erst beim Start)
nginx -t - Übrig gebliebene nginx-Prozesse suchen
ps aux | grep '[n]ginx' - Container, die Ports veröffentlichen
docker ps --format '{{.Names}} {{.Ports}}'
Lösung
- Den anderen Dienst stoppen und abschalten, wenn er nicht laufen soll:
systemctl disable --now apache2. - Läuft nginx selbst schon, mit
systemctl reload nginxneu laden, statt ihn nochmal zu starten. - Nur einen eindeutig verwaisten Masterprozess beenden und dann starten:
pkill nginx; systemctl start nginx. - Einen der Dienste auf einen anderen Port legen oder jeden an eine eigene IP binden:
listen 203.0.113.10:80;. - Auf einem Server mit Panel die Einstellung im Panel ändern und keinen zweiten nginx von Hand starten.
Häufige Fragen
nginx -t meldet OK, aber nginx startet trotzdem nicht. Warum?
nginx -t prüft Syntax und Dateien, belegt aber keine Ports. Ein Portkonflikt zeigt sich erst beim echten Start. Deshalb immer auch die Ausgabe von ss -ltnp lesen.
Können sich zwei Dienste Port 80 teilen?
Nur wenn sie auf verschiedenen IP-Adressen lauschen. Bei gleicher Adresse und gleichem Port muss einer ausweichen oder als Reverse Proxy hinter dem anderen laufen.