繁体   English   中英

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

[英]Connecting to RDS instance through VPC from EC2 using PHP

我一直在寻找stackoverflow了一段时间,但似乎似乎找不到解决方案……这是我的情况:

  • us-east-1b中的EC2实例(运行CentOS 6)
  • us-east-1b中的RDS实例(multi-az已关闭)
  • 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配置完全让我无所适从。

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

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

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

在终端上,如果您运行:

getsebool -a | grep httpd

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

setsebool -P httpd_can_network_connect 1

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM