使用PHP通过VPC从EC2连接到RDS实例

时间:2014-03-30 09:39:37

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

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

  • us-east-1b(运行CentOS 6)中的EC2实例
  • 美国东部-L1中的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连接到RDS。

我开始认为它不再是安全组问题,而是我的EC2实例上的OS / PHP配置完全让我不知所措。

有什么想法?先谢谢!

2 个答案:

答案 0 :(得分:5)

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

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

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

getsebool -a | grep httpd

你应该能够看到这个限制(你的网络服务器是否可以"网络"否则。如果不能,那么运行它,这应该可以解决你的问题:

setsebool -P httpd_can_network_connect 1

希望解决它,否则我不知道问题出在哪里,特别是因为你说你可以通过终端连接(所以AWS安全组不应该是问题)。

答案 1 :(得分:0)

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

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

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