无法连接到EC2上的Postgres:ECONNREFUSED

时间:2016-08-08 19:24:06

标签: node.js postgresql amazon-web-services amazon-ec2 sequelize.js

我在EC2实例上托管了一个Node服务器,该实例尝试连接到在同一个实例上运行的Postgres。当我启动服务器时,我得到一个ECONNREFUSED错误到db:

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

我正在使用NPM的Sequelize ORM包:

import Sequelize from 'sequelize';
const db = new Sequelize('postgres://postgres@52.9.136.53/unloadx' {dialect: 'postgres'});

Postgres正在实例上运行,我在入站安全规则中打开了端口5432。我可以确认postgres正在运行ps aux | grep postgres,显示多个与postgres相关的进程,netstat -anp --tcp确认postgres似乎正在侦听端口:

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      -

但是当我用nmap x.x.x.x -p 5432扫描端口时,它显示端口状态已关闭。根据nmap,这意味着该端口是可访问的,但没有应用程序监听它能够响应数据包。

感谢任何有助于连接工作的帮助。

2 个答案:

答案 0 :(得分:1)

一个问题是您使用的是公共IP地址。这意味着您的数据库连接基本上是上网并返回。这将阻止安全组规则工作,并引入安全性和延迟问题。

如果您尝试从VPC中的其他服务器进行连接,则需要使用专用IP进行连接。但是,由于它位于同一实例上,因此您可以删除安全组规则,只需使用localhost127.0.0.1

答案 1 :(得分:0)

是什么让你认为netstat表明postgres正在监听端口?如果是,您可以在PID /程序列中看到一些内容。

此外,如果您的postgres服务器与您的节点应用程序在同一个盒子上运行,您不需要通过AWS安全规则打开到Internet的端口,除非您需要访问,否则可能不应该来自其他地方。然后,您可以将连接字符串更改为localhost或127.0.0.1

最后,确认您已通过docs

正确设置了postgres服务器