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

上次更新日期:2022 年 9 月 26 日

我在一个 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 的入站规则。有关创建或修改安全组的更多信息,请参阅使用安全组控制流向资源的流量

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

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

入站规则

类型 协议 端口范围
HTTP (80) TCP (6) 80 0.0.0.0/0
HTTP (80) TCP (6) 80 ::/0
HTTPS (443) TCP (6) 443 0.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 规则的更多信息,请参阅使用网络 ACL 控制流向子网的流量

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

入站规则

规则编号 类型 协议 端口范围 允许/拒绝
100 HTTP (80) TCP (6) 80 0.0.0.0/0 允许
101 HTTPS (443) TCP (6) 443 0.0.0.0/0 允许
102 HTTP (80) TCP (6) 80 ::/0 允许
103 HTTPS (443) TCP (6) 443 ::/0 允许
* 所有流量 全部 全部 ::/0 拒绝
* 所有流量 全部 全部 0.0.0.0/0 拒绝

出站规则

规则编号 类型 协议 端口范围 目的地 允许/拒绝
100 自定义 TCP 规则 TCP (6) 1024-65535 0.0.0.0/0 允许
101 自定义 TCP 规则 TCP (6) 1024-65535 ::/0 允许
* 所有流量 全部 全部 ::/0 拒绝
* 所有流量 全部 全部 0.0.0.0/0 拒绝

对连接被拒绝错误进行排查

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

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

如果您遇到此错误,即使在安全组和网络 ACL 中允许 TCP 端口 80 和 443 之后,也请排查以下问题:

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

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

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

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

  • 该端口被防火墙阻止。

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


这篇文章对您有帮助吗?


您是否需要账单或技术支持?