我将自己的网站托管到 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) | 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 规则的更多信息,请参阅 Control traffic to subnets using Network ACLs。
注意: 以下示例显示了一个允许流量通过 TCP 端口 80(HTTP)和 443(HTTPS)的自定义网络 ACL。网络 ACL 应用于整个子网中的所有资源,而不仅仅是单个 EC2 实例。在示例配置中,除目标端口 80 和 443 外,进出同一子网中资源的所有流量都被阻止。确定您的用例是否必须允许其他流量来源,例如用于登录实例的 SSH 或 RDP。然后,确保您有相关的入站规则以允许所需的流量。
入站规则
| | | | | |
---|
规则编号 | 类型 | 协议 | 端口范围 | 源 | 允许/拒绝 |
100 | HTTP (80) | TCP (6) | 80 | 0.0.0.0/0 | ALLOW |
101 | HTTPS (443) | TCP (6) | 443 | 0.0.0.0/0 | ALLOW |
102 | HTTP (80) | TCP (6) | 80 | ::/0 | ALLOW |
103 | HTTPS (443) | TCP (6) | 443 | ::/0 | ALLOW |
* | ALL Traffic | ALL | ALL | ::/0 | DENY |
* | ALL Traffic | ALL | ALL | 0.0.0.0/0 | DENY |
出站规则
| | | | | |
---|
规则编号 | 类型 | 协议 | 端口范围 | 目的地 | 允许/拒绝 |
100 | 自定义 TCP 规则 | TCP (6) | 1024-65535 | 0.0.0.0/0 | ALLOW |
101 | 自定义 TCP 规则 | TCP (6) | 1024-65535 | ::/0 | ALLOW |
* | ALL Traffic | ALL | ALL | ::/0 | DENY |
* | ALL Traffic | ALL | ALL | 0.0.0.0/0 | DENY |
对连接被拒绝错误进行故障排除
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 流量。