
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 在前端無法存取。如何使用單一 HTTPS 憑證進行 SNI 查找?
所需的 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。搞什麼?
答案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