¿Cómo acceder al servidor NodeJS en LAN?

16

No soy el tipo más entendido con redes, pero aquí va ...

He creado una aplicación con NodeJS y me gustaría probar la aplicación en mi LAN con mi familia. La aplicación escucha en el puerto 1337para las conexiones y yo puede tener acceso a la multa de aplicaciones a través de mi propio ordenador escribiendo localhost:1337, 192.168.0.3:1337o incluso http://joel-pc:1337/en la barra de direcciones del navegador.

También estaré ejecutando Apache junto con NodeJS, y puedo acceder a esta multa escribiendo 192.168.0.3o http://joel-pc/en la barra de direcciones de un navegador siempre que esté conectado a la misma red.

Ahora aquí está la parte extraña; Si detengo el servicio apache, cambio mi aplicación de nodo para escuchar en el puerto 80(http) en lugar de 1337eso, será accesible en mi PC escribiendo localhost, 192.168.0.3o incluso http://joel-pcen la barra de direcciones de mi navegador. Sin embargo, todavía no puedo acceder a NodeJS en ninguna otra PC de mi red aparte de la mía.

Intenté crear una regla de salida dentro de Windows 7 para permitir el acceso al puerto 1337, pero aún no puedo acceder a mi servidor NodeJS en ninguna otra PC que no sea la mía, incluso si está escuchando en el puerto 80. ¿Hay algo obvio? Me estoy perdiendo aquí?

Joel Murphy
fuente
2
¿Qué sucede si, solo como prueba, apaga el firewall?
cheesemacfly
1
Si apago mi cortafuegos puedo acceder al nodo perfectamente, gracias :) ¿Pero seguramente debe haber una forma más segura de hacer las cosas?
Joel Murphy
1
Lo he vuelto a poner ahora, no te preocupes :) ¿Debo publicar allí también? ¿O hay alguna forma de trasladar mi pregunta? gracias
Joel Murphy
2
Salud. Lo marqué también porque leí en otro hilo que debe ser marcado por 3 usuarios antes de que un moderador tome cualquier medida
Joel Murphy
2
La bandera que levanté se ha considerado útil, ¡así que no estoy seguro de cuánto tiempo puede tomar!
cheesemacfly

Respuestas:

11

Lo más probable es que su aplicación de nodo esté vinculada a la dirección IP de bucle invertido en 127.0.0.1lugar de a "todas las IP", 0.0.0.0ya que este es el comportamiento predeterminado de listen. Especifique tanto el puerto como la IP en su llamada como server.listen(80, '0.0.0.0');e intente nuevamente.

Peter Lyons
fuente
3
Si hago esto, todavía no puedo acceder a Node en ningún otro dispositivo en mi LAN. Mi código se ve así: var io = require ('socket.io'); var express = require ("express"); aplicación var = express (); servidor var = require ('http'). createServer (aplicación) io = io.listen ('80 ',' 0.0.0.0 ');
Joel Murphy
2
Esto funcionó en mi caso. En algunas redes inalámbricas localhostfunciona como una cadena, pero en otras hay que escribirlo como127.0.0.1
Raul Rene
Esto es incorrecto a la luz de la pregunta tal como está escrita actualmente, porque de hecho se puede acceder en la computadora local utilizando la dirección LAN, lo que significa que también está escuchando en esa dirección.
Arlen Beiler
6

Obtenga su IP de red local actual y ejecute el servidor http de esta manera:

server.listen(80, 'current_local_ip');
Gonzalo Bahamondez
fuente
1
esto funciona para mi
psulek
Los documentos de NodeJS indican que si no se especifica ninguna IP, escuchará en comodín (en orden: ::o 0.0.0.0)
Arlen Beiler
3

Primero, debe agregar C:\Program Files (x86)\nodea la lista de aplicaciones confiables en su firewall.

Luego, en su aplicación de nodo, puede escribir:

listen(3333, '172.24.14.26', function() {

o:

listen(3333, '0.0.0.0', function() {

o:

listen(3333, function() {

o:

listen(80, '172.24.14.26', function() {

o:

listen(80, '0.0.0.0', function() {

o:

listen(80, function() {

Cada una de estas 6 combinaciones funciona en mi caso: node.js en Windows Server 2016, protegido por un proxy de la compañía.

Michael Bernheiden
fuente
3

Hacer lo siguiente funcionó para mí en una PC con Windows. Prueba esto: abrir

Panel de control \ Sistema y seguridad \ Firewall de Windows Defender \ Aplicaciones permitidas

Luego busque node.js en la lista y haga clic en cambiar configuración> Asegúrese de que el acceso privado esté marcado y luego haga clic en Aceptar.

Trueno
fuente
3

Encontré una buena solución para este problema. En lugar de hacer todas las configuraciones (configurar el firewall, el puerto de reenvío, etc.) utilicé localtunnel, que es una utilidad para exponer el servidor de nodo local a través de Internet. Puede usarlo para fines de desarrollo, prueba y uso compartido, simplemente no lo use para producción.

Primero debe instalar localtunnel de la siguiente manera:

$npm install -g localtunnel

Después de eso, configure su aplicación de nodo para que su servidor de nodo se ejecute en localhost. Por ej .:

server.listen(3000, function () {
console.log('Listening to port:  ' + port);
});

Anote your_port, que en mi caso era 3000 , e inicie su servidor de nodo.

Abra otra terminal y escriba el siguiente comando para ejecutar localtunnel.

$lt --port 3000

Después de esto, en la terminal obtendrá una URL que puede usar para fines de desarrollo / prueba. Esta URL estará disponible en Internet para que pueda compartirla también con otros. Mientras se esté ejecutando su localtunnel, otros pueden acceder a su servidor de nodo local.

Para obtener más opciones de configuración / ayuda, puede consultar la documentación: https://www.npmjs.com/package/localtunnel

k33da_lets_debug
fuente