Я использую сборку Windows (и это должна быть Windows) Apache 2.4.33 из https://www.apachelounge.com
Я настроил его как балансировщик нагрузки, и, кажется, все работает нормально, пока я не попробую добавить проверки работоспособности. Если я использую hcmethod = GET, проверка работоспособности выполняется, и все работает нормально. Но если я установлю hcmethod = TCP, все проверки не пройдут. Удивительно, но я не вижу попыток выполнить проверку в Wireshark (я прекрасно вижу это при использовании проверки работоспособности GET).
Это то, что я получаю в журналах
[Wed May 23 15:34:36.554601 2018] [proxy_hcheck:debug] [pid 16700:tid 888] mod_proxy_hcheck.c(820): AH03256: Threaded Health checking http://<ip-anonymized>:6001
[Wed May 23 15:34:36.554601 2018] [proxy:debug] [pid 16700:tid 888] proxy_util.c(2160): AH00942: HCTCP: has acquired connection for (<ip-anonymized>)
[Wed May 23 15:34:36.554601 2018] [proxy:debug] [pid 16700:tid 888] proxy_util.c(2175): AH00943: HCTCP: has released connection for (<ip-anonymized>)
[Wed May 23 15:34:36.554601 2018] [proxy_hcheck:debug] [pid 16700:tid 888] mod_proxy_hcheck.c(564): AH03251: Health check TCP Status (-1) for 291afc85400.
Это соответствующая часть конфига:
<Proxy balancer://myset>
BalancerMember http://<ip-anonymized>:6001 hcmethod=TCP hcinterval=5 hcpasses=2 hcfails=3
BalancerMember http://<ip-anonymized>:6002 hcmethod=GET hcuri=/<path-anonymized> hcinterval=5
ProxySet lbmethod=byrequests
</Proxy>
ProxyPass "/" "balancer://myset/"
ProxyPassReverse "/" "balancer://myset/"
<Location "/stats">
SetHandler balancer-manager
</Location>
Проверка для 6002 работает должным образом, поэтому я предполагаю, что у меня загружены все необходимые модули (я не вижу связанных с этим ошибок в файлах журнала).
Я связал проблему с поиском в Google и нашел кое-что, что может иметь отношение: http://bugs.httpd.apache.narkive.com/tyCY7SPh/bug-61499-new-tcp-healthchecks-failing-falsely-not-actually-checking
К сожалению, я не знаю, как использовать этот комментарий (я новичок в Apache):
Есть ли шанс, что вы могли бы попробовать переменную «без прокси» через SetEnvIf?
Других зацепок у меня нет.