HAProxy 未平衡到正确的服务器

HAProxy 未平衡到正确的服务器

我正在使用 HAProxy 平衡 3 个前端,但我想使用总是同一个后端/服务器,但有一个特定的子域 (admin.mysite.com)。HAProxy
没有终止 SSL(有人告诉我这不好,最好用 nginx 来做),所以我使用 req_ssl_sni 来检测子域,因为我不能使用 acl 规则。
但出于某种原因,对于某些用户,HAProxy 在请求子域时连接到了错误的前端,我不明白为什么,这是我的配置:

global
        debug
        maxconn 16000
        daemon
        ssl-default-bind-options force-tlsv12
        tune.ssl.default-dh-param 2048
    stats socket /var/run/haproxy/info.sock mode 600 level admin
        stats timeout 2m

defaults
        log global
        retries 0
        timeout connect 5s
        timeout server 50s
        timeout client 50s
        default-server init-addr libc,none

frontend frontend-http
        bind *:80
        maxconn 10000
        mode http
        option forwardfor

        use_backend admin-nossl if { hdr_dom(host) -i admin.mysite.com }
        use_backend users-nossl if { hdr_dom(host) -i www.mysite.com }
        use_backend users-nossl if { hdr_dom(host) -i mysite.com }

        default_backend redirect-https

frontend frontend-https-public
        bind *:443
        maxconn 10000
        mode tcp
        option tcplog

        tcp-request inspect-delay 5s
        tcp-request content accept if { req.ssl_hello_type 1 }

        use_backend admin if { req_ssl_sni -i admin.mysite.com }
        use_backend users if { req_ssl_sni -i www.mysite.com }
        use_backend users if { req_ssl_sni -i mysite.com }

backend redirect-https
        mode http
        redirect scheme https code 301

backend admin-nossl
        mode http
        server frontend01 [//FRONT_1_IP//]:80 check resolve-prefer ipv4

backend admin
    mode tcp
        server frontend01 [//FRONT_1_IP//]:443 check resolve-prefer ipv4 send-proxy

backend users-nossl
        mode http
        balance roundrobin
        server frontend01 [//FRONT_1_IP//]:80 check resolve-prefer ipv4

backend users
        mode tcp
        balance roundrobin
        stick-table type binary len 32 size 30k expire 30m
    stick on src
        server frontend01 [//FRONT_1_IP//]:443 check resolve-prefer ipv4 send-proxy
        server frontend02 [//FRONT_2_IP//]:443 check resolve-prefer ipv4 send-proxy
        server frontend03 [//FRONT_3_IP//]:443 check resolve-prefer ipv4 send-proxy

这是 HAProxy 的一个错误还是我的配置有问题?

答案1

SNI 需要客户端支持。换句话说,您可以要求那些没有被重定向到管理后端的人尝试使用已知良好的 Web 浏览器来确认这实际上是您的配置还是 HAProxy 本身的问题。

话虽如此,但我认为从几年前开始,就没有理由不让 HAProxy 终止客户端 TLS 流量并启动自己的 TLS 会话到后端服务器,这样如果需要,您可以以更灵活、更先进的方式使用它。除非您有大量客户端流量(在这种情况下,您可能还是应该为您的服务器投资 TLS 卸载硬件),否则能够在传入客户端流量到达 Web 服务之前对其进行分析所带来的好处通常会超过任何性能开销。

相关内容