簡體   English   中英

本地服務器無法使用 PHP 連接到遠程 postgresql 數據庫,但本地終端可以連接

[英]local server can't connect to remote postgresql database using PHP, but local terminal can connect

標題可能會使這看起來像是 SO 上一些現有問題的重復,但在我看來,這在某種程度上不是。

8140863 , 30617357 , 27749691

但是我一生都無法使這些線程的答案起作用,而不是在這些線程上提問,我想創建自己的問題,我想討論我的設置,然后討論我的問題,然后我試過的

我的服務器設置是這樣的,我有一個本地(一台實際的物理機器)和一個我租用的 VPS,兩者都在 Centos7.x、PostgreSQL10、 Php 7.x 和 Python-2.x 上運行,兩者都可以 ping 和ssh 對方通過VPN就好了。

兩者都可以通過 PHP、Python、PSQL 終端很好地連接到各自的數據庫

在我的 VPS 服務器上,我可以完全使用 Python(psycopg2)、PHP(php-pgsql) 和 Terminal(psql) 連接到本地服務器的 PostgreSQL 數據庫。

在我的本地服務器上,我可以使用 Python(psycopg2)和終端(psql)連接到我的 VPS PostgreSQL,除了 PHP(php-pgsql)

每當我通過 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?

這是我所做的。

  1. 在 postgresql.conf 設置 listen_address = "*" -- 這沒關系
  2. 為兩者添加了 pg_hba 條目——這沒關系(python 和終端都可以連接)
  3. 端口 5432/tcp 已啟用和允許 - 這沒關系
  4. Selinux 已被禁用——這是上面引用的線程的答案,但即使在重新啟動后它對我也不起作用。

這些是我的 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 To Self(本地主機連接)

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(使用 VPS 的 IP 通過 VPN 和公共 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

我真的很抱歉這個長線程,我想提供盡可能多的信息。

讓我們按類型划分錯誤。 我已經對您的案例進行了幾次測試以及我的發現:

  1. 如果我們弄亂了連接參數(即錯誤的端口,或 IP 地址),我們會收到錯誤“無法連接到服務器:連接被拒絕”或“操作超時服務器在主機“128.0.0.1”上運行並接受“)

  2. 如果我們弄亂憑據,我們會收到錯誤“致命:用戶密碼驗證失敗...”

  3. 僅當您無權從 PHP 庫中打開 TCP 連接時,才能拋出 Permission denied。

請仔細檢查您是否像我一樣在本地服務器上禁用 SElinux,這仍然是您的問題最接近的解決方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM