【问题标题】:Amazon EC2 Connects to RDS from command line but not from web serverAmazon EC2 从命令行而不是从 Web 服务器连接到 RDS
【发布时间】:2015-05-01 20:50:33
【问题描述】:

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

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

我已经尝试过公共和私有 IP 地址。这个脚本可以在我的其他非亚马逊网络服务器上运行相同的 php 和 apache。不确定接下来要看什么,因为它可以在命令行上运行。这是 test.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 服务器调用时却不能工作?

【问题讨论】:

  • 检查您的安全组的入站和出站设置。
  • 感谢 zairwolf...它能够使用 test.php 脚本从命令行连接。从 apache web 服务器调用 php 会使用不同的网络权限吗?
  • 如何从命令行运行它?
  • php test.php。我可以从我的 ec2 用户和超级用户执行此操作。

标签: php apache amazon-web-services mysqli amazon-ec2


【解决方案1】:

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

在你的终端,如果你运行:

getsebool -a | grep httpd

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

setsebool -P httpd_can_network_connect 1

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

让我们随时了解 ;)

【讨论】:

  • 仅供参考,这也解决了我的问题,我发布的原因是让人们知道大多数基本的 CentOS 7 AMI 默认情况下都设置了 SELinux 设置。至少可以说令人沮丧。
猜你喜欢
  • 2016-05-17
  • 1970-01-01
  • 2019-04-03
  • 2016-04-23
  • 2017-05-22
  • 1970-01-01
  • 2012-04-03
  • 2016-03-08
  • 1970-01-01
相关资源
最近更新 更多