HAProxy如何使用SNI分流流量?公网IP路由异常修复方法
问题根因
你配置里用ssl_fc_sni匹配公网IP的规则失效,核心原因是绝大多数HTTPS客户端直接访问IP地址时,不会在TLS握手的SNI扩展字段中填入IP地址,对应ACL匹配不到任何值,流量就会被路由到默认的web后端。
修复方法
根据你的证书部署情况选一种方案调整即可:
方案1:多域名证书共用443端口场景
不要仅依赖SNI匹配IP流量,补充SSL层的目标IP匹配规则,修改后的配置如下:acl is_a01 ssl_fc_sni -i test.xyz acl is_a02 ssl_fc_sni -i 12.13.14.16 acl is_a02 ssl_fc_dst_ip -i 12.13.14.16 use_backend n1 if is_a01 use_backend n2 if is_a02 default_backend web这个配置同时覆盖两种情况:少数客户端会在SNI里带IP、大多数客户端不带SNI直接访问目标IP的场景,兼容性最好。
方案2:公网IP使用独立SSL证书场景
直接给该公网IP配置独立的监听项,绑定对应IP证书后直接指定后端,完全不需要依赖SNI匹配:# 原有域名HTTPS监听 bind :443 ssl crt /path/to/your/domain_cert.pem acl is_a01 ssl_fc_sni -i test.xyz use_backend n1 if is_a01 # 公网IP独立HTTPS监听,绑定专属IP证书 bind 12.13.14.16:443 ssl crt /path/to/your/ip_cert.pem use_backend n2 default_backend web
校验生效
配置修改完成后,先执行haproxy -c -f 你的haproxy配置文件路径检查语法是否正确,确认无报错后重载HAProxy服务即可。
注意:你绑定到公网IP的SSL证书必须在SAN(主体备用名称)字段中包含该公网IP,否则路由生效后客户端仍会提示证书不可信。
内容的提问来源于stack exchange,提问作者terry hu
相关产品推荐
相关产品推荐

