【发布时间】:2020-10-19 01:15:15
【问题描述】:
您好,我正在尝试在 IIS 上的 AWS EC2(Windows) 服务器中托管 PHP 代码。 我可以托管 php 网页,但问题是网页无法与 AWS RDS 通信。 数据库 PHP 代码:
<?php
$con=mysqli_connect("mysqldatabase.xxxxxxxxxx.ap-south-1.rds.amazonaws.com", "admin", "xxxxxxx", "detsdb", "3306");
if(mysqli_connect_errno()){
echo "Connection Fail".mysqli_connect_error();
}
?>
我正在使用默认 VPC 规则,并且在 RDS 和 EC2 安全组(入站和出站)中,我已打开所有流量以及打开 SG id 与端口 3306。
**网页错误:连接失败服务器向客户端发送未知字符集。请向开发人员报告**
当我在我的个人计算机上尝试相同的代码时,我能够与 RDS 通信。 我正在使用 Wamp 服务器在本地进行通信和托管。
编写了一个简单的代码来测试同样有效的功能:
<?php
$con = mysqli_connect("mysqldatabase.xxxxxx.ap-south-1.rds.amazonaws.com", "admin", "xxxxx", "detsdb", "3306");
if($con){
echo "Connection Success";
}
else
{
echo "Error";
}
?>
请帮帮我。
编辑:Ec2 和 RDS SG 的屏幕截图
【问题讨论】:
-
数据库是否设置为
Publicly Accessible = True? EC2 实例是在公有子网还是私有子网中? VPC 是否有 NAT 网关? -
@JohnRotenstein 是 数据库设置为可公开访问 = True,EC2 实例位于公共子网中,否 VPC 没有 NAT 网关,我使用的是默认 VPC 规则。
-
@JohnRotenstein 我的数据库和 EC2 都在公共子网中,那么我认为不需要 NAT 网关。
-
一个问题可能是,由于数据库可以公开访问,DNS 名称解析为公共 IP 地址。这意味着 EC2 实例去往数据库的公网 IP 地址,其流量来自 EC2 实例的公网 IP 地址。这会影响安全组,因为流量来自公共 IP 地址,而不是来自实例本身。请编辑您的问题以显示您的安全组配置。
标签: php mysql amazon-web-services amazon-ec2 amazon-rds