BUG/MINOR: checks: prevent http keep-alive with http-check expect
Sbastien Rohaut reported that string negation in http-check expect didn't work as expected. The misbehaviour is caused by responses with HTTP keep-alive. When the condition is not met, haproxy awaits more data until the buffer is full or the connection is closed, resulting in a check timeout when "timeout check" is lower than the keep-alive timeout on the server side. In order to avoid the issue, when a "http-check expect" is used, haproxy will ask the server to disable keep-alive by automatically appending a "Connection: close" header to the request.
This commit is contained in:
parent
aa435e7d7e
commit
32602d2361
@ -2905,6 +2905,10 @@ http-check expect [!] <match> <pattern>
|
||||
waste some CPU cycles, especially when regular expressions are used, and that
|
||||
it is always better to focus the checks on smaller resources.
|
||||
|
||||
Also "http-check expect" doesn't support HTTP keep-alive. Keep in mind that it
|
||||
will automatically append a "Connection: close" header, meaning that this
|
||||
header should not be present in the request provided by "option httpchk".
|
||||
|
||||
Last, if "http-check expect" is combined with "http-check disable-on-404",
|
||||
then this last one has precedence when the server responds with 404.
|
||||
|
||||
|
@ -1427,6 +1427,9 @@ static int connect_conn_chk(struct task *t)
|
||||
else if ((check->type) == PR_O2_HTTP_CHK) {
|
||||
if (s->proxy->options2 & PR_O2_CHK_SNDST)
|
||||
bo_putblk(check->bo, trash.str, httpchk_build_status_header(s, trash.str, trash.size));
|
||||
/* prevent HTTP keep-alive when "http-check expect" is used */
|
||||
if (s->proxy->options2 & PR_O2_EXP_TYPE)
|
||||
bo_putstr(check->bo, "Connection: close\r\n");
|
||||
bo_putstr(check->bo, "\r\n");
|
||||
*check->bo->p = '\0'; /* to make gdb output easier to read */
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user