Apache LoadBalancing:SSL/TLS 健康检查设置
Apache LoadBalancing: SSL/TLS settings for healthchecks
我正在尝试使用 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>
在上面的示例中,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>
像这样,指定的协议和密码套件对健康检查没有影响,相反,两个平衡器的健康检查使用在 httpd.conf 的全局范围内指定的默认设置。
我认为为健康检查设置 SSLProtocol 和 SSLCipherSuite 是一种很常见的情况,我想知道是否有人有有效的设置,或者是否有人遇到过同样的问题。
在此先感谢您提供的任何帮助或进一步查找的提示。
感谢 yann 和 armin 在这方面的帮助。它适用于此错误报告中提供的补丁:
https://bz.apache.org/bugzilla/show_bug.cgi?id=62556#c6
(你只需要attachment 36043,另一个补丁是wrong/not!)
正如那里所讨论的那样,问题是平衡器成员的工作人员未正确初始化。
这就是为什么我们必须设置 至少一个代理参数 的原因。
如果我们像下面这样扩展上面的 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
我正在尝试使用 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>
在上面的示例中,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>
像这样,指定的协议和密码套件对健康检查没有影响,相反,两个平衡器的健康检查使用在 httpd.conf 的全局范围内指定的默认设置。
我认为为健康检查设置 SSLProtocol 和 SSLCipherSuite 是一种很常见的情况,我想知道是否有人有有效的设置,或者是否有人遇到过同样的问题。
在此先感谢您提供的任何帮助或进一步查找的提示。
感谢 yann 和 armin 在这方面的帮助。它适用于此错误报告中提供的补丁:
https://bz.apache.org/bugzilla/show_bug.cgi?id=62556#c6
(你只需要attachment 36043,另一个补丁是wrong/not!)
正如那里所讨论的那样,问题是平衡器成员的工作人员未正确初始化。 这就是为什么我们必须设置 至少一个代理参数 的原因。
如果我们像下面这样扩展上面的 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