Apache LoadBalancing:healthchecks的SSL / TLS设置

问题描述 投票:0回答:1

我正在尝试使用apache设置负载均衡器。与后端服务器的通信是TLS加密的。当我启用healthchecks时,只要ProxySSL *指令设置在VHost Level上,而不是在Proxy部分内,这就可以工作。当我在Proxy部分中移动它们时,不再正确评估SSL / TLS设置(与后端的连接使用默认的SSL / TLS设置而不是指定的设置)。但是根据documentation的说法,应该可以在Proxy部分中定义SSL / TSL设置,这应该允许为不同的LoadBalancers设置不同的SSL / TLS设置。

什么有效:

  <VHost ...>
    SSLProxyEngine on
    ProxyPass "/"  "balancer://mybalancer"
    SSLProxyProtocol [a protocol]
    SSLProxyCipherSuite  [a cipher suite]
    <Proxy balancer://mybalancer>
      BalancerMember https://www.backend1.com hcinterval=1 hcmethod=get hcuri=/healthcheck1.php
      BalancerMember https://www.backend2.com hcinterval=1 hcmethod=get hcuri=/healthcheck2.php
   </Proxy>
  </VHost>

在上面的示例中,healthchecks以及普通请求使用指定的Protocol和CipherSuite。这个解决方案的问题是,我无法在具有不同SSL / TLS设置的同一VHost内创建第二个平衡器。不幸的是,这正是我需要的。

什么行不通:

<VHost ...>
    SSLProxyEngine on
    ProxyPass "/"  "balancer://mybalancer"
    ProxyPass "/2"  "balancer://mybalancer2"
    <Proxy balancer://mybalancer>
      SSLProxyProtocol [a protocol]
      SSLProxyCipherSuite  [a cipher suite]
      BalancerMember https://www.backend1.com hcinterval=1 hcmethod=get hcuri=/healthcheck1.php
      BalancerMember https://www.backend2.com hcinterval=1 hcmethod=get hcuri=/healthcheck2.php
   </Proxy>
    <Proxy balancer://mybalancer2>
      SSLProxyProtocol [another protocol]
      SSLProxyCipherSuite  [another cipher suite]
      BalancerMember https://www.backend3.com hcinterval=1 hcmethod=get hcuri=/healthcheck1.php
      BalancerMember https://www.backend4.com hcinterval=1 hcmethod=get hcuri=/healthcheck2.php
   </Proxy>
</VHost>

像这样,指定的Protocol和CipherSuite对健康检查没有影响,相反,两个平衡器的健康检查使用httpd.conf的全局范围中指定的默认设置。

我认为为健康检查设置SSLProtocol和SSLCipherSuite是一个很常见的情况,我想知道某人是否有可行的设置,或者是否有人遇到同样的问题。

在此先感谢您提供任何帮助或提示,以便进一步了解。

apache load-balancing mod-proxy mod-proxy-balancer
1个回答
0
投票

感谢yann和armin的帮助。它适用于此错误报告中提供的补丁:

https://bz.apache.org/bugzilla/show_bug.cgi?id=62556#c6

(你只需要attachment 36043,其他补丁错误/不需要!)

正如在那里讨论的那样,问题是平衡器成员的工作者没有被正确初始化。这就是为什么我们必须设置至少一个代理参数。

如果我们扩展上面的Proxy balancer://定义如下,它可以工作:(当然,在补丁之后):

<Proxy balancer://mybalancer2 lbmethod=byrequests> 

我们可以在这里获取任何lb参数,我们可以轻松地将其设置为默认值。 (lbmethod = byrequests是默认值,因此除了正确初始化worker之外没有任何更改)。

上面的完整,有效的例子:

<VHost ...>
    SSLProxyEngine on
    ProxyPass "/"  "balancer://mybalancer"
    ProxyPass "/2"  "balancer://mybalancer2"
    <Proxy balancer://mybalancer lbmethod=byrequests>
      SSLProxyProtocol [a protocol]
      SSLProxyCipherSuite  [a cipher suite]
      BalancerMember https://www.backend1.com hcinterval=1 hcmethod=get hcuri=/healthcheck1.php
      BalancerMember https://www.backend2.com hcinterval=1 hcmethod=get hcuri=/healthcheck2.php
   </Proxy>
    <Proxy balancer://mybalancer2 lbmethod=byrequests>
      SSLProxyProtocol [another protocol]
      SSLProxyCipherSuite  [another cipher suite]
      BalancerMember https://www.backend3.com hcinterval=1 hcmethod=get hcuri=/healthcheck1.php
      BalancerMember https://www.backend4.com hcinterval=1 hcmethod=get hcuri=/healthcheck2.php
   </Proxy>
</VHost>

补丁应该包含在下一个版本中,也许可能是2.4.35

© www.soinside.com 2019 - 2024. All rights reserved.