【问题标题】:Apache LoadBalancing: SSL/TLS settings for healthchecksApache 负载平衡:用于健康检查的 SSL/TLS 设置
【发布时间】:2018-07-10 09:14:36
【问题描述】:

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

在上面的示例中,健康检查以及普通请求使用指定的协议和密码套件。此解决方案的问题是,我无法在具有不同 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】:

    感谢 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

    【讨论】:

      猜你喜欢
      • 2021-04-20
      • 2020-01-12
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 2021-08-14
      • 2019-08-27
      相关资源
      最近更新 更多