【问题标题】:Setting Custom Header on a per server basis in HAProxy在 HAProxy 中为每个服务器设置自定义标头
【发布时间】:2017-03-10 02:25:37
【问题描述】:

我需要使用 HAProxy 1.7 对第 3 方服务进行负载平衡。每个服务器都需要唯一的基本身份验证标头。我正在寻找与下面类似的方法,我可以在后端服务器之间“循环”,但每个服务器都需要不同的 HTTP 标头:

frontend http-in
    bind *:80
    use_backend servs

backend servs
    reqidel '^Authorization:.*'
    reqadd 'Authorization: Basic blahblahblah'
    server url1 asdf.example.com:8080 check ssl verify none
    reqidel '^Authorization:.*'
    reqadd 'Authorization: Basic blah2blah2blah2'
    server url2 asdf.example.com:8081 check ssl verify none

这种方法只使用第一个服务器 (url1)。

【问题讨论】:

  • 您的问题是如何在 2 台服务器之间轮询?
  • 它是如何在两台服务器之间进行轮询,但为每台服务器设置“授权”标头为不同的值。
  • 看看hdr()函数。这不完全是你想要的,但它是一个开始。如果您可以使用例如第二个虚拟标头,甚至可能就足够了。
  • 我需要的是一个可以应用于每个服务器的条件语句。类似于 ACL,但单独应用于循环后端中的每个服务器。我没有遇到过这种类型的解决方案,所以可能无法达到我想象的解决方案。
  • 你能发送另一个自定义标题吗?然后您可以使用hdr() 路由到正确的服务器。因此,假设您创建了 2 个额外的自定义标头,其中一个用于服务器 1,另一个用于服务器 2。授权标头可以与这些附加标头结合使用。

标签: haproxy


【解决方案1】:

我实现了以下解决方案,以允许为每个正在负载平衡的服务器自定义标头。

frontend http-in
    bind *:80
    use_backend proxy

backend proxy
    balance roundrobin
    server url1-proxy 0.0.0.0:8080
    server url2-proxy 0.0.0.0:8081

listen url1-proxy
    bind *:8080
    reqidel '^Authorization:.*'
    reqadd 'Authorization: Basic blahblahblah'
    server url1 asdf.example.com:8080 check ssl verify none

listen url2-proxy
    bind *:8081
    reqidel '^Authorization:.*'
    reqadd 'Authorization: Basic blah2blah2blah2'
    server url2 asdf.example.com:8081 check ssl verify none

【讨论】:

  • @Aleks 是的,它有效。这只是允许每个后端服务器应用特定的选项。
猜你喜欢
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-04
  • 2016-03-02
  • 2020-10-08
  • 2015-02-07
  • 2017-01-03
相关资源
最近更新 更多