O Node.js não está acessível a partir de IPs externos no Ubuntu

17

Tenho certeza que isso é muito noobish, então me perdoe. Estou tentando executar um servidor node.js na porta 8080 do meu ubuntu 10.04.

Aqui está o resultado do iptables -L no 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

E aqui está o resultado do nmap -p 8080 (editado o endereço IP porque tudo é ou deve estar bem aberto)

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 que na terra 8080 é visto como fechado? Adicionar isso não ajudou:

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

Estou realmente confuso.

Vou acrescentar, caso ajude, mas não sei

 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

Posso acessar meu site normal saindo da porta 80 no apache, mas o servidor node.js está inacessível do lado de fora. Acessá-lo a partir do próprio servidor funciona bem.

Então, minha pergunta é: como eu iria depurar isso? Poderia haver algo além de iptables bloqueando algumas portas? Como descubro o que é?

Qualquer ajuda muito apreciada!

Mikael Gramont
fonte
Para aqueles que vieram aqui pelo Google: Se você hospedou o serviço na nuvem do Google e enfrentou esse problema, primeiro certifique-se de adicionar a porta nas regras de exceção do firewall na nuvem e no firewall do sistema operacional
Atul

Respostas:

29

Obrigado por adicionar a última saída netstat, realmente ajudou. Você não pode acessar o node.js de fora porque está escutando o IP do host local, ou seja, 127.0.0.1. Você precisa configurar o node.js para escutar no 0.0.0.0, para poder aceitar conexões em todos os IPs da sua 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/');
Hameedullah Khan
fonte
Eu suspeitava disso, mas nunca me deparei com um 0.0.0.0 antes, então desconsiderei. Eu apliquei sua correção, e foi isso, obrigado!
Mikael Gramont
Eu também tenho esse problema. Eu segui esse código, mas meu servidor nodejs ainda não está acessível de fora.
Xybrek
Sim, o mesmo aqui.
1
não funcionou para mim
Jitendra Pancholi
Não funcionou para mim no MacOS Sierra com v8.1.3 Node
Liran H
4

De acordo com a saída do netstat, a porta 8080 está aberta apenas para 127.0.0.1, que é localhost, portanto, o acesso a partir do servidor funciona (que é localhost), mas não de qualquer outro lugar.

A saída correta deve se parecer com

0.0.0.0:8080
pensador livre
fonte