0

У меня есть сервер Node, размещенный в экземпляре EC2, который пытается подключиться к Postgres, запущенному в том же экземпляре. Когда я начинаю сервер я получаю ECONNREFUSED ошибки в БД:Невозможно подключиться к Postgres на EC2: ECONNREFUSED

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

Я использую пакет Sequelize ORM от НОГО:

import Sequelize from 'sequelize'; 
const db = new Sequelize('postgres://[email protected]/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 это означает, что порт доступен, но не имеет приложения, слушающего его, чтобы реагировать на пакеты.

Цените любую помощь при подключении.

ответ

1

Одна из проблем заключается в том, что вы используете общедоступный IP-адрес. Это означает, что ваше соединение с базой данных в основном выходит в Интернет и обратно. Это предотвратит работу правила группы безопасности и вызовет проблемы безопасности и задержки.

Если вы пытались подключиться с другого сервера в VPC, вы хотели бы подключиться с помощью частного IP-адреса. Однако, поскольку он находится в том же экземпляре, вы можете удалить правило группы безопасности и просто использовать localhost или 127.0.0.1.

+0

Это был его, спасибо. FWIW «localhost» работал, но не 127.0.0.1 – aeb0

0

Что заставляет вас думать, что netstat показывает, что postgres слушает порт? Если это так, вы увидите что-то в столбце PID/Program.

Кроме того, если ваш сервер postgres работает в том же поле, что и ваше приложение-узел, вам не нужно открывать порт в Интернете с помощью правил безопасности AWS и, вероятно, не стоит, если вам не нужен доступ к нему из других мест. После этого вы можете изменить строку соединения ударить локальные или 127.0.0.1

Наконец, убедитесь, что у Вас есть установка ваших Postgres сервер корректно через docs

+0

Хорошая точка - странно, что postgres не отображается в столбце имени программы. Но так как есть процесс на порту postgres по умолчанию, и поскольку вышеупомянутое исправление об изменении публичного IP-адреса на localhost, похоже, сработало, неназванный процесс, похоже, для postgres – aeb0

Смежные вопросы