web-dev-qa-db-ja.com

Node.jsサイトが接続を拒否しています

Amazon EC2に新しいUbuntuインスタンスをセットアップしました。このインスタンスにはノードWebサーバーがあります。 Webサイトにアクセスしようとすると、ブラウザーでエラーが発生します。エラーは:

Connect: Connection refused

マシンにpingできることを確認しました。しかし、ブラウザにhttp://[ipAddress]またはhttp://[ipAddress]:8080と入力すると、上記のエラーが発生します。ノードWebサーバーを起動すると、次のように表示されます。

Server listening on 8080

次のコマンドを使用してポート転送を実装しました。

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 
-j REDIRECT --to-port 8080

次のコマンドを使用してファイアウォールを適切に開いたと思います。

iptables -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT

行き詰まっています。 「接続が拒否されました」という理由がわかりません。誰かが提供できるヘルプや洞察を心から感謝します。現時点では、このメッセージがUbuntuから送信されたものか、Nodeサーバーから送信されたものかはわかりません。それ以上に、この問題を追跡する方法に慣れていません。

ご協力ありがとうございました。私にとっては大きな出来事です。

8
user3284007

サーバーは[ipAddress]:8080をリッスンしていない可能性が高いです。おそらくlocalhost:8080のみをリッスンしています。 netstat を使用してこれを確認できます。すべての/適切なIPアドレスをリッスンするようにサーバーを構成する必要があります。これを行う方法は間違いなくドキュメントに記載されています。

2
user9517

私のExpressJSアプリでもまったく同じ問題がありましたが、それはあなたの再ルーティングではありません。 server.jsファイルのHost変数がlocalhostに設定されていることに気づくまで、長い間iptablesとnetstatをハッキングしていました。ここに私の非稼働コードがあります:

app.listen(PORT, 'localhost', function(err) {
    if (err) return console.log(err);
    console.log("Listening at http://localhost:%s", PORT);
});

ホスト変数を追加するだけです

var Host = 'actual_server_goes_here...';

そして、これを行います:

app.listen(PORT, Host, function(err) {
  if (err) return console.log(err);
  console.log("Listening at http://%s:%s", Host, PORT);
});

お役に立てれば :)

serverAddressと入力して、適切なネットワークインターフェイスでリッスンするようにします。

http.createServer(function (req, rsp) () {
    ...
}).listen(serverPort, serverAddress);

また、Amazon EC2を使用して、Management ConsoleでマシンインスタンスにSecurity Groupが接続されており、そのポートでのアクセスを許可していることを確認してください。 (これらのセキュリティグループでは、EC2-ファイアウォールを構成できます。)

1
hansvb

あなたはそれを聞くためにあなたのプライベートIPを使用する必要があります。インスタンスのプライベートIPアドレス(インスタンスに複数のネットワークインターフェースがある場合、複数のIPアドレスがリストされます)。インスタンスごとにEC2管理コンソールに表示されます

0
Lior