HAProxy SSL passthrough及ACL规则不生效配置问题求助
HAProxy SSL passthrough配置故障排查
核心故障原因
- 模式与匹配规则不匹配:你当前的配置需求是SSL passthrough(前端不处理SSL解密),但defaults全局配置为
mode http,且ACL用了HTTP层的hdr_dom(host)匹配Host头。加密的HTTPS流量在未解密的情况下HAProxy无法读取HTTP层的Host字段,导致443端口的域名匹配规则完全失效。 - 前后端协议配置冲突:backend
abc.com的server配置加了ssl参数,会让HAProxy主动发起HTTPS握手和后端通信,不符合SSL passthrough直接透传原始流量的要求。 - 端口逻辑混布:80明文HTTP端口和443加密HTTPS端口放在同一个frontend中,两种流量的协议层处理逻辑不同,容易出现规则匹配混乱。
修正方案(保留SSL passthrough能力)
切换443端口的处理逻辑为TCP模式,通过SNI(TLS扩展字段,明文传输域名信息)做域名匹配,不需要前端处理SSL解密,符合你的需求。80端口单独保留HTTP模式做Host头匹配。
修正后的配置参考:
# 原有global、defaults配置保留,替换frontend和backend部分即可 # 处理443端口HTTPS流量,SSL passthrough模式 frontend fe_https bind AAA.BBB.CCC.DDD:443 mode tcp option tcplog tcp-request inspect-delay 5s tcp-request content accept if { req_ssl_hello_type 1 } # 基于SNI字段匹配域名,不需要解密流量 acl ValidDomain req_ssl_sni -i abc.com use_backend be_abc_https if ValidDomain default_backend be_fallback_https # 处理80端口HTTP流量 frontend fe_http bind AAA.BBB.CCC.DDD:80 mode http acl ValidDomain hdr_dom(host) -i abc.com use_backend be_abc_http if ValidDomain default_backend be_fallback_http # HTTPS业务后端,直接透传流量无需加ssl参数 backend be_abc_https mode tcp balance static-rr server default ZZZ.YYY.XXX.WWW:443 check # HTTP业务后端,按需调整端口 backend be_abc_http mode http balance static-rr server default ZZZ.YYY.XXX.WWW:80 check # HTTPS fallback后端,端口需对应你 fallback服务的HTTPS监听端口 backend be_fallback_https mode tcp balance static-rr server fallback 127.0.0.1:8443 check # HTTP fallback后端,保留原有配置 backend be_fallback_http mode http balance static-rr server fallback 127.0.0.1:8080 check
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

