【问题标题】:Connecting to RDS instance through VPC from EC2 using PHP使用 PHP 从 EC2 通过 VPC 连接到 RDS 实例
【发布时间】:2014-05-09 15:55:18
【问题描述】:

我已经在 stackoverflow 上寻找了很长一段时间,但我似乎无法找到解决方案......这是我的情况:

  • us-east-1b 中的 EC2 实例(运行 CentOS 6)
  • us-east-1b 中的 RDS 实例(多可用区已关闭)
  • EC2 和 RDS 实例都在同一个 VPC 中
  • EC2 和 RDS 实例使用相同的安全组
  • 我可以通过终端从EC2登录RDS
  • 我的安全组设置允许使用 TCP 端口 3306 (MySQL) 的任何入站 IP 地址
  • 这是一个很长的镜头,但我还在 EC2 上禁用了 SELINUX

现在这是我的问题:

我似乎无法弄清楚如何通过一个简单的 PHP 脚本从 EC2 连接到 RDS。每当我尝试连接时,我都会收到错误代码 13。由于 EC2 可以通过终端连接,我猜这是因为在同一个子网中;但是,当我尝试通过 PHP 连接时(我假设此时它正在尝试连接 EIP 地址)我收到错误消息。

奇怪的是我可以通过 Sequel Pro(Mac 相当于 Navicat 或 phpMyAdmin)连接到 RDS,但不能通过 EC2。

我开始认为这不再是安全组问题,而是我的 EC2 实例上的 OS/PHP 配置让我完全忘记了。

有什么想法吗?提前致谢!

【问题讨论】:

  • 能否提供示例 php 脚本您是如何尝试连接 RDS 的?

标签: php mysql amazon-web-services amazon-ec2


【解决方案1】:

我正在从另一个线程重新发布我的答案,因为你的答案是相关的:

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

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

getsebool -a | grep httpd

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

setsebool -P httpd_can_network_connect 1

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

【讨论】:

  • 我遇到了同样的问题,谢谢
【解决方案2】:

您可以尝试使用您的内部子网 IP 地址连接到您的 RDS 实例。要从同一子网中的 EC2 实例找出哪个是您的内部 IP 地址(来自您的 VPC 子网):

ping <your-rds-endpoint-without-3306>

仔细检查您是否使用了正确的凭据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 2014-02-01
    • 2013-10-08
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多