Node.js n'est pas accessible à partir des adresses IP externes sur Ubuntu

18

Je suis sûr que c'est très noobish, alors pardonnez-moi. J'essaie d'exécuter un serveur node.js sur le port 8080 de mon ubuntu 10.04.

Voici le résultat d'iptables -L sur le serveur:

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

Et voici le résultat de nmap -p 8080 (modification de l'adresse IP car tout est ou devrait être grand ouvert)

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

Pourquoi diable 8080 est-il considéré comme fermé? L'ajout de cela n'a pas aidé:

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

Je suis vraiment confus.

J'ajouterai ceci, au cas où cela aiderait, mais je ne sais pas

 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

Je peux accéder à mon site Web habituel à partir du port 80 sur apache, mais le serveur node.js est inaccessible de l'extérieur. L'accès à partir du serveur lui-même fonctionne bien.

Donc, ma question est: comment pourrais-je procéder pour déboguer cela? Pourrait-il y avoir autre chose que iptables bloquant certains ports? Comment savoir ce que c'est?

Toute aide très appréciée!

Mikael Gramont
la source
À ceux qui sont venus ici via Google: Si vous avez hébergé un service sur Google cloud et que vous rencontrez ce problème, assurez-vous d'abord d'avoir ajouté le port dans les règles d'exception du pare-feu cloud ainsi que dans le pare
Atul

Réponses:

30

Merci d'avoir ajouté la dernière sortie netstat, cela a vraiment aidé. Vous ne pouvez pas accéder à node.js de l'extérieur car il écoute sur IP localhost, c'est-à-dire 127.0.0.1. Vous devez configurer node.js pour écouter sur 0.0.0.0 afin qu'il puisse accepter les connexions sur toutes les IP de votre machine.

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
la source
Je m'en doutais, mais je n'ai jamais rencontré de 0.0.0.0 auparavant, donc je n'en ai pas tenu compte. J'ai appliqué votre correctif, et cela l'a fait, merci!
Mikael Gramont
J'ai aussi ce problème. J'ai suivi ce code mais mon serveur nodejs n'est toujours pas accessible de l'extérieur.
xybrek
Ouais pareil ici.
1
n'a pas fonctionné pour moi
Jitendra Pancholi
N'a pas fonctionné pour moi sur MacOS Sierra avec Node v8.1.3
Liran H
4

Selon votre sortie netstat, le port 8080 est ouvert uniquement pour 127.0.0.1 qui est localhost, donc l'accès à partir des travaux du serveur (qui est localhost), mais pas d'ailleurs.

La bonne sortie devrait ressembler à

0.0.0.0:8080
libre penseur
la source