PHP - Не удалось подключиться к базе данных PostgreSQL на виртуальной машине
Я пытаюсь подключиться к базе данных PostgreSQL на виртуальной машине с помощью php-скрипта, но безуспешно.
Я запускаю php с хоста (Windows 8.1), а postgresql находится на виртуальной машине (Debian 8.6). Я использую VirtualBox.
Вывод ошибки из браузера выглядит следующим образом:
Предупреждение: pg_connect(): Не удалось подключиться к серверу PostgreSQL: не удалось подключиться к серверу: Истекло время ожидания подключения (0x0000274c/10060) Сервер работает на хосте "10.0.2.15" и принимать соединения TCP/IP на порту 5432? в 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), что у гостя есть 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 блокирует соединение, но у меня его нет в гостевой системе.
Я могу успешно подключиться к базе данных с помощью пользователя "user_switch" в гостевой с помощью команды psql -d postgres -U user_switch -W -h localhost
, в которой он запрашивает у меня пароль.
Заранее спасибо, пожалуйста, не стесняйтесь спрашивать о дополнительных спецификациях, которые я, возможно, забыл.
1 answers
Хост и гость должны находиться в одной сети. Вы должны назначить правильный адрес обоим, например 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
.