从Amazon Elastic Beanstalk访问外部数据库

时间:2013-09-10 21:45:08

标签: php networking amazon-web-services amazon-ec2 elastic-beanstalk

我创建了一个简单的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);
  ?>

0 个答案:

没有答案