跳至内容

如何允许我的用户通过 HTTP 或 HTTPS 连接到我在 EC2 实例上托管的网站?

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 源地址的入站规则。

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

以下示例配置的规则允许 TCP 端口 80 和 443 上的 IPv4 和 IPv6 流量。

入站规则

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

**注意:**检查是否必须允许其他流量来源(例如 SSH 或远程桌面协议 (RDP))登录实例。然后,确保您的安全组具有允许所需流量的入站规则。

配置网络 ACL

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

网络 ACL 是无状态的,因此必须同时添加入站和出站规则才能连接到您的网站。

以下配置是允许流量通过 TCP 端口 80 和 443 的自定义网络 ACL 的示例。您可以对子网中的所有资源使用网络 ACL,而不仅仅是单个 Amazon EC2 实例。以下配置会阻止所有进出子网中资源的流量,目标端口 80 和 443 上的流量除外。

入站规则

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

出站规则

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

**注意:**检查是否必须允许其他流量来源(例如 SSH 或 RDP)登录实例。然后,确保您的网络 ACL 具有允许所需流量的入站规则。

对 "connection refused" 错误进行故障排除

当连接路由到您未在安全组或网络 ACL 规则中指定的端口时,就会出现 "connection refused" 错误。例如,主机 A 发起与主机 B 的 TCP 连接。首先,主机 A 向主机 B 发送 TCP SYN 数据包。然后,主机 B 发送 TCP RST 数据包以响应主机 A。如果这些连接请求未出现在指定端口上,则主机 A 会收到 "connection refused" 错误。

要对此问题进行故障排除,请在端口 80 或 443 上检查实例中的 Web 服务器服务是否处于 Running(正在运行)状态。

对 "connection timeout" 错误进行故障排除

如果您在明确允许 TCP 端口 80 和 443 后收到 "connection timeout" 错误,请检查您的操作系统 (OS) 防火墙。确保防火墙不会阻止所需端口上的入站 TCP 流量。

AWS 官方已更新 7 个月前