- ベストアンサー
phpからPostgreにconnectで失敗
- DBサーバーへのアクセスに失敗している
- ローカルWEBサーバーでは正常に接続できているが、インターネット上のWEBサーバーでは接続できない
- セットアップ中のWEBサーバーでPermission deniedのエラーが発生している
- みんなの回答 (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の設定で許可をいれるか)
その他の回答 (2)
- shimix
- ベストアンサー率54% (865/1590)
>$dbconn = pg_connect("host=dbserver.net port=5432 user=user1 password=password1 dbname=db1"); 実際のDBサーバのホスト名の指定はどうなっていますか?設定に左右されたくなかったら、localhostと書くほうがいいと思いますが・・・ (localhostでなく)ホスト名を書くと「外部アクセスと同じ扱いになる」ことがあるのは自宅サーバなどでもしばしば遭遇すると思います。さすがにネット上のDBサーバが外部アクセスを許可しているとは思えません(そもそもDBサーバより手前の段階で弾かれていると思う)。
お礼
ありがとうございました。
- catpow
- ベストアンサー率24% (620/2527)
ローカル環境のOSと、サーバ環境のOSでは、FireWallの設定が違っているんじゃないですか?
お礼
有難うございます。 <ローカル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 した後でも状況変わらずです。
お礼
SELinuxでした。 SELinuxを止めたら繋がりました。