根据源 IP 选择 haproxy tcp 后端

根据源 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

答案1

您的 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 匹配,则来自的 IPtest_network转到mybackend1,其他 IP 转到。此处声明 ACL 两次意味着“src_ip 匹配 192.168.10.0/24 或 192.168.20.0/24”mybackend2test_network

相关内容