• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:phpからPostgreにconnectで失敗)

phpからPostgreにconnectで失敗

このQ&Aのポイント
  • DBサーバーへのアクセスに失敗している
  • ローカルWEBサーバーでは正常に接続できているが、インターネット上のWEBサーバーでは接続できない
  • セットアップ中のWEBサーバーでPermission deniedのエラーが発生している

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

DBサーバー(PostgreSQL)  ←サーバー1のPHPからはリモートのDBサーバーへ接続可能  ←サーバー2のPHPからリモートのDBサーバーへ接続不可 ということなら、チェックすべきは ・サーバー2にphp-pgsql等の必要なモジュールがインストールされているか ・サーバー2のSELinux で リモートへのpg_connect を禁止していないか ・サーバー2のFirewallでOutbound方向をポート制限していないか ・DBサーバーのpg_hba.conf でIP制限していないか ・DBサーバーのFirewallでIP制限していない ・途中にルータやFirewallやL3スイッチがあるなら、それのIP制限やポート制限 かと思われますが、 pg_connect()で「Permission denied Is the server running on host」 ということなら SELinuxが怪しい気がしますので一度、setenforce 0 して試してみてはどうでしょう。 (これで成功するならselinuxをdisabledにするか、selinuxの設定で許可をいれるか)

linuxorfe
質問者

お礼

SELinuxでした。 SELinuxを止めたら繋がりました。

その他の回答 (2)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

>$dbconn = pg_connect("host=dbserver.net port=5432 user=user1 password=password1 dbname=db1"); 実際のDBサーバのホスト名の指定はどうなっていますか?設定に左右されたくなかったら、localhostと書くほうがいいと思いますが・・・ (localhostでなく)ホスト名を書くと「外部アクセスと同じ扱いになる」ことがあるのは自宅サーバなどでもしばしば遭遇すると思います。さすがにネット上のDBサーバが外部アクセスを許可しているとは思えません(そもそもDBサーバより手前の段階で弾かれていると思う)。

linuxorfe
質問者

お礼

ありがとうございました。

  • catpow
  • ベストアンサー率24% (620/2527)
回答No.1

ローカル環境のOSと、サーバ環境のOSでは、FireWallの設定が違っているんじゃないですか?

linuxorfe
質問者

お礼

有難うございます。 <ローカルWEBサーバー> # firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: enp0s25 sources: services: dhcpv6-client http https ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: <WEBサーバー> # firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: ssh dhcpv6-client http https ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: ちなみに、双方 systemctl stop firewalld した後でも状況変わらずです。

関連するQ&A