Node.js non è accessibile da IP esterni su Ubuntu


18

Sono sicuro che questo è molto noobish, quindi perdonami. Sto cercando di eseguire un server node.js sulla porta 8080 di Ubuntu 10.04.

Ecco il risultato di iptables -L sul server:

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

Ed ecco il risultato di nmap -p 8080 (modificato l'indirizzo IP perché tutto è o dovrebbe essere spalancato)

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

Perché mai 8080 è visto come chiuso? L'aggiunta di questo non ha aiutato:

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

Sono veramente confuso.

Aggiungerò questo, nel caso in cui aiuti, ma non lo so

 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 accedere al mio normale sito Web in esecuzione dalla porta 80 su apache, ma il server node.js è inaccessibile dall'esterno. L'accesso dal server stesso funziona correttamente.

Quindi la mia domanda è: come potrei fare per eseguire il debug di questo? Potrebbe esserci qualcos'altro oltre a iptables che blocca alcune porte? Come faccio a sapere di cosa si tratta?

Qualsiasi aiuto molto apprezzato!


A coloro che sono venuti qui tramite Google: se hai ospitato un servizio su Google cloud e stai affrontando questo problema, assicurati
Atul

Risposte:


30

Grazie per aver aggiunto l'ultimo output di netstat, mi ha davvero aiutato. Non puoi accedere a node.js dall'esterno perché è in ascolto sull'IP localhost, ad esempio 127.0.0.1. Devi configurare node.js per l'ascolto su 0.0.0.0 in modo che possa accettare connessioni su tutti gli IP della tua macchina.

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/');

Lo sospettavo, ma non mi ero mai imbattuto in un 0.0.0.0 prima, quindi l'ho ignorato. Ho applicato la tua correzione, e grazie, grazie!
Mikael Gramont,

Ho anche questo problema. Ho seguito questo codice ma il mio server nodejs non è ancora accessibile dall'esterno.
xybrek,

Si, lo stesso qui.

1
non ha funzionato per me
Jitendra Pancholi il

Non ha funzionato per me su MacOS Sierra con Node v8.1.3
Liran H

4

Secondo il tuo output netstat, la porta 8080 è aperta solo per 127.0.0.1 che è localhost, quindi l'accesso dal server funziona (che è localhost), ma non da nessun'altra parte.

L'output giusto dovrebbe apparire come

0.0.0.0:8080

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.