Amazon EC2 从命令行连接到 RDS,但不从 Web 服务器连接到 RDS


Amazon EC2 Connects to RDS from command line but not from web server

如果有一个运行 php 5.5 和 apache2 的 Amazon ec2 实例。 我正在使用一个简单的测试.php脚本连接到我的 RDS 数据库。 当我以 ec2 用户或 root 身份运行脚本时,我能够获得连接。当我通过我的网络服务器运行相同的脚本时,我得到

连接无法连接到"ip"(13)上的MySQL服务器。

我已经尝试了公共和私有 IP 地址。 这个脚本确实可以在我的其他非亚马逊网络服务器上工作,运行相同的php和apache。 不确定接下来要看什么,因为它在命令行上工作。 这是测试.php脚本的示例,非常简单。

define("DB_IP”,”ip”);
define("DB_USERNAME”,”username”);
define("DB_PASSWORD”,”password”);
define("DB_DATABASE”,”database”);
echo "Connecting...'n";
$conn = new mysqli(DB_IP, DB_USERNAME, DB_PASSWORD, DB_DATABASE, 3306);
// Check connection
if ($conn->connect_error) {
   die(date('H:i:s')." Connection " . $conn->connect_error);
} 
echo date('H:i:s')." Connected successfully'n";

为什么连接在命令行上工作,但在从 Web 服务器调用时不起作用?

您在 EC2 上运行什么?只是询问它是否是SELinux(安全增强型Linux),在这种情况下,它可能是安全限制。

在终端上,如果您运行:

getsebool -a | grep httpd

您应该能够看到此限制(无论您的网络服务器是否可以"联网"。如果不能,则运行以下命令,这应该可以解决您的问题:

setsebool -P httpd_can_network_connect 1

希望能解决它,否则我看不到问题可能出现在哪里,特别是因为您说您可以通过终端连接(因此 AWS 安全组应该不是问题)。

请随时通知我们;)