HAProxy 是否可以实现平衡循环重定向位置?

HAProxy 是否可以实现平衡循环重定向位置?

我正在尝试设置一个 HAProxy,它将监听端口 80,并循环重定向位置任何流量到两台服务器,同时执行健康检查check

服务器有不同的 URL,所以据我所知我不能使用server <name> <ip>:<port> check行,因为我想让客户端的浏览器读取https:///ssl1.blah.com或者https://ssl2.blah.com

这是我的haproxy.cfg:

global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
        #debug
        #quiet
        user haproxy
        group haproxy

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

listen webfarm *:80
       mode http
       stats enable
       stats auth admin:apassword
       balance roundrobin
       option forwardfor
       redirect location https://ssl1.blah.com/gohere
       redirect location https://ssl2.blah.com/gohere

任何指点都将不胜感激。这是我第一次使用 HAProxy 或任何软件 NLB。

谢谢

答案1

我不思考您可以平衡重定向。如果此部署的目的是将发往这些服务器的所有流量从 http 重定向到 https,则您需要监听两个单独的 IP,并相应地进行重定向。这意味着用户必须提前知道子域。

我觉得你尝试做的事情不太好。用户将访问你的前端 URL,并被重定向到两个子域之一。如果他们返回,他们可能会被重定向到另一个子域。作为用户,我会觉得这非常尴尬。

负载平衡的目的,是模糊集群中有多少台服务器和哪些服务器的实现细节,并提供统一的前端。

我建议做类似以下的事情:

Frontend: 10.80.11.1:80 # http://blah.com/
Backend 1: 10.80.11.5:443
Backend 2: 10.80.11.6:443

在每个后端,让其默认页面加载,/gohere而不是尝试让 HA 代理重写 URL。现在您可以根据需要进行负载平衡,隐藏用户的详细信息。

如果您确实想要实现子域名的重写,您可以尝试这样做:

Frontend: 10.80.11.1:80 # http://blah.com
balance roundrobin
Backend: server 10.80.11.2:80
Backend: server 10.80.11.3:80

Frontend: 10.80.11.2:80 # http://ssl1.blah.com
redirect location https://ss1.blah.com

Frontend: 10.80.11.3:80 # http://ssl2.blah.com
redirect location https://ssl2.blah.com

但是,您需要在所有 3 台主机上安装 HA Proxy(除非上述任何后端共享一个主机并具有多个 NIC)。

如果您使用 Apache 作为后端,您可以非常非常简单地实现 https 重定向,而不应该使用 HA Proxy 来管理它。

答案2

我想我明白你想要什么,但不是 100% 确定。我认为你需要将“listen”节重写为两个单独的“frontend”和“backend”节。这样,你应该能够向后端添加检查,但仍然保留重定向/URL 混淆。

看一些 haproxy 示例,“listen”用于简短而完整的规则集,但 backend+frontend 用于更复杂的设置。

相关内容