MINOR: config: add option http-keep-alive
This new option enables HTTP keep-alive processing on the connections.
It can be overwritten by http-server-close, httpclose and forceclose.
Right now full-chain keep-alive is not yet implemented, but we need
the option to work on it. The doc will come later.
diff --git a/doc/configuration.txt b/doc/configuration.txt
index f421e46..d0417c0 100644
--- a/doc/configuration.txt
+++ b/doc/configuration.txt
@@ -1168,6 +1168,7 @@
option forceclose (*) X X X X
-- keyword -------------------------- defaults - frontend - listen -- backend -
option forwardfor X X X X
+option http-keep-alive (*) X X X X
option http-no-delay (*) X X X X
option http-pretend-keepalive (*) X X X X
option http-server-close (*) X X X X
@@ -3763,6 +3764,61 @@
"option forceclose"
+option http-keep-alive
+no option http-keep-alive
+ Enable or disable HTTP keep-alive from client to server
+ May be used in sections : defaults | frontend | listen | backend
+ yes | yes | yes | yes
+ Arguments : none
+
+ By default, when a client communicates with a server, HAProxy will only
+ analyze, log, and process the first request of each connection. Setting
+ "option http-keep-alive" enables HTTP keep-alive mode on the client- and
+ server- sides. This provides the lowest latency on the client side (slow
+ network) and the fastest session reuse on the server side at the expense
+ of maintaining idle connections to the servers. In general, it is possible
+ with this option to achieve approximately twice the request rate that the
+ "http-server-close" option achieves on small objects. There are mainly two
+ situations where this option may be useful :
+
+ - when the server is non-HTTP compliant and authenticates the connection
+ instead of requests (eg: NTLM authentication)
+
+ - when the cost of establishing the connection to the server is significant
+ compared to the cost of retrieving the associated object from the server.
+
+ This last case can happen when the server is a fast static server of cache.
+ In this case, the server will need to be properly tuned to support high enough
+ connection counts because connections will last until the client sends another
+ request.
+
+ If the client request has to go to another backend or another server due to
+ content switching or the load balancing algorithm, the idle connection will
+ immediately be closed and a new one re-opened.
+
+ In general it is preferred to use "option http-server-close" with application
+ servers, and some static servers might benefit from "option http-keep-alive".
+
+ At the moment, logs will not indicate whether requests came from the same
+ session or not. The accept date reported in the logs corresponds to the end
+ of the previous request, and the request time corresponds to the time spent
+ waiting for a new request. The keep-alive request time is still bound to the
+ timeout defined by "timeout http-keep-alive" or "timeout http-request" if
+ not set.
+
+ This option may be set both in a frontend and in a backend. It is enabled if
+ at least one of the frontend or backend holding a connection has it enabled.
+ It is worth noting that "option forceclose" and "option http-server-close"
+ have precedence over "option http-keep-alive".
+
+ If this option has been enabled in a "defaults" section, it can be disabled
+ in a specific instance by prepending the "no" keyword before it.
+
+ See also : "option forceclose", "option http-server-close",
+ "option httpclose", "option http-pretend-keepalive" and
+ "1.1. The HTTP transaction model".
+
+
option http-no-delay
no option http-no-delay
Instruct the system to favor low interactive delays over performance in HTTP
@@ -3835,7 +3891,8 @@
If this option has been enabled in a "defaults" section, it can be disabled
in a specific instance by prepending the "no" keyword before it.
- See also : "option forceclose" and "option http-server-close"
+ See also : "option forceclose", "option http-server-close", and
+ "option http-keep-alive"
option http-server-close
@@ -3875,7 +3932,8 @@
in a specific instance by prepending the "no" keyword before it.
See also : "option forceclose", "option http-pretend-keepalive",
- "option httpclose" and "1.1. The HTTP transaction model".
+ "option httpclose", "option http-keep-alive", and
+ "1.1. The HTTP transaction model".
option http-use-proxy-header
diff --git a/src/cfgparse.c b/src/cfgparse.c
index 2160243..8d08d01 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -132,7 +132,7 @@
{ "forceclose", PR_O_FORCE_CLO, PR_CAP_FE | PR_CAP_BE, 0, PR_MODE_HTTP },
{ "http_proxy", PR_O_HTTP_PROXY, PR_CAP_FE | PR_CAP_BE, 0, PR_MODE_HTTP },
{ "httpclose", PR_O_HTTP_CLOSE, PR_CAP_FE | PR_CAP_BE, 0, PR_MODE_HTTP },
- { "keepalive", PR_O_KEEPALIVE, PR_CAP_NONE, 0, PR_MODE_HTTP },
+ { "http-keep-alive", PR_O_KEEPALIVE, PR_CAP_FE | PR_CAP_BE, 0, PR_MODE_HTTP },
{ "http-server-close", PR_O_SERVER_CLO, PR_CAP_FE | PR_CAP_BE, 0, PR_MODE_HTTP },
{ "logasap", PR_O_LOGASAP, PR_CAP_FE, 0, 0 },
{ "nolinger", PR_O_TCP_NOLING, PR_CAP_FE | PR_CAP_BE, 0, 0 },