Node.js tidak dapat diakses dari IP eksternal di Ubuntu

17

Saya yakin ini sangat noobish, jadi maafkan saya. Saya mencoba menjalankan server node.js pada port 8080 dari Ubuntu 10.04 saya.

Inilah hasil dari iptables -L di 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

Dan inilah hasil dari nmap -p 8080 (diedit alamat ip karena semuanya terbuka lebar)

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

Mengapa 8080 dianggap tertutup? Menambahkan ini tidak membantu:

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

Saya sangat bingung.

Saya akan menambahkan ini, kalau-kalau itu membantu, tapi saya tidak tahu

 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

Saya dapat mengakses situs web reguler saya yang menjalankan port 80 pada apache, tetapi server node.js tidak dapat diakses dari luar. Mengaksesnya dari server sendiri berfungsi dengan baik.

Jadi pertanyaan saya adalah: bagaimana saya bisa men-debug ini? Mungkinkah ada sesuatu selain iptables yang memblokir beberapa port? Bagaimana saya mengetahui apa itu?

Setiap bantuan sangat dihargai!

Mikael Gramont
sumber
Untuk mereka yang datang ke sini melalui Google: Jika Anda telah meng-host layanan di Google cloud dan menghadapi masalah ini, pertama -
Atul

Jawaban:

29

Terima kasih telah menambahkan keluaran netstat terakhir, ini sangat membantu. Anda tidak dapat mengakses node.js dari luar karena sedang mendengarkan di IP host lokal yaitu 127.0.0.1. Anda perlu mengkonfigurasi node.js untuk mendengarkan pada 0.0.0.0 sehingga akan dapat menerima koneksi pada semua IP mesin Anda.

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
sumber
Saya menduga itu, tetapi tidak pernah menemukan 0,0.0.0 sebelumnya, jadi abaikan saja. Saya menerapkan perbaikan Anda, dan itu berhasil, terima kasih!
Mikael Gramont
Saya juga punya masalah ini. Saya mengikuti kode ini tetapi server nodejs saya masih tidak dapat diakses dari luar.
xybrek
Ya, sama di sini.
1
tidak bekerja untuk saya
Jitendra Pancholi
Tidak bekerja untuk saya di MacOS Sierra dengan Node v8.1.3
Liran H
4

Menurut output netstat Anda, port 8080 terbuka hanya untuk 127.0.0.1 yang merupakan localhost, karenanya mengakses dari server berfungsi (yang adalah localhost), tetapi tidak dari tempat lain.

Output yang tepat akan terlihat seperti

0.0.0.0:8080
pemikir bebas
sumber