2

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);
  ?>
4

0 に答える 0