EC2配置Nginx+Let's Encrypt证书后HTTPS无法访问如何排查?
故障排查步骤
- 第一步:检查EC2实例安全组入站规则
你实例内的UFW已经放行了Nginx Full(包含80和443),但AWS EC2默认还有一层独立的安全组防火墙,需要确认安全组的入站规则是否开放了**443端口的0.0.0.0/0(IPv4)和::/0(IPv6)**访问权限,这是该问题最高频的诱因。 - 第二步:本地验证HTTPS服务是否正常监听
在EC2实例内部执行以下命令,确认Nginx的HTTPS端口可正常响应:
如果该命令能正常返回接口结果,说明Nginx的HTTPS配置没有问题,问题出在外部流量到实例443端口的链路被拦截;如果报错,继续下一步排查Nginx配置。curl -v https://api.domain.in/health --resolve api.domain.in:443:127.0.0.1 - 第三步:排查Nginx配置有效性
执行以下命令检查Nginx配置是否有语法错误,确认配置生效:
同时检查证书文件权限是否正确,确保Nginx进程有权读取sudo nginx -t sudo systemctl reload nginx/etc/letsencrypt/下的证书文件:sudo ls -l /etc/letsencrypt/live/api.domain.in/ - 第四步:检查是否有运营商或DNS层面拦截
可以从本地电脑执行telnet或nc命令测试443端口连通性:
如果端口不通,同时安全组已经放行了443,可确认下域名是否完成了备案(如果服务器在国内区域),未备案域名的443端口会被运营商拦截。telnet api.domain.in 443 # 或者 nc -zv api.domain.in 443
最常见配置错误点
90%以上该场景的问题都是EC2安全组未开放443入站权限,UFW是实例内部的防火墙,优先级低于EC2外层安全组规则,外层安全组不放行的话,HTTPS流量根本到不了实例内部的Nginx服务。
内容的提问来源于stack exchange,提问作者Bopsi
相关产品推荐
相关产品推荐

