База данных PostgreSQL на EC2: соединение отказано - PullRequest
0 голосов
/ 14 марта 2019

У меня установлено приложение Django и база данных PostgreSQL на двух экземплярах EC2 в одном и том же VPC.Приложение находится в случае, когда подсеть подключена к интернет-шлюзу;база данных находится в экземпляре с подсетью, у которой нет интернет-шлюза.

Частный IP-адрес экземпляра приложения - 10.0.0.164;частный IP-адрес экземпляра базы данных - 10.0.1.136.

Когда я пытаюсь подключить свое приложение Django к базе данных, я получаю сообщение об ошибке

не удалось подключиться к серверу: соединение отклонено
Сервер работает на хосте "10.0.1.136" и принимает соединения TCP / IP через порт 5432?

Однако я разрешил входящий трафик TCP через порт 5432 в экземпляре базы данных.Правила моей группы безопасности для экземпляра, на котором размещена база данных:

Входящий: разрешить весь трафик TCP и ICMP IPV4 и IPV6 во все порты с внутреннего IP-адреса экземпляра, на котором размещено приложение Django (10.0.0.164/32)

(снимок экрана с моими входящими правилами https://imgur.com/a/HNbrIDm)

Исходящий: разрешить весь трафик во всех портах в любом месте

Мой pg_hba.conf файл в экземпляре базы данных EC2:

# Database administrative login by Unix domain socket
local   all             postgres                                md5

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             10.0.0.164/32           trust
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   articles        postgres                                md5
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

Мой файл postgresql.conf имеет адрес прослушивания '10 .0.0.164, 127.0.0.1' и порт '5432'.

Настройки моей базы данных в Django settings.py:

ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'articles',
            'USER': 'postgres',
            'PASSWORD': 'password',
            'HOST': '10.0.1.136',
            'PORT': '5432',

Что еще можно сделать, чтобы экземпляр базы данных принял соединение?

РЕДАКТИРОВАТЬ: мои экземпляры EC2 работают под управлением Ubuntu 16.04

РЕДАКТИРОВАТЬ: это то, что я получил от запуска sudo lsof -nP -i | grep LISTEN в экземпляре базы данных: postgres 1823 postgres 6u IPv4 19766 0t0 TCP 127.0.0.1:5432 (LISTEN)

Я запустил sudo ufw allow 5432 и все та же ошибка

Когда я запустил netstat -nlt в экземпляре базы данных, я не вижу порт 5432

Ответы [ 3 ]

1 голос
/ 14 марта 2019

postgres 1823 postgres 6u IPv4 19766 0t0 TCP 127.0.0.1:5432 (LISTEN)

Это ваша проблема, ваш postgres привязан только к localhost.

Измените IP, который postgresпрослушивает, отредактировав файл /var/lib/pgsql/data/postgresql.conf или / etc / postgresql / «Номер версии здесь» /main/postgresql.conf и изменив адрес прослушивания следующим образом ...

listen_addresses='127.0.0.1 10.0.1.136'

вы должны указать адреса для прослушивания, как у меня, без запятых в более поздних версиях postgres

Я надеюсь, что это решит вашу проблему!:)

1 голос
/ 14 марта 2019

Эта страница решила мою проблему: https://zaiste.net/postgresql_allow_remote_connections/

Я запустил sudo netstat -plunt |grep postgres и обнаружил, что мой Postgres действительно работает на порту 1823 (ПОЧЕМУ). Я отредактировал свой postgresql.conf, чтобы разрешить все listen_addresses (listen_addresses = '*'), а затем изменил настройки базы данных Django на порт 1823

0 голосов
/ 14 марта 2019

Как вы упомянули, что ваша БД находится в экземпляре EC2, проверьте входящие правила экземпляра.Видел образ входящих правил.Источник должен быть 0.0.0.0/0,::/0 вместо экземпляра ip

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...