【发布时间】:2019-08-04 20:29:43
【问题描述】:
我在同一个 VPC 中的两个 EC2 实例上设置了我的 Django 应用程序和 PostgreSQL 数据库。应用程序在子网连接到互联网网关的实例上;数据库位于具有没有 Internet 网关的子网的实例上。
应用实例的私有IP是10.0.0.164;数据库实例的私有 IP 是 10.0.1.136。
当我尝试将我的 Django 应用程序连接到数据库时,出现错误
无法连接到服务器:连接被拒绝
服务器是否正在运行 在主机“10.0.1.136”上并接受端口 5432 上的 TCP/IP 连接?
但是,我已允许数据库实例上端口 5432 上的入站 TCP 流量。我托管数据库的实例的安全组规则:
入站:允许来自托管 Django 应用程序的实例的内部 IP 地址 (10.0.0.164/32) 的所有端口中的所有 TCP 和 ICMP IPV4&IPV6 流量
(我的入站规则截图https://imgur.com/a/HNbrIDm)
出站:允许所有端口中的所有流量到任何地方
我在数据库 EC2 实例上的 pg_hba.conf 文件:
# 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
【问题讨论】:
-
您使用的是哪个 Linux 发行版?确保在操作系统防火墙上允许端口 5432。例如,在 Ubuntu 中,您必须执行
sudo ufw allow 5432。 -
@Pedro Ubuntu 16.04。感谢您提醒我包含该信息!我会试试那个命令
-
@Pedro 你的意思是我必须对数据库实例或应用程序实例执行
sudo ufw allow 5432吗? -
只是为了明确您的数据库是一个 EC2 实例,对吗?不是 RDS
-
@Pedro 是 EC2,不是 RDS
标签: django postgresql amazon-web-services amazon-ec2