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?
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:
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.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:
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.
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")
.
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%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,
Ich benutze den Nginx-Server (Port 80) vor Node.js (irgendein Port & gt; 1024). Es funktioniert großartig.