Die Node.js-Site lehnt die Verbindung ab

8

Ich habe ein neues Ubuntu-Instanz-Setup auf Amazon EC2. Auf dieser Instanz befindet sich ein Knoten-Webserver. Wenn ich versuche, meine Website aufzurufen, wird in meinem Browser eine Fehlermeldung angezeigt. Der Fehler ist:

Connect: Connection refused

Ich habe bestätigt, dass ich die Maschine anpingen kann. Beim Eingeben http://[ipAddress]oder http://[ipAddress]:8080in meinem Browser wird jedoch der obige Fehler angezeigt. Wenn ich den Knoten-Webserver starte, heißt es:

Server listening on 8080

Ich habe die Portweiterleitung mit dem folgenden Befehl implementiert:

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

Ich glaube, ich habe die Firewall mit den folgenden Befehlen ordnungsgemäß geöffnet:

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

Ich stecke fest. Ich weiß nicht, warum ich eine "Verbindung abgelehnt" bekomme. Ich würde mich sehr über jede Hilfe oder Erkenntnis freuen, die jemand geben kann. Zu diesem Zeitpunkt bin ich mir nicht sicher, ob diese Nachricht von Ubuntu oder vom Node-Server stammt. Darüber hinaus weiß ich nicht, wie ich dieses Problem aufspüren kann.

Danke für deine Hilfe. Es bedeutet mir viel.

user3284007
quelle
Überprüfen Sie, ob Port 80 in der Sicherheitsgruppe Ihrer Instanz zulässig ist
LinuxDevOps

Antworten:

2

Ihr Server hört höchstwahrscheinlich nicht auf, sondern [ipAddress]:8080nur auf localhost: 8080. Sie können dies mit netstat überprüfen. Sie müssen Ihren Server so konfigurieren, dass alle / geeigneten IP-Adressen abgehört werden. Wie dies zu tun ist, finden Sie in der Dokumentation.

user9517
quelle
Hallo Iain, danke für deine Antwort. Ich habe netstat ausgeführt und festgestellt, dass weder 80 noch 8080 in der Liste enthalten sind. Ich sehe drei TCP-Datensätze. Ich verstehe jedoch nicht, wonach ich suchen soll. Kennen Sie einen guten Link, der erklärt, wonach ich suche? Ich bin historisch gesehen kein Linux-Typ.
user3284007
Bitte beachten Sie, dass ich auch "netstat -a | egrep 'Proto | LISTEN'" ausgeführt habe und meinen Knotenserver nicht in der Liste gesehen habe.
user3284007
2
@ user3284007: versuchen netstat -tnl | grep 8080.
user9517
2

Ich hatte genau das gleiche Problem mit meiner ExpressJS-App, und es ist nicht Ihre Umleitung. Ich habe lange Zeit iptables und netstat gehackt, bis mir klar wurde, dass ich meine HOST-Variable in meiner server.js-Datei auf gesetzt hatte localhost. Hier war mein nicht funktionierender Code:

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

Fügen Sie einfach eine Hostvariable hinzu

var HOST = 'actual_server_goes_here...';

Und dann mach das:

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

Hoffe das hilft :)

Joshua Michael Waggoner
quelle
1

Sie möchten die serverAddress eingeben , damit sie auf der richtigen Netzwerkschnittstelle abhört :

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

Stellen Sie außerdem mit Amazon EC2 sicher, dass in der Verwaltungskonsole eine Sicherheitsgruppe an Ihre Computerinstanz angehängt ist, die den Zugriff auf diesen Port ermöglicht. (Mit diesen Sicherheitsgruppen können Sie die EC2-Firewall konfigurieren.)

hansvb
quelle
0

Sie müssen Ihre private IP verwenden, um sie abzuhören. Die private IP-Adresse der Instanz (mehrere IP-Adressen werden aufgelistet, wenn mehr als eine Netzwerkschnittstelle zur Instanz vorhanden ist). Es wird in der EC2-Verwaltungskonsole pro Instanz angezeigt

Lior
quelle