使 HAProxy 在 HTTPCHECK 中传递主机名

Fen*_*ton 5 monitoring load-balancing haproxy uptime

我正在尝试使用特定主机名在 HAProxy 中执行 HTTP 检查。

这是我的后端配置的一个片段:

option httpchk HEAD / HTTP/1.1\r\nHost: example.com
http-check expect rstatus (2)[0-9][0-9]
Run Code Online (Sandbox Code Playgroud)

当我查看正在检查的服务器上的 IIS 日志时,主机名 ( cs-host) 为空:

#Fields: date time s-sitename s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) cs-host sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-taken
2016-04-15 20:24:09 W3SVC3 123.123.123.123 HEAD / - 80 - 456.456.456.456 - - - 302 0 0 365 45 14
Run Code Online (Sandbox Code Playgroud)

与来自浏览器的请求相比,主机名是可见的:

#Fields: date time s-sitename s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) cs-host sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-taken
2016-04-15 12:29:18 W3SVC3 123.123.123.123 GET / - 80 - 456.456.456.456 Mozilla/5.0+(Windows+NT+6.3;+WOW64;+Trident/7.0;+rv:11.0)+like+Gecko - example.com 302 0 0 397 249 1959
Run Code Online (Sandbox Code Playgroud)

我正在使用 HA-Proxy 版本 1.5.14 2015/07/02

如何让 HAProxy 使用 HTTP 检查发送主机名?

Cas*_*lia 9

您可能需要在“example.com”之前转义空格,

option httpchk HEAD / HTTP/1.1\r\nHost:\ example.com
Run Code Online (Sandbox Code Playgroud)

注意“example.com”之前的反斜杠。或者,您可以尝试添加:

http-send-name-header Host
Run Code Online (Sandbox Code Playgroud)

在那个后端配置中。

希望这可以帮助!