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

标签 php apache postgresql virtual-machine

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

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

浏览器的错误输出是:

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

第 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) guest 具有 ip 10.0.2.15

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

pg_hba.conf:

host all all 0.0.0.0/0 信任

postgresql.conf:

listen_addresses = '*'

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

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

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

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

提前致谢,请随时询问我可能忘记的更多规范。

最佳答案

主机和 guest 必须在同一网络上。您必须为两者分配正确的地址,例如主机上的 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 到访客的任何连接尝试。

关于PHP - 连接到虚拟机中的 PostgreSQL 数据库失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40008415/

相关文章:

apache - PhpMailer 能够从 Windows 但不能从 CentOS 发送邮件

postgresql - 使用 Slick 进行多重 OR 过滤

php - 无法删除任何元组

php - PHP 应用程序中的 MySQL 字符编码 (öä)

php - PHP 中的持久性 HTTP GET 变量

php - 如何在 PHP 中重写 URL?

php - while关闭后如何保留数组内容

apache - 为bm25相似性配置solr

postgresql - Haskell 堆栈构建错误 : While building package postgresql-libpq-0. 9.4.3

database - Postgres : Dump schema-only but leave data intact for a few tables