无法通过HTTPS连接AWS EC2实例的问题排查求助
问题描述
我启动了AWS EC2实例并部署了Nginx服务,目前可通过HTTP(80端口)和SSH(22端口)正常连接该实例,但无法通过HTTPS(443端口)访问。我完成了以下配置:
网络ACL设置
入站规则
Rule number | Type |Protocol|Port| Source |Allow/Deny 1 | HTTP(80) | TCP(6) | 80 |0.0.0.0/0| Allow 2 |HTTPS(443)| TCP(6) |443 |0.0.0.0/0| Allow 3 | SSH(22) | TCP(6) | 22 |0.0.0.0/0| Allow 4 |HTTPS(443)| TCP(6) |443 | ::/0 | Allow * |Alltraffic| ALL |ALL |0.0.0.0/0| Deny (AWS default)
出站规则
Rule number | Type |Protocol|Port| Source |Allow/Deny 1 |Alltraffic| ALL |ALL |0.0.0.0/0| Allow 2 |Alltraffic| ALL |ALL | ::/0 | Allow * |Alltraffic| ALL |ALL |0.0.0.0/0| Deny (AWS default)
安全组设置
入站规则
Type |Protocol|Port| Source HTTPS(443)| TCP(6) |443 |0.0.0.0/0 HTTPS(443)| TCP(6) |443 | ::/0 SSH(22) | TCP(6) | 22 |0.0.0.0/0 HTTP(80) | TCP(6) | 80 |0.0.0.0/0
出站规则
Type |Protocol|Port| Source Alltraffic| ALL |ALL |0.0.0.0/0 Alltraffic| ALL |ALL | ::/0
使用Reachability Analyzer测试从互联网网关到实例的80端口连接,结果显示可达;但测试443端口时,提示错误信息:Network ACL <acl> does not allow inbound traffic。
请问为何会出现该情况?应如何解决?
解答
根据配置和错误提示,核心问题集中在网络ACL(NACL)的规则生效逻辑或配置关联上,以下是具体排查方向和解决步骤:
可能的原因
- EC2实例所在子网未关联你配置的NACL:如果子网绑定的是其他未开放443端口的NACL,就会触发该错误。
- NACL入站规则存在隐性配置错误:虽然你列出的规则包含443允许,但可能存在规则编号优先级错误、端口范围配置偏差、或源地址限制过严的情况。
- NACL规则未正确保存或同步:AWS控制台配置有时会存在短暂同步延迟,或规则修改后未确认保存。
解决步骤
1. 确认子网与NACL的关联关系
- 进入AWS EC2控制台,找到目标实例,查看其所在的子网ID。
- 切换到VPC控制台的「网络ACL」页面,找到你配置的NACL,检查「关联的子网」列表中是否包含上述子网ID。如果没有,将该子网关联到当前NACL。
2. 重新校验NACL入站规则细节
- 打开目标NACL的入站规则编辑页面,重点检查规则2:
- 确保「类型」为
HTTPS (443),「协议」为TCP (6)。 - 「端口范围」需精确设置为
443-443(部分场景下单独填443可能被识别为范围错误)。 - 「源」为
0.0.0.0/0,「允许/拒绝」为允许。 - 确认该规则的编号在默认拒绝规则(
*)之前,NACL规则是按编号从小到大依次执行的,一旦匹配到拒绝规则就会终止。
- 确保「类型」为
3. 验证实例本地的监听与防火墙
- 登录EC2实例,执行以下命令确认Nginx是否监听443端口:
如果没有输出,说明Nginx未配置443端口监听,需要检查Nginx配置文件(通常在ss -tuln | grep 443/etc/nginx/conf.d/或/etc/nginx/sites-available/目录下),添加HTTPS监听配置并重启Nginx。 - 检查实例本地防火墙(如iptables或firewalld)是否允许443端口入站:
如果没有允许规则,需添加对应规则:# 检查iptables iptables -L -n | grep 443 # 检查firewalld(若使用) firewall-cmd --list-all | grep 443# iptables iptables -A INPUT -p tcp --dport 443 -j ACCEPT # firewalld firewall-cmd --add-port=443/tcp --permanent firewall-cmd --reload
4. 重新运行Reachability Analyzer验证
完成上述配置后,再次使用Reachability Analyzer测试443端口的连通性,确认错误是否消失。
内容的提问来源于stack exchange,提问作者Yakov Akimov
相关产品推荐
相关产品推荐

