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