无法通过 Web 浏览器从 aws ec2 实例连接到 aws rds mysql

无法通过 Web 浏览器从 aws ec2 实例连接到 aws rds mysql

我已经设置了 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

相关内容