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

248

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
Tampa
quelle
19
Ich fand das Problem, das ich noch nie hatte. Ich musste / etc / nginx / sites-available / default löschen. Dann hat es funktioniert. Mein conf war in / etc / nginx / default
Tampa
Ich habe Nginx + Varnish ausgeführt und hatte diesen Fehler. Die Lösung war Top Stop beide, dann zuerst Nginx starten und dann lackieren.
Ben
Sie können versuchen, den benannten Dienst zu beenden.
Amal
Haben Sie Ihre Standardeinstellung von Sites-fähig entfernt?
Wolfpack'08
Ich habe alle Lösungen hier ausprobiert. Überprüfte alle verwendeten Ports (es wurde von NGINX selbst verwendet), also habe ich den Port beendet und neu gestartet. Lief wie am Schnürchen.
Gavin

Antworten:

202

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

listen 80;
listen [::]:80 default_server;

Sie können dieses Problem beheben , indem das Hinzufügen ipv6only=onzu der [::]:80wie folgt aus :

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

Nathan
quelle
11
Sie können das Problem auch beheben, indem Sie einfach den Listen 80 entfernen. weil listen [::]: 80 Listener auf IPv4 und IPv6. Beachten Sie jedoch, dass einige Systeme (wie FreeBSD) die IPv4- und IPv6-Sockets trennen und es dann nicht funktioniert, aber für Linux sollte es in Ordnung sein. wiki.nginx.org/HttpCoreModule#listen
gitaarik
4
Vielen Dank, dass Sie sich damit befasst und erklärt haben, warum das Löschen /etc/nginx/sites-available/defaultbei dem oben genannten Fehler hilft.
Oliver
1
Selbst wenn ich die IPv6-Zeile auskommentiere, wird beim Versuch immer noch der gleiche Fehler angezeigt sudo service nginx restart. Wenn ich das tue netstat -tulpn |grep 80, bekomme ich nur einmal einen Nginx-Prozess (0.0.0.0:80). Irgendwelche Ideen, warum es nicht neu gestartet wird?
Roman
Ich stimme dem zu, was @rednaw gesagt hat, aber anstatt das Hören zu entfernen, können Sie es einfach
auskommentieren
Die Einstellung hat ipv6only=ondas Problem behoben, aber nginx sollte wirklich erkennen, dass es versucht, zweimal an dieselbe Schnittstelle zu binden: Port.
Dan Dascalescu
245

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

lfender6445
quelle
8
Verwenden Sie sudo /etc/init.d/apache2 stop, um Apache auf Ubuntu 14.04
Footniko
3
Der Grund dafür ist, dass nicht zwei Webserver denselben Port abhören können. Wählen Sie einen und bei Bedarf einen Proxy. Verwenden Sie beispielsweise nginx, aber für bestimmte Anforderungen (z. B. für phpDateien) einen Proxy für den Apache-Port.
d4nyll
Gleiches hier bei einer neuen Debian 9-Installation.
Jirarium
Vielen Dank. Aber eine Idee, warum es plötzlich begann? Ich habe den Server eine Woche lang nicht berührt, aber er hatte letzte Nacht begonnen.
Ajay Singh
1
Vielen Dank für Ihre Lösung. Es funktioniert für mich, ich benutze Google Cloud Platform
Congle
92

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 & wait $!
sudo systemctl start nginx
datdinhquoc
quelle
1
Ich habe 404 Not Found genommen und Ihren Vorschlag verwendet. Jetzt habe ich mein Problem behoben. Vielen Dank.
Bay
3
Das hat bei mir funktioniert. Sonst nichts. Ich bin mir nicht sicher, welcher Prozess beim Neustart des Systems startet, aber ich füge dies einfach meiner Neustart-Nginx-Routine hinzu. Vielen Dank!
Khom Nazid
38

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.

Tampa
quelle
2
+1 Diese Lösung hat bei mir funktioniert, aber dann dachte ich, dass es etwas in der Standardeinstellung geben muss, das das Problem tatsächlich verursacht, also habe ich etwas tiefer gegraben und eine Antwort mit weiteren Informationen gegeben.
Nathan
11
Ich würde argumentieren, dass das Löschen der Standard-Site-Konfigurationsvorlage nicht die beste Lösung ist - das Kommentieren der Zeile, die 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.
Oliver
4
Ich hatte das gleiche Problem nach dem Ausführen apt-get dist-upgrade, wodurch das Nginx-Paket aktualisiert wurde, wodurch ein Link /etc/nginx/sites-enabledzu 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.
Dan Dascalescu
15
SIE MÜSSEN NICHT LÖSCHEN /etc/nginx/sites-available/default , entfernen Sie einfach den symbolischen Link dazu -sudo rm /etc/nginx/sites-enabled/default
d4nyll
Dieses Problem trat auf, als ich versuchte, nginxauf Port 8080 und varnishPort 80 auszuführen. Ähnlich wie bei dieser Antwort stellte ich fest, dass eine nginxStandardkonfiguration immer noch Port 80 sites-availableüberwacht, obwohl meine Konfigurationen alle Port 8080 abhörten. Diese befand sich unter/etc/nginx/conf.d/default
zigojacko
24

Ich habe auch den gleichen Fehler bekommen.

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

und als ich den localhost in den Browser tippte, bekam ich

Es klappt!

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.

  1. Suchen Sie die Datei apache2 ports.conf

    sudo /etc/apache2/ports.conf
    
  2. Ändern Sie den Port anders 80als ich mache es als70

  3. Speicher die Datei

  4. 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

SAURABH
quelle
1
Möglicherweise möchten Sie Apache2 und nginx nicht gleichzeitig ausführen. Ich habe festgestellt, dass die Apache-Installation den Dienst startet. Also gab ich "sudo /etc/init.d/apache2 stop" aus und konnte dann nginx normal starten. Dies erspart Ihnen auch einen Neustart Ihres Systems.
Chris Westin
1
Sie haben Recht, dass das Löschen des Links / etc / nginx / sites-enabled / default sym verhindert, dass zwei Ports überwacht werden. Ich finde es eigentlich ein bisschen ärgerlich, dass jedes Tutorial auf Nginx damit beginnt, dass jeder den "Standard" -Link löscht, aber das ist wohl ein anderes Thema.
Eschipul
@IgorGanapolsky Apache auf einen anderen Port wechseln?
Menasheh
10

Versuchen Sie, diesen Befehl auszuführen

sudo fuser -k 443/tcp
service nginx restart
Jack
quelle
8

Mein Problem war, dass ich überlappende Listen-Direktiven hatte. Ich habe es geschafft, überlappende Anweisungen durch Ausführen herauszufinden

grep -r listen /etc/nginx/*

Zwei Dateien lauschten am selben Port:

/etc/nginx/conf.d/default.conf:           listen 80;  
/etc/nginx/sites-enabled/default.conf:    listen 80;
Schwarz
quelle
3
Das ist eine sehr nette Art, Dinge zu überprüfen: grep -r listen /etc/nginx/*Danke fürs Teilen!
Newskooler
6

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 (ein erneutes Laden nach der Erneuerung) (unter Verwendung des Vorschlags 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()
Wagner Pereira
quelle
1
Super zufällig, aber das war mein Problem, glaube ich. Danke, dass du das gepostet hast. Mein Fehler schien sich aufgrund eines veralteten Domain-Eintrags zu manifestieren, den er erneuern wollte, aber nicht konnte, weil ich die Domain nicht mehr kontrollierte.
w--
Ich denke, das ist wahrscheinlich auch mein Problem. aber ich muss warten, um einen Blick darauf zu werfen
Oscar Zhou1989
2

Ändern Sie zuerst den Apache-Listen-Port 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 überwacht

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 nach Änderungen den Nginx-Server neu

sudo service nginx restart

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

Kamal Kumar
quelle
1

Ich bin auf ein ähnliches Problem gestoßen. 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

Das letzte [emerg]zeigt das, duplicate listen options for [::]:80was bedeutet, dass es mehr als eine Nginx-Blockdatei enthält [::]:80.

Meine Lösung besteht darin, eine der [::]:80Einstellungen zu entfernen

PS Sie haben wahrscheinlich Standardblockdatei. Mein Rat ist, diese Datei als Standardserver für Port 80 beizubehalten und [::]:80aus anderen Blockdateien zu entfernen

Oscar Zhou1989
quelle
1

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:

[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. 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.

Sebastien DA ROCHA
quelle
1

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.

Rishikesh Chandra
quelle
0

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.

Allen
quelle
0

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:

sudo update-rc.d -f apache2 remove

Verlasse ssh, vagabundiere halt, vagabundiere auf. Problem gelöst.

Lance Cleveland
quelle
0

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

Deejay
quelle
Ja es würde. Aber es funktioniert auch, den Nginx-Prozess zu beenden und dann nur Nginx neu zu starten. Das ist die Antwort von @datdinhquoc.
Khom Nazid
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 [::1]:80kollidiert 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 Angeben ipv6only(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=onohnehin die Standardeinstellung ist (seit 1.3.4), bestand das Update einfach darin, diese Option aus dieser Direktive zu entfernen und sicherzustellen, dass ipv6onlysie in meiner Konfiguration nirgendwo anders verwendet wurde.

Matthijs
quelle
0

Ich habe das gleiche Problem, aber ich sehe, dass Port 80 von Nginx abgehört wird:

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      9730/nginx 

Aber wenn ich versuche, es neu zu starten, habe ich den Fehler:

    service nginx restart
Stopping nginx:                                            [FAILED]
Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] still could not bind()

Mein Problem war in der Konfigurationsdatei, ich habe die PID-Datei festgelegt und das System kann es anscheinend nicht richtig abfangen:

user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

Als ich es entfernte, funktionierte es.

zombi_man
quelle