At a site, haproxy
was configured like this for a particular back-end:
backend http_FUNCTIONALITY_cluster
log global
mode http
# default httpchk checks / which for our functionality intentionally returns 500 causing haproxy to think it's down
# option httpchk
# FUNCTIONALITY has a /FUNCTIONALITY which returns a 200 OK
option httpchk get /FUNCTIONALITY
http-check expect ! rstatus ^5
option http-keep-alive
option forwardfor
server w7connexxion 192.168.178.42:8181 cookie FUNCTIONALITYA check
The /FUNCTIONALITY
would return a multi-kilobyte result.
The HAproxy
would send the request with this body:
Connection: close
In the midst of the server returning an http request of more than one TCP frame:
Connection: close
Content-Type: text/html; charset=utf-8
Content-Length: 4068
Date: Mon, 20 Nov 2017 08:17:02 GMT
<html><head><META ...
, the HAproxy would kill the connection, resulting in a 10054 error on Windows, which [WayBack] Windows Sockets Error Codes indicates it is this:
- WSAECONNRESET
- 10054
|
- Connection reset by peer.
-
An existing connection was forcibly closed by the remote host. This normally results if the peer application on the remote host is suddenly stopped, the host is rebooted, the host or remote network interface is disabled, or the remote host uses a hard close (see setsockopt for more information on the SO_LINGER option on the remote socket). This error may also result if a connection was broken due to keep-alive activity detecting a failure while one or more operations are in progress. Operations that were in progress fail with WSAENETRESET. Subsequent operations fail with WSAECONNRESET.
|
So both sides are right in that they will close the connection (despite the HTTP keep alive): [WayBack] What does “Connection: close” means when used in the response message?
Howver, I think HAproxy is way too soon closing the connection, especially as it does not use the configured keep alive
([WayBack] How to make HA Proxy keepalive and [WayBack] Hypertext Transfer Protocol — HTTP/1.1 RFC 2616 = 14 Header Field Definitions – 14.10 Connection).
The 10054 would end up in the Windows Event Log for Applications like this:
The description for Event ID 0 from source MyFunctionality.exe cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.
If the event originated on another computer, the display information had to be saved with the event.
The following information was included with the event:
Socket Error # 10054
Connection reset by peer.
In the mean time, we shortened the result, so it does not fail any more.
Later I hope to find some time to do more research on this, for which I hope [WayBack] Health checking – HAProxy Technologies is a base.
–jeroen