Node.js connect solo funciona en localhost

He escrito una pequeña aplicación node.js, que usa Connect, que sirve una página web, y luego la envía actualizaciones periódicas. También acepta y registra las observaciones del usuario en un archivo de disco.

Funciona bien siempre que esté en el host local, pero no puedo obtener otros compusters en la misma intranet para verlo. Estoy usando el puerto 3000, pero cambiar al puerto 8080 u 80 no me ayudó.

Aquí está el código que estoy usando para configurar la conexión:

var io = require('socket.io'), connect = require('connect'); var app = connect().use(connect.static('public')).listen(3000); var chat_room = io.listen(app); 

Como mencioné anteriormente, intenté cambiar el número de puerto a 8080 o a 80, y no vi ninguna diferencia, así que no creo que sea un problema de firewall (pero podría estar equivocado). También he pensado, después de leer preguntas similares sobre HTTP, agregar 0.0.0.0 a listen () pero no parece que listen () tome un parámetro de máscara IP.

Lo más probable es que el socket del servidor esté vinculado a la dirección IP loopback 127.0.0.1 lugar de la dirección IP simbólica “todas las direcciones IP” 0.0.0.0 (tenga en cuenta que NO es una máscara de red). Para confirmar esto, ejecute sudo netstat -ntlp (si está en Linux) o netstat -an -f inet -p tcp | grep LISTEN netstat -an -f inet -p tcp | grep LISTEN (OSX) y verificar a qué IP está destinado su proceso (busque la línea con “: 3000”). Si ves “127.0.0.1”, ese es el problema. Solucionarlo pasando “0.0.0.0” a la llamada de listen :

 var app = connect().use(connect.static('public')).listen(3000, "0.0.0.0"); 

Para obtener acceso de otros usuarios a su máquina local, generalmente uso ngrok . Ngrok expone su servidor local a la web y tiene un contenedor NPM que es simple de instalar e iniciar:

 $ npm install ngrok -g $ ngrok http 3000 

Vea este uso de ejemplo:

enter image description here

En el ejemplo anterior, la instancia de navegación local en: localhost: 3000 ahora está disponible en Internet, disponible en: http://69f8f0ee.ngrok.io o https://69f8f0ee.ngrok.io

Enlazar a 0.0.0.0 es la mitad de la batalla. Hay un firewall de IP (diferente del que está en las preferencias del sistema) que bloquea los puertos TCP. Por lo tanto, el puerto debe ser desbloqueado allí también haciendo:

sudo ipfw agregar permitir tcp de cualquier a cualquier

Tengo una solución muy simple para este problema: process.argv te da una lista de los argumentos pasados ​​a la aplicación de nodo. Entonces si corres:

node server.js 0.0.0.0

Obtendrás:

process.argv[0] //=> "node"
process.argv[1] //=> "server.js"
process.argv[2] //=> "0.0.0.0"

Entonces puede usar process.argv[2] para especificar que como la dirección IP que desea escuchar:

http.listen(3000, process.argv[2]);

Ahora, su aplicación está escuchando “todas” las direcciones IP, por ejemplo:

http://192.168.1.4:3000/your_app

¡Espero que esto ayude a alguien!

En su aplicación, lo hace accesible desde cualquier dispositivo de la red:

 app.listen(3000, "0.0.0.0"); 

Para NodeJS en Azure, GCP y AWS

Para Azure vm implementado en el administrador de recursos, verifique su grupo de seguridad de red virtual y abra puertos o rangos de puertos para que sea alcanzable; de ​​lo contrario, en los puntos finales de la nube si vm se implementa en la versión anterior de azul.

Solo busca el equivalente para GCP y AWS

Distro de Fedora o Centos revisa tu selinux y firewalld en mi caso firewalld impidió la conexión:

 Selinux: $ sestatus
 Estado SELinux: habilitado
 Montaje SELinuxfs: / sys / fs / selinux
 Directorio raíz de SELinux: / etc / selinux
 Nombre de la política cargada: segmentado
 Modo actual: {{checkmode}}
 Modo del archivo de configuración: {{checkconfig}}
 Estado MLS MLS: habilitado
 Estado de deny_unknown de la política: permitido
 Versión máxima de la política del kernel: 30

 Estado de Firewalld: $ systemctl status firewalld

Trabajando para mí con esta línea (simplemente agrega –listen cuando se está ejecutando):

 node server.js -p 3000 -a : --listen 192.168.1.100 

Espero eso ayude…