HAProxy v.1.5.18、1.7.11,使用通配符 SSL 证书监听单个 IP 地址,我需要使用 SNI 查找指定多个后端。有大量配置文件都表示req_ssl_sni -i hostname.example.com
在重定向到某个后端时要使用的 ACL。我最好的尝试是查询req_ssl_sni -m found
并发现 SNI 在前端无法访问。如何使 SNI 查找与单个 HTTPS 证书一起工作?
所需的 haproxy.cfg 如下:
frontend https
bind *:443 ssl interface eth1 crt /etc/haproxy/allstar.company.com.pem
tcp-request inspect-delay 5s
tcp-request content accept if { req.ssl_hello_type 1 }
acl to_webcam req.ssl_sni -i webcam.company.com
acl to_jira req.ssl_sni -i jira.company.com
use_backend webcam if to_webcam
use_backend jira if to_jira
default_backend no_sni
backend webcam
acl webcam_auth (hidden)
http-request auth realm webcam if !webcam_auth
server ws01 10.x.x.x:8080
backend no_sni
acl webcam_auth2 (hidden)
http-request auth realm webcam-no-sni if !webcam_auth2
server ws01 10.x.x.x:8080
backend drop403
http-request deny
backend jira
server jira-test 10.x.x.y:8080
全局和默认值未改变。使用此配置,我唯一遇到的后端是要求 HTTP 身份验证的 no-sni。WTF?!
答案1
以防万一有人跌倒。本网站字面意思是:“要启用 SNI,您需要做的就是为 HAProxy 提供多个 SSL 证书”。因此,为了在前端启用 SNI 标头,需要有多个 PEM 文件,其中包含不同的证书。我们这里有一个带有通配符证书的 PEM 文件,因此 SNI 在 haproxy 中被禁用。因此,过滤和 ACL 重定向应该通过hdr(host)
ACL 完成,就好像您的后端是纯 HTTP 一样。
acl to_webcam hdr(host) -i webcam.company.com
acl to_jira hdr(host) -i jira.company.com
use_backend webcam if to_webcam
use_backend jira if to_jira