Node.js no es accesible desde IP externas en Ubuntu


18

Estoy seguro de que esto es muy novato, así que perdóname. Estoy tratando de ejecutar un servidor node.js en el puerto 8080 de mi ubuntu 10.04.

Aquí está el resultado de iptables -L en el servidor:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Y aquí está el resultado de nmap -p 8080 (editó la dirección IP porque todo está o debería estar completamente abierto)

nmap 173.203.xxx.xxx -p 8080 -A

Starting Nmap 5.00 ( http://nmap.org ) at 2011-05-19 22:52 PDT
Interesting ports on xxx (173.203.xxx.xxx):
PORT     STATE  SERVICE    VERSION
8080/tcp closed http-proxy

¿Por qué en la tierra 8080 se ve como cerrado? Agregar esto no ayudó:

iptables -A OUTPUT -p tcp  --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp  --dport 8080 -j ACCEPT

Estoy realmente confundido.

Agregaré esto, en caso de que ayude, pero no sé

 netstat -pan | grep 80
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN          16785/node      
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      16471/apache2

Puedo acceder a mi sitio web normal que se ejecuta desde el puerto 80 en Apache, pero el servidor node.js es inaccesible desde el exterior. Acceder desde el servidor en sí funciona bien.

Entonces mi pregunta es: ¿cómo haría para depurar esto? ¿Podría haber algo más que iptables bloqueando algunos puertos? ¿Cómo puedo saber de qué se trata?

Cualquier ayuda muy apreciada!


Para aquellos que vinieron aquí a través de Google: si ha alojado el servicio en la nube de Google y se enfrenta a este problema, primero asegúrese de haber agregado el puerto en las reglas de excepción del firewall de la nube , así como en el firewall de los sistemas operativos
Atul

Respuestas:


30

Gracias por agregar el último resultado de netstat, realmente ayudó. No puede acceder a node.js desde afuera porque está escuchando en IP localhost, es decir, 127.0.0.1. Debe configurar node.js para escuchar en 0.0.0.0 para que pueda aceptar conexiones en todas las IP de su máquina.

var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(8080, "0.0.0.0");
console.log('Server running at http://0.0.0.0:8080/');

Sospeché eso, pero nunca encontré un 0.0.0.0 antes, así que lo descarté. Apliqué tu solución, y eso fue todo, ¡gracias!
Mikael Gramont

También tengo este problema. Seguí este código pero mi servidor nodejs todavía no es accesible desde afuera.
xybrek

Sí, lo mismo aquí.

1
no funcionó para mí
Jitendra Pancholi

No funcionó para mí en MacOS Sierra con Node v8.1.3
Liran H

4

Según su salida de netstat, el puerto 8080 está abierto solo para 127.0.0.1, que es localhost, por lo tanto, el acceso desde el servidor funciona (que es localhost), pero no desde cualquier otro lugar.

El resultado correcto debería verse como

0.0.0.0:8080

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.