Node.js: ECONNREFUSED an Port 80

7

Ich habe einen Webserver mit Node.js geschrieben. Als ich versuchte, meinen Server mit dem Tester zu testen, den ich dafür geschrieben habe, gelingt es mir nur, wenn der Port, den ich für den Server verwende, nicht 80 ist. Ich habe auf Netstat überprüft, und keine andere Anwendung verwendet Port 80. Der Fehler, den ich auf der Konsole bekomme, ist:

%Vor%

Was kann in diesem Fall getan werden?

    
limlim 09.01.2012, 17:53
quelle

5 Antworten

3

Sie haben möglicherweise keine Berechtigung zum Binden an Ports unter 1024 (einschließlich 80) als normaler Benutzer (z. B. Nicht-Root). Versuchen Sie einen höher nummerierten Port (über 1024, z. B. 8080).

[Bearbeiten]

Abhängig von Ihrem Zielsystem und davon, dass Sie der Administrator sind, können Sie das Problem wahrscheinlich so umgehen:

  1. Führen Sie Ihr Programm mit " sudo " aus, beispielsweise: sudo node ./myprogram.js .

  2. Oder melden Sie sich als " root " -Benutzer auf Ihrem System an und führen Sie das Programm wie gewohnt aus.

Machen Sie sich jedoch nicht regelmäßig daran gewöhnt (bis Sie verstehen, warum), sie können möglicherweise Sicherheitslücken einführen, die von böswilligen, motivierten Individuen ausgenutzt werden können.

    
maerics 09.01.2012, 17:57
quelle
17

Sie sollten es sich nicht zur Gewohnheit machen, Knoten als privilegierter Benutzer auszuführen. Hier ist eine Methode, die ich auf 6 verschiedenen Maschinen verwende:

Verwenden Sie iptables , um eingehenden Datenverkehr an Port 80 wie folgt an 8080 weiterzuleiten:

%Vor%

Stellen Sie sicher, dass Sie

speichern %Vor%

Sie möchten das auch zu rc.local hinzufügen, damit diese beim Neustart oder beim Start der Instanz (im Fall von EC2 oder einer anderen Cloud) gesetzt werden.

Dann können Sie sicher starten Knoten hören auf 8080 als jeder Benutzer.

    
talentedmrjones 09.02.2012 19:11
quelle
10

Dies ist im Grunde eine Ergänzung zur Antwort von maerics, aber da ich ein Codebeispiel hinzufügen möchte, schreibe ich eine weitere Antwort mit zusätzlichen Informationen, um Sicherheitsprobleme zu vermeiden.

Normalerweise werden Web-Server als root gestartet, da dies erforderlich ist, um an Ports unter 1024 zu binden, aber dann ändern sie den Benutzer, unter dem sie ausgeführt werden, zu einem nicht privilegierten Benutzer.

Sie können dies mit node.js mit process.setuid("username") .

tun

Im folgenden Beispiel wird der Server gestartet und die Stammberechtigungen werden an den Benutzer "www-data" abgesetzt, nachdem er sich beim Start als root an Port 80 gebunden hat:

%Vor%     
Bastian 11.01.2012 14:28
quelle
0

Eine alternative Option, die ich in der obigen Liste nicht gesehen habe, ist auch, dass Ihr Prozess an einen privilegierten Port (& lt; 1024) gebunden wird, indem Sie den folgenden Befehl für die ausführbare Datei des Knotens ausführen. (Passen Sie den Pfad an)

%Vor%

Der Ärger besteht darin, dass Sie diesen Befehl jedes Mal neu ausgeben müssen, wenn Sie die ausführbare Datei des Knotens aktualisieren oder ändern.

Grüße,

    
Pivert 05.05.2014 12:03
quelle
0

Ich benutze den Nginx-Server (Port 80) vor Node.js (irgendein Port & gt; 1024). Es funktioniert großartig.

    
Roman Podlinov 25.07.2014 08:35
quelle

Tags und Links