AWS Network Load Balancer配置TLS监听器实现HTTPS访问失败求助
常见误区纠正
你之前理解的「Network Load Balancer本身不处理HTTPS协议」并不准确,NLB的TLS类型监听器原生支持在负载均衡层完成TLS终止,负责和客户端完成HTTPS握手,你遇到的访问失败是转发阶段的协议、配置不匹配导致的。
故障根因
你当前配置的TLS监听器会默认终止客户端的HTTPS连接,完成TLS握手后,会以裸TCP流量转发到你配置的TCP协议目标组的3000端口,但你后端3000端口运行的是HTTP服务,无法识别裸TCP请求,会直接断开连接,就会出现你遇到的空响应、socket挂断报错。
正确配置方案
方案1:NLB做TLS终止(仅客户端到NLB加密,满足你的核心需求)
该方案只需要保障客户端到NLB的连接安全,NLB到后端使用明文HTTP传输,性能损耗最低,是最常用的配置:
- 修改目标组配置:将原有TCP协议的目标组调整为
HTTP协议,端口保持3000,健康检查也同步改为HTTP协议,检查路径配置为你的应用存活路径(例如/health或者/home) - 确认监听器配置:443端口的TLS监听器保持现有配置即可,SSL策略使用默认的
ELBSecurityPolicy-2016-08,证书确认和你的域名匹配,默认动作转发到修改后的HTTP目标组 - 安全组配置校验:
- 若使用带安全组的新版NLB,需要NLB安全组入方向放开443端口的公网访问,出方向放开到后端实例3000端口的访问
- 后端运行应用的实例安全组,入方向需要放开NLB所在VPC的CIDR段或者NLB安全组对3000端口的访问
- 目标组状态校验:确认目标组内的所有实例状态为
healthy,如果健康检查失败先排查应用本身的可用性
方案2:端到端TLS加密(客户端到NLB、NLB到后端全程加密)
如果需要保障传输链路全程加密可以选择该方案:
- 新建/修改目标组为
HTTPS协议,端口3000,健康检查也同步改为HTTPS协议,后端应用需要自行配置TLS证书(可以使用自签名证书,NLB默认会忽略后端证书的合法性校验) - 443端口的TLS监听器配置不变,转发到该HTTPS目标组即可
- 安全组配置要求和方案1一致
验证排查步骤
配置完成后可以通过以下命令验证效果:
- 直接通过域名访问验证:
curl -v https://www.this-is-an-example.com/home - 若还是报错可以跳过域名解析直接绑定NLB IP验证,排除Route53配置问题:
curl -v --resolve www.this-is-an-example.com:443:<替换为你的NLB公网IP> https://www.this-is-an-example.com/home
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

