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

13

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 está ou deveria estar 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 diabos 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 muito confuso.

Eu adicionarei isso, caso isso ajude, mas eu 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

Eu posso acessar meu site regular que está sendo executado na porta 80 no apache, mas o servidor node.js está inacessível de fora. Acessá-lo do próprio servidor funciona bem.

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

Qualquer ajuda muito apreciada!

    
por Mikael Gramont 20.05.2011 / 08:08

3 respostas

25

Obrigado por adicionar a última saída do netstat, isso realmente ajudou. Você não pode acessar node.js de fora porque está escutando no IP do host local, isto é, 127.0.0.1. Você precisa configurar o node.js para escutar em 0.0.0.0 para que ele possa 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/');
    
por 20.05.2011 / 08:26
4

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

A saída certa deve se parecer com

0.0.0.0:8080
    
por 20.05.2011 / 08:19
0

Eu tive o mesmo problema.

Eu fiz o seguinte

  1. No Google Cloud Console, você precisa ativar as portas que você está usando para o Nodejs
  2. use o seguinte link para ativar as mesmas portas no Ubuntu Server link

  3. E depois deste último o que eu estava perdendo é  Rede - > Regras de firewall - > default-allow-internal - > todo o endereço IP 0.0.0.0/0

Concluído

    
por 05.04.2017 / 13:30