0

我正在尝试使用 apache 设置负载均衡器。与后端服务器的通信是 TLS 加密的。当我启用健康检查时,只要 ProxySSL* 指令设置在 VHost 级别,而不是在代理部分内,它就可以工作。当我将它们移动到代理部分时,不再正确评估 SSL/TLS 设置(到后端的连接使用默认的 SSL/TLS 设置,而不是指定的设置)。但是根据文档,应该可以在 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>

在上面的示例中,健康检查以及普通请求使用指定的协议和 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 是很常见的情况,我想知道是否有人有一个有效的设置,或者是否有人面临同样的问题。

在此先感谢您提供任何帮助或提示进一步寻找的地方。

4

1 回答 1

0

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

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

(您只需要附件 36043,其他补丁错误/不需要!)

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

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

<Proxy balancer://mybalancer2 lbmethod=byrequests> 

我们可以在这里使用任何 lb 参数,并且可以轻松地将其设置为默认值。(lbmethod=byrequests 是默认的,所以除了工人被正确初始化之外什么都没有改变)。

上面完整的工作示例:

<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

于 2018-09-04T12:26:07.457 回答