javascript - permission - Error de EACCES de Node.js cuando se escucha en el puerto http 80(permiso denegado)
npm permission denied (1)
FYI: No puede ejecutar el socket en los puertos <1024 con el permiso normal del usuario. Necesita tener acceso de root para ello.
Hay un total de 3 formas de resolver el error: -
1. Dar acceso a la raíz y ejecutarlo (que es el habitual)
2. Redirigir a otro puerto
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
A continuación, ejecute mi Node.js en el puerto 3000. Las solicitudes al puerto 80 se asignarán al puerto 3000.
También debe editar su archivo /etc/rc.local y agregar esa línea menos el sudo. Eso agregará la redirección cuando la máquina se inicie. No necesita sudo en /etc/rc.local porque los comandos allí se ejecutan como root cuando se inicia el sistema.
Enlace de referencia
3. Otorga a la capacidad normal del usuario el uso de sockets como root
Objetivo: - No proporcionamos acceso raíz completo y solo otorgamos permiso socket_root para acceder a él por parte del usuario normal para ejecutar su servidor en cualquier puerto.
NO queremos ejecutar sus aplicaciones como usuario raíz, pero hay un problema: su usuario seguro no tiene permiso para usar el puerto HTTP predeterminado (80). Tu objetivo es poder publicar un sitio web que los visitantes puedan usar navegando hacia una URL fácil de usar como http://localhost
.
Desafortunadamente, a menos que inicies sesión como root, normalmente deberás usar una URL como http://localhost:3000
- fíjate en el número de puerto.
Mucha gente se queda estancada aquí, pero la solución es fácil. Hay algunas opciones, pero esta es la que me gusta. Escriba los siguientes comandos:
sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep `readlink -f /`which node/``
Ahora, cuando le dice a una aplicación Node que desea que se ejecute en el puerto 80, no se quejará.
Enlace de referencia
Información general Enlace de referencia de apache
Esta pregunta ya tiene una respuesta aquí:
Node.js lanza el siguiente error mientras se ejecuta en el puerto http 80 (puerto predeterminado): -
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)
Descubrí que el nodo necesita tener acceso de root.
Convencionalmente, evitamos dar acceso a la raíz en una situación normal. ¿Cuáles son las mejores prácticas para usarlo en el puerto 80 (o puerto <1024)?
Este enlace tiene la misma pregunta pero solo tiene una respuesta, es decir, PREROUTING. Mientras que mi solución proporciona otras formas también.
Estoy escribiendo esto para tener todas las respuestas en un solo lugar, ya que tengo que ir a otros recursos que PREROUTING. ¿Por qué no todas las respuestas en un lugar para compartir el conocimiento?