0

Ich habe einen Node-Server auf einer EC2-Instanz gehostet, die versucht, eine Verbindung zu Postgres herzustellen, die auf derselben Instanz ausgeführt werden. Wenn ich den Server zu starten erhalte ich einen ECONNREFUSED Fehler an den db:Verbindung zu Postgres auf EC2 nicht möglich: ECONNREFUSED

Unable to connect to the database: SequelizeConnectionRefusedError: connect ECONNREFUSED x.x.x.x:5432

ich das Sequelize ORM-Paket von NPM bin mit:

import Sequelize from 'sequelize'; 
const db = new Sequelize('postgres://[email protected]/unloadx' {dialect: 'postgres'}); 

Postgres auf der Instanz ausgeführt wird, und ich habe Port 5432 ist in meiner eingehenden Sicherheitsregel geöffnet. Ich kann bestätigen, dass Postgres mit ps aux | grep postgres ausgeführt wird, die mehrere Postgres bezogenen Prozesse zeigt, und netstat -anp --tcp bestätigt, dass Postgres auf dem Port zu lauschen erscheint:

Active Internet connections (servers and established) 
Proto Recv-Q Send-Q Local Address   Foreign Address   State  PID/Program name 
tcp6  0  0 ::1:5432    :::*     LISTEN  - 

Aber wenn ich den Port mit nmap x.x.x.x -p 5432 scannen zeigt es, dass der Portstatus ist geschlossen. Pro nmap bedeutet dies, dass der Port erreichbar ist, aber keine Anwendung zuhört, die auf Pakete antworten kann.

Schätzen Sie jede Hilfe bei der Herstellung der Verbindung.

Antwort

1

Ein Problem ist, dass Sie die öffentliche IP-Adresse verwenden. Das bedeutet, dass Ihre Datenbankverbindung grundsätzlich ins Internet und zurück geht. Dadurch wird verhindert, dass die Sicherheitsgruppenregel funktioniert, und es treten Sicherheits- und Latenzprobleme auf.

Wenn Sie versuchen, eine Verbindung von einem anderen Server in der VPC herzustellen, möchten Sie eine Verbindung über die private IP herstellen. Da es sich jedoch um dieselbe Instanz handelt, können Sie die Sicherheitsgruppenregel löschen und einfach localhost oder 127.0.0.1 verwenden.

+0

Das war alles, danke. FWIW 'localhost' funktionierte aber nicht 127.0.0.1 – aeb0

0

Was lässt Sie denken, dass netstat zeigt, dass Postgres auf den Port hört? Wenn dies der Fall wäre, würden Sie etwas in der Spalte PID/Programm sehen.

Wenn Ihr Postgres-Server in der gleichen Box wie Ihre Knoten-App ausgeführt wird, sollten Sie den Internet-Port nicht über Ihre AWS-Sicherheitsregeln öffnen und sollten dies wahrscheinlich nur tun, wenn Sie darauf zugreifen müssen von anderswo. Dann können Sie Ihre Verbindungszeichenfolge ändern localhost oder 127.0.0.1

Schließlich zu treffen, stellen Sie sicher, dass Sie Setup-Postgres-Server haben richtig über die docs

+0

Guter Punkt - es ist seltsam, dass Postgres nicht in der Programmnamenspalte angezeigt wird. Aber da es einen Prozess für den postgres-Standardport gibt und der oben erwähnte Fix zum Ändern der öffentlichen IP-Adresse auf localhost anscheinend funktioniert hat, scheint der unbenannte Prozess für Postgres zu funktionieren – aeb0

Verwandte Themen