Node.js nie jest dostępny z zewnętrznych adresów IP na Ubuntu

18

Jestem pewien, że to bardzo noobish, więc wybacz mi. Próbuję uruchomić serwer node.js na porcie 8080 mojego systemu Ubuntu 10.04.

Oto wynik działania iptables -L na serwerze:

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

A oto wynik nmap -p 8080 (edytował adres IP, ponieważ wszystko jest lub powinno być szeroko otwarte)

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

Dlaczego na ziemi 8080 jest postrzegany jako zamknięty? Dodanie tego nie pomogło:

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

Jestem bardzo zmieszany.

Dodam to, na wypadek, gdyby to pomogło, ale nie wiem

 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

Mogę uzyskać dostęp do mojej zwykłej strony internetowej uruchamianej z portu 80 na Apache, ale serwer node.js jest niedostępny z zewnątrz. Dostęp do niego z samego serwera działa dobrze.

Więc moje pytanie brzmi: jak miałbym to debugować? Czy może istnieć coś innego niż iptables blokujący niektóre porty? Jak mogę się dowiedzieć, co to jest?

Każda pomoc bardzo doceniana!

Mikael Gramont
źródło
Do tych, którzy przybyli tutaj przez Google: Jeśli hostujesz usługę w chmurze Google i masz do czynienia z tym problemem, najpierw upewnij się, że dodałeś port w wyjątkach od zapory w chmurze, a także w zaporze systemu operacyjnego
Atul

Odpowiedzi:

30

Dzięki za dodanie ostatniego wyniku netstat, to naprawdę pomogło. Nie możesz uzyskać dostępu do node.js z zewnątrz, ponieważ nasłuchuje na IP hosta lokalnego, tj. 127.0.0.1. Musisz skonfigurować node.js, aby nasłuchiwał w wersji 0.0.0.0, aby mógł akceptować połączenia na wszystkich adresach IP twojego komputera.

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
źródło
Podejrzewałem to, ale nigdy wcześniej nie natknąłem się na 0.0.0.0, więc zignorowałem to. Zastosowałem twoją poprawkę i zrobiłem to, dzięki!
Mikael Gramont,
Mam też ten problem. Postępowałem zgodnie z tym kodem, ale mój serwer nodejs nadal nie jest dostępny z zewnątrz.
xybrek,
Tak, to samo tutaj.
1
nie działało dla mnie
Jitendra Pancholi
Nie działało dla mnie na MacOS Sierra z Node v8.1.3
Liran H
4

Zgodnie z danymi wyjściowymi netstat, port 8080 jest otwarty tylko dla 127.0.0.1, który jest hostem lokalnym, stąd dostęp z serwera działa (który jest localhost), ale nie z żadnego innego miejsca.

Właściwe wyjście powinno wyglądać

0.0.0.0:8080
wolno-myśliciel
źródło