标题可能使它看起来像是SO上一些现有问题的重复,但我认为这不是某种方式。
但是我无法终生使这些线程的答案起作用,我不想在这些线程上提问,而是想创建自己的问题,我想先讨论一下我的设置,然后再讨论我的问题,然后我尝试过的
我的服务器设置是这样的,我有一个地方(实际的物理机)和VPS我租房子住,无论是在Centos7.x,PostgreSQL10,PHP 7.x和Python的2.X正在运行,BOTH可以ping和通过VPN互相ssh很好。
两者都可以通过PHP,Python,PSQL终端连接到各自的数据库
在我的VPS服务器上,可以完全使用Python(psycopg2),PHP(php-pgsql)和Terminal(psql)连接到本地服务器的PostgreSQL数据库。
在我的本地服务器上,我可以使用Python(psycopg2)和Terminal(psql)EXCEPT通过PHP(php-pgsql)连接到我的VPS PostgreSQL
每当我通过PHP连接到VPS的PostgreSQL时,都会像其他所有人一样收到此错误
pg_connect(): Unable to connect to PostgreSQL server:
could not connect to server: Permission denied
Is the server running on host "123.456.0.789" and accepting TCP/IP connections on port 5432?
这是我所做的。
这些是我的netstat的结果
#netstat -na | grep 5432
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN
tcp6 0 0 :::5432 :::* LISTEN
tcp6 0 94 ::1:55110 ::1:5432 ESTABLISHED
tcp6 0 0 ::1:5432 ::1:55060 ESTABLISHED
tcp6 0 0 ::1:5432 ::1:55110 ESTABLISHED
tcp6 12 0 ::1:5432 ::1:55108 ESTABLISHED
tcp6 0 12 ::1:55108 ::1:5432 ESTABLISHED
tcp6 0 0 ::1:55060 ::1:5432 ESTABLISHED
unix 2 [ ACC ] STREAM LISTENING 31102 /var/run/postgresql/.s.PGSQL.5432
unix 2 [ ACC ] STREAM LISTENING 31104 /tmp/.s.PGSQL.5432
iptables
#iptables-save | grep 5432
-A IN_public_allow -p tcp -m tcp --dport 5432 -m conntrack --ctstate NEW,UNTRACKED -j ACCEPT
增强力量
#getenforce
Disabled
Selinux
#/usr/sbin/sestatus | grep SELinux
SELinux status: disabled
#sudo setsebool -P httpd_can_network_connect_db 1
setsebool: SELinux is disabled.
postgresql.conf
listen_addresses = '*'
port = 5432
pg_hba.conf(我只是更改了要在此处发布的ip)我尝试使用trust
,但是它仍然相同
# "local" is for Unix domain socket connections only
local all all password
# IPv4 local connections:
host all all 127.0.0.1/32 password
host all all 123.456.0.1/32 password
host all all 123.456.0.11/32 password
host all all 123.456.0.20/32 password
# IPv6 local connections:
host all all ::1/128 password
编辑开始:我的PHP pg_connect代码(我只是为此帖子更改了IP,但它指向了VPS IP)
$pgcon = pg_connect("dbname=database1 user=some_user password=some_password host=123.456.0.789");
编辑结束:==
我想强调一下,这两个服务器都可以通过其他方式相互连接,并可以通过自己的PostgreSQL数据库进行连接,除了我的本地服务器外,它无法使用PHP连接到VPS PostgreSQL。
VPS到自身(本地主机连接)
VPS to Self via PHP is OK
VPS to Self via Python is OK
VPS to Self via PSQL(Terminal) is OK
VPS到本地服务器(使用本地服务器的VPN IP连接)
VPS to Local Server via PHP is OK
VPS to Local Server via Python is OK
VPS to Local Server via PSQL(Terminal) is OK
本地服务器到自己(本地主机连接)
Local Server to Self via PHP is OK
Local Server to Self via Python is OK
Local Server to Self via PSQL(Terminal) is OK
本地服务器到VPS(通过VPN和公共IP使用VPS的IP连接)
Local Server to VPS via Python is OK
Local Server to VPS via PSQL(Terminal) is OK
Local Server to VPS via PHP Is NOT OK
对于长线程,我感到非常抱歉,我想提供尽可能多的信息。
让我们按类型划分错误。我对您的案件和发现的内容进行了几次测试:
如果我们弄乱了连接参数(例如,错误的端口或IP地址),则会收到错误消息“无法连接到服务器:连接被拒绝”或“操作超时服务器正在主机“ 128.0.0.1”上运行并接受”)
如果我们弄乱了凭据,则会收到错误消息“致命:用户密码验证失败...”。
仅当您没有从PHP库打开TCP连接的权限时,才可以抛出拒绝权限。
请再次检查是否像我一样在本地服务器上禁用了SElinux,这仍然是解决问题的最接近的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句