it-swarm.com.de

nginx - nginx: [emerg] bind () an [::]: 80 fehlgeschlagen (98: Adresse wird bereits verwendet)

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
183
Tampa

[::]: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:

http://forum.linode.com/viewtopic.php?t=8580

http://wiki.nginx.org/HttpCoreModule#listen

184
Nathan

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

172
lfender6445

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.

32
Tampa

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.

  1. suchen Sie die Apache2-Ports.conf-Datei 

    Sudo /etc/Apache2/ports.conf

  2. Ändern Sie den Port anders als 80, ich mache es als 70 

  3. speicher die Datei 

  4. starten Sie Ihr System neu

es wird auch für Sie funktionieren. Wenn Sie den localhost im Browser eingeben, erhalten Sie eine Nginx-Willkommensseite

20
SAURABH

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
16
datdinhquoc

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()
4
Wagner Pereira

versuchen Sie, diesen Befehl auszuführen

Sudo fuser -k 443/tcp
service nginx restart
3
jack

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;
1
Black

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

1
Oscar Zhou1989

Ä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:

https://www.linode.com/docs/web-servers/nginx/licht-mehr-advanced-konfigurationen-für-nginx/#basic-nginx-caching

0
Kamal Kumar

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 :)

0
Deejay

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.

0
Allen

In meinem Fall war einer der Dienste entweder Apache oder Apache2 oder Nginx bereits aktiv und daher konnte ich den anderen Dienst nicht starten.

0

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.

0

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.

0
Matthijs

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.

0
Lance Cleveland