Estoy probando una aplicación (espero que se ejecute en heroku, pero también tengo problemas a nivel local). Me da un error EACCES cuando ejecuta http.Server.listen (), pero solo ocurre en algunos puertos.
Entonces, localmente estoy ejecutando:
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)
No tengo nada ejecutándose en el puerto 900 (ni en ninguno de los otros 20 puertos que he probado), así que esto debería funcionar. Lo extraño es que se hace el trabajo en algunos puertos. Por ejemplo, el puerto 3000 funciona perfectamente.
¿Qué causaría esto?
Actualización 1:
Me di cuenta de que en mi computadora local, el error EACCES viene porque tengo que ejecutar el nodo como root para vincularme a esos puertos determinados. No sé por qué sucede esto, pero usar sudo lo soluciona. Sin embargo, esto no explica cómo lo arreglaría en Heroku. No hay forma de ejecutar como root en Heroku, entonces, ¿cómo puedo escuchar en el puerto 80?
fuente
Respuestas:
Ejecutando en su estación de trabajo
Como regla general, los procesos que se ejecutan sin privilegios de root no pueden vincularse a puertos inferiores a 1024.
Por lo tanto, pruebe con un puerto superior o ejecute con privilegios elevados a través de
sudo
. Puede degradar los privilegios después de haberse vinculado al puerto bajo utilizandoprocess.setgid
yprocess.setuid
.Corriendo en heroku
Al ejecutar sus aplicaciones en heroku, debe usar el puerto como se especifica en la variable de entorno PORT.
Ver http://devcenter.heroku.com/articles/node-js
fuente
crossdomain.xml
través del puerto 843.El usuario no privilegiado (no root) no puede abrir un socket de escucha en puertos inferiores a 1024.
fuente
sudo
cuando ejecuto un servidor expreso usando el nodo (en realidad, trago). Así que no tiene sentidoConsulte este enlace de referencia :
fuente
pm2 kill
y vuelve a crearlo .Otro enfoque es hacer la redirección de puertos:
Y ejecute su servidor en> 1024 puerto:
ps lo mismo podría hacerse para el puerto https (443) por cierto.
fuente
Significa que el nodo no puede escuchar en el puerto definido. Cámbielo a algo así como 1234 o 2000 o 3000 y reinicie su servidor.
fuente
¡¡DIOS MIO!! En mi caso, estaba haciendo en
....listen(ip, port)
lugar de...listen(port, ip)
y eso estaba arrojando el mensaje de error:Error: listen EACCES localhost
Estaba usando números de puerto> = 3000 e incluso probé con acceso de administrador. Nada funcionó. Luego, con una mirada más cercana, noté el problema. ¡Lo cambié
...listen(port, ip)
y todo comenzó a funcionar bien!Simplemente llamando esto en caso de que sea útil para otra persona ...
fuente
....listen(ip, port)
en su respuesta (con cuatro.
)? Me tomó un minuto darme cuenta de que estabas hablando del orden de los argumentos debido a eso.....
(cuatro puntos) allí, lo que pensé que era obvio.Recibí este error en mi Mac porque ejecutó el servidor apache de forma predeterminada usando el mismo puerto que el servidor del nodo que en mi caso era el puerto 80. Todo lo que tuve que hacer es detenerlo con
sudo apachectl stop
Espero que esto ayude a alguien.
fuente
También recibí este error en mi Mac. Utilizo
npm run dev
para ejecutar mi aplicación Nodejs en Windows y funciona bien. Pero recibí este error en mi mac -error given was: Error: bind EACCES null:80
.Una forma de resolver esto es ejecutarlo con acceso root. Puede usar
sudo npm run dev
y necesitará que ingrese su contraseña.En general, es preferible servir su aplicación en un puerto no privilegiado, como 3000, que funcionará sin permisos de root.
referencia: error de Node.js EACCES al escuchar en el puerto http 80 (permiso denegado)
fuente
Tuve un problema similar que negaba ejecutar en el puerto 8080, pero también cualquier otro.
Resulta que fue porque el
env.local
archivo que leyó contenía comentarios después de los nombres de las variables como:Y lo interpretó así, tratando de usar el puerto "
8080 # The port the server runs at
", que obviamente es un puerto no válido (-1). Eliminar los comentarios lo resolvió por completo.Usando Windows 10 y Git Bash por cierto.
Sé que no es exactamente el problema descrito aquí, pero podría ayudar a alguien por ahí. Aterricé en esta pregunta buscando el problema para mi respuesta, así que ... ¿tal vez?
fuente
Recuerde que si usa sudo para enlazar con el puerto 80 y está usando las variables env PORT & NODE_ENV, debe reexportar esos vars ya que ahora está en el perfil raíz y no en su perfil de usuario. Entonces, para que esto funcione en mi Mac, hice lo siguiente:
fuente
esto sucede si el puerto en el que está intentando alojar localmente está protegido por puerto
fuente
Prueba authbind:
http://manpages.ubuntu.com/manpages/hardy/man1/authbind.1.html
Después de la instalación, puede agregar un archivo con el nombre del número de puerto que desea usar en la siguiente carpeta: / etc / authbind / byport /
Dele 500 permisos usando chmod y cambie la propiedad al usuario con el que desea ejecutar el programa.
Después de eso, haz "authbind node ..." como ese usuario en tu proyecto.
fuente
Mi error se resolvió simplemente cambiando el número de puerto en server.js Especialmente en esta línea
Cambié mi número de puerto a 8085 de 8080.
Espero eso ayude.
fuente
Después de probar muchas formas diferentes, la reinstalación de IIS en mis ventanas resolvió el problema.
fuente
Mi error se resuelve usando (en Windows)
Permita que la aplicación NodeJS acceda a la red en el Firewall de Windows.
fuente
reiniciar no fue suficiente! La única forma de resolver el problema es la siguiente:
Tienes que matar el servicio que se ejecuta en ese puerto.
en cmd, ejecútelo como administrador, luego escriba: netstat -aon | encontrar / i "escuchando"
luego obtendrá una lista con el servicio activo, buscará el puerto que se ejecuta en 4200 y usará la identificación del proceso, que es la última columna para eliminarlo
: taskkill / F / PID 2652
fuente