我在 EC2 实例上托管了一个网站。如何让我的用户通过 HTTP(80)或 HTTPS(443)进行连接?

3 分钟阅读
0

我将自己的网站托管到 Amazon Elastic Compute Cloud(Amazon EC2)实例上。我希望用户通过 HTTP(端口 80)或 HTTPS(端口 443)连接到我的网站。

解决方法

要允许流量通过端口 80 和 443,必须配置关联的安全组和网络访问控制列表(网络 ACL)。

安全组规则

对于 HTTP 流量,在端口 80 上添加一条来自源地址 0.0.0.0/0 的入站规则。

对于 HTTPS 流量,在端口 443 上添加一条来自源地址 0.0.0.0/0 的入站规则。

这些入站规则允许来自 IPv4 地址的流量。要允许 IPv6 流量,需要在相同的端口上添加来自源地址 ::/0 的入站规则。有关创建或修改安全组的更多信息,请参阅 Control traffic to resources using security groups

安全组是有状态的,因此会自动允许从实例返回到用户的流量。您无需修改安全组的出站规则。

注意: 以下示例显示了在 TCP 端口 80(HTTP)和 443(HTTPS)上允许 IPv4 和 IPv6 流量的安全组规则。确定您的用例是否必须允许其他流量来源,例如用于登录实例的 SSH 或 RDP。然后,确保您的 SG 具有相关的入站规则,以允许所需的流量。

入站规则

类型协议端口范围
HTTP (80)TCP (6)800.0.0.0/0
HTTP (80)TCP (6)80::/0
HTTPS (443)TCP (6)4430.0.0.0/0
HTTPS (443)TCP (6)443::/0

网络 ACL

默认网络 ACL 允许所有入站和出站 IPv4 流量。如果您的用户通过 IPv6 进行连接,并且您的 Amazon Virtual Private Cloud(Amazon VPC)具有关联的 IPv6 CIDR 块,则您的默认网络 ACL 还会自动添加允许所有入站和出站 IPv6 流量的规则。但是,如果您使用具有更严格规则的自定义网络 ACL,则必须明确允许流量通过端口 80 和 443。

网络 ACL 是无状态的,因此需要同时添加入站和出站规则才能连接到您的网站。有关修改网络 ACL 规则的更多信息,请参阅 Control traffic to subnets using Network ACLs

注意: 以下示例显示了一个允许流量通过 TCP 端口 80(HTTP)和 443(HTTPS)的自定义网络 ACL。网络 ACL 应用于整个子网中的所有资源,而不仅仅是单个 EC2 实例。在示例配置中,除目标端口 80 和 443 外,进出同一子网中资源的所有流量都被阻止。确定您的用例是否必须允许其他流量来源,例如用于登录实例的 SSH 或 RDP。然后,确保您有相关的入站规则以允许所需的流量。

入站规则

规则编号类型协议端口范围允许/拒绝
100HTTP (80)TCP (6)800.0.0.0/0ALLOW
101HTTPS (443)TCP (6)4430.0.0.0/0ALLOW
102HTTP (80)TCP (6)80::/0ALLOW
103HTTPS (443)TCP (6)443::/0ALLOW
*ALL TrafficALLALL::/0DENY
*ALL TrafficALLALL0.0.0.0/0DENY

出站规则

规则编号类型协议端口范围目的地允许/拒绝
100自定义 TCP 规则TCP (6)1024-655350.0.0.0/0ALLOW
101自定义 TCP 规则TCP (6)1024-65535::/0ALLOW
*ALL TrafficALLALL::/0DENY
*ALL TrafficALLALL0.0.0.0/0DENY

对连接被拒绝错误进行故障排除

connection refused错误表示连接请求已路由到实例,但未通过指定端口从服务接收。如果主机 A 发起与主机 B 的 TCP 连接并收到connection refused的错误,则该错误意味着以下内容:

  • 首先,主机 A 向主机 B 发送了一个 TCP SYN 数据包。
  • 然后,主机 B 向主机 A 发送了一个 TCP RST 数据包作为回应。

如果在安全组和网络 ACL 中允许 TCP 端口 80 和 443 后仍遇到此错误,请排查以下故障:

  • 如 httpd(Apache)等服务进程守护程序未运行或处于停止状态。

要进行故障排除,请检查 EC2 实例中的服务是否处于运行状态。

  • 该服务正在侦听错误的端口。

要进行故障排除,请检查 EC2 实例是否正在侦听所需的 TCP 端口(80/443)。

  • 该端口被防火墙阻止。

要进行故障排除,请检查 EC2 实例中的操作系统级防火墙是否阻止了所需端口上的传入 TCP 流量。

AWS 官方
AWS 官方已更新 2 年前