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