2

我创建了一个简单的 PHP 脚本来连接到 PostgreSQL 数据库。Postgres 数据库在我的一台服务器上(不是亚马逊的)。我已经在几个不同的服务器上测试了 PHP 脚本,并且能够成功地连接到数据库。当我将此脚本部署到 Amazon 的 Elastic Beanstalk 时,脚本失败并显示“未收到数据错误代码:ERR_EMPTY_RESPONSE”。

我的问题是甚至可以从 Elastic Beanstalk 连接到不在亚马逊服务器上的数据库吗?如果是这样,谁能指出我正确的方向?

更新(已解决):

解决方案:
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