我有基本的 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
顺序
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”