我将自己的网站托管到 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) | 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 |
**注意:**检查是否必须允许其他流量来源(例如 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 上的流量除外。
入站规则
| 规则 # | 类型 | 协议 | 端口范围 | 源 | 允许/拒绝 |
|---|
| 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 | 拒绝 |
**注意:**检查是否必须允许其他流量来源(例如 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 流量。