PostgreSQL データベースに接続する単純な PHP スクリプトを作成しました。Postgres データベースは私のサーバーの 1 つにあります (Amazon のサーバーではありません)。いくつかの異なるサーバーで PHP スクリプトをテストしたところ、データベースに正常に接続できました。このスクリプトを Amazon の Elastic Beanstalk にデプロイすると、スクリプトは失敗し、「データが受信されません。エラー コード: ERR_EMPTY_RESPONSE」が表示されます。
私の質問は、Elastic Beanstalk から Amazon のサーバーにないデータベースに接続することさえ可能ですか? もしそうなら、誰かが私を正しい方向に向けることができますか?
更新(解決済み):
解決策:
1. aws コンソールから。EC2 ダッシュボード --> セキュリティ グループ に移動します。
2. 関連するインスタンスが使用しているセキュリティ グループを編集します。
3. [受信] タブをクリックします。
4. 「カスタム TCP ルール」を追加し、ポート範囲を 5432 に設定し
ます。 5. 「ルールの追加」をクリックし、「ルールの変更を適用」をクリックします。
この後、インスタンスを再起動する必要があるかもしれませんが、必要かどうかはわかりませんでした。これにより、「データが受信されない問題」が解決されました。その後、サーバーとネットワークのファイアウォールの問題であることが判明した新しい問題が発生しました。
さらに、postgressql.conf と pg_hba.conf を編集して、すべての IP からの外部接続を許可する必要がありました。そのためには、こちらの指示に従いました: http://www.postgresql.org/message-id/78A8EE7180F64BB9B80731343DC27C2D@toshiba
コード:
<?php
$link = pg_Connect("host=MYSERVERSIP dbname=MYDBNAME user=MYUSER password=MYPASSWORD");
$result = pg_exec($link, "select * from course");
$numrows = pg_numrows($result);
echo "<p>link = ".$link."<br>
result = ".$result."<br>
numrows = ".$numrows."</p>
";
?>
<table border="1">
<tr>
<th>id</th>
<th>key</th>
</tr>
<?php
// Loop on rows in the result set.
for($ri = 0; $ri < $numrows; $ri++) {
echo "<tr>\n";
$row = pg_fetch_array($result, $ri);
echo " <td>", $row["id"], "</td>
<td>", $row["key"], "</td>
</tr>
";
}
pg_close($link);
?>