Node.jsはUbuntuの外部IPからアクセスできません


17

これは非常に嫌なことだと思うので、許してください。私はubuntu 10.04のポート8080でnode.jsサーバーを実行しようとしています。

サーバー上のiptables -Lの結果は次のとおりです。

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

そして、nmap -p 8080の結果がここにあります(すべてが広く開かれているか、または開かれるべきであるため、IPアドレスを編集しました)

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

いったいなぜ8080は閉じられているように見えるのですか?これを追加しても役に立ちませんでした:

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

私は本当に混乱しています。

これが役立つ場合に備えてこれを追加しますが、わかりません

 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

Apacheのポート80で実行されている通常のWebサイトにアクセスできますが、node.jsサーバーには外部からアクセスできません。サーバー自体からアクセスすることで問題なく動作します。

だから私の質問は、これをどのようにデバッグするのですか?一部のポートをブロックするiptables以外のものがありますか?どうすればそれを知ることができますか?

助けていただければ幸いです!


Google経由でここに来た人へ:Googleクラウドでサービスをホストし、この問題に直面している場合
Atul

回答:


29

最後のnetstat出力を追加していただき、ありがとうございます。localhost IP、つまり127.0.0.1でリッスンしているため、外部からnode.jsにアクセスできません。0.0.0.0でリッスンするようにnode.jsを構成して、マシンのすべてのIPで接続を受け入れることができるようにする必要があります。

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

私はそれを疑ったが、以前は0.0.0.0に出会ったことがなかったので、無視した。私はあなたの修正を適用しました、そしてそれはそれをしました、ありがとう!
ミカエルグラモント

私もこの問題を抱えています。このコードに従いましたが、nodejsサーバーにはまだ外部からアクセスできません。
xybrek

ええ、ここも同じです。

1
私のために動作しませんでした
Jitendra Pancholi

Node v8.1.3のMacOS Sierraで動作しませんでした
Liran H

4

netstatの出力によると、ポート8080はlocalhostである127.0.0.1に対してのみ開いているため、サーバー(localhost)からのアクセスは機能しますが、他の場所からはアクセスできません。

正しい出力は次のようになります

0.0.0.0:8080

0

同じ問題がありました。

私は次のことをしました

  1. Google Cloud Consoleでは、Nodejsに使用しているポートを有効にする必要があります
  2. 次のリンクを使用して、Ubuntu Server https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-14-04で同じポートを有効にし ます

  3. この最後の1つが欠けていたのは、ネットワーク->ファイアウォールルール-> default-allow-internal-> all IPアドレス0.0.0.0/0です

この画像をご覧ください

完了

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.