Ssl
根據源 ip 選擇一個 haproxy tcp 後端
我有基本的 haproxy 知識,並且知道如何根據 SNI 伺服器名稱處理 tcp 後端的選擇。
相關線路是
acl is_myhost req.ssl_sni -i my.host.com acl is_otherhost req.ssl_sni -i other.host.com use_backend mybackend if is_myhost use_backend otherbackend if is_otherhost
現在我想將它們更改為允許我根據源 ip 選擇後端的東西,但我不知道以下偽配置的確切語法或這是否可能
acl is_myhost_for_specif req.ssl_sni -i my.host.com <and source ip = 1.2.3.4> acl is_myhost_for_others req.ssl_sni -i my.host.com <and source ip != 1.2.3.4> acl is_otherhost req.ssl_sni -i other.host.com use_backend mybackend1 if is_myhost_for_specific use_backend mybackend2 if is_myhost_for_others use_backend otherbackend if is_otherhost
您的 ACL 虛擬碼不正確,因為 ACL 聲明沒有 AND/OR 邏輯的語法。將其移至使用 ACL 的位置,如下例所示。
對於源 IP 有
src
(https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#7.3.3-src),例如:請注意,在 if 語句中匹配兩個條件的語法不是
use_backend mybackend if condition1 and condition2
只是
use_backend mybackend if condition1 condition2
acl test_network src 192.168.10.0/24 acl test_network src 192.168.20.0/24 acl is_myhost_for_specif req.ssl_sni -i my.host.com # both acls must be true (is_myhost **and** test_network) use_backend mybackend1 if is_myhost test_network use_backend mybackend2 if is_myhost
順序
use_backend
很重要,因此如果 SNI 匹配,則來自test_network
go tomybackend1
和其他IP 的 IPs 去。mybackend2
此處兩次聲明test_network
ACL 表示“src_ip 匹配 192.168.10.0/24 OR 192.168.20.0/24”