首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本地服务器不能使用PHP连接远程postgresql数据库,但本地终端可以连接

本地服务器不能使用PHP连接远程postgresql数据库,但本地终端可以连接
EN

Stack Overflow用户
提问于 2020-05-18 19:58:52
回答 1查看 881关注 0票数 1

标题可能会使这看起来像一个重复的一些现有的问题在这样,但它的方式,在某种程度上,在我看来。

81408633061735727749691

但是对于我的生活,我不能让这些线程的答案起作用,我不想在这些线程上问问题,我想创建我自己的问题,我想讨论我的设置,然后我的问题,然后我尝试了什么

我的服务器设置是这样的,我有一个本地的(一台实际的物理机器)和一个VPS,它们都运行在Centos7.x、PostgreSQL10、PHP7.x和Python-2.x,都可以通过VPN进行平和ssh。

两者都可以通过PHP、Python、PSQL终端连接到各自的数据库。

在我的VPS服务器上,我可以使用Python(psycopg2)、php(Pgsql)和终端(Psql)连接到本地服务器的PostgreSQL数据库。

在本地服务器上,我可以使用Python(psycopg2)和终端(Psql)连接VPS PostgreSQL,但通过PHP(php-pgsql)除外。

每当我通过PHP连接到VPS的PostgreSQL时,我就会像其他人一样得到这个错误

代码语言:javascript
复制
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?

以下是我所做的。

  1. On postgresql.conf set listen_address = "*“--这是OK
  2. 为两者添加了pg_hba条目--这是OK (python和终端可以同时连接)
  3. 端口5432/tcp都已启用和允许--这是禁用的OK
  4. Selinux --这是上面引用的线程的答案,但即使在重新启动之后,它对我也不起作用。

G 215

这些是我的netstat的结果

代码语言:javascript
复制
#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

代码语言:javascript
复制
#iptables-save | grep 5432
-A IN_public_allow -p tcp -m tcp --dport 5432 -m conntrack --ctstate NEW,UNTRACKED -j ACCEPT

延伸力

代码语言:javascript
复制
#getenforce    
Disabled

塞利诺

代码语言:javascript
复制
#/usr/sbin/sestatus | grep SELinux
SELinux status:                 disabled
#sudo setsebool -P httpd_can_network_connect_db 1
setsebool:  SELinux is disabled.

postgresql.conf

代码语言:javascript
复制
listen_addresses = '*'                           
port = 5432   

pg_hba.conf (我刚刚更改了在这里发布的ip )我尝试使用trust,但仍然是一样的

代码语言:javascript
复制
# "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代码(我只是为这篇文章更改了IP,但它指向了pg_connect IP)

代码语言:javascript
复制
$pgcon = pg_connect("dbname=database1 user=some_user password=some_password host=123.456.0.789");

编辑端:==

我想强调的是,这两台服务器都可以通过其他方式连接彼此的PostgreSQL数据库和它们自己的PostgreSQL数据库,除了之外,它无法使用PHP连接到VPS PostgreSQL。

从VPS到Self(本地主机连接)

代码语言:javascript
复制
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连接)

代码语言:javascript
复制
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

本地服务器到自我(本地主机连接)

代码语言:javascript
复制
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)

代码语言:javascript
复制
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

我真的很抱歉我的长线,我想提供尽可能多的信息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-19 06:55:03

让我们按类型拆分错误。我对你的案子做了几次测试,我发现:

如果我们处理连接参数(即错误的端口或IP地址),则会得到“无法连接到服务器:连接拒绝”或“操作超时是在主机上运行的服务器”"128.0.0.1“和”接受“的错误(如果我们处理凭据,则会导致错误”致命:只有在没有从..."

  • Permission库打开连接的权限时,才能引发用户拒绝的密码身份验证失败“)。

如果您在本地服务器上禁用SElinux,请再检查一遍,对于我来说,这仍然是解决问题的最接近的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61877992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档