配置Nginx+Docker+React+EC2时HTTPS连接被拒求助
解决.dev域名HTTPS连接被拒问题
核心问题分析
.dev属于Google的顶级域名,已被纳入HSTS预加载列表,Chrome、Firefox等主流浏览器会强制将所有.dev域名的HTTP请求重定向到HTTPS。这意味着只要HTTPS配置存在问题,就会直接触发连接被拒,无法通过HTTP绕开访问域名。- 从你的测试结果来看,HTTP访问EC2公网IP正常,说明80端口的Nginx配置、Docker端口映射、EC2安全组/网络ACL都没问题,问题集中在HTTPS(443端口)的配置环节。
排查步骤
1. 验证Nginx配置合法性
进入Docker容器,执行配置检查命令,确认没有语法错误:
docker exec <你的ui服务容器名> nginx -t
如果输出test is successful说明配置语法没问题;如果报错(比如证书路径错误、语法格式问题),根据提示修复即可。
2. 查看Nginx启动日志
检查容器内Nginx的启动日志,定位SSL相关错误:
docker logs <你的ui服务容器名>
常见错误包括:
- 证书文件找不到(路径配置错误)
- 私钥权限过高(Nginx要求私钥权限必须为
600,否则拒绝加载) - 证书链不完整(
ssl-bundle.crt仅包含域名证书,缺少中间证书)
3. 检查证书文件的存在和权限
进入容器,确认证书文件存在且权限符合要求:
# 查看文件是否存在 ls -l /etc/ssl/certs/ssl-bundle.crt /etc/ssl/private/private.key # 修正私钥权限(如果需要) chmod 600 /etc/ssl/private/private.key
注意:Nginx对私钥的权限管控严格,必须设置为所有者只读,否则会无法加载证书。
4. 本地测试HTTPS连接
在EC2主机上直接访问本地443端口,验证容器内的HTTPS服务是否正常:
curl -v https://localhost
如果返回正常的HTML内容,说明容器内的HTTPS服务没问题,问题可能出在域名解析或证书信任;如果出现SSL certificate problem: self signed certificate类错误,说明证书不被浏览器信任。
5. 确认证书的可信度
如果使用的是自签名证书,由于.dev域名强制HTTPS,浏览器会直接拒绝访问(自签名证书不在浏览器信任列表中)。这种情况下,必须使用可信CA颁发的证书(比如Let's Encrypt的免费证书),才能让浏览器正常信任。
排除其他可能性
- Amazon Linux 2系统问题:可能性极低,你已确认安全组、网络ACL配置正确,且80端口能正常访问,netstat显示443端口处于监听状态,说明系统层面网络配置无异常。
- Docker端口映射问题:docker-compose中已配置
443:443,且主机443端口处于监听状态,说明映射正常。
内容的提问来源于stack exchange,提问作者azhangrwe
相关产品推荐
相关产品推荐

