我正在尝试通过php脚本连接到虚拟机中的PostgreSQL数据库,但是不成功。
我从主机执行php(Windows 8.1),postgresql在虚拟机(Debian 8.6)。我使用VirtualBox。
浏览器输出的错误是:
警告: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)来宾有ip 10.0.2.15
。
我修改了文件pg_hba.conf
和postgresql.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”成功连接到数据库,并在其中提示我输入密码。
提前致谢,请随时询问我可能忘记的更多规格。
答案 0 :(得分:2)
主机和来宾必须位于同一网络上。您必须为两者分配适当的地址,例如主机上的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
到来宾的任何连接尝试。