我已经设置了 AWS RDS 实例和 AWS EC2 实例,并且我相信我设置了安全组以允许 EC2 实例的内部 ip 和公共 ip 访问 RDS 实例。如果我通过 ssh 客户端 ssh 到 EC2 实例,并输入命令:
mysql -u xxx -p -h AWS_RDS_endpoint.com
连接成功,我在EC2实例的Web根目录下创建了一个名为index.php的测试php文件,代码如下:
<?php
$servername = "aws_rds_endpoint.com";
$username = "username";
$password = "password";
// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>
如果我在 ssh 终端输入“php index.php”,它会显示“连接成功”,但如果在 Web 浏览器中我尝试使用 http 连接到 EC2 实例,http://xxxx.us-east-2.computer.amazonaws.com(即 EC2 公共 DNS),它返回“连接失败:权限被拒绝”
谁能告诉我如何解决这个问题?
答案1
我认为这个问题已经在另一个 SO 主题中得到解答了。但我遇到了完全相同的问题。在我的例子中,我使用 centos 8 作为我的 EC2 实例。问题出在 SELinux 上
sudo setsebool -P httpd_can_network_connect_db=1
如果您已经可以使用 mysql 命令行工具进行连接;那么显然这不是防火墙或权限问题;可能是 SELinux
答案2
如果要从 EC2 Linux 实例连接到 AWS RDS MySQL,则需要一个实例 ID。此外,请确保将面向公众的 IP 地址添加到属于 RDS 的数据库安全组。确保您的用户 ID 对 EC2 Linux 实例和 MySQL 数据库都具有正确的权限 - 对 MySQL 位置和数据库本身的修改/读取访问权限。
然后,确保您已创建用于外部访问的数据库安全组,并且您的用户包含在其中。您可以使用以下链接中提供的说明来完成此操作: http://docs.amazonwebservices.com/AmazonRDS/latest/GettingStartedGuide/AuthorizeAccess.html