Ich teste eine App aus (hoffentlich läuft sie auf Heroku, habe aber auch Probleme vor Ort). Es gibt mir einen EACCES-Fehler, wenn es http.Server.listen () ausführt - aber es tritt nur an einigen Ports auf.
Also, lokal laufe ich:
joe@joebuntu:~$ node
> var h = require('http').createServer();
> h.listen(900);
Error: EACCES, Permission denied
at Server._doListen (net.js:1062:5)
at net.js:1033:14
at Object.lookup (dns.js:132:45)
at Server.listen (net.js:1027:20)
at [object Context]:1:3
at Interface.<anonymous> (repl.js:150:22)
at Interface.emit (events.js:42:17)
at Interface._onLine (readline.js:132:10)
at Interface._line (readline.js:387:8)
at Interface._ttyWrite (readline.js:564:14)
Auf Port 900 (oder einem der anderen 20 Ports, die ich ausprobiert habe) läuft nichts, daher sollte dies funktionieren. Das seltsame ist , dass es tut Arbeit an einigen Häfen. Zum Beispiel funktioniert Port 3000 perfekt.
Was würde das verursachen?
Update 1:
Ich habe herausgefunden, dass auf meinem lokalen Computer der EACCES-Fehler auftritt, weil ich den Knoten als Root ausführen muss, um an diese bestimmten Ports zu binden. Ich weiß nicht, warum das passiert, aber mit sudo wird es behoben. Dies erklärt jedoch nicht, wie ich es auf Heroku beheben würde. Es gibt keine Möglichkeit, als Root auf Heroku zu laufen. Wie kann ich also Port 80 abhören?
quelle
Antworten:
Laufen auf Ihrer Workstation
Prozesse, die ohne Root-Rechte ausgeführt werden, können in der Regel nicht an Ports unter 1024 gebunden werden.
Versuchen Sie es mit einem höheren Port oder führen Sie mit erhöhten Rechten über aus
sudo
. Sie können Privilegien herabzustufen , nachdem Sie gebunden haben , um die niedrige Portprocess.setgid
undprocess.setuid
.Laufen auf Heroku
Wenn Sie Ihre Apps auf Heroku ausführen, müssen Sie den in der Umgebungsvariablen PORT angegebenen Port verwenden.
Siehe http://devcenter.heroku.com/articles/node-js
quelle
crossdomain.xml
über den 843-Port übertragen werden.Nicht privilegierte Benutzer (nicht root) können an Ports unter 1024 keinen Listening-Socket öffnen.
quelle
sudo
wenn ich einen Express-Server mit Node betreibe (eigentlich schlucken). Also macht es keinen SinnÜberprüfen Sie diesen Referenzlink :
quelle
pm2 kill
und erstelle sie neu.Ein anderer Ansatz ist die Portumleitung:
Und führen Sie Ihren Server auf> 1024 Port aus:
ps das gleiche könnte übrigens auch für den https (443) port gemacht werden.
quelle
Dies bedeutet, dass der Knoten den definierten Port nicht überwachen kann. Ändern Sie es in 1234 oder 2000 oder 3000 und starten Sie Ihren Server neu.
quelle
OH MEIN GOTT!! In meinem Fall tat ich
....listen(ip, port)
stattdessen...listen(port, ip)
und das warf die Fehlermeldung auf:Error: listen EACCES localhost
Ich habe Portnummern> = 3000 verwendet und es sogar mit Administratorzugriff versucht. Nichts hat geklappt. Dann bemerkte ich bei näherer Betrachtung das Problem. Es wurde geändert
...listen(port, ip)
und alles begann gut zu funktionieren !!Rufen Sie dies einfach auf, falls es für jemand anderen nützlich ist ...
quelle
....listen(ip, port)
in deiner Antwort (mit vier.
) haben? Ich habe eine Minute gebraucht, um festzustellen, dass Sie aus diesem Grund über die Reihenfolge der Argumente gesprochen haben.....
(vier Punkte), was ich für offensichtlich hielt.Ich habe diesen Fehler auf meinem Mac erhalten, weil der Apache-Server standardmäßig über denselben Port ausgeführt wurde wie der vom Knotenserver verwendete, in meinem Fall Port 80. Ich musste ihn nur stoppen
sudo apachectl stop
Hoffe das hilft jemandem.
quelle
Ich habe diesen Fehler auch auf meinem Mac. Ich verwende
npm run dev
meine Nodejs-App unter Windows und sie funktioniert einwandfrei. Aber ich habe diesen Fehler auf meinem Mac bekommen -error given was: Error: bind EACCES null:80
.Eine Möglichkeit, dies zu lösen, besteht darin, es mit Root-Zugriff auszuführen. Sie können verwenden
sudo npm run dev
und müssen Ihr Passwort eingeben.Im Allgemeinen ist es vorzuziehen, Ihre Anwendung an einem nicht privilegierten Port wie 3000 bereitzustellen, der ohne Root-Berechtigungen funktioniert.
Referenz: Node.js EACCES-Fehler beim Abhören des http 80-Ports (Berechtigung verweigert)
quelle
Ich hatte ein ähnliches Problem, das es ablehnte, auf Port 8080 zu laufen, aber auch auf jedem anderen.
Es stellte sich heraus, dass die
env.local
gelesene Datei Kommentare nach den Variablennamen enthielt wie:Und es interpretierte es so und versuchte, Port "
8080 # The port the server runs at
" zu verwenden, der offensichtlich ein ungültiger Port (-1) ist. Das Entfernen der Kommentare löste es vollständig.Übrigens mit Windows 10 und Git Bash.
Ich weiß, dass es nicht genau das hier beschriebene Problem ist, aber es könnte jemandem da draußen helfen. Ich bin auf diese Frage gestoßen und habe nach dem Problem für meine Antwort gesucht, also ... vielleicht?
quelle
Denken Sie daran, dass Sie diese Variablen erneut exportieren müssen, wenn Sie sudo zum Binden an Port 80 verwenden und die env-Variablen PORT & NODE_ENV verwenden, da Sie sich jetzt unter dem Stammprofil und nicht unter Ihrem Benutzerprofil befinden. Damit dies auf meinem Mac funktioniert, habe ich Folgendes getan:
quelle
Dies geschieht, wenn der Port, auf dem Sie lokal hosten möchten, portfowarded ist
quelle
Versuchen Sie authbind:
http://manpages.ubuntu.com/manpages/hardy/man1/authbind.1.html
Nach der Installation können Sie im folgenden Ordner eine Datei mit dem Namen der Portnummer hinzufügen, die Sie verwenden möchten: / etc / authbind / byport /
Geben Sie ihm mit chmod 500 Berechtigungen und ändern Sie den Besitz des Benutzers, unter dem Sie das Programm ausführen möchten.
Führen Sie danach "authbind node ..." als diesen Benutzer in Ihrem Projekt aus.
quelle
Mein Fehler wurde nur durch Ändern der Portnummer in server.js behoben. Speziell in dieser Zeile
Ich habe meine Portnummer von 8080 auf 8085 geändert.
Ich hoffe es hilft.
quelle
Nachdem Sie viele verschiedene Methoden ausprobiert hatten, löste die Neuinstallation von IIS unter Windows das Problem.
quelle
Mein Fehler wird behoben mit (unter Windows)
Ermöglichen Sie der NodeJS-App den Zugriff auf das Netzwerk in der Windows-Firewall.
quelle
Neustart war nicht genug! Die einzige Möglichkeit, das Problem zu lösen, ist die folgende:
Sie müssen den Dienst beenden, der an diesem Port ausgeführt wird.
Führen Sie bei cmd als admin aus und geben Sie Folgendes ein: netstat -aon | finde / ich "höre"
Dann erhalten Sie eine Liste mit dem aktiven Dienst, suchen nach dem Port, der bei 4200 ausgeführt wird, und verwenden die Prozess-ID, die die letzte Spalte ist, durch die er beendet wird
: Taskkill / F / PID 2652
quelle