问题:PHP - 连接到虚拟机中的 PostgreSQL 数据库失败

我正在尝试通过 php 脚本连接到虚拟机中的 PostgreSQL 数据库,但未成功。

我从主机(Windows 8.1)执行 php,postgresql 在虚拟机(Debian 8.6)上。我使用虚拟盒子。

浏览器的错误输出是:

警告:pg_connect():无法连接到 PostgreSQL 服务器:无法连接到服务器:连接超时 (0x0000274C/10060) 服务器是否在主机“10.0.2.15”上运行并接受端口 5432 上的 TCP/IP 连接?在第 11 行的 C:\xampp\htdocs\pg_test.php

第 11 行是pg_connect($conn_string)

传递给pg_connect($conn_string)的参数是:

$host = "host=10.0.2.15";
$port = "port=5432";
$dbname = "dbname=postgres";
$user = "user=user_switch";
$password = "password=switch";
$conn_string = "$host $port $dbname $user $password";
pg_connect($conn_string);

我使用host=10.0.2.15是因为我检查了(使用 ifconfig)来宾有 ip10.0.2.15

我修改了文件pg_hba.confpostgresql.conf,以包含以下行:

pg_hba.conf:

host all all 0.0.0.0/0 trust

postgresql.conf:

listen_addresses = '*'

iptables我添加了规则-A INPUT -p tcp -m cp --dport 5432 -j ACCEPT

我还尝试禁用 Windows 主机上的防火墙。

在某些地方,他们说它的 SELinux 阻止了连接,但我没有在来宾中安装它。

我可以使用命令psql -d postgres -U user_switch -W -h localhost在来宾中使用用户“user_switch”成功连接到数据库,其中提示我输入密码。

在此先感谢,请随时询问我可能忘记的更多规格。

解答

主机和来宾必须在同一网络上。您必须为两者分配正确的地址,例如主机上的192.168.56.1和来宾上的192.168.56.101。出于安全原因,您应该删除允许从任何 IP 连接的行(0.0.0.0/0)并将以下行添加到pg_hba.conf:

host  all  all  192.168.56.0/24  trust

并重新启动 PostgreSQL。这允许任何来自192.168.56.x的访客连接尝试。

Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐