AWSRDSインスタンスとAWSEC2インスタンスを設定しましたが、EC2インスタンスの内部IPとパブリックIPの両方がRDSインスタンスにアクセスできるようにセキュリティグループを設定したと思います。sshクライアントを介してEC2インスタンスにsshを実行し、コマンドを入力した場合:

mysql -u xxx -p -h AWS_RDS_endpoint.com

接続は成功しました。EC2インスタンスのウェブルートに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ターミナルで「phpindex.php」と入力すると、「正常に接続されました」と表示されますが、Webブラウザーで、http//xxxx.us-east-2.computer.amazonaws.com(これはEC2パブリックDNSです)、「接続に失敗しました:アクセスが拒否されました」を返します

誰かがこの問題を解決する方法を教えてもらえますか?

answer

これは別のSOスレッドですでに回答されていると思います。しかし、まったく同じ問題がありました。私の場合、EC2インスタンスとしてcentos8を使用していました。問題はSELinuxにあります

sudo setebool -P httpd_can_network_connect_db = 1

mysqlコマンドラインツールを使用してすでに接続できる場合。明らかに、ファイアウォールや権限の問題ではありません。おそらくSELinux

EC2LinuxインスタンスからAWSRDS MySQLに接続する場合は、インスタンスIDが必要です。また、RDSに属するDBセキュリティグループに公開IPアドレスを追加してください。ユーザーIDにEC2LinuxインスタンスとMySQLDBの両方に対する正しい権限があることを確認してください-MySQLの場所とDB自体へのアクセスを変更/読み取ります。

次に、外部アクセス用のDBセキュリティグループを作成し、ユーザーがそのグループに含まれていることを確認します。これは、次のリンクに記載されている手順を使用して実行できます:http//docs.amazonwebservices.com/AmazonRDS/latest/GettingStartedGuide/AuthorizeAccess.html