Nginx startet nicht (Adresse wird bereits verwendet)


72

Ich habe ein Problem mit Nginx. Ich habe verschiedene Lösungen ausprobiert, aber für mich funktioniert nichts. Das ist mein Fehler:

4 root@BANANAS ~ # sudo service nginx restart                                :(
Restarting nginx: nginx: [emerg] bind() to [::]:443 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:443 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:443 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:443 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:443 failed (98: Address already in use)
nginx: [emerg] still could not bind()
nginx.

Kannst du mir helfen?



Es sieht so aus, als ob https bereits verwendet wird. Verwenden Sie 'netstat -tulpn', um herauszufinden, was es verwendet.
Donal

In 'netstat -tulpn' ist auf Port 443 nichts zu hören. Und ich habe alle diese Methoden im Kommentar ausprobiert.
Herbert89

Suchen Sie nach der laufenden Buggy-Software. Für mich stellte sich heraus, dass es sich um einen aria2-Client handelt.
Deadooshka

@Deadooshka Ich habe kein Aria2.
Herbert89

Antworten:


113

Wahrscheinlich verwendet ein anderer Prozess den angegebenen Port:

sudo netstat -tulpn

Holen Sie sich die PID des Prozesses, der bereits 443 verwendet. Und senden Sie das Signal mit dem Befehl kill.

sudo kill -2 <PID>

sudo service nginx restart

Alternativ können Sie tun:

sudo fuser -k 443/tcp

Stellen Sie sicher, dass Sie keine alte Syntax verwenden:

server {
    listen :80;
    listen [::]:80;
}

Die obige Syntax wird verursachen

nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)

Richtige Syntax:

server {
    listen 80;
    listen [::]:80 ipv6only=on;
}

oder

server {
    listen [::]:80;
}

Beide oben genannten Syntax erreichen dasselbe, indem sie sowohl auf IPv4 als auch auf IPv6 hören.


Ich finde kein Programm, das Port 443 verwendet. Das ist mein Problem.
Herbert89

Was ist die Ausgabe von sudo netstat -tulpn?
Farhad Farahi

Verwenden Sie sudo und versuchen Sie es erneut
Farhad Farahi

2
Das ist komisch, mach ein sudo pkill nginxund versuche es dann erneut. Nur nginx ist als Webserver installiert, oder?
Farhad Farahi

Ja, nur Nginx ist als Webserver installiert. Nach dem 'sudo pkill nginx' hat es nicht funktioniert.
Herbert89

9

Eine andere Möglichkeit (meiner Erfahrung nach) besteht darin, den auf diesem Port ausgeführten Prozess zu beenden 443

sudo fuser -k 443/tcp 

oder wenn Sie auf Port laufen, 80ändern Sie einfach den Port in

sudo fuser -k 80/tcp

Hoffe, es hilft jemandem, der das gleiche Problem hatte

Alternative Verwendung lsof:

Suchen Sie die PID und beenden Sie den Prozess, der am Port ausgeführt wird 443

sudo kill -9 $(lsof -t -i :443)

fuserwird standardmäßig nicht in Centos installiert.
Khom Nazid

@ KhomNazid dann installieren Sie es zuerst
Aditya Kresna Permana

4

Danke für die Antwort. Nach dem Rennen

sudo netstat -tulpn

Ich stellte fest, dass Apache2 auf Port 80 ausgeführt wurde. Dies geschah wahrscheinlich, nachdem ich mit Certbot SSL auf dem Server installiert hatte. Ich habe Apache2 entfernt und der Server war betriebsbereit.

apt remove apache2

Das hat es geschafft! Danke nochmal.


Hat für mich gearbeitet. Die Vagabundbox, die ich benutzte, war apache2standardmäßig installiert und ich bemerkte es nicht.
BugHunterUK

2

Ich habe den obigen Fehler erhalten, weil ich die Listen-Direktive versehentlich zweimal im selben Serverblock wie folgt wiederholt habe:

server {    
   listen [::]:443 ssl ipv6only=off; 
   listen 443 ssl; 
   ...
}

Ändern in:

server {    
   listen 443 ssl; 
   ...
} 

oder

server {    
   listen [::]:443 ssl ipv6only=off; 
   ...
} 

Das Problem beim Neustart des Servers wurde behoben: sudo service nginx start


1

Wenn ich die Bindung des Nginx-Prozesses an 80 und 443 Ports beendet habe, wurde der Prozess immer mit einer neuen PID erneut angezeigt.

Es hat mir geholfen, diese Zeile vorübergehend zu kommentieren /etc/nginx/nginx.conf, nginx neu zu starten und die Zeile dann wieder zu kommentieren :

worker_processes auto;

danach musste -9 pid töten und ich konnte anfangen
Thomas Bennett

0

Wenn Sie eine virtuelle Maschine verwenden, müssen Sie die virtuelle Maschine möglicherweise nur neu starten. Ich hatte gestern die gleichen Probleme und konnte Nginx nicht dazu bringen, eine der Methoden in diesem Beitrag zu verwenden. Also habe ich die virtuelle Maschine heute Morgen gestartet, die laufenden Prozesse überprüft und sehe, dass Nginx auf Port 80 ausgeführt wird. Ich habe gestern sogar den Status von Nginx mit systemctl angezeigt und festgestellt, dass dies fehlgeschlagen ist, aber heute ist es aktiv. Ich bin mir nicht sicher, was hier passiert ist, aber es könnte einen Versuch wert sein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.