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?

Herbert89
quelle
Versuchen Sie einige der hier geposteten Antworten nginx - nginx: [emerg] bind () bis [::]: 80 fehlgeschlagen (98: Adresse bereits verwendet)
Philip Kirkbride
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.

Farhad Farahi
quelle
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)
Aditya Kresna Permana
quelle
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.

Ranaonline
quelle
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

gustavengstrom
quelle
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;
CraZ
quelle
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.

hrustad1017
quelle