Plötzlich erhalte ich den folgenden Nginx-Fehler
* Restarting nginx
* Stopping nginx nginx
...done.
* Starting nginx nginx
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
...done.
...done.
Wenn ich renne
lsof -i :80 or sudo fuser -k 80/tcp
Ich bekomme nichts Nichts an Port 80
Dann führe ich Folgendes aus:
sudo netstat -pan | grep ":80"
tcp 0 0 127.0.0.1:8070 0.0.0.0:* LISTEN 15056/uwsgi
tcp 0 0 10.170.35.97:39567 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39564 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39584 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39566 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39571 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39580 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39562 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39582 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39586 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39575 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39579 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39560 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39587 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39591 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39589 10.158.58.13:8080 TIME_WAIT -
Ich bin ratlos. Wie debugge ich das?
Ich verwende uwsgi mit einem Proxy-Pass für Port 8070. uwsgi wird ausgeführt. Nginx ist nicht. Ich benutze Ubuntu 12.4
Unten sind die relevanten Teile meiner Nginx Conf-Datei aufgeführt
upstream uwsgi_frontend {
server 127.0.0.1:8070;
}
server {
listen 80;
server_name 127.0.0.1;
location = /favicon.ico {
log_not_found off;
}
location / {
include uwsgi_params;
uwsgi_buffering off;
uwsgi_pass 127.0.0.1:8070;
}
}
Hier ist, wie ich nginx auf Ubuntu 12.04 installiere
nginx=stable;add-apt-repository ppa:nginx/$nginx;
apt-get update
apt get install nginx-full
Antworten:
[::]:80
ist eine IPv6-Adresse.Dieser Fehler kann verursacht werden, wenn Sie eine Nginx-Konfiguration haben, die Port 80 und auch Port überwacht
[::]:80
.Ich hatte Folgendes in meiner Standard-Site-verfügbaren Datei:
Sie können dieses Problem beheben , indem das Hinzufügen
ipv6only=on
zu der[::]:80
wie folgt aus :Weitere Informationen finden Sie unter:
http://forum.linode.com/viewtopic.php?t=8580
http://wiki.nginx.org/HttpCoreModule#listen
quelle
/etc/nginx/sites-available/default
bei dem oben genannten Fehler hilft.sudo service nginx restart
. Wenn ich das tuenetstat -tulpn |grep 80
, bekomme ich nur einmal einen Nginx-Prozess (0.0.0.0:80). Irgendwelche Ideen, warum es nicht neu gestartet wird?ipv6only=on
das Problem behoben, aber nginx sollte wirklich erkennen, dass es versucht, zweimal an dieselbe Schnittstelle zu binden: Port.Ich habe dies durch Ausführen behoben
sudo apachectl stop
- es stellte sich heraus, dass Apache im Hintergrund ausgeführt wurde und Nginx daran gehindert wurde, am gewünschten Port zu starten.Auf Ubuntu laufen
sudo /etc/init.d/apache2 stop
quelle
sudo /etc/init.d/apache2 stop
, um Apache auf Ubuntu 14.04php
Dateien) einen Proxy für den Apache-Port.Mein Fall ist anders, ich musste Nginx beenden, um es neu zu starten.
Anstatt
Ich musste verwenden:
quelle
Ich fand das Problem, das ich noch nie hatte.
Ich musste nur löschen
/etc/nginx/sites-available/default
. Dann hat es funktioniert.Mein Conf war in
/etc/nginx/default
.quelle
listen 80;
in derselben Vorlage enthalten ist, löst das Problem bereits und dies korrekt. Ihr Trick funktioniert, aber es ist nicht das, was ich zukünftigen Lesern Ihrer Frage tun würde. Deshalb schlage ich vor, dass Sie die Antwort von @ Nathan als die richtige Antwort auswählen.apt-get dist-upgrade
, wodurch das Nginx-Paket aktualisiert wurde, wodurch ein Link/etc/nginx/sites-enabled
zu erstellt wurde/etc/nginx/sites-available/default
. nginx hat versucht, diese Standardkonfiguration zu laden, die Port 80 über IPv6 abhört, und dann auch meine echten Konfigurationen gelesen. Das Entfernen dieses Symlinks hat das Problem behoben./etc/nginx/sites-available/default
, entfernen Sie einfach den symbolischen Link dazu -sudo rm /etc/nginx/sites-enabled/default
nginx
auf Port 8080 undvarnish
Port 80 auszuführen. Ähnlich wie bei dieser Antwort stellte ich fest, dass einenginx
Standardkonfiguration immer noch Port 80sites-available
überwacht, obwohl meine Konfigurationen alle Port 8080 abhörten. Diese befand sich unter/etc/nginx/conf.d/default
Ich habe auch den gleichen Fehler bekommen.
und als ich den localhost in den Browser tippte, bekam ich
Dies ist die Standardwebseite für diesen Server.
Die Webserver-Software wird ausgeführt, es wurden jedoch noch keine Inhalte hinzugefügt. Anstelle der Nginx-Begrüßungsseite wird Apache2 auf demselben Port ausgeführt.
Suchen Sie die Datei apache2 ports.conf
Ändern Sie den Port anders
80
als ich mache es als70
Speicher die Datei
Starten Sie Ihr System neu
Es funktioniert auch für Sie. Wenn Sie den lokalen Host in den Browser eingeben, erhalten Sie eine Nginx-Begrüßungsseite
quelle
Versuchen Sie, diesen Befehl auszuführen
quelle
Mein Problem war, dass ich überlappende Listen-Direktiven hatte. Ich habe es geschafft, überlappende Anweisungen durch Ausführen herauszufinden
Zwei Dateien lauschten am selben Port:
quelle
grep -r listen /etc/nginx/*
Danke fürs Teilen!Ich hatte das gleiche Problem in letsencrypt (certbot) und nginx,
Ref: https://github.com/certbot/certbot/issues/5486
Dieser Fehler hat noch keine Lösung
Also wurde ein Cron für die Erneuerung geändert
(einerneutesLaden nach der Erneuerung)(unter Verwendung des Vorschlags von certbot).Protokolle (kurz):
quelle
Ändern Sie zuerst den Apache-Listen-Port 80 in 8080-Apache in /etc/apache2/ports.conf include
oder
Fügen Sie dann nginx als Reverse-Proxy-Server hinzu, der den Apache-Port überwacht
Starten Sie nach Änderungen den Nginx-Server neu
Jetzt wird der gesamte Datenverkehr vom Nginx-Server verarbeitet und alle dynamischen Anforderungen an Apache gesendet. Der statische Inhalt wird vom Nginx-Server bereitgestellt.
Für eine erweiterte Konfiguration wie Cache:
https://www.linode.com/docs/web-servers/nginx/slightly-more-advanced-configurations-for-nginx/#basic-nginx-caching
quelle
Ich bin auf ein ähnliches Problem gestoßen. Das Protokoll ist wie unten
Das letzte
[emerg]
zeigt das,duplicate listen options for [::]:80
was bedeutet, dass es mehr als eine Nginx-Blockdatei enthält[::]:80
.Meine Lösung besteht darin, eine der
[::]:80
Einstellungen zu entfernenPS Sie haben wahrscheinlich Standardblockdatei. Mein Rat ist, diese Datei als Standardserver für Port 80 beizubehalten und
[::]:80
aus anderen Blockdateien zu entfernenquelle
Ich benutze Supervisor, um Nginx und Gunicorn nebeneinander auf einem Docker-Container auszuführen.
Dies war die Konfiguration, die für den Supervisor verwendet wurde:
Das Problem war, wie ich Ngnix gestartet habe: Standardmäßig wird es im Vordergrund ausgeführt. Dadurch wird erneut versucht, eine weitere Instanz von Nginx auszuführen.
Durch das Hinzufügen
-g 'daemon off;'
zur Befehlszeile blieb Nginx im Vordergrund, und der Supervisor versuchte nicht mehr, eine andere Instanz auszuführen.quelle
In meinem Fall wurde bereits einer der Dienste Apache, Apache2 oder Nginx ausgeführt, und aus diesem Grund konnte ich den anderen Dienst nicht starten.
quelle
Ich hatte mehrere * .save-Dateien (Notfall-Dumps von Nano) aus verschiedenen NGINX-Konfigurationsdateien in meinem Site-verfügbaren Verzeichnis. Nachdem ich diese .save-Dateien gelöscht hatte, wurde NGINX ordnungsgemäß neu gestartet. Ich nahm an, dass diese harmlos waren, da es keine entsprechenden Symlinks gab, aber ich glaube, ich habe mich geirrt.
quelle
Um den Antworten von @ lfender6445 und @SAURABH zu folgen -
Mein Problem war auch die Tatsache, dass Apache2 nach dem Upgrade auf Vagrant 2.2.2 beim Booten des Gasts als Webserver ausgeführt wurde. In der Vergangenheit hatte ich nur Nginx als Webserver.
vagrant ssh in die Box und führen Sie den folgenden Befehl aus, um zu verhindern, dass Apache2 beim Booten der Gastbox gestartet wird:
Verlasse ssh, vagabundiere halt, vagabundiere auf. Problem gelöst.
quelle
Wenn das Problem weiterhin besteht, nachdem Sie eine der oben genannten Lösungen ausprobiert haben, starten Sie Ihren Server einmal neu. Es hat bei mir funktioniert :)
quelle
In meinem Fall stellte sich heraus, dass der Täter ein Serverblock war, der Folgendes enthielt:
Unter Linux
[::1]:80
kollidiert ein Socket, der eine bestimmte IP abhört (z. B. ), mit einem Socket, der denselben Port abhört, jedoch eine beliebige IP (dh[::]:80
). Normalerweise wird nginx dieses Problem transparent behandeln, indem hinter diesen Kulissen ein einziger Socket verwendet wird. Das explizite Angebenipv6only
(oder bestimmter anderer Optionen) in der Listen-Direktive zwingt nginx jedoch dazu, einen separaten Socket dafür zu erstellen (dies zu versuchen), was zu dem führtAddress already in use
Fehler führt.Da dies
ipv6only=on
ohnehin die Standardeinstellung ist (seit 1.3.4), bestand das Update einfach darin, diese Option aus dieser Direktive zu entfernen und sicherzustellen, dassipv6only
sie in meiner Konfiguration nirgendwo anders verwendet wurde.quelle
Ich habe das gleiche Problem, aber ich sehe, dass Port 80 von Nginx abgehört wird:
Aber wenn ich versuche, es neu zu starten, habe ich den Fehler:
Mein Problem war in der Konfigurationsdatei, ich habe die PID-Datei festgelegt und das System kann es anscheinend nicht richtig abfangen:
Als ich es entfernte, funktionierte es.
quelle