使用 TCP 健康检查发送 HTTP 请求

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

我有以下配置,它向我的应用程序发送 TCP 运行状况检查(因为最后一行上的

check
):

backend bk_my-service-9801
  mode tcp
  balance leastconn
  server kube_my-service-0 myhost:31801 check ca-file cicada_CA_renew20220113.pem ssl

但是这些 TCP 运行状况检查导致我的访问日志中有 400 个条目:

192.123.4.5 - - [21/Feb/2024:10:13:27 +0000] "-" 400 -

所以我想更新它以发送 HTTP HEAD 请求到 / 而不是 TCP 请求(但仍然使用 tcp-check 而不是 httpchk)。我使用 https://docs.haproxy.org/2.8/configuration.html#4-option%20tcp-check:

中的示例添加了此内容
backend bk_my-service-9801
  option tcp-check
  tcp-check connect
  tcp-check send HEAD\ /\ HTTP/1.1\r\n
  tcp-check send User-Agent:\ HAProxy\ tcpcheck\r\n
  tcp-check send \r\n
  tcp-check expect rstring HTTP/1\..\ (2..|3..) comment check\ HTTP\ response
  mode tcp
  balance leastconn
  server kube_my-service-0 myhost:31801 check ca-file cicada_CA_renew20220113.pem ssl

但是收到此错误:

 Layer7 invalid response, info: "TCPCHK did not match content (regex) at step 5 comment: check HTTP response", check duration: 0ms. 0 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.

即使添加了此内容,我仍然在日志中看到相同的 400 个条目。

你知道我做错了什么吗?

tcp haproxy
1个回答
0
投票

您可以使用 选项 httpchk,正如 @steffen 提到的 http-check connect

这是一个未经测试的片段

backend bk_my-service-9801
  option httpchk
  http-check connect
  http-check send "HEAD / HTTP/1.1\r\n"
  http-check send "User-Agent: HAProxy/tcpcheck\r\n"
  http-check send \r\n
  http-check expect rstring "HTTP/1\.. (2..|3..)" comment "check HTTP response"
  mode tcp
  balance leastconn
  server kube_my-service-0 myhost:31801 ..more options

一个小建议,为了更好的可读性,请尽可能使用

"
,它在 HAProxy 中的工作原理记录在 引用和转义

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