Plötzlich bekomme ich den untenstehenden 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 das unten 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 überrascht.
Wie kann ich debuggen?
Ich verwende uwsgi mit einem
proxy-Pass auf Port 8070. Uwsgi läuft. Nginx ist nicht. Ich benutze Ubuntu 12.4
Nachfolgend 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;
}
}
So installiere ich nginx auf Ubuntu 12.04
nginx=stable;add-apt-repository ppa:nginx/$nginx;
apt-get update
apt get install nginx-full
[::]:80
ist eine IPv6-Adresse.
Dieser Fehler kann auftreten, wenn Sie eine Nginx-Konfiguration haben, die an Port 80 und auch an Port [::]:80
überwacht wird.
Ich hatte in meiner Standard-Site-Datei Folgendes:
listen 80;
listen [::]:80 default_server;
Sie können dies beheben, indem Sie ipv6only=on
wie folgt zum [::]:80
hinzufügen:
listen 80;
listen [::]:80 ipv6only=on default_server;
Weitere Informationen finden Sie unter:
ich habe dies behoben, indem Sudo apachectl stop
ausgeführt wurde - Apache läuft im Hintergrund und verhindert, dass Nginx am gewünschten Port startet.
Auf Ubuntu laufen Sudo /etc/init.d/Apache2 stop
Ich habe das Problem gefunden, das ich noch nie hatte.
Ich musste nur /etc/nginx/sites-available/default
löschen. Dann hat es funktioniert.
Mein conf war in /etc/nginx/default
.
Ich habe auch den gleichen Fehler bekommen. nginx: [emerg] bind () an [::]: 80 fehlgeschlagen (98: Adresse wird bereits verwendet) und als ich den localhost in den Browser eingab, erhielt ich
Es klappt!
Dies ist die Standard-Webseite für diesen Server.
Die Webserver-Software läuft, aber es wurde noch kein Inhalt hinzugefügt. Anstelle der Nginx-Begrüßungsseite wird Apache2 auf demselben Port ausgeführt.
suchen Sie die Apache2-Ports.conf-Datei
Sudo /etc/Apache2/ports.conf
Ändern Sie den Port anders als 80, ich mache es als 70
speicher die Datei
starten Sie Ihr System neu
es wird auch für Sie funktionieren. Wenn Sie den localhost im Browser eingeben, erhalten Sie eine Nginx-Willkommensseite
Mein Fall ist anders, ich musste Nginx beenden, um es neu zu starten.
Anstatt
Sudo systemctl restart nginx
Ich musste verwenden:
Sudo pkill -f nginx
Sudo systemctl start nginx
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
so änderte man einen cron zur erneuerung (Nachladen erneut laden) (mit Vorschlag von certbot)
-- in /etc/cron.d/certbot
from
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && Perl -e 'sleep int(Rand(3600))' && certbot -q renew
to
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && Perl -e 'sleep int(Rand(3600))' && certbot -q renew --pre-hook "service nginx stop" --post-hook "service nginx start"
protokolle (kurz):
-- in /var/log/syslog
Jun 10 00:14:25 localhost systemd[1]: Starting Certbot...
Jun 10 00:14:38 localhost certbot[22222]: nginx: [error] open() "/run/nginx.pid$
Jun 10 00:14:41 localhost certbot[22222]: Hook command "nginx" returned error c$
Jun 10 00:14:41 localhost certbot[22222]: Error output from nginx:
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] still could not bind()
Jun 10 00:14:41 localhost systemd[1]: Started Certbot.
-- in /var/log/nginx/error.log
2018/06/10 00:14:27 [notice] 22233#22233: signal process started
2018/06/10 00:14:31 [notice] 22237#22237: signal process started
2018/06/10 00:14:33 [notice] 22240#22240: signal process started
2018/06/10 00:14:34 [notice] 22245#22245: signal process started
2018/06/10 00:14:38 [notice] 22255#22255: signal process started
2018/06/10 00:14:38 [error] 22255#22255: open() "/run/nginx.pid" failed (2: No $
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: still could not bind()
versuchen Sie, diesen Befehl auszuführen
Sudo fuser -k 443/tcp
service nginx restart
Mein Problem war, dass ich überlappende Listenanweisungen hatte. Es ist mir gelungen, überlappende Direktiven durch Ausführen herauszufinden
grep -r listen /etc/nginx/*
Zwei Dateien hörten am selben Port:
/etc/nginx/conf.d/default.conf: listen 80;
/etc/nginx/sites-enabled/default.conf: listen 80;
Ich traf ein ähnliches Problem. Das Protokoll ist wie unten
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: still could not bind()
2018/10/31 12:54:23 [alert] 127997#127997: unlink() "/run/nginx.pid" failed (2: No such file or directory)
2018/10/31 22:40:48 [info] 36948#36948: Using 32768KiB of shared memory for Push module in /etc/nginx/nginx.conf:68
2018/10/31 22:50:40 [emerg] 37638#37638: duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/default:18
2018/10/31 22:51:33 [info] 37787#37787: Using 32768KiB of shared memory for Push module in /etc/nginx/nginx.conf:68
Der letzte [emerg]
zeigt, dass duplicate listen options for [::]:80
bedeutet, dass es mehr als eine Nginx-Blockdatei gibt, die [::]:80
enthält.
Meine Lösung ist, eine der [::]:80
-Einstellungen zu entfernen
P.S. Sie haben wahrscheinlich eine Standard-Blockdatei. Ich empfehle, diese Datei als Standardserver für Port 80 beizubehalten und [::]:80
aus anderen Blockdateien zu entfernen
Ändern Sie zunächst den Apache-Listenport 80 in 8080 Apache in /etc/Apache2/ports.conf include
Listen 1.2.3.4:80 to 1.2.3.4:8080
Sudo service Apache2 restart
oder
Sudo service httpd restart // in case of centos
fügen Sie dann nginx als Reverse-Proxy-Server hinzu, der den Apache-Port abhören soll
server {
listen 1.2.3.4:80;
server_name some.com;
access_log /var/log/nginx/something-access.log;
location / {
proxy_pass http://localhost:8080;
proxy_redirect off;
proxy_set_header Host $Host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* ^.+\.(jpg|js|jpeg|png)$ {
root /usr/share/nginx/html/;
}
location /404.html {
root /usr/share/nginx/html/40x.html;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
# put code for static content like js/css/images/fonts
}
Starten Sie den Nginx-Server nach den Änderungen erneut
Sudo service nginx restart
Nun wird der gesamte Datenverkehr vom nginx-Server verarbeitet und alle dynamischen Anforderungen werden an Apache gesendet. Der statische Inhalt wird vom nginx-Server bereitgestellt.
Für die erweiterte Konfiguration wie Cache:
Wenn das Problem weiterhin besteht, nachdem Sie eine der obigen Lösungen getestet haben, starten Sie den Server einmal neu. Es hat für mich funktioniert :)
Ich hatte mehrere * .save-Dateien (Notfall-Dumps von Nano) aus verschiedenen NGINX-Konfigurationsdateien in meinem Websites-verfügbaren Verzeichnis. Nachdem ich diese .save-Dateien gelöscht hatte, wurde NGINX neu gestartet. Ich nahm an, dass diese harmlos waren, da es keine entsprechenden Symlinks gab, aber ich schätze, ich habe mich geirrt.
In meinem Fall war einer der Dienste entweder Apache oder Apache2 oder Nginx bereits aktiv und daher konnte ich den anderen Dienst nicht starten.
Ich verwende Supervisor, um Nginx und Gunicorn nebeneinander auf einem Docker-Container auszuführen.
Dies war die Konfiguration, die für den Supervisor verwendet wurde:
[supervisord]
nodaemon=true
[program:gunicorn]
command = /project/start.sh
user = www-data
[program:nginx]
command=/usr/sbin/nginx
Das Problem war, wie ich Ngnix gestartet habe: Standardmäßig wird es im Vordergrund ausgeführt. Dies veranlasst die Überwachung, erneut zu versuchen, eine andere Instanz von Nginx auszuführen.
Durch das Hinzufügen von -g 'daemon off;'
zur Befehlszeile blieb Nginx im Vordergrund, und der Supervisor versuchte nicht mehr, eine andere Instanz auszuführen.
In meinem Fall stellte sich heraus, dass der Täter ein Serverblock war, der Folgendes enthielt:
_ listen 127.0.0.1:80;
listen [::1]:80 ipv6only=on;
server_name localhost;
_
Unter Linux steht ein Socket, der auf einer bestimmten IP lauscht (z. B. _[::1]:80
_), in Konflikt mit einem Socket, der auf demselben Port lauscht, aber auf einer beliebigen IP (d. H. _[::]:80
_). Normalerweise wird Nginx dieses Problem transparent lösen, indem ein einzelner Socket hinter diesen Kulissen verwendet wird. Wenn Sie jedoch _ipv6only
_ (oder bestimmte andere Optionen) in der listen-Direktive angeben, wird nginx gezwungen, einen separaten Socket dafür zu erstellen (zu versuchen), was zu dem Fehler _Address already in use
_ führt.
Da _ipv6only=on
_ ohnehin die Standardeinstellung ist (seit 1.3.4), wurde diese Option einfach aus dieser Direktive entfernt, und es wurde sichergestellt, dass _ipv6only
_ nirgendwo anders in meiner Konfiguration verwendet wurde.
Folgen Sie den Antworten zu @ lfender6445 und @SAURABH -
Mein Problem war auch die Tatsache, dass Apache2 nach dem Upgrade auf Vagrant 2.2.2 als Webserver ausgeführt wurde, als der Gast startete. In der Vergangenheit hatte ich nur Nginx als Webserver.
vagrant ssh in die Box und führen Sie den folgenden Befehl aus, um den Start von Apache2 zu deaktivieren, wenn die Guest-Box startet:
Sudo update-rc.d -f Apache2 remove
Beenden Sie ssh, vagrant halt, vagrant up. Problem gelöst.