blob: 1f9d92c9b1dd9cb3192baa24561ae73cdcdd545d [file] [log] [blame]
Willy Tarreau6a06a402007-07-15 20:15:28 +02001 ----------------------
2 HAProxy
3 Configuration Manual
4 ----------------------
Willy Tarreau21475e32010-05-23 08:46:08 +02005 version 1.5
Willy Tarreau6a06a402007-07-15 20:15:28 +02006 willy tarreau
Willy Tarreaufee48ce2012-11-26 03:11:05 +01007 2012/11/26
Willy Tarreau6a06a402007-07-15 20:15:28 +02008
9
10This document covers the configuration language as implemented in the version
11specified above. It does not provide any hint, example or advice. For such
Willy Tarreau0ba27502007-12-24 16:55:16 +010012documentation, please refer to the Reference Manual or the Architecture Manual.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020013The summary below is meant to help you search sections by name and navigate
14through the document.
Willy Tarreau6a06a402007-07-15 20:15:28 +020015
Willy Tarreauc57f0e22009-05-10 13:12:33 +020016Note to documentation contributors :
Jamie Gloudonaaa21002012-08-25 00:18:33 -040017 This document is formatted with 80 columns per line, with even number of
Willy Tarreauc57f0e22009-05-10 13:12:33 +020018 spaces for indentation and without tabs. Please follow these rules strictly
19 so that it remains easily printable everywhere. If a line needs to be
20 printed verbatim and does not fit, please end each line with a backslash
Willy Tarreau62a36c42010-08-17 15:53:10 +020021 ('\') and continue on next line, indented by two characters. It is also
22 sometimes useful to prefix all output lines (logs, console outs) with 3
23 closing angle brackets ('>>>') in order to help get the difference between
24 inputs and outputs when it can become ambiguous. If you add sections,
25 please update the summary below for easier searching.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020026
27
28Summary
29-------
30
311. Quick reminder about HTTP
321.1. The HTTP transaction model
331.2. HTTP request
341.2.1. The Request line
351.2.2. The request headers
361.3. HTTP response
371.3.1. The Response line
381.3.2. The response headers
39
402. Configuring HAProxy
412.1. Configuration file format
422.2. Time format
Patrick Mezard35da19c2010-06-12 17:02:47 +0200432.3. Examples
Willy Tarreauc57f0e22009-05-10 13:12:33 +020044
453. Global parameters
463.1. Process management and security
473.2. Performance tuning
483.3. Debugging
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +0100493.4. Userlists
Cyril Bontédc4d9032012-04-08 21:57:39 +0200503.5. Peers
Willy Tarreauc57f0e22009-05-10 13:12:33 +020051
524. Proxies
534.1. Proxy keywords matrix
544.2. Alphabetically sorted keywords reference
55
Willy Tarreau086fbf52012-09-24 20:34:51 +0200565. Bind and Server options
575.1. Bind options
585.2. Server and default-server options
Willy Tarreauc57f0e22009-05-10 13:12:33 +020059
606. HTTP header manipulation
61
Cyril Bonté7d38afb2010-02-03 20:41:26 +0100627. Using ACLs and pattern extraction
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200637.1. Matching integers
647.2. Matching strings
657.3. Matching regular expressions (regexes)
Willy Tarreauceb4ac92012-04-28 00:41:46 +0200667.4. Matching IPv4 and IPv6 addresses
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200677.5. Available matching criteria
687.5.1. Matching at Layer 4 and below
697.5.2. Matching contents at Layer 4
707.5.3. Matching at Layer 7
717.6. Pre-defined ACLs
727.7. Using ACLs to form conditions
Cyril Bonté7d38afb2010-02-03 20:41:26 +0100737.8. Pattern extraction
Willy Tarreauc57f0e22009-05-10 13:12:33 +020074
758. Logging
768.1. Log levels
778.2. Log formats
788.2.1. Default log format
798.2.2. TCP log format
808.2.3. HTTP log format
William Lallemand48940402012-01-30 16:47:22 +0100818.2.4. Custom log format
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200828.3. Advanced logging options
838.3.1. Disabling logging of external tests
848.3.2. Logging before waiting for the session to terminate
858.3.3. Raising log level upon errors
868.3.4. Disabling logging of successful connections
878.4. Timing events
888.5. Session state at disconnection
898.6. Non-printable characters
908.7. Capturing HTTP cookies
918.8. Capturing HTTP headers
928.9. Examples of logs
93
949. Statistics and monitoring
959.1. CSV format
969.2. Unix Socket commands
97
98
991. Quick reminder about HTTP
100----------------------------
101
102When haproxy is running in HTTP mode, both the request and the response are
103fully analyzed and indexed, thus it becomes possible to build matching criteria
104on almost anything found in the contents.
105
106However, it is important to understand how HTTP requests and responses are
107formed, and how HAProxy decomposes them. It will then become easier to write
108correct rules and to debug existing configurations.
109
110
1111.1. The HTTP transaction model
112-------------------------------
113
114The HTTP protocol is transaction-driven. This means that each request will lead
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +0100115to one and only one response. Traditionally, a TCP connection is established
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200116from the client to the server, a request is sent by the client on the
117connection, the server responds and the connection is closed. A new request
118will involve a new connection :
119
120 [CON1] [REQ1] ... [RESP1] [CLO1] [CON2] [REQ2] ... [RESP2] [CLO2] ...
121
122In this mode, called the "HTTP close" mode, there are as many connection
123establishments as there are HTTP transactions. Since the connection is closed
124by the server after the response, the client does not need to know the content
125length.
126
127Due to the transactional nature of the protocol, it was possible to improve it
128to avoid closing a connection between two subsequent transactions. In this mode
129however, it is mandatory that the server indicates the content length for each
130response so that the client does not wait indefinitely. For this, a special
131header is used: "Content-length". This mode is called the "keep-alive" mode :
132
133 [CON] [REQ1] ... [RESP1] [REQ2] ... [RESP2] [CLO] ...
134
135Its advantages are a reduced latency between transactions, and less processing
136power required on the server side. It is generally better than the close mode,
137but not always because the clients often limit their concurrent connections to
Patrick Mezard9ec2ec42010-06-12 17:02:45 +0200138a smaller value.
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200139
140A last improvement in the communications is the pipelining mode. It still uses
141keep-alive, but the client does not wait for the first response to send the
142second request. This is useful for fetching large number of images composing a
143page :
144
145 [CON] [REQ1] [REQ2] ... [RESP1] [RESP2] [CLO] ...
146
147This can obviously have a tremendous benefit on performance because the network
148latency is eliminated between subsequent requests. Many HTTP agents do not
149correctly support pipelining since there is no way to associate a response with
150the corresponding request in HTTP. For this reason, it is mandatory for the
Cyril Bonté78caf842010-03-10 22:41:43 +0100151server to reply in the exact same order as the requests were received.
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200152
Patrick Mezard9ec2ec42010-06-12 17:02:45 +0200153By default HAProxy operates in a tunnel-like mode with regards to persistent
154connections: for each connection it processes the first request and forwards
155everything else (including additional requests) to selected server. Once
156established, the connection is persisted both on the client and server
157sides. Use "option http-server-close" to preserve client persistent connections
158while handling every incoming request individually, dispatching them one after
159another to servers, in HTTP close mode. Use "option httpclose" to switch both
160sides to HTTP close mode. "option forceclose" and "option
161http-pretend-keepalive" help working around servers misbehaving in HTTP close
162mode.
163
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200164
1651.2. HTTP request
166-----------------
167
168First, let's consider this HTTP request :
169
170 Line Contents
Willy Tarreaud72758d2010-01-12 10:42:19 +0100171 number
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200172 1 GET /serv/login.php?lang=en&profile=2 HTTP/1.1
173 2 Host: www.mydomain.com
174 3 User-agent: my small browser
175 4 Accept: image/jpeg, image/gif
176 5 Accept: image/png
177
178
1791.2.1. The Request line
180-----------------------
181
182Line 1 is the "request line". It is always composed of 3 fields :
183
184 - a METHOD : GET
185 - a URI : /serv/login.php?lang=en&profile=2
186 - a version tag : HTTP/1.1
187
188All of them are delimited by what the standard calls LWS (linear white spaces),
189which are commonly spaces, but can also be tabs or line feeds/carriage returns
190followed by spaces/tabs. The method itself cannot contain any colon (':') and
191is limited to alphabetic letters. All those various combinations make it
192desirable that HAProxy performs the splitting itself rather than leaving it to
193the user to write a complex or inaccurate regular expression.
194
195The URI itself can have several forms :
196
197 - A "relative URI" :
198
199 /serv/login.php?lang=en&profile=2
200
201 It is a complete URL without the host part. This is generally what is
202 received by servers, reverse proxies and transparent proxies.
203
204 - An "absolute URI", also called a "URL" :
205
206 http://192.168.0.12:8080/serv/login.php?lang=en&profile=2
207
208 It is composed of a "scheme" (the protocol name followed by '://'), a host
209 name or address, optionally a colon (':') followed by a port number, then
210 a relative URI beginning at the first slash ('/') after the address part.
211 This is generally what proxies receive, but a server supporting HTTP/1.1
212 must accept this form too.
213
214 - a star ('*') : this form is only accepted in association with the OPTIONS
215 method and is not relayable. It is used to inquiry a next hop's
216 capabilities.
Willy Tarreaud72758d2010-01-12 10:42:19 +0100217
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200218 - an address:port combination : 192.168.0.12:80
219 This is used with the CONNECT method, which is used to establish TCP
220 tunnels through HTTP proxies, generally for HTTPS, but sometimes for
221 other protocols too.
222
223In a relative URI, two sub-parts are identified. The part before the question
224mark is called the "path". It is typically the relative path to static objects
225on the server. The part after the question mark is called the "query string".
226It is mostly used with GET requests sent to dynamic scripts and is very
227specific to the language, framework or application in use.
228
229
2301.2.2. The request headers
231--------------------------
232
233The headers start at the second line. They are composed of a name at the
234beginning of the line, immediately followed by a colon (':'). Traditionally,
235an LWS is added after the colon but that's not required. Then come the values.
236Multiple identical headers may be folded into one single line, delimiting the
237values with commas, provided that their order is respected. This is commonly
238encountered in the "Cookie:" field. A header may span over multiple lines if
239the subsequent lines begin with an LWS. In the example in 1.2, lines 4 and 5
240define a total of 3 values for the "Accept:" header.
241
242Contrary to a common mis-conception, header names are not case-sensitive, and
243their values are not either if they refer to other header names (such as the
244"Connection:" header).
245
246The end of the headers is indicated by the first empty line. People often say
247that it's a double line feed, which is not exact, even if a double line feed
248is one valid form of empty line.
249
250Fortunately, HAProxy takes care of all these complex combinations when indexing
251headers, checking values and counting them, so there is no reason to worry
252about the way they could be written, but it is important not to accuse an
253application of being buggy if it does unusual, valid things.
254
255Important note:
256 As suggested by RFC2616, HAProxy normalizes headers by replacing line breaks
257 in the middle of headers by LWS in order to join multi-line headers. This
258 is necessary for proper analysis and helps less capable HTTP parsers to work
259 correctly and not to be fooled by such complex constructs.
260
261
2621.3. HTTP response
263------------------
264
265An HTTP response looks very much like an HTTP request. Both are called HTTP
266messages. Let's consider this HTTP response :
267
268 Line Contents
Willy Tarreaud72758d2010-01-12 10:42:19 +0100269 number
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200270 1 HTTP/1.1 200 OK
271 2 Content-length: 350
272 3 Content-Type: text/html
273
Willy Tarreau816b9792009-09-15 21:25:21 +0200274As a special case, HTTP supports so called "Informational responses" as status
275codes 1xx. These messages are special in that they don't convey any part of the
276response, they're just used as sort of a signaling message to ask a client to
Willy Tarreau5843d1a2010-02-01 15:13:32 +0100277continue to post its request for instance. In the case of a status 100 response
278the requested information will be carried by the next non-100 response message
279following the informational one. This implies that multiple responses may be
280sent to a single request, and that this only works when keep-alive is enabled
281(1xx messages are HTTP/1.1 only). HAProxy handles these messages and is able to
282correctly forward and skip them, and only process the next non-100 response. As
283such, these messages are neither logged nor transformed, unless explicitly
284state otherwise. Status 101 messages indicate that the protocol is changing
285over the same connection and that haproxy must switch to tunnel mode, just as
286if a CONNECT had occurred. Then the Upgrade header would contain additional
287information about the type of protocol the connection is switching to.
Willy Tarreau816b9792009-09-15 21:25:21 +0200288
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200289
2901.3.1. The Response line
291------------------------
292
293Line 1 is the "response line". It is always composed of 3 fields :
294
295 - a version tag : HTTP/1.1
296 - a status code : 200
297 - a reason : OK
298
299The status code is always 3-digit. The first digit indicates a general status :
Willy Tarreau816b9792009-09-15 21:25:21 +0200300 - 1xx = informational message to be skipped (eg: 100, 101)
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200301 - 2xx = OK, content is following (eg: 200, 206)
302 - 3xx = OK, no content following (eg: 302, 304)
303 - 4xx = error caused by the client (eg: 401, 403, 404)
304 - 5xx = error caused by the server (eg: 500, 502, 503)
305
306Please refer to RFC2616 for the detailed meaning of all such codes. The
Willy Tarreaud72758d2010-01-12 10:42:19 +0100307"reason" field is just a hint, but is not parsed by clients. Anything can be
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200308found there, but it's a common practice to respect the well-established
309messages. It can be composed of one or multiple words, such as "OK", "Found",
310or "Authentication Required".
311
312Haproxy may emit the following status codes by itself :
313
314 Code When / reason
315 200 access to stats page, and when replying to monitoring requests
316 301 when performing a redirection, depending on the configured code
317 302 when performing a redirection, depending on the configured code
318 303 when performing a redirection, depending on the configured code
319 400 for an invalid or too large request
320 401 when an authentication is required to perform the action (when
321 accessing the stats page)
322 403 when a request is forbidden by a "block" ACL or "reqdeny" filter
323 408 when the request timeout strikes before the request is complete
324 500 when haproxy encounters an unrecoverable internal error, such as a
325 memory allocation failure, which should never happen
326 502 when the server returns an empty, invalid or incomplete response, or
327 when an "rspdeny" filter blocks the response.
328 503 when no server was available to handle the request, or in response to
329 monitoring requests which match the "monitor fail" condition
330 504 when the response timeout strikes before the server responds
331
332The error 4xx and 5xx codes above may be customized (see "errorloc" in section
3334.2).
334
335
3361.3.2. The response headers
337---------------------------
338
339Response headers work exactly like request headers, and as such, HAProxy uses
340the same parsing function for both. Please refer to paragraph 1.2.2 for more
341details.
342
343
3442. Configuring HAProxy
345----------------------
346
3472.1. Configuration file format
348------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +0200349
350HAProxy's configuration process involves 3 major sources of parameters :
351
352 - the arguments from the command-line, which always take precedence
353 - the "global" section, which sets process-wide parameters
354 - the proxies sections which can take form of "defaults", "listen",
355 "frontend" and "backend".
356
Willy Tarreau0ba27502007-12-24 16:55:16 +0100357The configuration file syntax consists in lines beginning with a keyword
358referenced in this manual, optionally followed by one or several parameters
359delimited by spaces. If spaces have to be entered in strings, then they must be
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +0100360preceded by a backslash ('\') to be escaped. Backslashes also have to be
Willy Tarreau0ba27502007-12-24 16:55:16 +0100361escaped by doubling them.
362
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200363
3642.2. Time format
365----------------
366
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +0100367Some parameters involve values representing time, such as timeouts. These
Willy Tarreau0ba27502007-12-24 16:55:16 +0100368values are generally expressed in milliseconds (unless explicitly stated
369otherwise) but may be expressed in any other unit by suffixing the unit to the
370numeric value. It is important to consider this because it will not be repeated
371for every keyword. Supported units are :
372
373 - us : microseconds. 1 microsecond = 1/1000000 second
374 - ms : milliseconds. 1 millisecond = 1/1000 second. This is the default.
375 - s : seconds. 1s = 1000ms
376 - m : minutes. 1m = 60s = 60000ms
377 - h : hours. 1h = 60m = 3600s = 3600000ms
378 - d : days. 1d = 24h = 1440m = 86400s = 86400000ms
379
380
Patrick Mezard35da19c2010-06-12 17:02:47 +02003812.3. Examples
382-------------
383
384 # Simple configuration for an HTTP proxy listening on port 80 on all
385 # interfaces and forwarding requests to a single backend "servers" with a
386 # single server "server1" listening on 127.0.0.1:8000
387 global
388 daemon
389 maxconn 256
390
391 defaults
392 mode http
393 timeout connect 5000ms
394 timeout client 50000ms
395 timeout server 50000ms
396
397 frontend http-in
398 bind *:80
399 default_backend servers
400
401 backend servers
402 server server1 127.0.0.1:8000 maxconn 32
403
404
405 # The same configuration defined with a single listen block. Shorter but
406 # less expressive, especially in HTTP mode.
407 global
408 daemon
409 maxconn 256
410
411 defaults
412 mode http
413 timeout connect 5000ms
414 timeout client 50000ms
415 timeout server 50000ms
416
417 listen http-in
418 bind *:80
419 server server1 127.0.0.1:8000 maxconn 32
420
421
422Assuming haproxy is in $PATH, test these configurations in a shell with:
423
Willy Tarreauccb289d2010-12-11 20:19:38 +0100424 $ sudo haproxy -f configuration.conf -c
Patrick Mezard35da19c2010-06-12 17:02:47 +0200425
426
Willy Tarreauc57f0e22009-05-10 13:12:33 +02004273. Global parameters
Willy Tarreau6a06a402007-07-15 20:15:28 +0200428--------------------
429
430Parameters in the "global" section are process-wide and often OS-specific. They
431are generally set once for all and do not need being changed once correct. Some
432of them have command-line equivalents.
433
434The following keywords are supported in the "global" section :
435
436 * Process management and security
Emeric Brunc8e8d122012-10-02 18:42:10 +0200437 - ca-base
Willy Tarreau6a06a402007-07-15 20:15:28 +0200438 - chroot
Emeric Brunc8e8d122012-10-02 18:42:10 +0200439 - crt-base
Willy Tarreau6a06a402007-07-15 20:15:28 +0200440 - daemon
441 - gid
442 - group
443 - log
Joe Williamsdf5b38f2010-12-29 17:05:48 +0100444 - log-send-hostname
Willy Tarreau6a06a402007-07-15 20:15:28 +0200445 - nbproc
446 - pidfile
447 - uid
448 - ulimit-n
449 - user
Willy Tarreaufbee7132007-10-18 13:53:22 +0200450 - stats
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +0200451 - node
452 - description
Willy Tarreauceb24bc2010-11-09 12:46:41 +0100453 - unix-bind
Willy Tarreaud72758d2010-01-12 10:42:19 +0100454
Willy Tarreau6a06a402007-07-15 20:15:28 +0200455 * Performance tuning
456 - maxconn
Willy Tarreau81c25d02011-09-07 15:17:21 +0200457 - maxconnrate
William Lallemandd85f9172012-11-09 17:05:39 +0100458 - maxcomprate
William Lallemand072a2bf2012-11-20 17:01:01 +0100459 - maxcompcpuusage
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100460 - maxpipes
Willy Tarreau403edff2012-09-06 11:58:37 +0200461 - maxsslconn
Willy Tarreau6a06a402007-07-15 20:15:28 +0200462 - noepoll
463 - nokqueue
464 - nopoll
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100465 - nosplice
Willy Tarreaufe255b72007-10-14 23:09:26 +0200466 - spread-checks
Willy Tarreau27a674e2009-08-17 07:23:33 +0200467 - tune.bufsize
Willy Tarreau43961d52010-10-04 20:39:20 +0200468 - tune.chksize
William Lallemandf3747832012-11-09 12:33:10 +0100469 - tune.comp.maxlevel
Willy Tarreau193b8c62012-11-22 00:17:38 +0100470 - tune.http.cookielen
Willy Tarreauac1932d2011-10-24 19:14:41 +0200471 - tune.http.maxhdr
Willy Tarreaua0250ba2008-01-06 11:22:57 +0100472 - tune.maxaccept
473 - tune.maxpollevents
Willy Tarreau27a674e2009-08-17 07:23:33 +0200474 - tune.maxrewrite
Willy Tarreaubd9a0a72011-10-23 21:14:29 +0200475 - tune.pipesize
Willy Tarreaue803de22010-01-21 17:43:04 +0100476 - tune.rcvbuf.client
477 - tune.rcvbuf.server
478 - tune.sndbuf.client
479 - tune.sndbuf.server
Willy Tarreau6ec58db2012-11-16 16:32:15 +0100480 - tune.ssl.cachesize
William Lallemanda509e4c2012-11-07 16:54:34 +0100481 - tune.zlib.memlevel
482 - tune.zlib.windowsize
Willy Tarreaud72758d2010-01-12 10:42:19 +0100483
Willy Tarreau6a06a402007-07-15 20:15:28 +0200484 * Debugging
485 - debug
486 - quiet
Willy Tarreau6a06a402007-07-15 20:15:28 +0200487
488
Willy Tarreauc57f0e22009-05-10 13:12:33 +02004893.1. Process management and security
Willy Tarreau6a06a402007-07-15 20:15:28 +0200490------------------------------------
491
Emeric Brunc8e8d122012-10-02 18:42:10 +0200492ca-base <dir>
493 Assigns a default directory to fetch SSL CA certificates and CRLs from when a
Emeric Brunfd33a262012-10-11 16:28:27 +0200494 relative path is used with "ca-file" or "crl-file" directives. Absolute
495 locations specified in "ca-file" and "crl-file" prevail and ignore "ca-base".
Emeric Brunc8e8d122012-10-02 18:42:10 +0200496
Willy Tarreau6a06a402007-07-15 20:15:28 +0200497chroot <jail dir>
498 Changes current directory to <jail dir> and performs a chroot() there before
499 dropping privileges. This increases the security level in case an unknown
500 vulnerability would be exploited, since it would make it very hard for the
501 attacker to exploit the system. This only works when the process is started
502 with superuser privileges. It is important to ensure that <jail_dir> is both
503 empty and unwritable to anyone.
Willy Tarreaud72758d2010-01-12 10:42:19 +0100504
Willy Tarreaufc6c0322012-11-16 16:12:27 +0100505cpu-map <"all"|"odd"|"even"|process_num> <cpu-set>...
506 On Linux 2.6 and above, it is possible to bind a process to a specific CPU
507 set. This means that the process will never run on other CPUs. The "cpu-map"
508 directive specifies CPU sets for process sets. The first argument is the
509 process number to bind. This process must have a number between 1 and 32,
510 and any process IDs above nbproc are ignored. It is possible to specify all
511 processes at once using "all", only odd numbers using "odd" or even numbers
512 using "even", just like with the "bind-process" directive. The second and
513 forthcoming arguments are CPU sets. Each CPU set is either a unique number
514 between 0 and 31 or a range with two such numbers delimited by a dash ('-').
515 Multiple CPU numbers or ranges may be specified, and the processes will be
516 allowed to bind to all of them. Obviously, multiple "cpu-map" directives may
517 be specified. Each "cpu-map" directive will replace the previous ones when
518 they overlap.
519
Emeric Brunc8e8d122012-10-02 18:42:10 +0200520crt-base <dir>
521 Assigns a default directory to fetch SSL certificates from when a relative
522 path is used with "crtfile" directives. Absolute locations specified after
523 "crtfile" prevail and ignore "crt-base".
524
Willy Tarreau6a06a402007-07-15 20:15:28 +0200525daemon
526 Makes the process fork into background. This is the recommended mode of
527 operation. It is equivalent to the command line "-D" argument. It can be
528 disabled by the command line "-db" argument.
529
530gid <number>
531 Changes the process' group ID to <number>. It is recommended that the group
532 ID is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
533 be started with a user belonging to this group, or with superuser privileges.
534 See also "group" and "uid".
Willy Tarreaud72758d2010-01-12 10:42:19 +0100535
Willy Tarreau6a06a402007-07-15 20:15:28 +0200536group <group name>
537 Similar to "gid" but uses the GID of group name <group name> from /etc/group.
538 See also "gid" and "user".
Willy Tarreaud72758d2010-01-12 10:42:19 +0100539
Willy Tarreauf7edefa2009-05-10 17:20:05 +0200540log <address> <facility> [max level [min level]]
Willy Tarreau6a06a402007-07-15 20:15:28 +0200541 Adds a global syslog server. Up to two global servers can be defined. They
542 will receive logs for startups and exits, as well as all logs from proxies
Robert Tsai81ae1952007-12-05 10:47:29 +0100543 configured with "log global".
544
545 <address> can be one of:
546
Willy Tarreau2769aa02007-12-27 18:26:09 +0100547 - An IPv4 address optionally followed by a colon and a UDP port. If
Robert Tsai81ae1952007-12-05 10:47:29 +0100548 no port is specified, 514 is used by default (the standard syslog
549 port).
550
David du Colombier24bb5f52011-03-17 10:40:23 +0100551 - An IPv6 address followed by a colon and optionally a UDP port. If
552 no port is specified, 514 is used by default (the standard syslog
553 port).
554
Robert Tsai81ae1952007-12-05 10:47:29 +0100555 - A filesystem path to a UNIX domain socket, keeping in mind
556 considerations for chroot (be sure the path is accessible inside
557 the chroot) and uid/gid (be sure the path is appropriately
558 writeable).
559
560 <facility> must be one of the 24 standard syslog facilities :
Willy Tarreau6a06a402007-07-15 20:15:28 +0200561
562 kern user mail daemon auth syslog lpr news
563 uucp cron auth2 ftp ntp audit alert cron2
564 local0 local1 local2 local3 local4 local5 local6 local7
565
566 An optional level can be specified to filter outgoing messages. By default,
Willy Tarreauf7edefa2009-05-10 17:20:05 +0200567 all messages are sent. If a maximum level is specified, only messages with a
568 severity at least as important as this level will be sent. An optional minimum
569 level can be specified. If it is set, logs emitted with a more severe level
570 than this one will be capped to this level. This is used to avoid sending
571 "emerg" messages on all terminals on some default syslog configurations.
572 Eight levels are known :
Willy Tarreau6a06a402007-07-15 20:15:28 +0200573
Cyril Bontédc4d9032012-04-08 21:57:39 +0200574 emerg alert crit err warning notice info debug
Willy Tarreau6a06a402007-07-15 20:15:28 +0200575
Joe Williamsdf5b38f2010-12-29 17:05:48 +0100576log-send-hostname [<string>]
577 Sets the hostname field in the syslog header. If optional "string" parameter
578 is set the header is set to the string contents, otherwise uses the hostname
579 of the system. Generally used if one is not relaying logs through an
580 intermediate syslog server or for simply customizing the hostname printed in
581 the logs.
582
Kevinm48936af2010-12-22 16:08:21 +0000583log-tag <string>
584 Sets the tag field in the syslog header to this string. It defaults to the
585 program name as launched from the command line, which usually is "haproxy".
586 Sometimes it can be useful to differentiate between multiple processes
587 running on the same host.
588
Willy Tarreau6a06a402007-07-15 20:15:28 +0200589nbproc <number>
590 Creates <number> processes when going daemon. This requires the "daemon"
591 mode. By default, only one process is created, which is the recommended mode
592 of operation. For systems limited to small sets of file descriptors per
593 process, it may be needed to fork multiple daemons. USING MULTIPLE PROCESSES
594 IS HARDER TO DEBUG AND IS REALLY DISCOURAGED. See also "daemon".
595
596pidfile <pidfile>
597 Writes pids of all daemons into file <pidfile>. This option is equivalent to
598 the "-p" command line argument. The file must be accessible to the user
599 starting the process. See also "daemon".
600
Willy Tarreau110ecc12012-11-15 17:50:01 +0100601stats bind-process [ all | odd | even | <number 1-32>[-<number 1-32>] ] ...
Willy Tarreau35b7b162012-10-22 23:17:18 +0200602 Limits the stats socket to a certain set of processes numbers. By default the
603 stats socket is bound to all processes, causing a warning to be emitted when
604 nbproc is greater than 1 because there is no way to select the target process
605 when connecting. However, by using this setting, it becomes possible to pin
606 the stats socket to a specific set of processes, typically the first one. The
607 warning will automatically be disabled when this setting is used, whatever
608 the number of processes used.
609
Willy Tarreauabb175f2012-09-24 12:43:26 +0200610stats socket [<address:port>|<path>] [param*]
611 Binds a UNIX socket to <path> or a TCPv4/v6 address to <address:port>.
612 Connections to this socket will return various statistics outputs and even
613 allow some commands to be issued to change some runtime settings. Please
614 consult section 9.2 "Unix Socket commands" for more details.
Willy Tarreau6162db22009-10-10 17:13:00 +0200615
Willy Tarreauabb175f2012-09-24 12:43:26 +0200616 All parameters supported by "bind" lines are supported, for instance to
617 restrict access to some users or their access rights. Please consult
618 section 5.1 for more information.
Willy Tarreaufbee7132007-10-18 13:53:22 +0200619
620stats timeout <timeout, in milliseconds>
621 The default timeout on the stats socket is set to 10 seconds. It is possible
622 to change this value with "stats timeout". The value must be passed in
Willy Tarreaubefdff12007-12-02 22:27:38 +0100623 milliseconds, or be suffixed by a time unit among { us, ms, s, m, h, d }.
Willy Tarreaufbee7132007-10-18 13:53:22 +0200624
625stats maxconn <connections>
626 By default, the stats socket is limited to 10 concurrent connections. It is
627 possible to change this value with "stats maxconn".
628
Willy Tarreau6a06a402007-07-15 20:15:28 +0200629uid <number>
630 Changes the process' user ID to <number>. It is recommended that the user ID
631 is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
632 be started with superuser privileges in order to be able to switch to another
633 one. See also "gid" and "user".
634
635ulimit-n <number>
636 Sets the maximum number of per-process file-descriptors to <number>. By
637 default, it is automatically computed, so it is recommended not to use this
638 option.
639
Willy Tarreauceb24bc2010-11-09 12:46:41 +0100640unix-bind [ prefix <prefix> ] [ mode <mode> ] [ user <user> ] [ uid <uid> ]
641 [ group <group> ] [ gid <gid> ]
642
643 Fixes common settings to UNIX listening sockets declared in "bind" statements.
644 This is mainly used to simplify declaration of those UNIX sockets and reduce
645 the risk of errors, since those settings are most commonly required but are
646 also process-specific. The <prefix> setting can be used to force all socket
647 path to be relative to that directory. This might be needed to access another
648 component's chroot. Note that those paths are resolved before haproxy chroots
649 itself, so they are absolute. The <mode>, <user>, <uid>, <group> and <gid>
650 all have the same meaning as their homonyms used by the "bind" statement. If
651 both are specified, the "bind" statement has priority, meaning that the
652 "unix-bind" settings may be seen as process-wide default settings.
653
Willy Tarreau6a06a402007-07-15 20:15:28 +0200654user <user name>
655 Similar to "uid" but uses the UID of user name <user name> from /etc/passwd.
656 See also "uid" and "group".
657
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +0200658node <name>
659 Only letters, digits, hyphen and underscore are allowed, like in DNS names.
660
661 This statement is useful in HA configurations where two or more processes or
662 servers share the same IP address. By setting a different node-name on all
663 nodes, it becomes easy to immediately spot what server is handling the
664 traffic.
665
666description <text>
667 Add a text that describes the instance.
668
669 Please note that it is required to escape certain characters (# for example)
670 and this text is inserted into a html page so you should avoid using
671 "<" and ">" characters.
672
Willy Tarreau6a06a402007-07-15 20:15:28 +0200673
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006743.2. Performance tuning
Willy Tarreau6a06a402007-07-15 20:15:28 +0200675-----------------------
676
677maxconn <number>
678 Sets the maximum per-process number of concurrent connections to <number>. It
679 is equivalent to the command-line argument "-n". Proxies will stop accepting
680 connections when this limit is reached. The "ulimit-n" parameter is
681 automatically adjusted according to this value. See also "ulimit-n".
682
Willy Tarreau81c25d02011-09-07 15:17:21 +0200683maxconnrate <number>
684 Sets the maximum per-process number of connections per second to <number>.
685 Proxies will stop accepting connections when this limit is reached. It can be
686 used to limit the global capacity regardless of each frontend capacity. It is
687 important to note that this can only be used as a service protection measure,
688 as there will not necessarily be a fair share between frontends when the
689 limit is reached, so it's a good idea to also limit each frontend to some
690 value close to its expected share. Also, lowering tune.maxaccept can improve
691 fairness.
692
William Lallemandd85f9172012-11-09 17:05:39 +0100693maxcomprate <number>
694 Sets the maximum per-process input compression rate to <number> kilobytes
695 pers second. For each session, if the maximum is reached, the compression
696 level will be decreased during the session. If the maximum is reached at the
697 beginning of a session, the session will not compress at all. If the maximum
698 is not reached, the compression level will be increased up to
699 tune.comp.maxlevel. A value of zero means there is no limit, this is the
700 default value.
701
William Lallemand072a2bf2012-11-20 17:01:01 +0100702maxcompcpuusage <number>
703 Sets the maximum CPU usage HAProxy can reach before stopping the compression
704 for new requests or decreasing the compression level of current requests.
705 It works like 'maxcomprate' but measures CPU usage instead of incoming data
706 bandwidth. The value is expressed in percent of the CPU used by haproxy. In
707 case of multiple processes (nbproc > 1), each process manages its individual
708 usage. A value of 100 disable the limit. The default value is 100. Setting
709 a lower value will prevent the compression work from slowing the whole
710 process down and from introducing high latencies.
711
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100712maxpipes <number>
713 Sets the maximum per-process number of pipes to <number>. Currently, pipes
714 are only used by kernel-based tcp splicing. Since a pipe contains two file
715 descriptors, the "ulimit-n" value will be increased accordingly. The default
716 value is maxconn/4, which seems to be more than enough for most heavy usages.
717 The splice code dynamically allocates and releases pipes, and can fall back
718 to standard copy, so setting this value too low may only impact performance.
719
Willy Tarreau403edff2012-09-06 11:58:37 +0200720maxsslconn <number>
721 Sets the maximum per-process number of concurrent SSL connections to
722 <number>. By default there is no SSL-specific limit, which means that the
723 global maxconn setting will apply to all connections. Setting this limit
724 avoids having openssl use too much memory and crash when malloc returns NULL
725 (since it unfortunately does not reliably check for such conditions). Note
726 that the limit applies both to incoming and outgoing connections, so one
727 connection which is deciphered then ciphered accounts for 2 SSL connections.
728
William Lallemand9d5f5482012-11-07 16:12:57 +0100729maxzlibmem <number>
730 Sets the maximum amount of RAM in megabytes per process usable by the zlib.
731 When the maximum amount is reached, future sessions will not compress as long
732 as RAM is unavailable. When sets to 0, there is no limit.
William Lallemande3a7d992012-11-20 11:25:20 +0100733 The default value is 0. The value is available in bytes on the UNIX socket
734 with "show info" on the line "MaxZlibMemUsage", the memory used by zlib is
735 "ZlibMemUsage" in bytes.
736
Willy Tarreau6a06a402007-07-15 20:15:28 +0200737noepoll
738 Disables the use of the "epoll" event polling system on Linux. It is
739 equivalent to the command-line argument "-de". The next polling system
Willy Tarreaue9f49e72012-11-11 17:42:00 +0100740 used will generally be "poll". See also "nopoll".
Willy Tarreau6a06a402007-07-15 20:15:28 +0200741
742nokqueue
743 Disables the use of the "kqueue" event polling system on BSD. It is
744 equivalent to the command-line argument "-dk". The next polling system
745 used will generally be "poll". See also "nopoll".
746
747nopoll
748 Disables the use of the "poll" event polling system. It is equivalent to the
749 command-line argument "-dp". The next polling system used will be "select".
Willy Tarreau0ba27502007-12-24 16:55:16 +0100750 It should never be needed to disable "poll" since it's available on all
Willy Tarreaue9f49e72012-11-11 17:42:00 +0100751 platforms supported by HAProxy. See also "nokqueue" and "noepoll".
Willy Tarreau6a06a402007-07-15 20:15:28 +0200752
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100753nosplice
754 Disables the use of kernel tcp splicing between sockets on Linux. It is
755 equivalent to the command line argument "-dS". Data will then be copied
756 using conventional and more portable recv/send calls. Kernel tcp splicing is
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +0100757 limited to some very recent instances of kernel 2.6. Most versions between
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100758 2.6.25 and 2.6.28 are buggy and will forward corrupted data, so they must not
759 be used. This option makes it easier to globally disable kernel splicing in
760 case of doubt. See also "option splice-auto", "option splice-request" and
761 "option splice-response".
762
Willy Tarreaufe255b72007-10-14 23:09:26 +0200763spread-checks <0..50, in percent>
764 Sometimes it is desirable to avoid sending health checks to servers at exact
765 intervals, for instance when many logical servers are located on the same
766 physical server. With the help of this parameter, it becomes possible to add
767 some randomness in the check interval between 0 and +/- 50%. A value between
768 2 and 5 seems to show good results. The default value remains at 0.
769
Willy Tarreau27a674e2009-08-17 07:23:33 +0200770tune.bufsize <number>
771 Sets the buffer size to this size (in bytes). Lower values allow more
772 sessions to coexist in the same amount of RAM, and higher values allow some
773 applications with very large cookies to work. The default value is 16384 and
774 can be changed at build time. It is strongly recommended not to change this
775 from the default value, as very low values will break some services such as
776 statistics, and values larger than default size will increase memory usage,
777 possibly causing the system to run out of memory. At least the global maxconn
778 parameter should be decreased by the same factor as this one is increased.
Dmitry Sivachenkof6f4f7b2012-10-21 18:10:25 +0400779 If HTTP request is larger than (tune.bufsize - tune.maxrewrite), haproxy will
780 return HTTP 400 (Bad Request) error. Similarly if an HTTP response is larger
781 than this size, haproxy will return HTTP 502 (Bad Gateway).
Willy Tarreau27a674e2009-08-17 07:23:33 +0200782
Willy Tarreau43961d52010-10-04 20:39:20 +0200783tune.chksize <number>
784 Sets the check buffer size to this size (in bytes). Higher values may help
785 find string or regex patterns in very large pages, though doing so may imply
786 more memory and CPU usage. The default value is 16384 and can be changed at
787 build time. It is not recommended to change this value, but to use better
788 checks whenever possible.
789
William Lallemandf3747832012-11-09 12:33:10 +0100790tune.comp.maxlevel <number>
791 Sets the maximum compression level. The compression level affects CPU
792 usage during compression. This value affects CPU usage during compression.
793 Each session using compression initializes the compression algorithm with
794 this value. The default value is 1.
795
Willy Tarreau193b8c62012-11-22 00:17:38 +0100796tune.http.cookielen <number>
797 Sets the maximum length of captured cookies. This is the maximum value that
798 the "capture cookie xxx len yyy" will be allowed to take, and any upper value
799 will automatically be truncated to this one. It is important not to set too
800 high a value because all cookie captures still allocate this size whatever
801 their configured value (they share a same pool). This value is per request
802 per response, so the memory allocated is twice this value per connection.
803 When not specified, the limit is set to 63 characters. It is recommended not
804 to change this value.
805
Willy Tarreauac1932d2011-10-24 19:14:41 +0200806tune.http.maxhdr <number>
807 Sets the maximum number of headers in a request. When a request comes with a
808 number of headers greater than this value (including the first line), it is
809 rejected with a "400 Bad Request" status code. Similarly, too large responses
810 are blocked with "502 Bad Gateway". The default value is 101, which is enough
811 for all usages, considering that the widely deployed Apache server uses the
812 same limit. It can be useful to push this limit further to temporarily allow
813 a buggy application to work by the time it gets fixed. Keep in mind that each
814 new header consumes 32bits of memory for each session, so don't push this
815 limit too high.
816
Willy Tarreaua0250ba2008-01-06 11:22:57 +0100817tune.maxaccept <number>
Willy Tarreau16a21472012-11-19 12:39:59 +0100818 Sets the maximum number of consecutive connections a process may accept in a
819 row before switching to other work. In single process mode, higher numbers
820 give better performance at high connection rates. However in multi-process
821 modes, keeping a bit of fairness between processes generally is better to
822 increase performance. This value applies individually to each listener, so
823 that the number of processes a listener is bound to is taken into account.
824 This value defaults to 64. In multi-process mode, it is divided by twice
825 the number of processes the listener is bound to. Setting this value to -1
826 completely disables the limitation. It should normally not be needed to tweak
827 this value.
Willy Tarreaua0250ba2008-01-06 11:22:57 +0100828
829tune.maxpollevents <number>
830 Sets the maximum amount of events that can be processed at once in a call to
831 the polling system. The default value is adapted to the operating system. It
832 has been noticed that reducing it below 200 tends to slightly decrease
833 latency at the expense of network bandwidth, and increasing it above 200
834 tends to trade latency for slightly increased bandwidth.
835
Willy Tarreau27a674e2009-08-17 07:23:33 +0200836tune.maxrewrite <number>
837 Sets the reserved buffer space to this size in bytes. The reserved space is
838 used for header rewriting or appending. The first reads on sockets will never
839 fill more than bufsize-maxrewrite. Historically it has defaulted to half of
840 bufsize, though that does not make much sense since there are rarely large
841 numbers of headers to add. Setting it too high prevents processing of large
842 requests or responses. Setting it too low prevents addition of new headers
843 to already large requests or to POST requests. It is generally wise to set it
844 to about 1024. It is automatically readjusted to half of bufsize if it is
845 larger than that. This means you don't have to worry about it when changing
846 bufsize.
847
Willy Tarreaubd9a0a72011-10-23 21:14:29 +0200848tune.pipesize <number>
849 Sets the kernel pipe buffer size to this size (in bytes). By default, pipes
850 are the default size for the system. But sometimes when using TCP splicing,
851 it can improve performance to increase pipe sizes, especially if it is
852 suspected that pipes are not filled and that many calls to splice() are
853 performed. This has an impact on the kernel's memory footprint, so this must
854 not be changed if impacts are not understood.
855
Willy Tarreaue803de22010-01-21 17:43:04 +0100856tune.rcvbuf.client <number>
857tune.rcvbuf.server <number>
858 Forces the kernel socket receive buffer size on the client or the server side
859 to the specified value in bytes. This value applies to all TCP/HTTP frontends
860 and backends. It should normally never be set, and the default size (0) lets
861 the kernel autotune this value depending on the amount of available memory.
862 However it can sometimes help to set it to very low values (eg: 4096) in
863 order to save kernel memory by preventing it from buffering too large amounts
864 of received data. Lower values will significantly increase CPU usage though.
865
866tune.sndbuf.client <number>
867tune.sndbuf.server <number>
868 Forces the kernel socket send buffer size on the client or the server side to
869 the specified value in bytes. This value applies to all TCP/HTTP frontends
870 and backends. It should normally never be set, and the default size (0) lets
871 the kernel autotune this value depending on the amount of available memory.
872 However it can sometimes help to set it to very low values (eg: 4096) in
873 order to save kernel memory by preventing it from buffering too large amounts
874 of received data. Lower values will significantly increase CPU usage though.
875 Another use case is to prevent write timeouts with extremely slow clients due
876 to the kernel waiting for a large part of the buffer to be read before
877 notifying haproxy again.
878
Willy Tarreau6ec58db2012-11-16 16:32:15 +0100879tune.ssl.cachesize <number>
880 Sets the size of the global SSL session cache, in number of sessions. Each
881 entry uses approximately 600 bytes of memory. The default value may be forced
882 at build time, otherwise defaults to 20000. When the cache is full, the most
883 idle entries are purged and reassigned. Higher values reduce the occurrence
884 of such a purge, hence the number of CPU-intensive SSL handshakes by ensuring
885 that all users keep their session as long as possible. All entries are pre-
886 allocated upon startup and are shared between all processes if "nbproc" is
887 greater than 1.
888
Emeric Brun4f65bff2012-11-16 15:11:00 +0100889tune.ssl.lifetime <timeout>
890 Sets how long a cached SSL session may remain valid. This time is expressed
891 in seconds and defaults to 300 (5 mn). It is important to understand that it
892 does not guarantee that sessions will last that long, because if the cache is
893 full, the longest idle sessions will be purged despite their configured
894 lifetime. The real usefulness of this setting is to prevent sessions from
895 being used for too long.
896
William Lallemanda509e4c2012-11-07 16:54:34 +0100897tune.zlib.memlevel <number>
898 Sets the memLevel parameter in zlib initialization for each session. It
899 defines how much memory should be allocated for the intenal compression
900 state. A value of 1 uses minimum memory but is slow and reduces compression
901 ratio, a value of 9 uses maximum memory for optimal speed. Can be a value
902 between 1 and 9. The default value is 8.
903
904tune.zlib.windowsize <number>
905 Sets the window size (the size of the history buffer) as a parameter of the
906 zlib initialization for each session. Larger values of this parameter result
907 in better compression at the expense of memory usage. Can be a value between
908 8 and 15. The default value is 15.
Willy Tarreau6a06a402007-07-15 20:15:28 +0200909
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009103.3. Debugging
911--------------
Willy Tarreau6a06a402007-07-15 20:15:28 +0200912
913debug
914 Enables debug mode which dumps to stdout all exchanges, and disables forking
915 into background. It is the equivalent of the command-line argument "-d". It
916 should never be used in a production configuration since it may prevent full
917 system startup.
918
919quiet
920 Do not display any message during startup. It is equivalent to the command-
921 line argument "-q".
922
Emeric Brunf099e792010-09-27 12:05:28 +0200923
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01009243.4. Userlists
925--------------
926It is possible to control access to frontend/backend/listen sections or to
927http stats by allowing only authenticated and authorized users. To do this,
928it is required to create at least one userlist and to define users.
929
930userlist <listname>
Cyril Bonté78caf842010-03-10 22:41:43 +0100931 Creates new userlist with name <listname>. Many independent userlists can be
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +0100932 used to store authentication & authorization data for independent customers.
933
934group <groupname> [users <user>,<user>,(...)]
Cyril Bonté78caf842010-03-10 22:41:43 +0100935 Adds group <groupname> to the current userlist. It is also possible to
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +0100936 attach users to this group by using a comma separated list of names
937 proceeded by "users" keyword.
938
Cyril Bontéf0c60612010-02-06 14:44:47 +0100939user <username> [password|insecure-password <password>]
940 [groups <group>,<group>,(...)]
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +0100941 Adds user <username> to the current userlist. Both secure (encrypted) and
942 insecure (unencrypted) passwords can be used. Encrypted passwords are
Cyril Bonté78caf842010-03-10 22:41:43 +0100943 evaluated using the crypt(3) function so depending of the system's
944 capabilities, different algorithms are supported. For example modern Glibc
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +0100945 based Linux system supports MD5, SHA-256, SHA-512 and of course classic,
946 DES-based method of crypting passwords.
947
948
949 Example:
Cyril Bontéf0c60612010-02-06 14:44:47 +0100950 userlist L1
951 group G1 users tiger,scott
952 group G2 users xdb,scott
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +0100953
Cyril Bontéf0c60612010-02-06 14:44:47 +0100954 user tiger password $6$k6y3o.eP$JlKBx9za9667qe4(...)xHSwRv6J.C0/D7cV91
955 user scott insecure-password elgato
956 user xdb insecure-password hello
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +0100957
Cyril Bontéf0c60612010-02-06 14:44:47 +0100958 userlist L2
959 group G1
960 group G2
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +0100961
Cyril Bontéf0c60612010-02-06 14:44:47 +0100962 user tiger password $6$k6y3o.eP$JlKBx(...)xHSwRv6J.C0/D7cV91 groups G1
963 user scott insecure-password elgato groups G1,G2
964 user xdb insecure-password hello groups G2
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +0100965
966 Please note that both lists are functionally identical.
Willy Tarreau6a06a402007-07-15 20:15:28 +0200967
Emeric Brunf099e792010-09-27 12:05:28 +0200968
9693.5. Peers
Cyril Bontédc4d9032012-04-08 21:57:39 +0200970----------
Emeric Brunf099e792010-09-27 12:05:28 +0200971It is possible to synchronize server entries in stick tables between several
972haproxy instances over TCP connections in a multi-master fashion. Each instance
973pushes its local updates and insertions to remote peers. Server IDs are used to
974identify servers remotely, so it is important that configurations look similar
975or at least that the same IDs are forced on each server on all participants.
976Interrupted exchanges are automatically detected and recovered from the last
977known point. In addition, during a soft restart, the old process connects to
978the new one using such a TCP connection to push all its entries before the new
979process tries to connect to other peers. That ensures very fast replication
980during a reload, it typically takes a fraction of a second even for large
981tables.
982
983peers <peersect>
Jamie Gloudon801a0a32012-08-25 00:18:33 -0400984 Creates a new peer list with name <peersect>. It is an independent section,
Emeric Brunf099e792010-09-27 12:05:28 +0200985 which is referenced by one or more stick-tables.
986
987peer <peername> <ip>:<port>
988 Defines a peer inside a peers section.
989 If <peername> is set to the local peer name (by default hostname, or forced
990 using "-L" command line option), haproxy will listen for incoming remote peer
991 connection on <ip>:<port>. Otherwise, <ip>:<port> defines where to connect to
992 to join the remote peer, and <peername> is used at the protocol level to
993 identify and validate the remote peer on the server side.
994
995 During a soft restart, local peer <ip>:<port> is used by the old instance to
996 connect the new one and initiate a complete replication (teaching process).
997
998 It is strongly recommended to have the exact same peers declaration on all
999 peers and to only rely on the "-L" command line argument to change the local
1000 peer name. This makes it easier to maintain coherent configuration files
1001 across all peers.
1002
Cyril Bontédc4d9032012-04-08 21:57:39 +02001003 Example:
Emeric Brunf099e792010-09-27 12:05:28 +02001004 peers mypeers
Willy Tarreauf7b30a92010-12-06 22:59:17 +01001005 peer haproxy1 192.168.0.1:1024
1006 peer haproxy2 192.168.0.2:1024
1007 peer haproxy3 10.2.0.1:1024
Emeric Brunf099e792010-09-27 12:05:28 +02001008
1009 backend mybackend
1010 mode tcp
1011 balance roundrobin
1012 stick-table type ip size 20k peers mypeers
1013 stick on src
1014
Willy Tarreauf7b30a92010-12-06 22:59:17 +01001015 server srv1 192.168.0.30:80
1016 server srv2 192.168.0.31:80
Emeric Brunf099e792010-09-27 12:05:28 +02001017
1018
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010194. Proxies
Willy Tarreau6a06a402007-07-15 20:15:28 +02001020----------
Willy Tarreau0ba27502007-12-24 16:55:16 +01001021
Willy Tarreau6a06a402007-07-15 20:15:28 +02001022Proxy configuration can be located in a set of sections :
1023 - defaults <name>
1024 - frontend <name>
1025 - backend <name>
1026 - listen <name>
1027
1028A "defaults" section sets default parameters for all other sections following
1029its declaration. Those default parameters are reset by the next "defaults"
1030section. See below for the list of parameters which can be set in a "defaults"
Willy Tarreau0ba27502007-12-24 16:55:16 +01001031section. The name is optional but its use is encouraged for better readability.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001032
1033A "frontend" section describes a set of listening sockets accepting client
1034connections.
1035
1036A "backend" section describes a set of servers to which the proxy will connect
1037to forward incoming connections.
1038
1039A "listen" section defines a complete proxy with its frontend and backend
1040parts combined in one section. It is generally useful for TCP-only traffic.
1041
Willy Tarreau0ba27502007-12-24 16:55:16 +01001042All proxy names must be formed from upper and lower case letters, digits,
1043'-' (dash), '_' (underscore) , '.' (dot) and ':' (colon). ACL names are
1044case-sensitive, which means that "www" and "WWW" are two different proxies.
1045
1046Historically, all proxy names could overlap, it just caused troubles in the
1047logs. Since the introduction of content switching, it is mandatory that two
1048proxies with overlapping capabilities (frontend/backend) have different names.
1049However, it is still permitted that a frontend and a backend share the same
1050name, as this configuration seems to be commonly encountered.
1051
1052Right now, two major proxy modes are supported : "tcp", also known as layer 4,
1053and "http", also known as layer 7. In layer 4 mode, HAProxy simply forwards
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001054bidirectional traffic between two sides. In layer 7 mode, HAProxy analyzes the
Willy Tarreau0ba27502007-12-24 16:55:16 +01001055protocol, and can interact with it by allowing, blocking, switching, adding,
1056modifying, or removing arbitrary contents in requests or responses, based on
1057arbitrary criteria.
1058
Willy Tarreau0ba27502007-12-24 16:55:16 +01001059
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010604.1. Proxy keywords matrix
1061--------------------------
Willy Tarreau0ba27502007-12-24 16:55:16 +01001062
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001063The following list of keywords is supported. Most of them may only be used in a
1064limited set of section types. Some of them are marked as "deprecated" because
1065they are inherited from an old syntax which may be confusing or functionally
1066limited, and there are new recommended keywords to replace them. Keywords
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001067marked with "(*)" can be optionally inverted using the "no" prefix, eg. "no
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001068option contstats". This makes sense when the option has been enabled by default
Willy Tarreau3842f002009-06-14 11:39:52 +02001069and must be disabled for a specific instance. Such options may also be prefixed
1070with "default" in order to restore default settings regardless of what has been
1071specified in a previous "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001072
Willy Tarreau6a06a402007-07-15 20:15:28 +02001073
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001074 keyword defaults frontend listen backend
1075------------------------------------+----------+----------+---------+---------
1076acl - X X X
1077appsession - - X X
1078backlog X X X -
1079balance X - X X
1080bind - X X -
1081bind-process X X X X
1082block - X X X
1083capture cookie - X X -
1084capture request header - X X -
1085capture response header - X X -
1086clitimeout (deprecated) X X X -
William Lallemand82fe75c2012-10-23 10:25:10 +02001087compression X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001088contimeout (deprecated) X - X X
1089cookie X - X X
1090default-server X - X X
1091default_backend X X X -
1092description - X X X
1093disabled X X X X
1094dispatch - - X X
1095enabled X X X X
1096errorfile X X X X
1097errorloc X X X X
1098errorloc302 X X X X
1099-- keyword -------------------------- defaults - frontend - listen -- backend -
1100errorloc303 X X X X
Cyril Bonté0d4bf012010-04-25 23:21:46 +02001101force-persist - X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001102fullconn X - X X
1103grace X X X X
1104hash-type X - X X
1105http-check disable-on-404 X - X X
Willy Tarreaubd741542010-03-16 18:46:54 +01001106http-check expect - - X X
Willy Tarreau7ab6aff2010-10-12 06:30:16 +02001107http-check send-state X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001108http-request - X X X
1109id - X X X
Cyril Bonté0d4bf012010-04-25 23:21:46 +02001110ignore-persist - X X X
William Lallemand0f99e342011-10-12 17:50:54 +02001111log (*) X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001112maxconn X X X -
1113mode X X X X
1114monitor fail - X X -
1115monitor-net X X X -
1116monitor-uri X X X -
1117option abortonclose (*) X - X X
1118option accept-invalid-http-request (*) X X X -
1119option accept-invalid-http-response (*) X - X X
1120option allbackups (*) X - X X
1121option checkcache (*) X - X X
1122option clitcpka (*) X X X -
1123option contstats (*) X X X -
1124option dontlog-normal (*) X X X -
1125option dontlognull (*) X X X -
1126option forceclose (*) X X X X
1127-- keyword -------------------------- defaults - frontend - listen -- backend -
1128option forwardfor X X X X
Willy Tarreau96e31212011-05-30 18:10:30 +02001129option http-no-delay (*) X X X X
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02001130option http-pretend-keepalive (*) X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001131option http-server-close (*) X X X X
1132option http-use-proxy-header (*) X X X -
1133option httpchk X - X X
1134option httpclose (*) X X X X
1135option httplog X X X X
1136option http_proxy (*) X X X X
Jamie Gloudon801a0a32012-08-25 00:18:33 -04001137option independent-streams (*) X X X X
Gabor Lekenyb4c81e42010-09-29 18:17:05 +02001138option ldap-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001139option log-health-checks (*) X - X X
1140option log-separate-errors (*) X X X -
1141option logasap (*) X X X -
1142option mysql-check X - X X
Rauf Kuliyev38b41562011-01-04 15:14:13 +01001143option pgsql-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001144option nolinger (*) X X X X
1145option originalto X X X X
1146option persist (*) X - X X
1147option redispatch (*) X - X X
Hervé COMMOWICKec032d62011-08-05 16:23:48 +02001148option redis-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001149option smtpchk X - X X
1150option socket-stats (*) X X X -
1151option splice-auto (*) X X X X
1152option splice-request (*) X X X X
1153option splice-response (*) X X X X
1154option srvtcpka (*) X - X X
1155option ssl-hello-chk X - X X
1156-- keyword -------------------------- defaults - frontend - listen -- backend -
1157option tcp-smart-accept (*) X X X -
1158option tcp-smart-connect (*) X - X X
1159option tcpka X X X X
1160option tcplog X X X X
1161option transparent (*) X - X X
1162persist rdp-cookie X - X X
1163rate-limit sessions X X X -
1164redirect - X X X
1165redisp (deprecated) X - X X
1166redispatch (deprecated) X - X X
1167reqadd - X X X
1168reqallow - X X X
1169reqdel - X X X
1170reqdeny - X X X
1171reqiallow - X X X
1172reqidel - X X X
1173reqideny - X X X
1174reqipass - X X X
1175reqirep - X X X
1176reqisetbe - X X X
1177reqitarpit - X X X
1178reqpass - X X X
1179reqrep - X X X
1180-- keyword -------------------------- defaults - frontend - listen -- backend -
1181reqsetbe - X X X
1182reqtarpit - X X X
1183retries X - X X
1184rspadd - X X X
1185rspdel - X X X
1186rspdeny - X X X
1187rspidel - X X X
1188rspideny - X X X
1189rspirep - X X X
1190rsprep - X X X
1191server - - X X
1192source X - X X
1193srvtimeout (deprecated) X - X X
Cyril Bonté66c327d2010-10-12 00:14:37 +02001194stats admin - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001195stats auth X - X X
1196stats enable X - X X
1197stats hide-version X - X X
Cyril Bonté2be1b3f2010-09-30 23:46:30 +02001198stats http-request - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001199stats realm X - X X
1200stats refresh X - X X
1201stats scope X - X X
1202stats show-desc X - X X
1203stats show-legends X - X X
1204stats show-node X - X X
1205stats uri X - X X
1206-- keyword -------------------------- defaults - frontend - listen -- backend -
1207stick match - - X X
1208stick on - - X X
1209stick store-request - - X X
Willy Tarreaud8dc99f2011-07-01 11:33:25 +02001210stick store-response - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001211stick-table - - X X
Willy Tarreaue9656522010-08-17 15:40:09 +02001212tcp-request connection - X X -
1213tcp-request content - X X X
Willy Tarreaua56235c2010-09-14 11:31:36 +02001214tcp-request inspect-delay - X X X
Emeric Brun0a3b67f2010-09-24 15:34:53 +02001215tcp-response content - - X X
1216tcp-response inspect-delay - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001217timeout check X - X X
1218timeout client X X X -
1219timeout clitimeout (deprecated) X X X -
1220timeout connect X - X X
1221timeout contimeout (deprecated) X - X X
1222timeout http-keep-alive X X X X
1223timeout http-request X X X X
1224timeout queue X - X X
1225timeout server X - X X
1226timeout srvtimeout (deprecated) X - X X
1227timeout tarpit X X X X
Willy Tarreauce887fd2012-05-12 12:50:00 +02001228timeout tunnel X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001229transparent (deprecated) X - X X
William Lallemanda73203e2012-03-12 12:48:57 +01001230unique-id-format X X X -
1231unique-id-header X X X -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001232use_backend - X X -
Willy Tarreau4a5cade2012-04-05 21:09:48 +02001233use-server - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001234------------------------------------+----------+----------+---------+---------
1235 keyword defaults frontend listen backend
Willy Tarreau6a06a402007-07-15 20:15:28 +02001236
Willy Tarreau0ba27502007-12-24 16:55:16 +01001237
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012384.2. Alphabetically sorted keywords reference
1239---------------------------------------------
Willy Tarreau0ba27502007-12-24 16:55:16 +01001240
1241This section provides a description of each keyword and its usage.
1242
1243
1244acl <aclname> <criterion> [flags] [operator] <value> ...
1245 Declare or complete an access list.
1246 May be used in sections : defaults | frontend | listen | backend
1247 no | yes | yes | yes
1248 Example:
1249 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
1250 acl invalid_src src_port 0:1023
1251 acl local_dst hdr(host) -i localhost
1252
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001253 See section 7 about ACL usage.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001254
1255
Cyril Bontéb21570a2009-11-29 20:04:48 +01001256appsession <cookie> len <length> timeout <holdtime>
1257 [request-learn] [prefix] [mode <path-parameters|query-string>]
Willy Tarreau0ba27502007-12-24 16:55:16 +01001258 Define session stickiness on an existing application cookie.
1259 May be used in sections : defaults | frontend | listen | backend
1260 no | no | yes | yes
1261 Arguments :
1262 <cookie> this is the name of the cookie used by the application and which
1263 HAProxy will have to learn for each new session.
1264
Cyril Bontéb21570a2009-11-29 20:04:48 +01001265 <length> this is the max number of characters that will be memorized and
Willy Tarreau0ba27502007-12-24 16:55:16 +01001266 checked in each cookie value.
1267
1268 <holdtime> this is the time after which the cookie will be removed from
1269 memory if unused. If no unit is specified, this time is in
1270 milliseconds.
1271
Cyril Bontébf47aeb2009-10-15 00:15:40 +02001272 request-learn
1273 If this option is specified, then haproxy will be able to learn
1274 the cookie found in the request in case the server does not
1275 specify any in response. This is typically what happens with
1276 PHPSESSID cookies, or when haproxy's session expires before
1277 the application's session and the correct server is selected.
1278 It is recommended to specify this option to improve reliability.
1279
Cyril Bontéb21570a2009-11-29 20:04:48 +01001280 prefix When this option is specified, haproxy will match on the cookie
1281 prefix (or URL parameter prefix). The appsession value is the
1282 data following this prefix.
1283
1284 Example :
1285 appsession ASPSESSIONID len 64 timeout 3h prefix
1286
1287 This will match the cookie ASPSESSIONIDXXXX=XXXXX,
1288 the appsession value will be XXXX=XXXXX.
1289
1290 mode This option allows to change the URL parser mode.
1291 2 modes are currently supported :
1292 - path-parameters :
1293 The parser looks for the appsession in the path parameters
1294 part (each parameter is separated by a semi-colon), which is
1295 convenient for JSESSIONID for example.
1296 This is the default mode if the option is not set.
1297 - query-string :
1298 In this mode, the parser will look for the appsession in the
1299 query string.
1300
Willy Tarreau0ba27502007-12-24 16:55:16 +01001301 When an application cookie is defined in a backend, HAProxy will check when
1302 the server sets such a cookie, and will store its value in a table, and
1303 associate it with the server's identifier. Up to <length> characters from
1304 the value will be retained. On each connection, haproxy will look for this
Cyril Bontéb21570a2009-11-29 20:04:48 +01001305 cookie both in the "Cookie:" headers, and as a URL parameter (depending on
1306 the mode used). If a known value is found, the client will be directed to the
1307 server associated with this value. Otherwise, the load balancing algorithm is
Willy Tarreau0ba27502007-12-24 16:55:16 +01001308 applied. Cookies are automatically removed from memory when they have been
1309 unused for a duration longer than <holdtime>.
1310
1311 The definition of an application cookie is limited to one per backend.
1312
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01001313 Note : Consider not using this feature in multi-process mode (nbproc > 1)
1314 unless you know what you do : memory is not shared between the
1315 processes, which can result in random behaviours.
1316
Willy Tarreau0ba27502007-12-24 16:55:16 +01001317 Example :
1318 appsession JSESSIONID len 52 timeout 3h
1319
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01001320 See also : "cookie", "capture cookie", "balance", "stick", "stick-table",
1321 "ignore-persist", "nbproc" and "bind-process".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001322
1323
Willy Tarreauc73ce2b2008-01-06 10:55:10 +01001324backlog <conns>
1325 Give hints to the system about the approximate listen backlog desired size
1326 May be used in sections : defaults | frontend | listen | backend
1327 yes | yes | yes | no
1328 Arguments :
1329 <conns> is the number of pending connections. Depending on the operating
1330 system, it may represent the number of already acknowledged
Cyril Bontédc4d9032012-04-08 21:57:39 +02001331 connections, of non-acknowledged ones, or both.
Willy Tarreauc73ce2b2008-01-06 10:55:10 +01001332
1333 In order to protect against SYN flood attacks, one solution is to increase
1334 the system's SYN backlog size. Depending on the system, sometimes it is just
1335 tunable via a system parameter, sometimes it is not adjustable at all, and
1336 sometimes the system relies on hints given by the application at the time of
1337 the listen() syscall. By default, HAProxy passes the frontend's maxconn value
1338 to the listen() syscall. On systems which can make use of this value, it can
1339 sometimes be useful to be able to specify a different value, hence this
1340 backlog parameter.
1341
1342 On Linux 2.4, the parameter is ignored by the system. On Linux 2.6, it is
1343 used as a hint and the system accepts up to the smallest greater power of
1344 two, and never more than some limits (usually 32768).
1345
1346 See also : "maxconn" and the target operating system's tuning guide.
1347
1348
Willy Tarreau0ba27502007-12-24 16:55:16 +01001349balance <algorithm> [ <arguments> ]
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001350balance url_param <param> [check_post [<max_wait>]]
Willy Tarreau0ba27502007-12-24 16:55:16 +01001351 Define the load balancing algorithm to be used in a backend.
1352 May be used in sections : defaults | frontend | listen | backend
1353 yes | no | yes | yes
1354 Arguments :
1355 <algorithm> is the algorithm used to select a server when doing load
1356 balancing. This only applies when no persistence information
1357 is available, or when a connection is redispatched to another
1358 server. <algorithm> may be one of the following :
1359
1360 roundrobin Each server is used in turns, according to their weights.
1361 This is the smoothest and fairest algorithm when the server's
1362 processing time remains equally distributed. This algorithm
1363 is dynamic, which means that server weights may be adjusted
Willy Tarreau9757a382009-10-03 12:56:50 +02001364 on the fly for slow starts for instance. It is limited by
1365 design to 4128 active servers per backend. Note that in some
1366 large farms, when a server becomes up after having been down
1367 for a very short time, it may sometimes take a few hundreds
1368 requests for it to be re-integrated into the farm and start
1369 receiving traffic. This is normal, though very rare. It is
1370 indicated here in case you would have the chance to observe
1371 it, so that you don't worry.
1372
1373 static-rr Each server is used in turns, according to their weights.
1374 This algorithm is as similar to roundrobin except that it is
1375 static, which means that changing a server's weight on the
1376 fly will have no effect. On the other hand, it has no design
1377 limitation on the number of servers, and when a server goes
1378 up, it is always immediately reintroduced into the farm, once
1379 the full map is recomputed. It also uses slightly less CPU to
1380 run (around -1%).
Willy Tarreau0ba27502007-12-24 16:55:16 +01001381
Willy Tarreau2d2a7f82008-03-17 12:07:56 +01001382 leastconn The server with the lowest number of connections receives the
1383 connection. Round-robin is performed within groups of servers
1384 of the same load to ensure that all servers will be used. Use
1385 of this algorithm is recommended where very long sessions are
1386 expected, such as LDAP, SQL, TSE, etc... but is not very well
1387 suited for protocols using short sessions such as HTTP. This
1388 algorithm is dynamic, which means that server weights may be
1389 adjusted on the fly for slow starts for instance.
1390
Willy Tarreauf09c6602012-02-13 17:12:08 +01001391 first The first server with available connection slots receives the
1392 connection. The servers are choosen from the lowest numeric
1393 identifier to the highest (see server parameter "id"), which
1394 defaults to the server's position in the farm. Once a server
Willy Tarreau64559c52012-04-07 09:08:45 +02001395 reaches its maxconn value, the next server is used. It does
Willy Tarreauf09c6602012-02-13 17:12:08 +01001396 not make sense to use this algorithm without setting maxconn.
1397 The purpose of this algorithm is to always use the smallest
1398 number of servers so that extra servers can be powered off
1399 during non-intensive hours. This algorithm ignores the server
1400 weight, and brings more benefit to long session such as RDP
Willy Tarreau64559c52012-04-07 09:08:45 +02001401 or IMAP than HTTP, though it can be useful there too. In
1402 order to use this algorithm efficiently, it is recommended
1403 that a cloud controller regularly checks server usage to turn
1404 them off when unused, and regularly checks backend queue to
1405 turn new servers on when the queue inflates. Alternatively,
1406 using "http-check send-state" may inform servers on the load.
Willy Tarreauf09c6602012-02-13 17:12:08 +01001407
Willy Tarreau0ba27502007-12-24 16:55:16 +01001408 source The source IP address is hashed and divided by the total
1409 weight of the running servers to designate which server will
1410 receive the request. This ensures that the same client IP
1411 address will always reach the same server as long as no
1412 server goes down or up. If the hash result changes due to the
1413 number of running servers changing, many clients will be
1414 directed to a different server. This algorithm is generally
1415 used in TCP mode where no cookie may be inserted. It may also
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001416 be used on the Internet to provide a best-effort stickiness
Willy Tarreau0ba27502007-12-24 16:55:16 +01001417 to clients which refuse session cookies. This algorithm is
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02001418 static by default, which means that changing a server's
1419 weight on the fly will have no effect, but this can be
1420 changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001421
Oskar Stolc8dc41842012-05-19 10:19:54 +01001422 uri This algorithm hashes either the left part of the URI (before
1423 the question mark) or the whole URI (if the "whole" parameter
1424 is present) and divides the hash value by the total weight of
1425 the running servers. The result designates which server will
1426 receive the request. This ensures that the same URI will
1427 always be directed to the same server as long as no server
1428 goes up or down. This is used with proxy caches and
1429 anti-virus proxies in order to maximize the cache hit rate.
1430 Note that this algorithm may only be used in an HTTP backend.
1431 This algorithm is static by default, which means that
1432 changing a server's weight on the fly will have no effect,
1433 but this can be changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001434
Oskar Stolc8dc41842012-05-19 10:19:54 +01001435 This algorithm supports two optional parameters "len" and
Marek Majkowski9c30fc12008-04-27 23:25:55 +02001436 "depth", both followed by a positive integer number. These
1437 options may be helpful when it is needed to balance servers
1438 based on the beginning of the URI only. The "len" parameter
1439 indicates that the algorithm should only consider that many
1440 characters at the beginning of the URI to compute the hash.
1441 Note that having "len" set to 1 rarely makes sense since most
1442 URIs start with a leading "/".
1443
1444 The "depth" parameter indicates the maximum directory depth
1445 to be used to compute the hash. One level is counted for each
1446 slash in the request. If both parameters are specified, the
1447 evaluation stops when either is reached.
1448
Willy Tarreau0ba27502007-12-24 16:55:16 +01001449 url_param The URL parameter specified in argument will be looked up in
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001450 the query string of each HTTP GET request.
1451
1452 If the modifier "check_post" is used, then an HTTP POST
Cyril Bontédc4d9032012-04-08 21:57:39 +02001453 request entity will be searched for the parameter argument,
1454 when it is not found in a query string after a question mark
1455 ('?') in the URL. Optionally, specify a number of octets to
1456 wait for before attempting to search the message body. If the
1457 entity can not be searched, then round robin is used for each
1458 request. For instance, if your clients always send the LB
1459 parameter in the first 128 bytes, then specify that. The
1460 default is 48. The entity data will not be scanned until the
1461 required number of octets have arrived at the gateway, this
1462 is the minimum of: (default/max_wait, Content-Length or first
1463 chunk length). If Content-Length is missing or zero, it does
1464 not need to wait for more data than the client promised to
1465 send. When Content-Length is present and larger than
1466 <max_wait>, then waiting is limited to <max_wait> and it is
1467 assumed that this will be enough data to search for the
1468 presence of the parameter. In the unlikely event that
1469 Transfer-Encoding: chunked is used, only the first chunk is
1470 scanned. Parameter values separated by a chunk boundary, may
1471 be randomly balanced if at all.
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001472
1473 If the parameter is found followed by an equal sign ('=') and
1474 a value, then the value is hashed and divided by the total
1475 weight of the running servers. The result designates which
1476 server will receive the request.
1477
1478 This is used to track user identifiers in requests and ensure
1479 that a same user ID will always be sent to the same server as
1480 long as no server goes up or down. If no value is found or if
1481 the parameter is not found, then a round robin algorithm is
1482 applied. Note that this algorithm may only be used in an HTTP
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02001483 backend. This algorithm is static by default, which means
1484 that changing a server's weight on the fly will have no
1485 effect, but this can be changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001486
Cyril Bontédc4d9032012-04-08 21:57:39 +02001487 hdr(<name>) The HTTP header <name> will be looked up in each HTTP
1488 request. Just as with the equivalent ACL 'hdr()' function,
1489 the header name in parenthesis is not case sensitive. If the
1490 header is absent or if it does not contain any value, the
1491 roundrobin algorithm is applied instead.
Benoitaffb4812009-03-25 13:02:10 +01001492
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001493 An optional 'use_domain_only' parameter is available, for
Benoitaffb4812009-03-25 13:02:10 +01001494 reducing the hash algorithm to the main domain part with some
1495 specific headers such as 'Host'. For instance, in the Host
1496 value "haproxy.1wt.eu", only "1wt" will be considered.
1497
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02001498 This algorithm is static by default, which means that
1499 changing a server's weight on the fly will have no effect,
1500 but this can be changed using "hash-type".
1501
Emeric Brun736aa232009-06-30 17:56:00 +02001502 rdp-cookie
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02001503 rdp-cookie(<name>)
Emeric Brun736aa232009-06-30 17:56:00 +02001504 The RDP cookie <name> (or "mstshash" if omitted) will be
1505 looked up and hashed for each incoming TCP request. Just as
1506 with the equivalent ACL 'req_rdp_cookie()' function, the name
1507 is not case-sensitive. This mechanism is useful as a degraded
1508 persistence mode, as it makes it possible to always send the
1509 same user (or the same session ID) to the same server. If the
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001510 cookie is not found, the normal roundrobin algorithm is
Emeric Brun736aa232009-06-30 17:56:00 +02001511 used instead.
1512
1513 Note that for this to work, the frontend must ensure that an
1514 RDP cookie is already present in the request buffer. For this
1515 you must use 'tcp-request content accept' rule combined with
1516 a 'req_rdp_cookie_cnt' ACL.
1517
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02001518 This algorithm is static by default, which means that
1519 changing a server's weight on the fly will have no effect,
1520 but this can be changed using "hash-type".
1521
Cyril Bontédc4d9032012-04-08 21:57:39 +02001522 See also the rdp_cookie pattern fetch function.
Simon Hormanab814e02011-06-24 14:50:20 +09001523
Willy Tarreau0ba27502007-12-24 16:55:16 +01001524 <arguments> is an optional list of arguments which may be needed by some
Marek Majkowski9c30fc12008-04-27 23:25:55 +02001525 algorithms. Right now, only "url_param" and "uri" support an
1526 optional argument.
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001527
Marek Majkowski9c30fc12008-04-27 23:25:55 +02001528 balance uri [len <len>] [depth <depth>]
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001529 balance url_param <param> [check_post [<max_wait>]]
Willy Tarreau0ba27502007-12-24 16:55:16 +01001530
Willy Tarreau3cd9af22009-03-15 14:06:41 +01001531 The load balancing algorithm of a backend is set to roundrobin when no other
1532 algorithm, mode nor option have been set. The algorithm may only be set once
1533 for each backend.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001534
1535 Examples :
1536 balance roundrobin
1537 balance url_param userid
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001538 balance url_param session_id check_post 64
Benoitaffb4812009-03-25 13:02:10 +01001539 balance hdr(User-Agent)
1540 balance hdr(host)
1541 balance hdr(Host) use_domain_only
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001542
1543 Note: the following caveats and limitations on using the "check_post"
1544 extension with "url_param" must be considered :
1545
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001546 - all POST requests are eligible for consideration, because there is no way
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001547 to determine if the parameters will be found in the body or entity which
1548 may contain binary data. Therefore another method may be required to
1549 restrict consideration of POST requests that have no URL parameters in
1550 the body. (see acl reqideny http_end)
1551
1552 - using a <max_wait> value larger than the request buffer size does not
1553 make sense and is useless. The buffer size is set at build time, and
1554 defaults to 16 kB.
1555
1556 - Content-Encoding is not supported, the parameter search will probably
1557 fail; and load balancing will fall back to Round Robin.
1558
1559 - Expect: 100-continue is not supported, load balancing will fall back to
1560 Round Robin.
1561
1562 - Transfer-Encoding (RFC2616 3.6.1) is only supported in the first chunk.
1563 If the entire parameter value is not present in the first chunk, the
1564 selection of server is undefined (actually, defined by how little
1565 actually appeared in the first chunk).
1566
1567 - This feature does not support generation of a 100, 411 or 501 response.
1568
1569 - In some cases, requesting "check_post" MAY attempt to scan the entire
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001570 contents of a message body. Scanning normally terminates when linear
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001571 white space or control characters are found, indicating the end of what
1572 might be a URL parameter list. This is probably not a concern with SGML
1573 type message bodies.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001574
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02001575 See also : "dispatch", "cookie", "appsession", "transparent", "hash-type" and
1576 "http_proxy".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001577
1578
Willy Tarreaub6205fd2012-09-24 12:27:33 +02001579bind [<address>]:<port_range> [, ...] [param*]
1580bind /<path> [, ...] [param*]
Willy Tarreau0ba27502007-12-24 16:55:16 +01001581 Define one or several listening addresses and/or ports in a frontend.
1582 May be used in sections : defaults | frontend | listen | backend
1583 no | yes | yes | no
1584 Arguments :
Willy Tarreaub1e52e82008-01-13 14:49:51 +01001585 <address> is optional and can be a host name, an IPv4 address, an IPv6
1586 address, or '*'. It designates the address the frontend will
1587 listen on. If unset, all IPv4 addresses of the system will be
1588 listened on. The same will apply for '*' or the system's
David du Colombier9c938da2011-03-17 10:40:27 +01001589 special address "0.0.0.0". The IPv6 equivalent is '::'.
Willy Tarreaub1e52e82008-01-13 14:49:51 +01001590
Willy Tarreauc5011ca2010-03-22 11:53:56 +01001591 <port_range> is either a unique TCP port, or a port range for which the
1592 proxy will accept connections for the IP address specified
Willy Tarreauceb24bc2010-11-09 12:46:41 +01001593 above. The port is mandatory for TCP listeners. Note that in
1594 the case of an IPv6 address, the port is always the number
1595 after the last colon (':'). A range can either be :
Willy Tarreauc5011ca2010-03-22 11:53:56 +01001596 - a numerical port (ex: '80')
1597 - a dash-delimited ports range explicitly stating the lower
1598 and upper bounds (ex: '2000-2100') which are included in
1599 the range.
1600
1601 Particular care must be taken against port ranges, because
1602 every <address:port> couple consumes one socket (= a file
1603 descriptor), so it's easy to consume lots of descriptors
1604 with a simple range, and to run out of sockets. Also, each
1605 <address:port> couple must be used only once among all
1606 instances running on a same system. Please note that binding
1607 to ports lower than 1024 generally require particular
Jamie Gloudon801a0a32012-08-25 00:18:33 -04001608 privileges to start the program, which are independent of
Willy Tarreauc5011ca2010-03-22 11:53:56 +01001609 the 'uid' parameter.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001610
Willy Tarreauceb24bc2010-11-09 12:46:41 +01001611 <path> is a UNIX socket path beginning with a slash ('/'). This is
1612 alternative to the TCP listening port. Haproxy will then
1613 receive UNIX connections on the socket located at this place.
1614 The path must begin with a slash and by default is absolute.
1615 It can be relative to the prefix defined by "unix-bind" in
1616 the global section. Note that the total length of the prefix
1617 followed by the socket path cannot exceed some system limits
1618 for UNIX sockets, which commonly are set to 107 characters.
1619
Willy Tarreaub6205fd2012-09-24 12:27:33 +02001620 <param*> is a list of parameters common to all sockets declared on the
1621 same line. These numerous parameters depend on OS and build
1622 options and have a complete section dedicated to them. Please
1623 refer to section 5 to for more details.
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02001624
Willy Tarreau0ba27502007-12-24 16:55:16 +01001625 It is possible to specify a list of address:port combinations delimited by
1626 commas. The frontend will then listen on all of these addresses. There is no
1627 fixed limit to the number of addresses and ports which can be listened on in
1628 a frontend, as well as there is no limit to the number of "bind" statements
1629 in a frontend.
1630
1631 Example :
1632 listen http_proxy
1633 bind :80,:443
1634 bind 10.0.0.1:10080,10.0.0.1:10443
Willy Tarreauceb24bc2010-11-09 12:46:41 +01001635 bind /var/run/ssl-frontend.sock user root mode 600 accept-proxy
Willy Tarreau0ba27502007-12-24 16:55:16 +01001636
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02001637 listen http_https_proxy
1638 bind :80
Cyril Bonté0d44fc62012-10-09 22:45:33 +02001639 bind :443 ssl crt /etc/haproxy/site.pem
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02001640
Willy Tarreauceb24bc2010-11-09 12:46:41 +01001641 See also : "source", "option forwardfor", "unix-bind" and the PROXY protocol
Willy Tarreaub6205fd2012-09-24 12:27:33 +02001642 documentation, and section 5 about bind options.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001643
1644
Willy Tarreau110ecc12012-11-15 17:50:01 +01001645bind-process [ all | odd | even | <number 1-32>[-<number 1-32>] ] ...
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01001646 Limit visibility of an instance to a certain set of processes numbers.
1647 May be used in sections : defaults | frontend | listen | backend
1648 yes | yes | yes | yes
1649 Arguments :
1650 all All process will see this instance. This is the default. It
1651 may be used to override a default value.
1652
1653 odd This instance will be enabled on processes 1,3,5,...31. This
1654 option may be combined with other numbers.
1655
1656 even This instance will be enabled on processes 2,4,6,...32. This
1657 option may be combined with other numbers. Do not use it
1658 with less than 2 processes otherwise some instances might be
1659 missing from all processes.
1660
Willy Tarreau110ecc12012-11-15 17:50:01 +01001661 number The instance will be enabled on this process number or range,
1662 whose values must all be between 1 and 32. You must be
1663 careful not to reference a process number greater than the
1664 configured global.nbproc, otherwise some instances might be
1665 missing from all processes.
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01001666
1667 This keyword limits binding of certain instances to certain processes. This
1668 is useful in order not to have too many processes listening to the same
1669 ports. For instance, on a dual-core machine, it might make sense to set
1670 'nbproc 2' in the global section, then distributes the listeners among 'odd'
1671 and 'even' instances.
1672
1673 At the moment, it is not possible to reference more than 32 processes using
1674 this keyword, but this should be more than enough for most setups. Please
1675 note that 'all' really means all processes and is not limited to the first
1676 32.
1677
1678 If some backends are referenced by frontends bound to other processes, the
1679 backend automatically inherits the frontend's processes.
1680
1681 Example :
1682 listen app_ip1
1683 bind 10.0.0.1:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02001684 bind-process odd
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01001685
1686 listen app_ip2
1687 bind 10.0.0.2:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02001688 bind-process even
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01001689
1690 listen management
1691 bind 10.0.0.3:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02001692 bind-process 1 2 3 4
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01001693
Willy Tarreau110ecc12012-11-15 17:50:01 +01001694 listen management
1695 bind 10.0.0.4:80
1696 bind-process 1-4
1697
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01001698 See also : "nbproc" in global section.
1699
1700
Willy Tarreau0ba27502007-12-24 16:55:16 +01001701block { if | unless } <condition>
1702 Block a layer 7 request if/unless a condition is matched
1703 May be used in sections : defaults | frontend | listen | backend
1704 no | yes | yes | yes
1705
1706 The HTTP request will be blocked very early in the layer 7 processing
1707 if/unless <condition> is matched. A 403 error will be returned if the request
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001708 is blocked. The condition has to reference ACLs (see section 7). This is
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02001709 typically used to deny access to certain sensitive resources if some
Willy Tarreau0ba27502007-12-24 16:55:16 +01001710 conditions are met or not met. There is no fixed limit to the number of
1711 "block" statements per instance.
1712
1713 Example:
1714 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
1715 acl invalid_src src_port 0:1023
1716 acl local_dst hdr(host) -i localhost
1717 block if invalid_src || local_dst
1718
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001719 See section 7 about ACL usage.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001720
1721
1722capture cookie <name> len <length>
1723 Capture and log a cookie in the request and in the response.
1724 May be used in sections : defaults | frontend | listen | backend
1725 no | yes | yes | no
1726 Arguments :
1727 <name> is the beginning of the name of the cookie to capture. In order
1728 to match the exact name, simply suffix the name with an equal
1729 sign ('='). The full name will appear in the logs, which is
1730 useful with application servers which adjust both the cookie name
1731 and value (eg: ASPSESSIONXXXXX).
1732
1733 <length> is the maximum number of characters to report in the logs, which
1734 include the cookie name, the equal sign and the value, all in the
1735 standard "name=value" form. The string will be truncated on the
1736 right if it exceeds <length>.
1737
1738 Only the first cookie is captured. Both the "cookie" request headers and the
1739 "set-cookie" response headers are monitored. This is particularly useful to
1740 check for application bugs causing session crossing or stealing between
1741 users, because generally the user's cookies can only change on a login page.
1742
1743 When the cookie was not presented by the client, the associated log column
1744 will report "-". When a request does not cause a cookie to be assigned by the
1745 server, a "-" is reported in the response column.
1746
1747 The capture is performed in the frontend only because it is necessary that
1748 the log format does not change for a given frontend depending on the
1749 backends. This may change in the future. Note that there can be only one
Willy Tarreau193b8c62012-11-22 00:17:38 +01001750 "capture cookie" statement in a frontend. The maximum capture length is set
1751 by the global "tune.http.cookielen" setting and defaults to 63 characters. It
1752 is not possible to specify a capture in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001753
1754 Example:
1755 capture cookie ASPSESSION len 32
1756
1757 See also : "capture request header", "capture response header" as well as
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001758 section 8 about logging.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001759
1760
1761capture request header <name> len <length>
Willy Tarreau4460d032012-11-21 23:37:37 +01001762 Capture and log the last occurrence of the specified request header.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001763 May be used in sections : defaults | frontend | listen | backend
1764 no | yes | yes | no
1765 Arguments :
1766 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001767 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +01001768 appear in the requests, with the first letter of each word in
1769 upper case. The header name will not appear in the logs, only the
1770 value is reported, but the position in the logs is respected.
1771
1772 <length> is the maximum number of characters to extract from the value and
1773 report in the logs. The string will be truncated on the right if
1774 it exceeds <length>.
1775
Willy Tarreau4460d032012-11-21 23:37:37 +01001776 The complete value of the last occurrence of the header is captured. The
Willy Tarreau0ba27502007-12-24 16:55:16 +01001777 value will be added to the logs between braces ('{}'). If multiple headers
1778 are captured, they will be delimited by a vertical bar ('|') and will appear
Willy Tarreaucc6c8912009-02-22 10:53:55 +01001779 in the same order they were declared in the configuration. Non-existent
1780 headers will be logged just as an empty string. Common uses for request
1781 header captures include the "Host" field in virtual hosting environments, the
1782 "Content-length" when uploads are supported, "User-agent" to quickly
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001783 differentiate between real users and robots, and "X-Forwarded-For" in proxied
Willy Tarreaucc6c8912009-02-22 10:53:55 +01001784 environments to find where the request came from.
1785
1786 Note that when capturing headers such as "User-agent", some spaces may be
1787 logged, making the log analysis more difficult. Thus be careful about what
1788 you log if you know your log parser is not smart enough to rely on the
1789 braces.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001790
Willy Tarreau0900abb2012-11-22 00:21:46 +01001791 There is no limit to the number of captured request headers nor to their
1792 length, though it is wise to keep them low to limit memory usage per session.
1793 In order to keep log format consistent for a same frontend, header captures
1794 can only be declared in a frontend. It is not possible to specify a capture
1795 in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001796
1797 Example:
1798 capture request header Host len 15
1799 capture request header X-Forwarded-For len 15
1800 capture request header Referrer len 15
1801
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001802 See also : "capture cookie", "capture response header" as well as section 8
Willy Tarreau0ba27502007-12-24 16:55:16 +01001803 about logging.
1804
1805
1806capture response header <name> len <length>
Willy Tarreau4460d032012-11-21 23:37:37 +01001807 Capture and log the last occurrence of the specified response header.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001808 May be used in sections : defaults | frontend | listen | backend
1809 no | yes | yes | no
1810 Arguments :
1811 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001812 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +01001813 appear in the response, with the first letter of each word in
1814 upper case. The header name will not appear in the logs, only the
1815 value is reported, but the position in the logs is respected.
1816
1817 <length> is the maximum number of characters to extract from the value and
1818 report in the logs. The string will be truncated on the right if
1819 it exceeds <length>.
1820
Willy Tarreau4460d032012-11-21 23:37:37 +01001821 The complete value of the last occurrence of the header is captured. The
Willy Tarreau0ba27502007-12-24 16:55:16 +01001822 result will be added to the logs between braces ('{}') after the captured
1823 request headers. If multiple headers are captured, they will be delimited by
1824 a vertical bar ('|') and will appear in the same order they were declared in
Willy Tarreaucc6c8912009-02-22 10:53:55 +01001825 the configuration. Non-existent headers will be logged just as an empty
1826 string. Common uses for response header captures include the "Content-length"
1827 header which indicates how many bytes are expected to be returned, the
1828 "Location" header to track redirections.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001829
Willy Tarreau0900abb2012-11-22 00:21:46 +01001830 There is no limit to the number of captured response headers nor to their
1831 length, though it is wise to keep them low to limit memory usage per session.
1832 In order to keep log format consistent for a same frontend, header captures
1833 can only be declared in a frontend. It is not possible to specify a capture
1834 in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001835
1836 Example:
1837 capture response header Content-length len 9
1838 capture response header Location len 15
1839
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001840 See also : "capture cookie", "capture request header" as well as section 8
Willy Tarreau0ba27502007-12-24 16:55:16 +01001841 about logging.
1842
1843
Cyril Bontéf0c60612010-02-06 14:44:47 +01001844clitimeout <timeout> (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +01001845 Set the maximum inactivity time on the client side.
1846 May be used in sections : defaults | frontend | listen | backend
1847 yes | yes | yes | no
1848 Arguments :
1849 <timeout> is the timeout value is specified in milliseconds by default, but
1850 can be in any other unit if the number is suffixed by the unit,
1851 as explained at the top of this document.
1852
1853 The inactivity timeout applies when the client is expected to acknowledge or
1854 send data. In HTTP mode, this timeout is particularly important to consider
1855 during the first phase, when the client sends the request, and during the
1856 response while it is reading data sent by the server. The value is specified
1857 in milliseconds by default, but can be in any other unit if the number is
1858 suffixed by the unit, as specified at the top of this document. In TCP mode
1859 (and to a lesser extent, in HTTP mode), it is highly recommended that the
1860 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001861 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01001862 losses by specifying timeouts that are slightly above multiples of 3 seconds
1863 (eg: 4 or 5 seconds).
1864
1865 This parameter is specific to frontends, but can be specified once for all in
1866 "defaults" sections. This is in fact one of the easiest solutions not to
1867 forget about it. An unspecified timeout results in an infinite timeout, which
1868 is not recommended. Such a usage is accepted and works but reports a warning
1869 during startup because it may results in accumulation of expired sessions in
1870 the system if the system's timeouts are not configured either.
1871
1872 This parameter is provided for compatibility but is currently deprecated.
1873 Please use "timeout client" instead.
1874
Willy Tarreau036fae02008-01-06 13:24:40 +01001875 See also : "timeout client", "timeout http-request", "timeout server", and
1876 "srvtimeout".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001877
Cyril Bonté316a8cf2012-11-11 13:38:27 +01001878compression algo <algorithm> ...
1879compression type <mime type> ...
Willy Tarreau70737d12012-10-27 00:34:28 +02001880compression offload
William Lallemand82fe75c2012-10-23 10:25:10 +02001881 Enable HTTP compression.
1882 May be used in sections : defaults | frontend | listen | backend
1883 yes | yes | yes | yes
1884 Arguments :
Cyril Bonté316a8cf2012-11-11 13:38:27 +01001885 algo is followed by the list of supported compression algorithms.
1886 type is followed by the list of MIME types that will be compressed.
1887 offload makes haproxy work as a compression offloader only (see notes).
1888
1889 The currently supported algorithms are :
Dmitry Sivachenko87c208b2012-11-22 20:03:26 +04001890 identity this is mostly for debugging, and it was useful for developing
Cyril Bonté316a8cf2012-11-11 13:38:27 +01001891 the compression feature. Identity does not apply any change on
1892 data.
1893
1894 gzip applies gzip compression. This setting is only available when
1895 support for zlib was built in.
1896
1897 deflate same as gzip, but with deflate algorithm and zlib format.
1898 Note that this algorithm has ambiguous support on many browsers
1899 and no support at all from recent ones. It is strongly
1900 recommended not to use it for anything else than experimentation.
1901 This setting is only available when support for zlib was built
1902 in.
1903
Dmitry Sivachenko87c208b2012-11-22 20:03:26 +04001904 Compression will be activated depending on the Accept-Encoding request
Cyril Bonté316a8cf2012-11-11 13:38:27 +01001905 header. With identity, it does not take care of that header.
Willy Tarreau70737d12012-10-27 00:34:28 +02001906
1907 The "offload" setting makes haproxy remove the Accept-Encoding header to
1908 prevent backend servers from compressing responses. It is strongly
1909 recommended not to do this because this means that all the compression work
1910 will be done on the single point where haproxy is located. However in some
1911 deployment scenarios, haproxy may be installed in front of a buggy gateway
1912 and need to prevent it from emitting invalid payloads. In this case, simply
1913 removing the header in the configuration does not work because it applies
1914 before the header is parsed, so that prevents haproxy from compressing. The
1915 "offload" setting should then be used for such scenarios.
William Lallemand82fe75c2012-10-23 10:25:10 +02001916
William Lallemand05097442012-11-20 12:14:28 +01001917 Compression is disabled when:
1918 * the server is not HTTP/1.1.
William Lallemandd3002612012-11-26 14:34:47 +01001919 * HTTP status code is not 200
William Lallemand05097442012-11-20 12:14:28 +01001920 * requests does not contain Transfer-Encoding: chunked or Content-Length.
William Lallemandd3002612012-11-26 14:34:47 +01001921 * Content-Type is multipart
William Lallemand05097442012-11-20 12:14:28 +01001922 * the request contains "Cache-control: no-transform".
1923 * User-Agent matches "Mozilla/4" except MSIE 6 with XP SP2, or MSIE 7 and later.
1924 * The response is already compressed (see compression offload).
1925
1926 The compression does not rewrite Etag headers
1927
William Lallemand82fe75c2012-10-23 10:25:10 +02001928 Examples :
1929 compression algo gzip
1930 compression type text/html text/plain
Willy Tarreau0ba27502007-12-24 16:55:16 +01001931
Cyril Bontéf0c60612010-02-06 14:44:47 +01001932contimeout <timeout> (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +01001933 Set the maximum time to wait for a connection attempt to a server to succeed.
1934 May be used in sections : defaults | frontend | listen | backend
1935 yes | no | yes | yes
1936 Arguments :
1937 <timeout> is the timeout value is specified in milliseconds by default, but
1938 can be in any other unit if the number is suffixed by the unit,
1939 as explained at the top of this document.
1940
1941 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01001942 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreaud72758d2010-01-12 10:42:19 +01001943 cover one or several TCP packet losses by specifying timeouts that are
Willy Tarreau0ba27502007-12-24 16:55:16 +01001944 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
1945 connect timeout also presets the queue timeout to the same value if this one
1946 has not been specified. Historically, the contimeout was also used to set the
1947 tarpit timeout in a listen section, which is not possible in a pure frontend.
1948
1949 This parameter is specific to backends, but can be specified once for all in
1950 "defaults" sections. This is in fact one of the easiest solutions not to
1951 forget about it. An unspecified timeout results in an infinite timeout, which
1952 is not recommended. Such a usage is accepted and works but reports a warning
1953 during startup because it may results in accumulation of failed sessions in
1954 the system if the system's timeouts are not configured either.
1955
1956 This parameter is provided for backwards compatibility but is currently
1957 deprecated. Please use "timeout connect", "timeout queue" or "timeout tarpit"
1958 instead.
1959
1960 See also : "timeout connect", "timeout queue", "timeout tarpit",
1961 "timeout server", "contimeout".
1962
1963
Willy Tarreau55165fe2009-05-10 12:02:55 +02001964cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ]
Willy Tarreau4992dd22012-05-31 21:02:17 +02001965 [ postonly ] [ preserve ] [ httponly ] [ secure ]
1966 [ domain <domain> ]* [ maxidle <idle> ] [ maxlife <life> ]
Willy Tarreau0ba27502007-12-24 16:55:16 +01001967 Enable cookie-based persistence in a backend.
1968 May be used in sections : defaults | frontend | listen | backend
1969 yes | no | yes | yes
1970 Arguments :
1971 <name> is the name of the cookie which will be monitored, modified or
1972 inserted in order to bring persistence. This cookie is sent to
1973 the client via a "Set-Cookie" header in the response, and is
1974 brought back by the client in a "Cookie" header in all requests.
1975 Special care should be taken to choose a name which does not
1976 conflict with any likely application cookie. Also, if the same
1977 backends are subject to be used by the same clients (eg:
1978 HTTP/HTTPS), care should be taken to use different cookie names
1979 between all backends if persistence between them is not desired.
1980
1981 rewrite This keyword indicates that the cookie will be provided by the
1982 server and that haproxy will have to modify its value to set the
1983 server's identifier in it. This mode is handy when the management
1984 of complex combinations of "Set-cookie" and "Cache-control"
1985 headers is left to the application. The application can then
1986 decide whether or not it is appropriate to emit a persistence
1987 cookie. Since all responses should be monitored, this mode only
1988 works in HTTP close mode. Unless the application behaviour is
1989 very complex and/or broken, it is advised not to start with this
1990 mode for new deployments. This keyword is incompatible with
1991 "insert" and "prefix".
1992
1993 insert This keyword indicates that the persistence cookie will have to
Willy Tarreaua79094d2010-08-31 22:54:15 +02001994 be inserted by haproxy in server responses if the client did not
Willy Tarreauba4c5be2010-10-23 12:46:42 +02001995
Willy Tarreaua79094d2010-08-31 22:54:15 +02001996 already have a cookie that would have permitted it to access this
Willy Tarreauba4c5be2010-10-23 12:46:42 +02001997 server. When used without the "preserve" option, if the server
1998 emits a cookie with the same name, it will be remove before
1999 processing. For this reason, this mode can be used to upgrade
2000 existing configurations running in the "rewrite" mode. The cookie
2001 will only be a session cookie and will not be stored on the
2002 client's disk. By default, unless the "indirect" option is added,
2003 the server will see the cookies emitted by the client. Due to
2004 caching effects, it is generally wise to add the "nocache" or
2005 "postonly" keywords (see below). The "insert" keyword is not
2006 compatible with "rewrite" and "prefix".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002007
2008 prefix This keyword indicates that instead of relying on a dedicated
2009 cookie for the persistence, an existing one will be completed.
2010 This may be needed in some specific environments where the client
2011 does not support more than one single cookie and the application
2012 already needs it. In this case, whenever the server sets a cookie
2013 named <name>, it will be prefixed with the server's identifier
2014 and a delimiter. The prefix will be removed from all client
2015 requests so that the server still finds the cookie it emitted.
2016 Since all requests and responses are subject to being modified,
2017 this mode requires the HTTP close mode. The "prefix" keyword is
Willy Tarreau37229df2011-10-17 12:24:55 +02002018 not compatible with "rewrite" and "insert". Note: it is highly
2019 recommended not to use "indirect" with "prefix", otherwise server
2020 cookie updates would not be sent to clients.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002021
Willy Tarreaua79094d2010-08-31 22:54:15 +02002022 indirect When this option is specified, no cookie will be emitted to a
2023 client which already has a valid one for the server which has
2024 processed the request. If the server sets such a cookie itself,
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002025 it will be removed, unless the "preserve" option is also set. In
2026 "insert" mode, this will additionally remove cookies from the
2027 requests transmitted to the server, making the persistence
2028 mechanism totally transparent from an application point of view.
Willy Tarreau37229df2011-10-17 12:24:55 +02002029 Note: it is highly recommended not to use "indirect" with
2030 "prefix", otherwise server cookie updates would not be sent to
2031 clients.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002032
2033 nocache This option is recommended in conjunction with the insert mode
2034 when there is a cache between the client and HAProxy, as it
2035 ensures that a cacheable response will be tagged non-cacheable if
2036 a cookie needs to be inserted. This is important because if all
2037 persistence cookies are added on a cacheable home page for
2038 instance, then all customers will then fetch the page from an
2039 outer cache and will all share the same persistence cookie,
2040 leading to one server receiving much more traffic than others.
2041 See also the "insert" and "postonly" options.
2042
2043 postonly This option ensures that cookie insertion will only be performed
2044 on responses to POST requests. It is an alternative to the
2045 "nocache" option, because POST responses are not cacheable, so
2046 this ensures that the persistence cookie will never get cached.
2047 Since most sites do not need any sort of persistence before the
2048 first POST which generally is a login request, this is a very
2049 efficient method to optimize caching without risking to find a
2050 persistence cookie in the cache.
2051 See also the "insert" and "nocache" options.
2052
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002053 preserve This option may only be used with "insert" and/or "indirect". It
2054 allows the server to emit the persistence cookie itself. In this
2055 case, if a cookie is found in the response, haproxy will leave it
2056 untouched. This is useful in order to end persistence after a
2057 logout request for instance. For this, the server just has to
2058 emit a cookie with an invalid value (eg: empty) or with a date in
2059 the past. By combining this mechanism with the "disable-on-404"
2060 check option, it is possible to perform a completely graceful
2061 shutdown because users will definitely leave the server after
2062 they logout.
2063
Willy Tarreau4992dd22012-05-31 21:02:17 +02002064 httponly This option tells haproxy to add an "HttpOnly" cookie attribute
2065 when a cookie is inserted. This attribute is used so that a
2066 user agent doesn't share the cookie with non-HTTP components.
2067 Please check RFC6265 for more information on this attribute.
2068
2069 secure This option tells haproxy to add a "Secure" cookie attribute when
2070 a cookie is inserted. This attribute is used so that a user agent
2071 never emits this cookie over non-secure channels, which means
2072 that a cookie learned with this flag will be presented only over
2073 SSL/TLS connections. Please check RFC6265 for more information on
2074 this attribute.
2075
Krzysztof Piotr Oledzkiefe3b6f2008-05-23 23:49:32 +02002076 domain This option allows to specify the domain at which a cookie is
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002077 inserted. It requires exactly one parameter: a valid domain
Willy Tarreau68a897b2009-12-03 23:28:34 +01002078 name. If the domain begins with a dot, the browser is allowed to
2079 use it for any host ending with that name. It is also possible to
2080 specify several domain names by invoking this option multiple
2081 times. Some browsers might have small limits on the number of
2082 domains, so be careful when doing that. For the record, sending
2083 10 domains to MSIE 6 or Firefox 2 works as expected.
Krzysztof Piotr Oledzkiefe3b6f2008-05-23 23:49:32 +02002084
Willy Tarreau996a92c2010-10-13 19:30:47 +02002085 maxidle This option allows inserted cookies to be ignored after some idle
2086 time. It only works with insert-mode cookies. When a cookie is
2087 sent to the client, the date this cookie was emitted is sent too.
2088 Upon further presentations of this cookie, if the date is older
2089 than the delay indicated by the parameter (in seconds), it will
2090 be ignored. Otherwise, it will be refreshed if needed when the
2091 response is sent to the client. This is particularly useful to
2092 prevent users who never close their browsers from remaining for
2093 too long on the same server (eg: after a farm size change). When
2094 this option is set and a cookie has no date, it is always
2095 accepted, but gets refreshed in the response. This maintains the
2096 ability for admins to access their sites. Cookies that have a
2097 date in the future further than 24 hours are ignored. Doing so
2098 lets admins fix timezone issues without risking kicking users off
2099 the site.
2100
2101 maxlife This option allows inserted cookies to be ignored after some life
2102 time, whether they're in use or not. It only works with insert
2103 mode cookies. When a cookie is first sent to the client, the date
2104 this cookie was emitted is sent too. Upon further presentations
2105 of this cookie, if the date is older than the delay indicated by
2106 the parameter (in seconds), it will be ignored. If the cookie in
2107 the request has no date, it is accepted and a date will be set.
2108 Cookies that have a date in the future further than 24 hours are
2109 ignored. Doing so lets admins fix timezone issues without risking
2110 kicking users off the site. Contrary to maxidle, this value is
2111 not refreshed, only the first visit date counts. Both maxidle and
2112 maxlife may be used at the time. This is particularly useful to
2113 prevent users who never close their browsers from remaining for
2114 too long on the same server (eg: after a farm size change). This
2115 is stronger than the maxidle method in that it forces a
2116 redispatch after some absolute delay.
2117
Willy Tarreau0ba27502007-12-24 16:55:16 +01002118 There can be only one persistence cookie per HTTP backend, and it can be
2119 declared in a defaults section. The value of the cookie will be the value
2120 indicated after the "cookie" keyword in a "server" statement. If no cookie
2121 is declared for a given server, the cookie is not set.
Willy Tarreau6a06a402007-07-15 20:15:28 +02002122
Willy Tarreau0ba27502007-12-24 16:55:16 +01002123 Examples :
2124 cookie JSESSIONID prefix
2125 cookie SRV insert indirect nocache
2126 cookie SRV insert postonly indirect
Willy Tarreau996a92c2010-10-13 19:30:47 +02002127 cookie SRV insert indirect nocache maxidle 30m maxlife 8h
Willy Tarreau0ba27502007-12-24 16:55:16 +01002128
Cyril Bontéa8e7bbc2010-04-25 22:29:29 +02002129 See also : "appsession", "balance source", "capture cookie", "server"
Cyril Bonté0d4bf012010-04-25 23:21:46 +02002130 and "ignore-persist".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002131
Willy Tarreau983e01e2010-01-11 18:42:06 +01002132
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01002133default-server [param*]
2134 Change default options for a server in a backend
2135 May be used in sections : defaults | frontend | listen | backend
2136 yes | no | yes | yes
2137 Arguments:
Willy Tarreau983e01e2010-01-11 18:42:06 +01002138 <param*> is a list of parameters for this server. The "default-server"
2139 keyword accepts an important number of options and has a complete
2140 section dedicated to it. Please refer to section 5 for more
2141 details.
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01002142
Willy Tarreau983e01e2010-01-11 18:42:06 +01002143 Example :
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01002144 default-server inter 1000 weight 13
2145
2146 See also: "server" and section 5 about server options
Willy Tarreau0ba27502007-12-24 16:55:16 +01002147
Willy Tarreau983e01e2010-01-11 18:42:06 +01002148
Willy Tarreau0ba27502007-12-24 16:55:16 +01002149default_backend <backend>
2150 Specify the backend to use when no "use_backend" rule has been matched.
2151 May be used in sections : defaults | frontend | listen | backend
2152 yes | yes | yes | no
2153 Arguments :
2154 <backend> is the name of the backend to use.
2155
2156 When doing content-switching between frontend and backends using the
2157 "use_backend" keyword, it is often useful to indicate which backend will be
2158 used when no rule has matched. It generally is the dynamic backend which
2159 will catch all undetermined requests.
2160
Willy Tarreau0ba27502007-12-24 16:55:16 +01002161 Example :
2162
2163 use_backend dynamic if url_dyn
2164 use_backend static if url_css url_img extension_img
2165 default_backend dynamic
2166
Willy Tarreau2769aa02007-12-27 18:26:09 +01002167 See also : "use_backend", "reqsetbe", "reqisetbe"
2168
Willy Tarreau0ba27502007-12-24 16:55:16 +01002169
2170disabled
2171 Disable a proxy, frontend or backend.
2172 May be used in sections : defaults | frontend | listen | backend
2173 yes | yes | yes | yes
2174 Arguments : none
2175
2176 The "disabled" keyword is used to disable an instance, mainly in order to
2177 liberate a listening port or to temporarily disable a service. The instance
2178 will still be created and its configuration will be checked, but it will be
2179 created in the "stopped" state and will appear as such in the statistics. It
2180 will not receive any traffic nor will it send any health-checks or logs. It
2181 is possible to disable many instances at once by adding the "disabled"
2182 keyword in a "defaults" section.
2183
2184 See also : "enabled"
2185
2186
Willy Tarreau5ce94572010-06-07 14:35:41 +02002187dispatch <address>:<port>
2188 Set a default server address
2189 May be used in sections : defaults | frontend | listen | backend
2190 no | no | yes | yes
Cyril Bonté108cf6e2012-04-21 23:30:29 +02002191 Arguments :
Willy Tarreau5ce94572010-06-07 14:35:41 +02002192
2193 <address> is the IPv4 address of the default server. Alternatively, a
2194 resolvable hostname is supported, but this name will be resolved
2195 during start-up.
2196
2197 <ports> is a mandatory port specification. All connections will be sent
2198 to this port, and it is not permitted to use port offsets as is
2199 possible with normal servers.
2200
Willy Tarreau787aed52011-04-15 06:45:37 +02002201 The "dispatch" keyword designates a default server for use when no other
Willy Tarreau5ce94572010-06-07 14:35:41 +02002202 server can take the connection. In the past it was used to forward non
2203 persistent connections to an auxiliary load balancer. Due to its simple
2204 syntax, it has also been used for simple TCP relays. It is recommended not to
2205 use it for more clarity, and to use the "server" directive instead.
2206
2207 See also : "server"
2208
2209
Willy Tarreau0ba27502007-12-24 16:55:16 +01002210enabled
2211 Enable a proxy, frontend or backend.
2212 May be used in sections : defaults | frontend | listen | backend
2213 yes | yes | yes | yes
2214 Arguments : none
2215
2216 The "enabled" keyword is used to explicitly enable an instance, when the
2217 defaults has been set to "disabled". This is very rarely used.
2218
2219 See also : "disabled"
2220
2221
2222errorfile <code> <file>
2223 Return a file contents instead of errors generated by HAProxy
2224 May be used in sections : defaults | frontend | listen | backend
2225 yes | yes | yes | yes
2226 Arguments :
2227 <code> is the HTTP status code. Currently, HAProxy is capable of
Willy Tarreauae94d4d2011-05-11 16:28:49 +02002228 generating codes 200, 400, 403, 408, 500, 502, 503, and 504.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002229
2230 <file> designates a file containing the full HTTP response. It is
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002231 recommended to follow the common practice of appending ".http" to
Willy Tarreau0ba27502007-12-24 16:55:16 +01002232 the filename so that people do not confuse the response with HTML
Willy Tarreau59140a22009-02-22 12:02:30 +01002233 error pages, and to use absolute paths, since files are read
2234 before any chroot is performed.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002235
2236 It is important to understand that this keyword is not meant to rewrite
2237 errors returned by the server, but errors detected and returned by HAProxy.
2238 This is why the list of supported errors is limited to a small set.
2239
Willy Tarreauae94d4d2011-05-11 16:28:49 +02002240 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
2241
Willy Tarreau0ba27502007-12-24 16:55:16 +01002242 The files are returned verbatim on the TCP socket. This allows any trick such
2243 as redirections to another URL or site, as well as tricks to clean cookies,
2244 force enable or disable caching, etc... The package provides default error
2245 files returning the same contents as default errors.
2246
Willy Tarreau59140a22009-02-22 12:02:30 +01002247 The files should not exceed the configured buffer size (BUFSIZE), which
2248 generally is 8 or 16 kB, otherwise they will be truncated. It is also wise
2249 not to put any reference to local contents (eg: images) in order to avoid
2250 loops between the client and HAProxy when all servers are down, causing an
2251 error to be returned instead of an image. For better HTTP compliance, it is
2252 recommended that all header lines end with CR-LF and not LF alone.
2253
Willy Tarreau0ba27502007-12-24 16:55:16 +01002254 The files are read at the same time as the configuration and kept in memory.
2255 For this reason, the errors continue to be returned even when the process is
2256 chrooted, and no file change is considered while the process is running. A
Willy Tarreauc27debf2008-01-06 08:57:02 +01002257 simple method for developing those files consists in associating them to the
Willy Tarreau0ba27502007-12-24 16:55:16 +01002258 403 status code and interrogating a blocked URL.
2259
2260 See also : "errorloc", "errorloc302", "errorloc303"
2261
Willy Tarreau59140a22009-02-22 12:02:30 +01002262 Example :
2263 errorfile 400 /etc/haproxy/errorfiles/400badreq.http
2264 errorfile 403 /etc/haproxy/errorfiles/403forbid.http
2265 errorfile 503 /etc/haproxy/errorfiles/503sorry.http
2266
Willy Tarreau2769aa02007-12-27 18:26:09 +01002267
2268errorloc <code> <url>
2269errorloc302 <code> <url>
2270 Return an HTTP redirection to a URL instead of errors generated by HAProxy
2271 May be used in sections : defaults | frontend | listen | backend
2272 yes | yes | yes | yes
2273 Arguments :
2274 <code> is the HTTP status code. Currently, HAProxy is capable of
Willy Tarreauae94d4d2011-05-11 16:28:49 +02002275 generating codes 200, 400, 403, 408, 500, 502, 503, and 504.
Willy Tarreau2769aa02007-12-27 18:26:09 +01002276
2277 <url> it is the exact contents of the "Location" header. It may contain
2278 either a relative URI to an error page hosted on the same site,
2279 or an absolute URI designating an error page on another site.
2280 Special care should be given to relative URIs to avoid redirect
2281 loops if the URI itself may generate the same error (eg: 500).
2282
2283 It is important to understand that this keyword is not meant to rewrite
2284 errors returned by the server, but errors detected and returned by HAProxy.
2285 This is why the list of supported errors is limited to a small set.
2286
Willy Tarreauae94d4d2011-05-11 16:28:49 +02002287 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
2288
Willy Tarreau2769aa02007-12-27 18:26:09 +01002289 Note that both keyword return the HTTP 302 status code, which tells the
2290 client to fetch the designated URL using the same HTTP method. This can be
2291 quite problematic in case of non-GET methods such as POST, because the URL
2292 sent to the client might not be allowed for something other than GET. To
2293 workaround this problem, please use "errorloc303" which send the HTTP 303
2294 status code, indicating to the client that the URL must be fetched with a GET
2295 request.
2296
2297 See also : "errorfile", "errorloc303"
2298
2299
2300errorloc303 <code> <url>
2301 Return an HTTP redirection to a URL instead of errors generated by HAProxy
2302 May be used in sections : defaults | frontend | listen | backend
2303 yes | yes | yes | yes
2304 Arguments :
2305 <code> is the HTTP status code. Currently, HAProxy is capable of
2306 generating codes 400, 403, 408, 500, 502, 503, and 504.
2307
2308 <url> it is the exact contents of the "Location" header. It may contain
2309 either a relative URI to an error page hosted on the same site,
2310 or an absolute URI designating an error page on another site.
2311 Special care should be given to relative URIs to avoid redirect
2312 loops if the URI itself may generate the same error (eg: 500).
2313
2314 It is important to understand that this keyword is not meant to rewrite
2315 errors returned by the server, but errors detected and returned by HAProxy.
2316 This is why the list of supported errors is limited to a small set.
2317
Willy Tarreauae94d4d2011-05-11 16:28:49 +02002318 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
2319
Willy Tarreau2769aa02007-12-27 18:26:09 +01002320 Note that both keyword return the HTTP 303 status code, which tells the
2321 client to fetch the designated URL using the same HTTP GET method. This
2322 solves the usual problems associated with "errorloc" and the 302 code. It is
2323 possible that some very old browsers designed before HTTP/1.1 do not support
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002324 it, but no such problem has been reported till now.
Willy Tarreau2769aa02007-12-27 18:26:09 +01002325
2326 See also : "errorfile", "errorloc", "errorloc302"
2327
2328
Willy Tarreau4de91492010-01-22 19:10:05 +01002329force-persist { if | unless } <condition>
2330 Declare a condition to force persistence on down servers
2331 May be used in sections: defaults | frontend | listen | backend
2332 no | yes | yes | yes
2333
2334 By default, requests are not dispatched to down servers. It is possible to
2335 force this using "option persist", but it is unconditional and redispatches
2336 to a valid server if "option redispatch" is set. That leaves with very little
2337 possibilities to force some requests to reach a server which is artificially
2338 marked down for maintenance operations.
2339
2340 The "force-persist" statement allows one to declare various ACL-based
2341 conditions which, when met, will cause a request to ignore the down status of
2342 a server and still try to connect to it. That makes it possible to start a
2343 server, still replying an error to the health checks, and run a specially
2344 configured browser to test the service. Among the handy methods, one could
2345 use a specific source IP address, or a specific cookie. The cookie also has
2346 the advantage that it can easily be added/removed on the browser from a test
2347 page. Once the service is validated, it is then possible to open the service
2348 to the world by returning a valid response to health checks.
2349
2350 The forced persistence is enabled when an "if" condition is met, or unless an
2351 "unless" condition is met. The final redispatch is always disabled when this
2352 is used.
2353
Cyril Bonté0d4bf012010-04-25 23:21:46 +02002354 See also : "option redispatch", "ignore-persist", "persist",
Cyril Bontéa8e7bbc2010-04-25 22:29:29 +02002355 and section 7 about ACL usage.
Willy Tarreau4de91492010-01-22 19:10:05 +01002356
2357
Willy Tarreau2769aa02007-12-27 18:26:09 +01002358fullconn <conns>
2359 Specify at what backend load the servers will reach their maxconn
2360 May be used in sections : defaults | frontend | listen | backend
2361 yes | no | yes | yes
2362 Arguments :
2363 <conns> is the number of connections on the backend which will make the
2364 servers use the maximal number of connections.
2365
Willy Tarreau198a7442008-01-17 12:05:32 +01002366 When a server has a "maxconn" parameter specified, it means that its number
Willy Tarreau2769aa02007-12-27 18:26:09 +01002367 of concurrent connections will never go higher. Additionally, if it has a
Willy Tarreau198a7442008-01-17 12:05:32 +01002368 "minconn" parameter, it indicates a dynamic limit following the backend's
Willy Tarreau2769aa02007-12-27 18:26:09 +01002369 load. The server will then always accept at least <minconn> connections,
2370 never more than <maxconn>, and the limit will be on the ramp between both
2371 values when the backend has less than <conns> concurrent connections. This
2372 makes it possible to limit the load on the servers during normal loads, but
2373 push it further for important loads without overloading the servers during
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002374 exceptional loads.
Willy Tarreau2769aa02007-12-27 18:26:09 +01002375
Willy Tarreaufbb78422011-06-05 15:38:35 +02002376 Since it's hard to get this value right, haproxy automatically sets it to
2377 10% of the sum of the maxconns of all frontends that may branch to this
2378 backend. That way it's safe to leave it unset.
2379
Willy Tarreau2769aa02007-12-27 18:26:09 +01002380 Example :
2381 # The servers will accept between 100 and 1000 concurrent connections each
2382 # and the maximum of 1000 will be reached when the backend reaches 10000
2383 # connections.
2384 backend dynamic
2385 fullconn 10000
2386 server srv1 dyn1:80 minconn 100 maxconn 1000
2387 server srv2 dyn2:80 minconn 100 maxconn 1000
2388
2389 See also : "maxconn", "server"
2390
2391
2392grace <time>
2393 Maintain a proxy operational for some time after a soft stop
2394 May be used in sections : defaults | frontend | listen | backend
Cyril Bonté99ed3272010-01-24 23:29:44 +01002395 yes | yes | yes | yes
Willy Tarreau2769aa02007-12-27 18:26:09 +01002396 Arguments :
2397 <time> is the time (by default in milliseconds) for which the instance
2398 will remain operational with the frontend sockets still listening
2399 when a soft-stop is received via the SIGUSR1 signal.
2400
2401 This may be used to ensure that the services disappear in a certain order.
2402 This was designed so that frontends which are dedicated to monitoring by an
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002403 external equipment fail immediately while other ones remain up for the time
Willy Tarreau2769aa02007-12-27 18:26:09 +01002404 needed by the equipment to detect the failure.
2405
2406 Note that currently, there is very little benefit in using this parameter,
2407 and it may in fact complicate the soft-reconfiguration process more than
2408 simplify it.
2409
Willy Tarreau0ba27502007-12-24 16:55:16 +01002410
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002411hash-type <method>
2412 Specify a method to use for mapping hashes to servers
2413 May be used in sections : defaults | frontend | listen | backend
2414 yes | no | yes | yes
2415 Arguments :
2416 map-based the hash table is a static array containing all alive servers.
2417 The hashes will be very smooth, will consider weights, but will
2418 be static in that weight changes while a server is up will be
2419 ignored. This means that there will be no slow start. Also,
2420 since a server is selected by its position in the array, most
2421 mappings are changed when the server count changes. This means
2422 that when a server goes up or down, or when a server is added
2423 to a farm, most connections will be redistributed to different
2424 servers. This can be inconvenient with caches for instance.
2425
Willy Tarreau798a39c2010-11-24 15:04:29 +01002426 avalanche this mechanism uses the default map-based hashing described
2427 above but applies a full avalanche hash before performing the
2428 mapping. The result is a slightly less smooth hash for most
2429 situations, but the hash becomes better than pure map-based
2430 hashes when the number of servers is a multiple of the size of
2431 the input set. When using URI hash with a number of servers
2432 multiple of 64, it's desirable to change the hash type to
2433 this value.
2434
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002435 consistent the hash table is a tree filled with many occurrences of each
2436 server. The hash key is looked up in the tree and the closest
2437 server is chosen. This hash is dynamic, it supports changing
2438 weights while the servers are up, so it is compatible with the
2439 slow start feature. It has the advantage that when a server
2440 goes up or down, only its associations are moved. When a server
2441 is added to the farm, only a few part of the mappings are
2442 redistributed, making it an ideal algorithm for caches.
2443 However, due to its principle, the algorithm will never be very
2444 smooth and it may sometimes be necessary to adjust a server's
2445 weight or its ID to get a more balanced distribution. In order
2446 to get the same distribution on multiple load balancers, it is
2447 important that all servers have the same IDs.
2448
2449 The default hash type is "map-based" and is recommended for most usages.
2450
2451 See also : "balance", "server"
2452
2453
Willy Tarreau0ba27502007-12-24 16:55:16 +01002454http-check disable-on-404
2455 Enable a maintenance mode upon HTTP/404 response to health-checks
2456 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau2769aa02007-12-27 18:26:09 +01002457 yes | no | yes | yes
Willy Tarreau0ba27502007-12-24 16:55:16 +01002458 Arguments : none
2459
2460 When this option is set, a server which returns an HTTP code 404 will be
2461 excluded from further load-balancing, but will still receive persistent
2462 connections. This provides a very convenient method for Web administrators
2463 to perform a graceful shutdown of their servers. It is also important to note
2464 that a server which is detected as failed while it was in this mode will not
2465 generate an alert, just a notice. If the server responds 2xx or 3xx again, it
2466 will immediately be reinserted into the farm. The status on the stats page
2467 reports "NOLB" for a server in this mode. It is important to note that this
Willy Tarreaubd741542010-03-16 18:46:54 +01002468 option only works in conjunction with the "httpchk" option. If this option
2469 is used with "http-check expect", then it has precedence over it so that 404
2470 responses will still be considered as soft-stop.
2471
2472 See also : "option httpchk", "http-check expect"
2473
2474
2475http-check expect [!] <match> <pattern>
Jamie Gloudonaaa21002012-08-25 00:18:33 -04002476 Make HTTP health checks consider response contents or specific status codes
Willy Tarreaubd741542010-03-16 18:46:54 +01002477 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau1ee51a62011-08-19 20:04:17 +02002478 yes | no | yes | yes
Willy Tarreaubd741542010-03-16 18:46:54 +01002479 Arguments :
2480 <match> is a keyword indicating how to look for a specific pattern in the
2481 response. The keyword may be one of "status", "rstatus",
Jamie Gloudonaaa21002012-08-25 00:18:33 -04002482 "string", or "rstring". The keyword may be preceded by an
Willy Tarreaubd741542010-03-16 18:46:54 +01002483 exclamation mark ("!") to negate the match. Spaces are allowed
2484 between the exclamation mark and the keyword. See below for more
2485 details on the supported keywords.
2486
2487 <pattern> is the pattern to look for. It may be a string or a regular
2488 expression. If the pattern contains spaces, they must be escaped
2489 with the usual backslash ('\').
2490
2491 By default, "option httpchk" considers that response statuses 2xx and 3xx
2492 are valid, and that others are invalid. When "http-check expect" is used,
2493 it defines what is considered valid or invalid. Only one "http-check"
2494 statement is supported in a backend. If a server fails to respond or times
2495 out, the check obviously fails. The available matches are :
2496
2497 status <string> : test the exact string match for the HTTP status code.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04002498 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01002499 response's status code is exactly this string. If the
2500 "status" keyword is prefixed with "!", then the response
2501 will be considered invalid if the status code matches.
2502
2503 rstatus <regex> : test a regular expression for the HTTP status code.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04002504 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01002505 response's status code matches the expression. If the
2506 "rstatus" keyword is prefixed with "!", then the response
2507 will be considered invalid if the status code matches.
2508 This is mostly used to check for multiple codes.
2509
2510 string <string> : test the exact string match in the HTTP response body.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04002511 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01002512 response's body contains this exact string. If the
2513 "string" keyword is prefixed with "!", then the response
2514 will be considered invalid if the body contains this
2515 string. This can be used to look for a mandatory word at
2516 the end of a dynamic page, or to detect a failure when a
2517 specific error appears on the check page (eg: a stack
2518 trace).
2519
2520 rstring <regex> : test a regular expression on the HTTP response body.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04002521 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01002522 response's body matches this expression. If the "rstring"
2523 keyword is prefixed with "!", then the response will be
2524 considered invalid if the body matches the expression.
2525 This can be used to look for a mandatory word at the end
2526 of a dynamic page, or to detect a failure when a specific
2527 error appears on the check page (eg: a stack trace).
2528
2529 It is important to note that the responses will be limited to a certain size
2530 defined by the global "tune.chksize" option, which defaults to 16384 bytes.
2531 Thus, too large responses may not contain the mandatory pattern when using
2532 "string" or "rstring". If a large response is absolutely required, it is
2533 possible to change the default max size by setting the global variable.
2534 However, it is worth keeping in mind that parsing very large responses can
2535 waste some CPU cycles, especially when regular expressions are used, and that
2536 it is always better to focus the checks on smaller resources.
2537
2538 Last, if "http-check expect" is combined with "http-check disable-on-404",
2539 then this last one has precedence when the server responds with 404.
2540
2541 Examples :
2542 # only accept status 200 as valid
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01002543 http-check expect status 200
Willy Tarreaubd741542010-03-16 18:46:54 +01002544
2545 # consider SQL errors as errors
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01002546 http-check expect ! string SQL\ Error
Willy Tarreaubd741542010-03-16 18:46:54 +01002547
2548 # consider status 5xx only as errors
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01002549 http-check expect ! rstatus ^5
Willy Tarreaubd741542010-03-16 18:46:54 +01002550
2551 # check that we have a correct hexadecimal tag before /html
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01002552 http-check expect rstring <!--tag:[0-9a-f]*</html>
Willy Tarreau0ba27502007-12-24 16:55:16 +01002553
Willy Tarreaubd741542010-03-16 18:46:54 +01002554 See also : "option httpchk", "http-check disable-on-404"
Willy Tarreau2769aa02007-12-27 18:26:09 +01002555
2556
Willy Tarreauef781042010-01-27 11:53:01 +01002557http-check send-state
2558 Enable emission of a state header with HTTP health checks
2559 May be used in sections : defaults | frontend | listen | backend
2560 yes | no | yes | yes
2561 Arguments : none
2562
2563 When this option is set, haproxy will systematically send a special header
2564 "X-Haproxy-Server-State" with a list of parameters indicating to each server
2565 how they are seen by haproxy. This can be used for instance when a server is
2566 manipulated without access to haproxy and the operator needs to know whether
2567 haproxy still sees it up or not, or if the server is the last one in a farm.
2568
2569 The header is composed of fields delimited by semi-colons, the first of which
2570 is a word ("UP", "DOWN", "NOLB"), possibly followed by a number of valid
2571 checks on the total number before transition, just as appears in the stats
2572 interface. Next headers are in the form "<variable>=<value>", indicating in
2573 no specific order some values available in the stats interface :
2574 - a variable "name", containing the name of the backend followed by a slash
2575 ("/") then the name of the server. This can be used when a server is
2576 checked in multiple backends.
2577
2578 - a variable "node" containing the name of the haproxy node, as set in the
2579 global "node" variable, otherwise the system's hostname if unspecified.
2580
2581 - a variable "weight" indicating the weight of the server, a slash ("/")
2582 and the total weight of the farm (just counting usable servers). This
2583 helps to know if other servers are available to handle the load when this
2584 one fails.
2585
2586 - a variable "scur" indicating the current number of concurrent connections
2587 on the server, followed by a slash ("/") then the total number of
2588 connections on all servers of the same backend.
2589
2590 - a variable "qcur" indicating the current number of requests in the
2591 server's queue.
2592
2593 Example of a header received by the application server :
2594 >>> X-Haproxy-Server-State: UP 2/3; name=bck/srv2; node=lb1; weight=1/2; \
2595 scur=13/22; qcur=0
2596
2597 See also : "option httpchk", "http-check disable-on-404"
2598
Cyril Bonté2be1b3f2010-09-30 23:46:30 +02002599http-request { allow | deny | auth [realm <realm>] }
Cyril Bontéf0c60612010-02-06 14:44:47 +01002600 [ { if | unless } <condition> ]
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01002601 Access control for Layer 7 requests
2602
2603 May be used in sections: defaults | frontend | listen | backend
2604 no | yes | yes | yes
2605
2606 These set of options allow to fine control access to a
2607 frontend/listen/backend. Each option may be followed by if/unless and acl.
2608 First option with matched condition (or option without condition) is final.
Cyril Bonté2be1b3f2010-09-30 23:46:30 +02002609 For "deny" a 403 error will be returned, for "allow" normal processing is
2610 performed, for "auth" a 401/407 error code is returned so the client
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01002611 should be asked to enter a username and password.
2612
2613 There is no fixed limit to the number of http-request statements per
2614 instance.
2615
2616 Example:
Cyril Bonté78caf842010-03-10 22:41:43 +01002617 acl nagios src 192.168.129.3
2618 acl local_net src 192.168.0.0/16
2619 acl auth_ok http_auth(L1)
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01002620
Cyril Bonté78caf842010-03-10 22:41:43 +01002621 http-request allow if nagios
2622 http-request allow if local_net auth_ok
2623 http-request auth realm Gimme if local_net auth_ok
2624 http-request deny
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01002625
Cyril Bonté78caf842010-03-10 22:41:43 +01002626 Example:
2627 acl auth_ok http_auth_group(L1) G1
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01002628
Cyril Bonté78caf842010-03-10 22:41:43 +01002629 http-request auth unless auth_ok
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01002630
Cyril Bonté2be1b3f2010-09-30 23:46:30 +02002631 See also : "stats http-request", section 3.4 about userlists and section 7
2632 about ACL usage.
Willy Tarreauef781042010-01-27 11:53:01 +01002633
Mark Lamourinec2247f02012-01-04 13:02:01 -05002634http-send-name-header [<header>]
2635 Add the server name to a request. Use the header string given by <header>
2636
2637 May be used in sections: defaults | frontend | listen | backend
2638 yes | no | yes | yes
2639
2640 Arguments :
2641
2642 <header> The header string to use to send the server name
2643
2644 The "http-send-name-header" statement causes the name of the target
2645 server to be added to the headers of an HTTP request. The name
2646 is added with the header string proved.
2647
2648 See also : "server"
2649
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01002650id <value>
Willy Tarreau53fb4ae2009-10-04 23:04:08 +02002651 Set a persistent ID to a proxy.
2652 May be used in sections : defaults | frontend | listen | backend
2653 no | yes | yes | yes
2654 Arguments : none
2655
2656 Set a persistent ID for the proxy. This ID must be unique and positive.
2657 An unused ID will automatically be assigned if unset. The first assigned
2658 value will be 1. This ID is currently only returned in statistics.
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01002659
2660
Cyril Bonté0d4bf012010-04-25 23:21:46 +02002661ignore-persist { if | unless } <condition>
2662 Declare a condition to ignore persistence
2663 May be used in sections: defaults | frontend | listen | backend
2664 no | yes | yes | yes
2665
2666 By default, when cookie persistence is enabled, every requests containing
2667 the cookie are unconditionally persistent (assuming the target server is up
2668 and running).
2669
2670 The "ignore-persist" statement allows one to declare various ACL-based
2671 conditions which, when met, will cause a request to ignore persistence.
2672 This is sometimes useful to load balance requests for static files, which
2673 oftenly don't require persistence. This can also be used to fully disable
2674 persistence for a specific User-Agent (for example, some web crawler bots).
2675
2676 Combined with "appsession", it can also help reduce HAProxy memory usage, as
2677 the appsession table won't grow if persistence is ignored.
2678
2679 The persistence is ignored when an "if" condition is met, or unless an
2680 "unless" condition is met.
2681
2682 See also : "force-persist", "cookie", and section 7 about ACL usage.
2683
2684
Willy Tarreau2769aa02007-12-27 18:26:09 +01002685log global
Willy Tarreauf7edefa2009-05-10 17:20:05 +02002686log <address> <facility> [<level> [<minlevel>]]
William Lallemand0f99e342011-10-12 17:50:54 +02002687no log
Willy Tarreau2769aa02007-12-27 18:26:09 +01002688 Enable per-instance logging of events and traffic.
2689 May be used in sections : defaults | frontend | listen | backend
2690 yes | yes | yes | yes
William Lallemand0f99e342011-10-12 17:50:54 +02002691
2692 Prefix :
2693 no should be used when the logger list must be flushed. For example,
2694 if you don't want to inherit from the default logger list. This
2695 prefix does not allow arguments.
2696
Willy Tarreau2769aa02007-12-27 18:26:09 +01002697 Arguments :
2698 global should be used when the instance's logging parameters are the
2699 same as the global ones. This is the most common usage. "global"
2700 replaces <address>, <facility> and <level> with those of the log
2701 entries found in the "global" section. Only one "log global"
2702 statement may be used per instance, and this form takes no other
2703 parameter.
2704
2705 <address> indicates where to send the logs. It takes the same format as
2706 for the "global" section's logs, and can be one of :
2707
2708 - An IPv4 address optionally followed by a colon (':') and a UDP
2709 port. If no port is specified, 514 is used by default (the
2710 standard syslog port).
2711
David du Colombier24bb5f52011-03-17 10:40:23 +01002712 - An IPv6 address followed by a colon (':') and optionally a UDP
2713 port. If no port is specified, 514 is used by default (the
2714 standard syslog port).
2715
Willy Tarreau2769aa02007-12-27 18:26:09 +01002716 - A filesystem path to a UNIX domain socket, keeping in mind
2717 considerations for chroot (be sure the path is accessible
2718 inside the chroot) and uid/gid (be sure the path is
2719 appropriately writeable).
2720
2721 <facility> must be one of the 24 standard syslog facilities :
2722
2723 kern user mail daemon auth syslog lpr news
2724 uucp cron auth2 ftp ntp audit alert cron2
2725 local0 local1 local2 local3 local4 local5 local6 local7
2726
2727 <level> is optional and can be specified to filter outgoing messages. By
2728 default, all messages are sent. If a level is specified, only
2729 messages with a severity at least as important as this level
Willy Tarreauf7edefa2009-05-10 17:20:05 +02002730 will be sent. An optional minimum level can be specified. If it
2731 is set, logs emitted with a more severe level than this one will
2732 be capped to this level. This is used to avoid sending "emerg"
2733 messages on all terminals on some default syslog configurations.
2734 Eight levels are known :
Willy Tarreau2769aa02007-12-27 18:26:09 +01002735
2736 emerg alert crit err warning notice info debug
2737
William Lallemand0f99e342011-10-12 17:50:54 +02002738 It is important to keep in mind that it is the frontend which decides what to
2739 log from a connection, and that in case of content switching, the log entries
2740 from the backend will be ignored. Connections are logged at level "info".
Willy Tarreaucc6c8912009-02-22 10:53:55 +01002741
2742 However, backend log declaration define how and where servers status changes
2743 will be logged. Level "notice" will be used to indicate a server going up,
2744 "warning" will be used for termination signals and definitive service
2745 termination, and "alert" will be used for when a server goes down.
2746
2747 Note : According to RFC3164, messages are truncated to 1024 bytes before
2748 being emitted.
Willy Tarreau2769aa02007-12-27 18:26:09 +01002749
2750 Example :
2751 log global
Willy Tarreauf7edefa2009-05-10 17:20:05 +02002752 log 127.0.0.1:514 local0 notice # only send important events
2753 log 127.0.0.1:514 local0 notice notice # same but limit output level
Willy Tarreau2769aa02007-12-27 18:26:09 +01002754
William Lallemand48940402012-01-30 16:47:22 +01002755log-format <string>
2756 Allows you to custom a log line.
2757
2758 See also : Custom Log Format (8.2.4)
2759
Willy Tarreau2769aa02007-12-27 18:26:09 +01002760
2761maxconn <conns>
2762 Fix the maximum number of concurrent connections on a frontend
2763 May be used in sections : defaults | frontend | listen | backend
2764 yes | yes | yes | no
2765 Arguments :
2766 <conns> is the maximum number of concurrent connections the frontend will
2767 accept to serve. Excess connections will be queued by the system
2768 in the socket's listen queue and will be served once a connection
2769 closes.
2770
2771 If the system supports it, it can be useful on big sites to raise this limit
2772 very high so that haproxy manages connection queues, instead of leaving the
2773 clients with unanswered connection attempts. This value should not exceed the
2774 global maxconn. Also, keep in mind that a connection contains two buffers
2775 of 8kB each, as well as some other data resulting in about 17 kB of RAM being
2776 consumed per established connection. That means that a medium system equipped
2777 with 1GB of RAM can withstand around 40000-50000 concurrent connections if
2778 properly tuned.
2779
2780 Also, when <conns> is set to large values, it is possible that the servers
2781 are not sized to accept such loads, and for this reason it is generally wise
2782 to assign them some reasonable connection limits.
2783
Vincent Bernat6341be52012-06-27 17:18:30 +02002784 By default, this value is set to 2000.
2785
Willy Tarreau2769aa02007-12-27 18:26:09 +01002786 See also : "server", global section's "maxconn", "fullconn"
2787
2788
2789mode { tcp|http|health }
2790 Set the running mode or protocol of the instance
2791 May be used in sections : defaults | frontend | listen | backend
2792 yes | yes | yes | yes
2793 Arguments :
2794 tcp The instance will work in pure TCP mode. A full-duplex connection
2795 will be established between clients and servers, and no layer 7
2796 examination will be performed. This is the default mode. It
2797 should be used for SSL, SSH, SMTP, ...
2798
2799 http The instance will work in HTTP mode. The client request will be
2800 analyzed in depth before connecting to any server. Any request
2801 which is not RFC-compliant will be rejected. Layer 7 filtering,
2802 processing and switching will be possible. This is the mode which
2803 brings HAProxy most of its value.
2804
2805 health The instance will work in "health" mode. It will just reply "OK"
Willy Tarreau82569f92012-09-27 23:48:56 +02002806 to incoming connections and close the connection. Alternatively,
2807 If the "httpchk" option is set, "HTTP/1.0 200 OK" will be sent
2808 instead. Nothing will be logged in either case. This mode is used
2809 to reply to external components health checks. This mode is
2810 deprecated and should not be used anymore as it is possible to do
2811 the same and even better by combining TCP or HTTP modes with the
2812 "monitor" keyword.
Willy Tarreau2769aa02007-12-27 18:26:09 +01002813
Cyril Bonté108cf6e2012-04-21 23:30:29 +02002814 When doing content switching, it is mandatory that the frontend and the
2815 backend are in the same mode (generally HTTP), otherwise the configuration
2816 will be refused.
Willy Tarreau2769aa02007-12-27 18:26:09 +01002817
Cyril Bonté108cf6e2012-04-21 23:30:29 +02002818 Example :
Willy Tarreau2769aa02007-12-27 18:26:09 +01002819 defaults http_instances
2820 mode http
2821
Cyril Bonté108cf6e2012-04-21 23:30:29 +02002822 See also : "monitor", "monitor-net"
Willy Tarreau2769aa02007-12-27 18:26:09 +01002823
Willy Tarreau0ba27502007-12-24 16:55:16 +01002824
Cyril Bontéf0c60612010-02-06 14:44:47 +01002825monitor fail { if | unless } <condition>
Willy Tarreau2769aa02007-12-27 18:26:09 +01002826 Add a condition to report a failure to a monitor HTTP request.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002827 May be used in sections : defaults | frontend | listen | backend
2828 no | yes | yes | no
Willy Tarreau0ba27502007-12-24 16:55:16 +01002829 Arguments :
2830 if <cond> the monitor request will fail if the condition is satisfied,
2831 and will succeed otherwise. The condition should describe a
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002832 combined test which must induce a failure if all conditions
Willy Tarreau0ba27502007-12-24 16:55:16 +01002833 are met, for instance a low number of servers both in a
2834 backend and its backup.
2835
2836 unless <cond> the monitor request will succeed only if the condition is
2837 satisfied, and will fail otherwise. Such a condition may be
2838 based on a test on the presence of a minimum number of active
2839 servers in a list of backends.
2840
2841 This statement adds a condition which can force the response to a monitor
2842 request to report a failure. By default, when an external component queries
2843 the URI dedicated to monitoring, a 200 response is returned. When one of the
2844 conditions above is met, haproxy will return 503 instead of 200. This is
2845 very useful to report a site failure to an external component which may base
2846 routing advertisements between multiple sites on the availability reported by
2847 haproxy. In this case, one would rely on an ACL involving the "nbsrv"
Willy Tarreauae94d4d2011-05-11 16:28:49 +02002848 criterion. Note that "monitor fail" only works in HTTP mode. Both status
2849 messages may be tweaked using "errorfile" or "errorloc" if needed.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002850
2851 Example:
2852 frontend www
Willy Tarreau2769aa02007-12-27 18:26:09 +01002853 mode http
Willy Tarreau0ba27502007-12-24 16:55:16 +01002854 acl site_dead nbsrv(dynamic) lt 2
2855 acl site_dead nbsrv(static) lt 2
2856 monitor-uri /site_alive
2857 monitor fail if site_dead
2858
Willy Tarreauae94d4d2011-05-11 16:28:49 +02002859 See also : "monitor-net", "monitor-uri", "errorfile", "errorloc"
Willy Tarreau2769aa02007-12-27 18:26:09 +01002860
2861
2862monitor-net <source>
2863 Declare a source network which is limited to monitor requests
2864 May be used in sections : defaults | frontend | listen | backend
2865 yes | yes | yes | no
2866 Arguments :
2867 <source> is the source IPv4 address or network which will only be able to
2868 get monitor responses to any request. It can be either an IPv4
2869 address, a host name, or an address followed by a slash ('/')
2870 followed by a mask.
2871
2872 In TCP mode, any connection coming from a source matching <source> will cause
2873 the connection to be immediately closed without any log. This allows another
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002874 equipment to probe the port and verify that it is still listening, without
Willy Tarreau2769aa02007-12-27 18:26:09 +01002875 forwarding the connection to a remote server.
2876
2877 In HTTP mode, a connection coming from a source matching <source> will be
2878 accepted, the following response will be sent without waiting for a request,
2879 then the connection will be closed : "HTTP/1.0 200 OK". This is normally
2880 enough for any front-end HTTP probe to detect that the service is UP and
Willy Tarreau82569f92012-09-27 23:48:56 +02002881 running without forwarding the request to a backend server. Note that this
2882 response is sent in raw format, without any transformation. This is important
2883 as it means that it will not be SSL-encrypted on SSL listeners.
Willy Tarreau2769aa02007-12-27 18:26:09 +01002884
Willy Tarreau82569f92012-09-27 23:48:56 +02002885 Monitor requests are processed very early, just after tcp-request connection
2886 ACLs which are the only ones able to block them. These connections are short
2887 lived and never wait for any data from the client. They cannot be logged, and
2888 it is the intended purpose. They are only used to report HAProxy's health to
2889 an upper component, nothing more. Please note that "monitor fail" rules do
2890 not apply to connections intercepted by "monitor-net".
Willy Tarreau2769aa02007-12-27 18:26:09 +01002891
Willy Tarreau95cd2832010-03-04 23:36:33 +01002892 Last, please note that only one "monitor-net" statement can be specified in
2893 a frontend. If more than one is found, only the last one will be considered.
Cyril Bonté108cf6e2012-04-21 23:30:29 +02002894
Willy Tarreau2769aa02007-12-27 18:26:09 +01002895 Example :
2896 # addresses .252 and .253 are just probing us.
2897 frontend www
2898 monitor-net 192.168.0.252/31
2899
2900 See also : "monitor fail", "monitor-uri"
2901
2902
2903monitor-uri <uri>
2904 Intercept a URI used by external components' monitor requests
2905 May be used in sections : defaults | frontend | listen | backend
2906 yes | yes | yes | no
2907 Arguments :
2908 <uri> is the exact URI which we want to intercept to return HAProxy's
2909 health status instead of forwarding the request.
2910
2911 When an HTTP request referencing <uri> will be received on a frontend,
2912 HAProxy will not forward it nor log it, but instead will return either
2913 "HTTP/1.0 200 OK" or "HTTP/1.0 503 Service unavailable", depending on failure
2914 conditions defined with "monitor fail". This is normally enough for any
2915 front-end HTTP probe to detect that the service is UP and running without
2916 forwarding the request to a backend server. Note that the HTTP method, the
2917 version and all headers are ignored, but the request must at least be valid
2918 at the HTTP level. This keyword may only be used with an HTTP-mode frontend.
2919
2920 Monitor requests are processed very early. It is not possible to block nor
2921 divert them using ACLs. They cannot be logged either, and it is the intended
2922 purpose. They are only used to report HAProxy's health to an upper component,
2923 nothing more. However, it is possible to add any number of conditions using
2924 "monitor fail" and ACLs so that the result can be adjusted to whatever check
2925 can be imagined (most often the number of available servers in a backend).
2926
2927 Example :
2928 # Use /haproxy_test to report haproxy's status
2929 frontend www
2930 mode http
2931 monitor-uri /haproxy_test
2932
2933 See also : "monitor fail", "monitor-net"
2934
Willy Tarreau0ba27502007-12-24 16:55:16 +01002935
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002936option abortonclose
2937no option abortonclose
2938 Enable or disable early dropping of aborted requests pending in queues.
2939 May be used in sections : defaults | frontend | listen | backend
2940 yes | no | yes | yes
2941 Arguments : none
2942
2943 In presence of very high loads, the servers will take some time to respond.
2944 The per-instance connection queue will inflate, and the response time will
2945 increase respective to the size of the queue times the average per-session
2946 response time. When clients will wait for more than a few seconds, they will
Willy Tarreau198a7442008-01-17 12:05:32 +01002947 often hit the "STOP" button on their browser, leaving a useless request in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002948 the queue, and slowing down other users, and the servers as well, because the
2949 request will eventually be served, then aborted at the first error
2950 encountered while delivering the response.
2951
2952 As there is no way to distinguish between a full STOP and a simple output
2953 close on the client side, HTTP agents should be conservative and consider
2954 that the client might only have closed its output channel while waiting for
2955 the response. However, this introduces risks of congestion when lots of users
2956 do the same, and is completely useless nowadays because probably no client at
2957 all will close the session while waiting for the response. Some HTTP agents
Willy Tarreaud72758d2010-01-12 10:42:19 +01002958 support this behaviour (Squid, Apache, HAProxy), and others do not (TUX, most
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002959 hardware-based load balancers). So the probability for a closed input channel
Willy Tarreau198a7442008-01-17 12:05:32 +01002960 to represent a user hitting the "STOP" button is close to 100%, and the risk
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002961 of being the single component to break rare but valid traffic is extremely
2962 low, which adds to the temptation to be able to abort a session early while
2963 still not served and not pollute the servers.
2964
2965 In HAProxy, the user can choose the desired behaviour using the option
2966 "abortonclose". By default (without the option) the behaviour is HTTP
2967 compliant and aborted requests will be served. But when the option is
2968 specified, a session with an incoming channel closed will be aborted while
2969 it is still possible, either pending in the queue for a connection slot, or
2970 during the connection establishment if the server has not yet acknowledged
2971 the connection request. This considerably reduces the queue size and the load
2972 on saturated servers when users are tempted to click on STOP, which in turn
Willy Tarreaud72758d2010-01-12 10:42:19 +01002973 reduces the response time for other users.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01002974
2975 If this option has been enabled in a "defaults" section, it can be disabled
2976 in a specific instance by prepending the "no" keyword before it.
2977
2978 See also : "timeout queue" and server's "maxconn" and "maxqueue" parameters
2979
2980
Willy Tarreau4076a152009-04-02 15:18:36 +02002981option accept-invalid-http-request
2982no option accept-invalid-http-request
2983 Enable or disable relaxing of HTTP request parsing
2984 May be used in sections : defaults | frontend | listen | backend
2985 yes | yes | yes | no
2986 Arguments : none
2987
2988 By default, HAProxy complies with RFC2616 in terms of message parsing. This
2989 means that invalid characters in header names are not permitted and cause an
2990 error to be returned to the client. This is the desired behaviour as such
2991 forbidden characters are essentially used to build attacks exploiting server
2992 weaknesses, and bypass security filtering. Sometimes, a buggy browser or
2993 server will emit invalid header names for whatever reason (configuration,
2994 implementation) and the issue will not be immediately fixed. In such a case,
2995 it is possible to relax HAProxy's header name parser to accept any character
Willy Tarreau422246e2012-01-07 23:54:13 +01002996 even if that does not make sense, by specifying this option. Similarly, the
2997 list of characters allowed to appear in a URI is well defined by RFC3986, and
2998 chars 0-31, 32 (space), 34 ('"'), 60 ('<'), 62 ('>'), 92 ('\'), 94 ('^'), 96
2999 ('`'), 123 ('{'), 124 ('|'), 125 ('}'), 127 (delete) and anything above are
3000 not allowed at all. Haproxy always blocks a number of them (0..32, 127). The
3001 remaining ones are blocked by default unless this option is enabled.
Willy Tarreau4076a152009-04-02 15:18:36 +02003002
3003 This option should never be enabled by default as it hides application bugs
3004 and open security breaches. It should only be deployed after a problem has
3005 been confirmed.
3006
3007 When this option is enabled, erroneous header names will still be accepted in
3008 requests, but the complete request will be captured in order to permit later
Willy Tarreau422246e2012-01-07 23:54:13 +01003009 analysis using the "show errors" request on the UNIX stats socket. Similarly,
3010 requests containing invalid chars in the URI part will be logged. Doing this
Willy Tarreau4076a152009-04-02 15:18:36 +02003011 also helps confirming that the issue has been solved.
3012
3013 If this option has been enabled in a "defaults" section, it can be disabled
3014 in a specific instance by prepending the "no" keyword before it.
3015
3016 See also : "option accept-invalid-http-response" and "show errors" on the
3017 stats socket.
3018
3019
3020option accept-invalid-http-response
3021no option accept-invalid-http-response
3022 Enable or disable relaxing of HTTP response parsing
3023 May be used in sections : defaults | frontend | listen | backend
3024 yes | no | yes | yes
3025 Arguments : none
3026
3027 By default, HAProxy complies with RFC2616 in terms of message parsing. This
3028 means that invalid characters in header names are not permitted and cause an
3029 error to be returned to the client. This is the desired behaviour as such
3030 forbidden characters are essentially used to build attacks exploiting server
3031 weaknesses, and bypass security filtering. Sometimes, a buggy browser or
3032 server will emit invalid header names for whatever reason (configuration,
3033 implementation) and the issue will not be immediately fixed. In such a case,
3034 it is possible to relax HAProxy's header name parser to accept any character
3035 even if that does not make sense, by specifying this option.
3036
3037 This option should never be enabled by default as it hides application bugs
3038 and open security breaches. It should only be deployed after a problem has
3039 been confirmed.
3040
3041 When this option is enabled, erroneous header names will still be accepted in
3042 responses, but the complete response will be captured in order to permit
3043 later analysis using the "show errors" request on the UNIX stats socket.
3044 Doing this also helps confirming that the issue has been solved.
3045
3046 If this option has been enabled in a "defaults" section, it can be disabled
3047 in a specific instance by prepending the "no" keyword before it.
3048
3049 See also : "option accept-invalid-http-request" and "show errors" on the
3050 stats socket.
3051
3052
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003053option allbackups
3054no option allbackups
3055 Use either all backup servers at a time or only the first one
3056 May be used in sections : defaults | frontend | listen | backend
3057 yes | no | yes | yes
3058 Arguments : none
3059
3060 By default, the first operational backup server gets all traffic when normal
3061 servers are all down. Sometimes, it may be preferred to use multiple backups
3062 at once, because one will not be enough. When "option allbackups" is enabled,
3063 the load balancing will be performed among all backup servers when all normal
3064 ones are unavailable. The same load balancing algorithm will be used and the
3065 servers' weights will be respected. Thus, there will not be any priority
3066 order between the backup servers anymore.
3067
3068 This option is mostly used with static server farms dedicated to return a
3069 "sorry" page when an application is completely offline.
3070
3071 If this option has been enabled in a "defaults" section, it can be disabled
3072 in a specific instance by prepending the "no" keyword before it.
3073
3074
3075option checkcache
3076no option checkcache
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003077 Analyze all server responses and block requests with cacheable cookies
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003078 May be used in sections : defaults | frontend | listen | backend
3079 yes | no | yes | yes
3080 Arguments : none
3081
3082 Some high-level frameworks set application cookies everywhere and do not
3083 always let enough control to the developer to manage how the responses should
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003084 be cached. When a session cookie is returned on a cacheable object, there is a
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003085 high risk of session crossing or stealing between users traversing the same
3086 caches. In some situations, it is better to block the response than to let
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02003087 some sensitive session information go in the wild.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003088
3089 The option "checkcache" enables deep inspection of all server responses for
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003090 strict compliance with HTTP specification in terms of cacheability. It
Willy Tarreau198a7442008-01-17 12:05:32 +01003091 carefully checks "Cache-control", "Pragma" and "Set-cookie" headers in server
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003092 response to check if there's a risk of caching a cookie on a client-side
3093 proxy. When this option is enabled, the only responses which can be delivered
Willy Tarreau198a7442008-01-17 12:05:32 +01003094 to the client are :
3095 - all those without "Set-Cookie" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003096 - all those with a return code other than 200, 203, 206, 300, 301, 410,
Willy Tarreau198a7442008-01-17 12:05:32 +01003097 provided that the server has not set a "Cache-control: public" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003098 - all those that come from a POST request, provided that the server has not
3099 set a 'Cache-Control: public' header ;
3100 - those with a 'Pragma: no-cache' header
3101 - those with a 'Cache-control: private' header
3102 - those with a 'Cache-control: no-store' header
3103 - those with a 'Cache-control: max-age=0' header
3104 - those with a 'Cache-control: s-maxage=0' header
3105 - those with a 'Cache-control: no-cache' header
3106 - those with a 'Cache-control: no-cache="set-cookie"' header
3107 - those with a 'Cache-control: no-cache="set-cookie,' header
3108 (allowing other fields after set-cookie)
3109
3110 If a response doesn't respect these requirements, then it will be blocked
Willy Tarreau198a7442008-01-17 12:05:32 +01003111 just as if it was from an "rspdeny" filter, with an "HTTP 502 bad gateway".
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003112 The session state shows "PH--" meaning that the proxy blocked the response
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003113 during headers processing. Additionally, an alert will be sent in the logs so
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003114 that admins are informed that there's something to be fixed.
3115
3116 Due to the high impact on the application, the application should be tested
3117 in depth with the option enabled before going to production. It is also a
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003118 good practice to always activate it during tests, even if it is not used in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003119 production, as it will report potentially dangerous application behaviours.
3120
3121 If this option has been enabled in a "defaults" section, it can be disabled
3122 in a specific instance by prepending the "no" keyword before it.
3123
3124
3125option clitcpka
3126no option clitcpka
3127 Enable or disable the sending of TCP keepalive packets on the client side
3128 May be used in sections : defaults | frontend | listen | backend
3129 yes | yes | yes | no
3130 Arguments : none
3131
3132 When there is a firewall or any session-aware component between a client and
3133 a server, and when the protocol involves very long sessions with long idle
3134 periods (eg: remote desktops), there is a risk that one of the intermediate
3135 components decides to expire a session which has remained idle for too long.
3136
3137 Enabling socket-level TCP keep-alives makes the system regularly send packets
3138 to the other end of the connection, leaving it active. The delay between
3139 keep-alive probes is controlled by the system only and depends both on the
3140 operating system and its tuning parameters.
3141
3142 It is important to understand that keep-alive packets are neither emitted nor
3143 received at the application level. It is only the network stacks which sees
3144 them. For this reason, even if one side of the proxy already uses keep-alives
3145 to maintain its connection alive, those keep-alive packets will not be
3146 forwarded to the other side of the proxy.
3147
3148 Please note that this has nothing to do with HTTP keep-alive.
3149
3150 Using option "clitcpka" enables the emission of TCP keep-alive probes on the
3151 client side of a connection, which should help when session expirations are
3152 noticed between HAProxy and a client.
3153
3154 If this option has been enabled in a "defaults" section, it can be disabled
3155 in a specific instance by prepending the "no" keyword before it.
3156
3157 See also : "option srvtcpka", "option tcpka"
3158
3159
Willy Tarreau0ba27502007-12-24 16:55:16 +01003160option contstats
3161 Enable continuous traffic statistics updates
3162 May be used in sections : defaults | frontend | listen | backend
3163 yes | yes | yes | no
3164 Arguments : none
3165
3166 By default, counters used for statistics calculation are incremented
3167 only when a session finishes. It works quite well when serving small
3168 objects, but with big ones (for example large images or archives) or
3169 with A/V streaming, a graph generated from haproxy counters looks like
3170 a hedgehog. With this option enabled counters get incremented continuously,
3171 during a whole session. Recounting touches a hotpath directly so
3172 it is not enabled by default, as it has small performance impact (~0.5%).
3173
3174
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02003175option dontlog-normal
3176no option dontlog-normal
3177 Enable or disable logging of normal, successful connections
3178 May be used in sections : defaults | frontend | listen | backend
3179 yes | yes | yes | no
3180 Arguments : none
3181
3182 There are large sites dealing with several thousand connections per second
3183 and for which logging is a major pain. Some of them are even forced to turn
3184 logs off and cannot debug production issues. Setting this option ensures that
3185 normal connections, those which experience no error, no timeout, no retry nor
3186 redispatch, will not be logged. This leaves disk space for anomalies. In HTTP
3187 mode, the response status code is checked and return codes 5xx will still be
3188 logged.
3189
3190 It is strongly discouraged to use this option as most of the time, the key to
3191 complex issues is in the normal logs which will not be logged here. If you
3192 need to separate logs, see the "log-separate-errors" option instead.
3193
Willy Tarreauc57f0e22009-05-10 13:12:33 +02003194 See also : "log", "dontlognull", "log-separate-errors" and section 8 about
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02003195 logging.
3196
3197
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003198option dontlognull
3199no option dontlognull
3200 Enable or disable logging of null connections
3201 May be used in sections : defaults | frontend | listen | backend
3202 yes | yes | yes | no
3203 Arguments : none
3204
3205 In certain environments, there are components which will regularly connect to
3206 various systems to ensure that they are still alive. It can be the case from
3207 another load balancer as well as from monitoring systems. By default, even a
3208 simple port probe or scan will produce a log. If those connections pollute
3209 the logs too much, it is possible to enable option "dontlognull" to indicate
3210 that a connection on which no data has been transferred will not be logged,
3211 which typically corresponds to those probes.
3212
3213 It is generally recommended not to use this option in uncontrolled
3214 environments (eg: internet), otherwise scans and other malicious activities
3215 would not be logged.
3216
3217 If this option has been enabled in a "defaults" section, it can be disabled
3218 in a specific instance by prepending the "no" keyword before it.
3219
Willy Tarreauc57f0e22009-05-10 13:12:33 +02003220 See also : "log", "monitor-net", "monitor-uri" and section 8 about logging.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003221
3222
3223option forceclose
3224no option forceclose
3225 Enable or disable active connection closing after response is transferred.
3226 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaua31e5df2009-12-30 01:10:35 +01003227 yes | yes | yes | yes
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003228 Arguments : none
3229
3230 Some HTTP servers do not necessarily close the connections when they receive
3231 the "Connection: close" set by "option httpclose", and if the client does not
3232 close either, then the connection remains open till the timeout expires. This
3233 causes high number of simultaneous connections on the servers and shows high
3234 global session times in the logs.
3235
3236 When this happens, it is possible to use "option forceclose". It will
Willy Tarreau82eeaf22009-12-29 12:09:05 +01003237 actively close the outgoing server channel as soon as the server has finished
Willy Tarreau0dfdf192010-01-05 11:33:11 +01003238 to respond. This option implicitly enables the "httpclose" option. Note that
3239 this option also enables the parsing of the full request and response, which
3240 means we can close the connection to the server very quickly, releasing some
3241 resources earlier than with httpclose.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003242
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02003243 This option may also be combined with "option http-pretend-keepalive", which
3244 will disable sending of the "Connection: close" header, but will still cause
3245 the connection to be closed once the whole response is received.
3246
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003247 If this option has been enabled in a "defaults" section, it can be disabled
3248 in a specific instance by prepending the "no" keyword before it.
3249
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02003250 See also : "option httpclose" and "option http-pretend-keepalive"
Willy Tarreaubf1f8162007-12-28 17:42:56 +01003251
3252
Willy Tarreau87cf5142011-08-19 22:57:24 +02003253option forwardfor [ except <network> ] [ header <name> ] [ if-none ]
Willy Tarreauc27debf2008-01-06 08:57:02 +01003254 Enable insertion of the X-Forwarded-For header to requests sent to servers
3255 May be used in sections : defaults | frontend | listen | backend
3256 yes | yes | yes | yes
3257 Arguments :
3258 <network> is an optional argument used to disable this option for sources
3259 matching <network>
Ross Westaf72a1d2008-08-03 10:51:45 +02003260 <name> an optional argument to specify a different "X-Forwarded-For"
Willy Tarreaud72758d2010-01-12 10:42:19 +01003261 header name.
Willy Tarreauc27debf2008-01-06 08:57:02 +01003262
3263 Since HAProxy works in reverse-proxy mode, the servers see its IP address as
3264 their client address. This is sometimes annoying when the client's IP address
3265 is expected in server logs. To solve this problem, the well-known HTTP header
3266 "X-Forwarded-For" may be added by HAProxy to all requests sent to the server.
3267 This header contains a value representing the client's IP address. Since this
3268 header is always appended at the end of the existing header list, the server
3269 must be configured to always use the last occurrence of this header only. See
Ross Westaf72a1d2008-08-03 10:51:45 +02003270 the server's manual to find how to enable use of this standard header. Note
3271 that only the last occurrence of the header must be used, since it is really
3272 possible that the client has already brought one.
3273
Willy Tarreaud72758d2010-01-12 10:42:19 +01003274 The keyword "header" may be used to supply a different header name to replace
Ross Westaf72a1d2008-08-03 10:51:45 +02003275 the default "X-Forwarded-For". This can be useful where you might already
Willy Tarreaud72758d2010-01-12 10:42:19 +01003276 have a "X-Forwarded-For" header from a different application (eg: stunnel),
3277 and you need preserve it. Also if your backend server doesn't use the
Ross Westaf72a1d2008-08-03 10:51:45 +02003278 "X-Forwarded-For" header and requires different one (eg: Zeus Web Servers
3279 require "X-Cluster-Client-IP").
Willy Tarreauc27debf2008-01-06 08:57:02 +01003280
3281 Sometimes, a same HAProxy instance may be shared between a direct client
3282 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
3283 used to decrypt HTTPS traffic). It is possible to disable the addition of the
3284 header for a known source address or network by adding the "except" keyword
3285 followed by the network address. In this case, any source IP matching the
3286 network will not cause an addition of this header. Most common uses are with
3287 private networks or 127.0.0.1.
3288
Willy Tarreau87cf5142011-08-19 22:57:24 +02003289 Alternatively, the keyword "if-none" states that the header will only be
3290 added if it is not present. This should only be used in perfectly trusted
3291 environment, as this might cause a security issue if headers reaching haproxy
3292 are under the control of the end-user.
3293
Willy Tarreauc27debf2008-01-06 08:57:02 +01003294 This option may be specified either in the frontend or in the backend. If at
Ross Westaf72a1d2008-08-03 10:51:45 +02003295 least one of them uses it, the header will be added. Note that the backend's
3296 setting of the header subargument takes precedence over the frontend's if
Willy Tarreau87cf5142011-08-19 22:57:24 +02003297 both are defined. In the case of the "if-none" argument, if at least one of
3298 the frontend or the backend does not specify it, it wants the addition to be
3299 mandatory, so it wins.
Willy Tarreauc27debf2008-01-06 08:57:02 +01003300
Willy Tarreau87cf5142011-08-19 22:57:24 +02003301 It is important to note that by default, HAProxy works in tunnel mode and
3302 only inspects the first request of a connection, meaning that only the first
3303 request will have the header appended, which is certainly not what you want.
3304 In order to fix this, ensure that any of the "httpclose", "forceclose" or
3305 "http-server-close" options is set when using this option.
Willy Tarreauc27debf2008-01-06 08:57:02 +01003306
Ross Westaf72a1d2008-08-03 10:51:45 +02003307 Examples :
Willy Tarreauc27debf2008-01-06 08:57:02 +01003308 # Public HTTP address also used by stunnel on the same machine
3309 frontend www
3310 mode http
3311 option forwardfor except 127.0.0.1 # stunnel already adds the header
3312
Ross Westaf72a1d2008-08-03 10:51:45 +02003313 # Those servers want the IP Address in X-Client
3314 backend www
3315 mode http
3316 option forwardfor header X-Client
3317
Willy Tarreau87cf5142011-08-19 22:57:24 +02003318 See also : "option httpclose", "option http-server-close",
3319 "option forceclose"
Willy Tarreauc27debf2008-01-06 08:57:02 +01003320
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02003321
Willy Tarreau96e31212011-05-30 18:10:30 +02003322option http-no-delay
3323no option http-no-delay
3324 Instruct the system to favor low interactive delays over performance in HTTP
3325 May be used in sections : defaults | frontend | listen | backend
3326 yes | yes | yes | yes
3327 Arguments : none
3328
3329 In HTTP, each payload is unidirectional and has no notion of interactivity.
3330 Any agent is expected to queue data somewhat for a reasonably low delay.
3331 There are some very rare server-to-server applications that abuse the HTTP
3332 protocol and expect the payload phase to be highly interactive, with many
3333 interleaved data chunks in both directions within a single request. This is
3334 absolutely not supported by the HTTP specification and will not work across
3335 most proxies or servers. When such applications attempt to do this through
3336 haproxy, it works but they will experience high delays due to the network
3337 optimizations which favor performance by instructing the system to wait for
3338 enough data to be available in order to only send full packets. Typical
3339 delays are around 200 ms per round trip. Note that this only happens with
3340 abnormal uses. Normal uses such as CONNECT requests nor WebSockets are not
3341 affected.
3342
3343 When "option http-no-delay" is present in either the frontend or the backend
3344 used by a connection, all such optimizations will be disabled in order to
3345 make the exchanges as fast as possible. Of course this offers no guarantee on
3346 the functionality, as it may break at any other place. But if it works via
3347 HAProxy, it will work as fast as possible. This option should never be used
3348 by default, and should never be used at all unless such a buggy application
3349 is discovered. The impact of using this option is an increase of bandwidth
3350 usage and CPU usage, which may significantly lower performance in high
3351 latency environments.
3352
3353
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02003354option http-pretend-keepalive
3355no option http-pretend-keepalive
3356 Define whether haproxy will announce keepalive to the server or not
3357 May be used in sections : defaults | frontend | listen | backend
3358 yes | yes | yes | yes
3359 Arguments : none
3360
3361 When running with "option http-server-close" or "option forceclose", haproxy
3362 adds a "Connection: close" header to the request forwarded to the server.
3363 Unfortunately, when some servers see this header, they automatically refrain
3364 from using the chunked encoding for responses of unknown length, while this
3365 is totally unrelated. The immediate effect is that this prevents haproxy from
3366 maintaining the client connection alive. A second effect is that a client or
3367 a cache could receive an incomplete response without being aware of it, and
3368 consider the response complete.
3369
3370 By setting "option http-pretend-keepalive", haproxy will make the server
3371 believe it will keep the connection alive. The server will then not fall back
3372 to the abnormal undesired above. When haproxy gets the whole response, it
3373 will close the connection with the server just as it would do with the
3374 "forceclose" option. That way the client gets a normal response and the
3375 connection is correctly closed on the server side.
3376
3377 It is recommended not to enable this option by default, because most servers
3378 will more efficiently close the connection themselves after the last packet,
3379 and release its buffers slightly earlier. Also, the added packet on the
3380 network could slightly reduce the overall peak performance. However it is
3381 worth noting that when this option is enabled, haproxy will have slightly
3382 less work to do. So if haproxy is the bottleneck on the whole architecture,
3383 enabling this option might save a few CPU cycles.
3384
3385 This option may be set both in a frontend and in a backend. It is enabled if
3386 at least one of the frontend or backend holding a connection has it enabled.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003387 This option may be combined with "option httpclose", which will cause
Willy Tarreau22a95342010-09-29 14:31:41 +02003388 keepalive to be announced to the server and close to be announced to the
3389 client. This practice is discouraged though.
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02003390
3391 If this option has been enabled in a "defaults" section, it can be disabled
3392 in a specific instance by prepending the "no" keyword before it.
3393
3394 See also : "option forceclose" and "option http-server-close"
3395
Willy Tarreauc27debf2008-01-06 08:57:02 +01003396
Willy Tarreaub608feb2010-01-02 22:47:18 +01003397option http-server-close
3398no option http-server-close
3399 Enable or disable HTTP connection closing on the server side
3400 May be used in sections : defaults | frontend | listen | backend
3401 yes | yes | yes | yes
3402 Arguments : none
3403
Patrick Mezard9ec2ec42010-06-12 17:02:45 +02003404 By default, when a client communicates with a server, HAProxy will only
3405 analyze, log, and process the first request of each connection. Setting
3406 "option http-server-close" enables HTTP connection-close mode on the server
3407 side while keeping the ability to support HTTP keep-alive and pipelining on
3408 the client side. This provides the lowest latency on the client side (slow
3409 network) and the fastest session reuse on the server side to save server
3410 resources, similarly to "option forceclose". It also permits non-keepalive
3411 capable servers to be served in keep-alive mode to the clients if they
3412 conform to the requirements of RFC2616. Please note that some servers do not
3413 always conform to those requirements when they see "Connection: close" in the
3414 request. The effect will be that keep-alive will never be used. A workaround
3415 consists in enabling "option http-pretend-keepalive".
Willy Tarreaub608feb2010-01-02 22:47:18 +01003416
3417 At the moment, logs will not indicate whether requests came from the same
3418 session or not. The accept date reported in the logs corresponds to the end
3419 of the previous request, and the request time corresponds to the time spent
3420 waiting for a new request. The keep-alive request time is still bound to the
Willy Tarreaub16a5742010-01-10 14:46:16 +01003421 timeout defined by "timeout http-keep-alive" or "timeout http-request" if
3422 not set.
Willy Tarreaub608feb2010-01-02 22:47:18 +01003423
3424 This option may be set both in a frontend and in a backend. It is enabled if
3425 at least one of the frontend or backend holding a connection has it enabled.
Willy Tarreau0dfdf192010-01-05 11:33:11 +01003426 It is worth noting that "option forceclose" has precedence over "option
3427 http-server-close" and that combining "http-server-close" with "httpclose"
3428 basically achieve the same result as "forceclose".
Willy Tarreaub608feb2010-01-02 22:47:18 +01003429
3430 If this option has been enabled in a "defaults" section, it can be disabled
3431 in a specific instance by prepending the "no" keyword before it.
3432
Patrick Mezard9ec2ec42010-06-12 17:02:45 +02003433 See also : "option forceclose", "option http-pretend-keepalive",
3434 "option httpclose" and "1.1. The HTTP transaction model".
Willy Tarreaub608feb2010-01-02 22:47:18 +01003435
3436
Willy Tarreau88d349d2010-01-25 12:15:43 +01003437option http-use-proxy-header
Cyril Bontéf0c60612010-02-06 14:44:47 +01003438no option http-use-proxy-header
Willy Tarreau88d349d2010-01-25 12:15:43 +01003439 Make use of non-standard Proxy-Connection header instead of Connection
3440 May be used in sections : defaults | frontend | listen | backend
3441 yes | yes | yes | no
3442 Arguments : none
3443
3444 While RFC2616 explicitly states that HTTP/1.1 agents must use the
3445 Connection header to indicate their wish of persistent or non-persistent
3446 connections, both browsers and proxies ignore this header for proxied
3447 connections and make use of the undocumented, non-standard Proxy-Connection
3448 header instead. The issue begins when trying to put a load balancer between
3449 browsers and such proxies, because there will be a difference between what
3450 haproxy understands and what the client and the proxy agree on.
3451
3452 By setting this option in a frontend, haproxy can automatically switch to use
3453 that non-standard header if it sees proxied requests. A proxied request is
3454 defined here as one where the URI begins with neither a '/' nor a '*'. The
3455 choice of header only affects requests passing through proxies making use of
3456 one of the "httpclose", "forceclose" and "http-server-close" options. Note
3457 that this option can only be specified in a frontend and will affect the
3458 request along its whole life.
3459
Willy Tarreau844a7e72010-01-31 21:46:18 +01003460 Also, when this option is set, a request which requires authentication will
3461 automatically switch to use proxy authentication headers if it is itself a
3462 proxied request. That makes it possible to check or enforce authentication in
3463 front of an existing proxy.
3464
Willy Tarreau88d349d2010-01-25 12:15:43 +01003465 This option should normally never be used, except in front of a proxy.
3466
3467 See also : "option httpclose", "option forceclose" and "option
3468 http-server-close".
3469
3470
Willy Tarreaud63335a2010-02-26 12:56:52 +01003471option httpchk
3472option httpchk <uri>
3473option httpchk <method> <uri>
3474option httpchk <method> <uri> <version>
3475 Enable HTTP protocol to check on the servers health
3476 May be used in sections : defaults | frontend | listen | backend
3477 yes | no | yes | yes
3478 Arguments :
3479 <method> is the optional HTTP method used with the requests. When not set,
3480 the "OPTIONS" method is used, as it generally requires low server
3481 processing and is easy to filter out from the logs. Any method
3482 may be used, though it is not recommended to invent non-standard
3483 ones.
3484
3485 <uri> is the URI referenced in the HTTP requests. It defaults to " / "
3486 which is accessible by default on almost any server, but may be
3487 changed to any other URI. Query strings are permitted.
3488
3489 <version> is the optional HTTP version string. It defaults to "HTTP/1.0"
3490 but some servers might behave incorrectly in HTTP 1.0, so turning
3491 it to HTTP/1.1 may sometimes help. Note that the Host field is
3492 mandatory in HTTP/1.1, and as a trick, it is possible to pass it
3493 after "\r\n" following the version string.
3494
3495 By default, server health checks only consist in trying to establish a TCP
3496 connection. When "option httpchk" is specified, a complete HTTP request is
3497 sent once the TCP connection is established, and responses 2xx and 3xx are
3498 considered valid, while all other ones indicate a server failure, including
3499 the lack of any response.
3500
3501 The port and interval are specified in the server configuration.
3502
3503 This option does not necessarily require an HTTP backend, it also works with
3504 plain TCP backends. This is particularly useful to check simple scripts bound
3505 to some dedicated ports using the inetd daemon.
3506
3507 Examples :
3508 # Relay HTTPS traffic to Apache instance and check service availability
3509 # using HTTP request "OPTIONS * HTTP/1.1" on port 80.
3510 backend https_relay
3511 mode tcp
3512 option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
3513 server apache1 192.168.1.1:443 check port 80
3514
3515 See also : "option ssl-hello-chk", "option smtpchk", "option mysql-check",
Rauf Kuliyev38b41562011-01-04 15:14:13 +01003516 "option pgsql-check", "http-check" and the "check", "port" and
3517 "inter" server options.
Willy Tarreaud63335a2010-02-26 12:56:52 +01003518
3519
Willy Tarreauc27debf2008-01-06 08:57:02 +01003520option httpclose
3521no option httpclose
3522 Enable or disable passive HTTP connection closing
3523 May be used in sections : defaults | frontend | listen | backend
3524 yes | yes | yes | yes
3525 Arguments : none
3526
Patrick Mezard9ec2ec42010-06-12 17:02:45 +02003527 By default, when a client communicates with a server, HAProxy will only
3528 analyze, log, and process the first request of each connection. If "option
3529 httpclose" is set, it will check if a "Connection: close" header is already
3530 set in each direction, and will add one if missing. Each end should react to
3531 this by actively closing the TCP connection after each transfer, thus
3532 resulting in a switch to the HTTP close mode. Any "Connection" header
3533 different from "close" will also be removed.
Willy Tarreauc27debf2008-01-06 08:57:02 +01003534
3535 It seldom happens that some servers incorrectly ignore this header and do not
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003536 close the connection even though they reply "Connection: close". For this
Willy Tarreau0dfdf192010-01-05 11:33:11 +01003537 reason, they are not compatible with older HTTP 1.0 browsers. If this happens
3538 it is possible to use the "option forceclose" which actively closes the
3539 request connection once the server responds. Option "forceclose" also
3540 releases the server connection earlier because it does not have to wait for
3541 the client to acknowledge it.
Willy Tarreauc27debf2008-01-06 08:57:02 +01003542
3543 This option may be set both in a frontend and in a backend. It is enabled if
3544 at least one of the frontend or backend holding a connection has it enabled.
3545 If "option forceclose" is specified too, it has precedence over "httpclose".
Willy Tarreau0dfdf192010-01-05 11:33:11 +01003546 If "option http-server-close" is enabled at the same time as "httpclose", it
3547 basically achieves the same result as "option forceclose".
Willy Tarreauc27debf2008-01-06 08:57:02 +01003548
3549 If this option has been enabled in a "defaults" section, it can be disabled
3550 in a specific instance by prepending the "no" keyword before it.
3551
Patrick Mezard9ec2ec42010-06-12 17:02:45 +02003552 See also : "option forceclose", "option http-server-close" and
3553 "1.1. The HTTP transaction model".
Willy Tarreauc27debf2008-01-06 08:57:02 +01003554
3555
Emeric Brun3a058f32009-06-30 18:26:00 +02003556option httplog [ clf ]
Willy Tarreauc27debf2008-01-06 08:57:02 +01003557 Enable logging of HTTP request, session state and timers
3558 May be used in sections : defaults | frontend | listen | backend
3559 yes | yes | yes | yes
Emeric Brun3a058f32009-06-30 18:26:00 +02003560 Arguments :
3561 clf if the "clf" argument is added, then the output format will be
3562 the CLF format instead of HAProxy's default HTTP format. You can
3563 use this when you need to feed HAProxy's logs through a specific
3564 log analyser which only support the CLF format and which is not
3565 extensible.
Willy Tarreauc27debf2008-01-06 08:57:02 +01003566
3567 By default, the log output format is very poor, as it only contains the
3568 source and destination addresses, and the instance name. By specifying
3569 "option httplog", each log line turns into a much richer format including,
3570 but not limited to, the HTTP request, the connection timers, the session
3571 status, the connections numbers, the captured headers and cookies, the
3572 frontend, backend and server name, and of course the source address and
3573 ports.
3574
3575 This option may be set either in the frontend or the backend.
3576
Emeric Brun3a058f32009-06-30 18:26:00 +02003577 If this option has been enabled in a "defaults" section, it can be disabled
3578 in a specific instance by prepending the "no" keyword before it. Specifying
3579 only "option httplog" will automatically clear the 'clf' mode if it was set
3580 by default.
3581
Willy Tarreauc57f0e22009-05-10 13:12:33 +02003582 See also : section 8 about logging.
Willy Tarreauc27debf2008-01-06 08:57:02 +01003583
Willy Tarreau55165fe2009-05-10 12:02:55 +02003584
3585option http_proxy
3586no option http_proxy
3587 Enable or disable plain HTTP proxy mode
3588 May be used in sections : defaults | frontend | listen | backend
3589 yes | yes | yes | yes
3590 Arguments : none
3591
3592 It sometimes happens that people need a pure HTTP proxy which understands
3593 basic proxy requests without caching nor any fancy feature. In this case,
3594 it may be worth setting up an HAProxy instance with the "option http_proxy"
3595 set. In this mode, no server is declared, and the connection is forwarded to
3596 the IP address and port found in the URL after the "http://" scheme.
3597
3598 No host address resolution is performed, so this only works when pure IP
3599 addresses are passed. Since this option's usage perimeter is rather limited,
3600 it will probably be used only by experts who know they need exactly it. Last,
3601 if the clients are susceptible of sending keep-alive requests, it will be
Cyril Bonté2409e682010-12-14 22:47:51 +01003602 needed to add "option httpclose" to ensure that all requests will correctly
Willy Tarreau55165fe2009-05-10 12:02:55 +02003603 be analyzed.
3604
3605 If this option has been enabled in a "defaults" section, it can be disabled
3606 in a specific instance by prepending the "no" keyword before it.
3607
3608 Example :
3609 # this backend understands HTTP proxy requests and forwards them directly.
3610 backend direct_forward
3611 option httpclose
3612 option http_proxy
3613
3614 See also : "option httpclose"
3615
Willy Tarreau211ad242009-10-03 21:45:07 +02003616
Jamie Gloudon801a0a32012-08-25 00:18:33 -04003617option independent-streams
3618no option independent-streams
3619 Enable or disable independent timeout processing for both directions
Willy Tarreauf27b5ea2009-10-03 22:01:18 +02003620 May be used in sections : defaults | frontend | listen | backend
3621 yes | yes | yes | yes
3622 Arguments : none
3623
3624 By default, when data is sent over a socket, both the write timeout and the
3625 read timeout for that socket are refreshed, because we consider that there is
3626 activity on that socket, and we have no other means of guessing if we should
3627 receive data or not.
3628
3629 While this default behaviour is desirable for almost all applications, there
3630 exists a situation where it is desirable to disable it, and only refresh the
3631 read timeout if there are incoming data. This happens on sessions with large
3632 timeouts and low amounts of exchanged data such as telnet session. If the
3633 server suddenly disappears, the output data accumulates in the system's
3634 socket buffers, both timeouts are correctly refreshed, and there is no way
3635 to know the server does not receive them, so we don't timeout. However, when
3636 the underlying protocol always echoes sent data, it would be enough by itself
3637 to detect the issue using the read timeout. Note that this problem does not
3638 happen with more verbose protocols because data won't accumulate long in the
3639 socket buffers.
3640
3641 When this option is set on the frontend, it will disable read timeout updates
3642 on data sent to the client. There probably is little use of this case. When
3643 the option is set on the backend, it will disable read timeout updates on
3644 data sent to the server. Doing so will typically break large HTTP posts from
3645 slow lines, so use it with caution.
3646
Jamie Gloudon801a0a32012-08-25 00:18:33 -04003647 Note: older versions used to call this setting "option independant-streams"
3648 with a spelling mistake. This spelling is still supported but
3649 deprecated.
3650
Willy Tarreauce887fd2012-05-12 12:50:00 +02003651 See also : "timeout client", "timeout server" and "timeout tunnel"
Willy Tarreauf27b5ea2009-10-03 22:01:18 +02003652
3653
Gabor Lekenyb4c81e42010-09-29 18:17:05 +02003654option ldap-check
3655 Use LDAPv3 health checks for server testing
3656 May be used in sections : defaults | frontend | listen | backend
3657 yes | no | yes | yes
3658 Arguments : none
3659
3660 It is possible to test that the server correctly talks LDAPv3 instead of just
3661 testing that it accepts the TCP connection. When this option is set, an
3662 LDAPv3 anonymous simple bind message is sent to the server, and the response
3663 is analyzed to find an LDAPv3 bind response message.
3664
3665 The server is considered valid only when the LDAP response contains success
3666 resultCode (http://tools.ietf.org/html/rfc4511#section-4.1.9).
3667
3668 Logging of bind requests is server dependent see your documentation how to
3669 configure it.
3670
3671 Example :
3672 option ldap-check
3673
3674 See also : "option httpchk"
3675
3676
Willy Tarreau211ad242009-10-03 21:45:07 +02003677option log-health-checks
3678no option log-health-checks
3679 Enable or disable logging of health checks
3680 May be used in sections : defaults | frontend | listen | backend
3681 yes | no | yes | yes
3682 Arguments : none
3683
3684 Enable health checks logging so it possible to check for example what
3685 was happening before a server crash. Failed health check are logged if
3686 server is UP and succeeded health checks if server is DOWN, so the amount
3687 of additional information is limited.
3688
3689 If health check logging is enabled no health check status is printed
3690 when servers is set up UP/DOWN/ENABLED/DISABLED.
3691
3692 See also: "log" and section 8 about logging.
3693
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02003694
3695option log-separate-errors
3696no option log-separate-errors
3697 Change log level for non-completely successful connections
3698 May be used in sections : defaults | frontend | listen | backend
3699 yes | yes | yes | no
3700 Arguments : none
3701
3702 Sometimes looking for errors in logs is not easy. This option makes haproxy
3703 raise the level of logs containing potentially interesting information such
3704 as errors, timeouts, retries, redispatches, or HTTP status codes 5xx. The
3705 level changes from "info" to "err". This makes it possible to log them
3706 separately to a different file with most syslog daemons. Be careful not to
3707 remove them from the original file, otherwise you would lose ordering which
3708 provides very important information.
3709
3710 Using this option, large sites dealing with several thousand connections per
3711 second may log normal traffic to a rotating buffer and only archive smaller
3712 error logs.
3713
Willy Tarreauc57f0e22009-05-10 13:12:33 +02003714 See also : "log", "dontlognull", "dontlog-normal" and section 8 about
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02003715 logging.
3716
Willy Tarreauc27debf2008-01-06 08:57:02 +01003717
3718option logasap
3719no option logasap
3720 Enable or disable early logging of HTTP requests
3721 May be used in sections : defaults | frontend | listen | backend
3722 yes | yes | yes | no
3723 Arguments : none
3724
3725 By default, HTTP requests are logged upon termination so that the total
3726 transfer time and the number of bytes appear in the logs. When large objects
3727 are being transferred, it may take a while before the request appears in the
3728 logs. Using "option logasap", the request gets logged as soon as the server
3729 sends the complete headers. The only missing information in the logs will be
3730 the total number of bytes which will indicate everything except the amount
3731 of data transferred, and the total time which will not take the transfer
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003732 time into account. In such a situation, it's a good practice to capture the
Willy Tarreauc27debf2008-01-06 08:57:02 +01003733 "Content-Length" response header so that the logs at least indicate how many
3734 bytes are expected to be transferred.
3735
Willy Tarreaucc6c8912009-02-22 10:53:55 +01003736 Examples :
3737 listen http_proxy 0.0.0.0:80
3738 mode http
3739 option httplog
3740 option logasap
3741 log 192.168.2.200 local3
3742
3743 >>> Feb 6 12:14:14 localhost \
3744 haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
3745 static/srv1 9/10/7/14/+30 200 +243 - - ---- 3/1/1/1/0 1/0 \
3746 "GET /image.iso HTTP/1.0"
3747
Willy Tarreauc57f0e22009-05-10 13:12:33 +02003748 See also : "option httplog", "capture response header", and section 8 about
Willy Tarreauc27debf2008-01-06 08:57:02 +01003749 logging.
3750
3751
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02003752option mysql-check [ user <username> ]
3753 Use MySQL health checks for server testing
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01003754 May be used in sections : defaults | frontend | listen | backend
3755 yes | no | yes | yes
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02003756 Arguments :
Cyril Bonté108cf6e2012-04-21 23:30:29 +02003757 <username> This is the username which will be used when connecting to MySQL
3758 server.
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02003759
3760 If you specify a username, the check consists of sending two MySQL packet,
3761 one Client Authentication packet, and one QUIT packet, to correctly close
3762 MySQL session. We then parse the MySQL Handshake Initialisation packet and/or
3763 Error packet. It is a basic but useful test which does not produce error nor
3764 aborted connect on the server. However, it requires adding an authorization
3765 in the MySQL table, like this :
3766
3767 USE mysql;
3768 INSERT INTO user (Host,User) values ('<ip_of_haproxy>','<username>');
3769 FLUSH PRIVILEGES;
3770
3771 If you don't specify a username (it is deprecated and not recommended), the
3772 check only consists in parsing the Mysql Handshake Initialisation packet or
3773 Error packet, we don't send anything in this mode. It was reported that it
3774 can generate lockout if check is too frequent and/or if there is not enough
3775 traffic. In fact, you need in this case to check MySQL "max_connect_errors"
3776 value as if a connection is established successfully within fewer than MySQL
3777 "max_connect_errors" attempts after a previous connection was interrupted,
3778 the error count for the host is cleared to zero. If HAProxy's server get
3779 blocked, the "FLUSH HOSTS" statement is the only way to unblock it.
3780
3781 Remember that this does not check database presence nor database consistency.
3782 To do this, you can use an external check with xinetd for example.
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01003783
Hervé COMMOWICK212f7782011-06-10 14:05:59 +02003784 The check requires MySQL >=3.22, for older version, please use TCP check.
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01003785
3786 Most often, an incoming MySQL server needs to see the client's IP address for
3787 various purposes, including IP privilege matching and connection logging.
3788 When possible, it is often wise to masquerade the client's IP address when
3789 connecting to the server using the "usesrc" argument of the "source" keyword,
3790 which requires the cttproxy feature to be compiled in, and the MySQL server
3791 to route the client via the machine hosting haproxy.
3792
3793 See also: "option httpchk"
3794
Rauf Kuliyev38b41562011-01-04 15:14:13 +01003795option pgsql-check [ user <username> ]
3796 Use PostgreSQL health checks for server testing
3797 May be used in sections : defaults | frontend | listen | backend
3798 yes | no | yes | yes
3799 Arguments :
Cyril Bonté108cf6e2012-04-21 23:30:29 +02003800 <username> This is the username which will be used when connecting to
3801 PostgreSQL server.
Rauf Kuliyev38b41562011-01-04 15:14:13 +01003802
3803 The check sends a PostgreSQL StartupMessage and waits for either
3804 Authentication request or ErrorResponse message. It is a basic but useful
3805 test which does not produce error nor aborted connect on the server.
3806 This check is identical with the "mysql-check".
3807
3808 See also: "option httpchk"
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01003809
Willy Tarreaua453bdd2008-01-08 19:50:52 +01003810option nolinger
3811no option nolinger
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003812 Enable or disable immediate session resource cleaning after close
Willy Tarreaua453bdd2008-01-08 19:50:52 +01003813 May be used in sections: defaults | frontend | listen | backend
3814 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01003815 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01003816
3817 When clients or servers abort connections in a dirty way (eg: they are
3818 physically disconnected), the session timeouts triggers and the session is
3819 closed. But it will remain in FIN_WAIT1 state for some time in the system,
3820 using some resources and possibly limiting the ability to establish newer
3821 connections.
3822
3823 When this happens, it is possible to activate "option nolinger" which forces
3824 the system to immediately remove any socket's pending data on close. Thus,
3825 the session is instantly purged from the system's tables. This usually has
3826 side effects such as increased number of TCP resets due to old retransmits
3827 getting immediately rejected. Some firewalls may sometimes complain about
3828 this too.
3829
3830 For this reason, it is not recommended to use this option when not absolutely
3831 needed. You know that you need it when you have thousands of FIN_WAIT1
3832 sessions on your system (TIME_WAIT ones do not count).
3833
3834 This option may be used both on frontends and backends, depending on the side
3835 where it is required. Use it on the frontend for clients, and on the backend
3836 for servers.
3837
3838 If this option has been enabled in a "defaults" section, it can be disabled
3839 in a specific instance by prepending the "no" keyword before it.
3840
3841
Willy Tarreau55165fe2009-05-10 12:02:55 +02003842option originalto [ except <network> ] [ header <name> ]
3843 Enable insertion of the X-Original-To header to requests sent to servers
3844 May be used in sections : defaults | frontend | listen | backend
3845 yes | yes | yes | yes
3846 Arguments :
3847 <network> is an optional argument used to disable this option for sources
3848 matching <network>
3849 <name> an optional argument to specify a different "X-Original-To"
3850 header name.
3851
3852 Since HAProxy can work in transparent mode, every request from a client can
3853 be redirected to the proxy and HAProxy itself can proxy every request to a
3854 complex SQUID environment and the destination host from SO_ORIGINAL_DST will
3855 be lost. This is annoying when you want access rules based on destination ip
3856 addresses. To solve this problem, a new HTTP header "X-Original-To" may be
3857 added by HAProxy to all requests sent to the server. This header contains a
3858 value representing the original destination IP address. Since this must be
3859 configured to always use the last occurrence of this header only. Note that
3860 only the last occurrence of the header must be used, since it is really
3861 possible that the client has already brought one.
3862
3863 The keyword "header" may be used to supply a different header name to replace
3864 the default "X-Original-To". This can be useful where you might already
3865 have a "X-Original-To" header from a different application, and you need
3866 preserve it. Also if your backend server doesn't use the "X-Original-To"
3867 header and requires different one.
3868
3869 Sometimes, a same HAProxy instance may be shared between a direct client
3870 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
3871 used to decrypt HTTPS traffic). It is possible to disable the addition of the
3872 header for a known source address or network by adding the "except" keyword
3873 followed by the network address. In this case, any source IP matching the
3874 network will not cause an addition of this header. Most common uses are with
3875 private networks or 127.0.0.1.
3876
3877 This option may be specified either in the frontend or in the backend. If at
3878 least one of them uses it, the header will be added. Note that the backend's
3879 setting of the header subargument takes precedence over the frontend's if
3880 both are defined.
3881
Willy Tarreau87cf5142011-08-19 22:57:24 +02003882 It is important to note that by default, HAProxy works in tunnel mode and
3883 only inspects the first request of a connection, meaning that only the first
3884 request will have the header appended, which is certainly not what you want.
3885 In order to fix this, ensure that any of the "httpclose", "forceclose" or
3886 "http-server-close" options is set when using this option.
Willy Tarreau55165fe2009-05-10 12:02:55 +02003887
3888 Examples :
3889 # Original Destination address
3890 frontend www
3891 mode http
3892 option originalto except 127.0.0.1
3893
3894 # Those servers want the IP Address in X-Client-Dst
3895 backend www
3896 mode http
3897 option originalto header X-Client-Dst
3898
Willy Tarreau87cf5142011-08-19 22:57:24 +02003899 See also : "option httpclose", "option http-server-close",
3900 "option forceclose"
Willy Tarreau55165fe2009-05-10 12:02:55 +02003901
3902
Willy Tarreaua453bdd2008-01-08 19:50:52 +01003903option persist
3904no option persist
3905 Enable or disable forced persistence on down servers
3906 May be used in sections: defaults | frontend | listen | backend
3907 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01003908 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01003909
3910 When an HTTP request reaches a backend with a cookie which references a dead
3911 server, by default it is redispatched to another server. It is possible to
3912 force the request to be sent to the dead server first using "option persist"
3913 if absolutely needed. A common use case is when servers are under extreme
3914 load and spend their time flapping. In this case, the users would still be
3915 directed to the server they opened the session on, in the hope they would be
3916 correctly served. It is recommended to use "option redispatch" in conjunction
3917 with this option so that in the event it would not be possible to connect to
3918 the server at all (server definitely dead), the client would finally be
3919 redirected to another valid server.
3920
3921 If this option has been enabled in a "defaults" section, it can be disabled
3922 in a specific instance by prepending the "no" keyword before it.
3923
Willy Tarreau4de91492010-01-22 19:10:05 +01003924 See also : "option redispatch", "retries", "force-persist"
Willy Tarreaua453bdd2008-01-08 19:50:52 +01003925
3926
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01003927option redispatch
3928no option redispatch
3929 Enable or disable session redistribution in case of connection failure
3930 May be used in sections: defaults | frontend | listen | backend
3931 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01003932 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01003933
3934 In HTTP mode, if a server designated by a cookie is down, clients may
3935 definitely stick to it because they cannot flush the cookie, so they will not
3936 be able to access the service anymore.
3937
3938 Specifying "option redispatch" will allow the proxy to break their
3939 persistence and redistribute them to a working server.
3940
3941 It also allows to retry last connection to another server in case of multiple
3942 connection failures. Of course, it requires having "retries" set to a nonzero
3943 value.
Willy Tarreaud72758d2010-01-12 10:42:19 +01003944
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01003945 This form is the preferred form, which replaces both the "redispatch" and
3946 "redisp" keywords.
3947
3948 If this option has been enabled in a "defaults" section, it can be disabled
3949 in a specific instance by prepending the "no" keyword before it.
3950
Willy Tarreau4de91492010-01-22 19:10:05 +01003951 See also : "redispatch", "retries", "force-persist"
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01003952
Willy Tarreaua453bdd2008-01-08 19:50:52 +01003953
Hervé COMMOWICKec032d62011-08-05 16:23:48 +02003954option redis-check
3955 Use redis health checks for server testing
3956 May be used in sections : defaults | frontend | listen | backend
3957 yes | no | yes | yes
3958 Arguments : none
3959
3960 It is possible to test that the server correctly talks REDIS protocol instead
3961 of just testing that it accepts the TCP connection. When this option is set,
3962 a PING redis command is sent to the server, and the response is analyzed to
3963 find the "+PONG" response message.
3964
3965 Example :
3966 option redis-check
3967
3968 See also : "option httpchk"
3969
3970
Willy Tarreaua453bdd2008-01-08 19:50:52 +01003971option smtpchk
3972option smtpchk <hello> <domain>
3973 Use SMTP health checks for server testing
3974 May be used in sections : defaults | frontend | listen | backend
3975 yes | no | yes | yes
Willy Tarreaud72758d2010-01-12 10:42:19 +01003976 Arguments :
Willy Tarreaua453bdd2008-01-08 19:50:52 +01003977 <hello> is an optional argument. It is the "hello" command to use. It can
3978 be either "HELO" (for SMTP) or "EHLO" (for ESTMP). All other
3979 values will be turned into the default command ("HELO").
3980
3981 <domain> is the domain name to present to the server. It may only be
3982 specified (and is mandatory) if the hello command has been
3983 specified. By default, "localhost" is used.
3984
3985 When "option smtpchk" is set, the health checks will consist in TCP
3986 connections followed by an SMTP command. By default, this command is
3987 "HELO localhost". The server's return code is analyzed and only return codes
3988 starting with a "2" will be considered as valid. All other responses,
3989 including a lack of response will constitute an error and will indicate a
3990 dead server.
3991
3992 This test is meant to be used with SMTP servers or relays. Depending on the
3993 request, it is possible that some servers do not log each connection attempt,
3994 so you may want to experiment to improve the behaviour. Using telnet on port
3995 25 is often easier than adjusting the configuration.
3996
3997 Most often, an incoming SMTP server needs to see the client's IP address for
3998 various purposes, including spam filtering, anti-spoofing and logging. When
3999 possible, it is often wise to masquerade the client's IP address when
4000 connecting to the server using the "usesrc" argument of the "source" keyword,
4001 which requires the cttproxy feature to be compiled in.
4002
4003 Example :
4004 option smtpchk HELO mydomain.org
4005
4006 See also : "option httpchk", "source"
4007
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01004008
Krzysztof Piotr Oledzkiaeebf9b2009-10-04 15:43:17 +02004009option socket-stats
4010no option socket-stats
4011
4012 Enable or disable collecting & providing separate statistics for each socket.
4013 May be used in sections : defaults | frontend | listen | backend
4014 yes | yes | yes | no
4015
4016 Arguments : none
4017
4018
Willy Tarreauff4f82d2009-02-06 11:28:13 +01004019option splice-auto
4020no option splice-auto
4021 Enable or disable automatic kernel acceleration on sockets in both directions
4022 May be used in sections : defaults | frontend | listen | backend
4023 yes | yes | yes | yes
4024 Arguments : none
4025
4026 When this option is enabled either on a frontend or on a backend, haproxy
4027 will automatically evaluate the opportunity to use kernel tcp splicing to
4028 forward data between the client and the server, in either direction. Haproxy
4029 uses heuristics to estimate if kernel splicing might improve performance or
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01004030 not. Both directions are handled independently. Note that the heuristics used
Willy Tarreauff4f82d2009-02-06 11:28:13 +01004031 are not much aggressive in order to limit excessive use of splicing. This
4032 option requires splicing to be enabled at compile time, and may be globally
4033 disabled with the global option "nosplice". Since splice uses pipes, using it
4034 requires that there are enough spare pipes.
4035
4036 Important note: kernel-based TCP splicing is a Linux-specific feature which
4037 first appeared in kernel 2.6.25. It offers kernel-based acceleration to
4038 transfer data between sockets without copying these data to user-space, thus
4039 providing noticeable performance gains and CPU cycles savings. Since many
4040 early implementations are buggy, corrupt data and/or are inefficient, this
4041 feature is not enabled by default, and it should be used with extreme care.
4042 While it is not possible to detect the correctness of an implementation,
4043 2.6.29 is the first version offering a properly working implementation. In
4044 case of doubt, splicing may be globally disabled using the global "nosplice"
4045 keyword.
4046
4047 Example :
4048 option splice-auto
4049
4050 If this option has been enabled in a "defaults" section, it can be disabled
4051 in a specific instance by prepending the "no" keyword before it.
4052
4053 See also : "option splice-request", "option splice-response", and global
4054 options "nosplice" and "maxpipes"
4055
4056
4057option splice-request
4058no option splice-request
4059 Enable or disable automatic kernel acceleration on sockets for requests
4060 May be used in sections : defaults | frontend | listen | backend
4061 yes | yes | yes | yes
4062 Arguments : none
4063
4064 When this option is enabled either on a frontend or on a backend, haproxy
Jamie Gloudonaaa21002012-08-25 00:18:33 -04004065 will use kernel tcp splicing whenever possible to forward data going from
Willy Tarreauff4f82d2009-02-06 11:28:13 +01004066 the client to the server. It might still use the recv/send scheme if there
4067 are no spare pipes left. This option requires splicing to be enabled at
4068 compile time, and may be globally disabled with the global option "nosplice".
4069 Since splice uses pipes, using it requires that there are enough spare pipes.
4070
4071 Important note: see "option splice-auto" for usage limitations.
4072
4073 Example :
4074 option splice-request
4075
4076 If this option has been enabled in a "defaults" section, it can be disabled
4077 in a specific instance by prepending the "no" keyword before it.
4078
4079 See also : "option splice-auto", "option splice-response", and global options
4080 "nosplice" and "maxpipes"
4081
4082
4083option splice-response
4084no option splice-response
4085 Enable or disable automatic kernel acceleration on sockets for responses
4086 May be used in sections : defaults | frontend | listen | backend
4087 yes | yes | yes | yes
4088 Arguments : none
4089
4090 When this option is enabled either on a frontend or on a backend, haproxy
Jamie Gloudonaaa21002012-08-25 00:18:33 -04004091 will use kernel tcp splicing whenever possible to forward data going from
Willy Tarreauff4f82d2009-02-06 11:28:13 +01004092 the server to the client. It might still use the recv/send scheme if there
4093 are no spare pipes left. This option requires splicing to be enabled at
4094 compile time, and may be globally disabled with the global option "nosplice".
4095 Since splice uses pipes, using it requires that there are enough spare pipes.
4096
4097 Important note: see "option splice-auto" for usage limitations.
4098
4099 Example :
4100 option splice-response
4101
4102 If this option has been enabled in a "defaults" section, it can be disabled
4103 in a specific instance by prepending the "no" keyword before it.
4104
4105 See also : "option splice-auto", "option splice-request", and global options
4106 "nosplice" and "maxpipes"
4107
4108
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004109option srvtcpka
4110no option srvtcpka
4111 Enable or disable the sending of TCP keepalive packets on the server side
4112 May be used in sections : defaults | frontend | listen | backend
4113 yes | no | yes | yes
4114 Arguments : none
4115
4116 When there is a firewall or any session-aware component between a client and
4117 a server, and when the protocol involves very long sessions with long idle
4118 periods (eg: remote desktops), there is a risk that one of the intermediate
4119 components decides to expire a session which has remained idle for too long.
4120
4121 Enabling socket-level TCP keep-alives makes the system regularly send packets
4122 to the other end of the connection, leaving it active. The delay between
4123 keep-alive probes is controlled by the system only and depends both on the
4124 operating system and its tuning parameters.
4125
4126 It is important to understand that keep-alive packets are neither emitted nor
4127 received at the application level. It is only the network stacks which sees
4128 them. For this reason, even if one side of the proxy already uses keep-alives
4129 to maintain its connection alive, those keep-alive packets will not be
4130 forwarded to the other side of the proxy.
4131
4132 Please note that this has nothing to do with HTTP keep-alive.
4133
4134 Using option "srvtcpka" enables the emission of TCP keep-alive probes on the
4135 server side of a connection, which should help when session expirations are
4136 noticed between HAProxy and a server.
4137
4138 If this option has been enabled in a "defaults" section, it can be disabled
4139 in a specific instance by prepending the "no" keyword before it.
4140
4141 See also : "option clitcpka", "option tcpka"
4142
4143
Willy Tarreaua453bdd2008-01-08 19:50:52 +01004144option ssl-hello-chk
4145 Use SSLv3 client hello health checks for server testing
4146 May be used in sections : defaults | frontend | listen | backend
4147 yes | no | yes | yes
4148 Arguments : none
4149
4150 When some SSL-based protocols are relayed in TCP mode through HAProxy, it is
4151 possible to test that the server correctly talks SSL instead of just testing
4152 that it accepts the TCP connection. When "option ssl-hello-chk" is set, pure
4153 SSLv3 client hello messages are sent once the connection is established to
4154 the server, and the response is analyzed to find an SSL server hello message.
4155 The server is considered valid only when the response contains this server
4156 hello message.
4157
4158 All servers tested till there correctly reply to SSLv3 client hello messages,
4159 and most servers tested do not even log the requests containing only hello
4160 messages, which is appreciable.
4161
Willy Tarreau763a95b2012-10-04 23:15:39 +02004162 Note that this check works even when SSL support was not built into haproxy
4163 because it forges the SSL message. When SSL support is available, it is best
4164 to use native SSL health checks instead of this one.
Willy Tarreaua453bdd2008-01-08 19:50:52 +01004165
Willy Tarreau763a95b2012-10-04 23:15:39 +02004166 See also: "option httpchk", "check-ssl"
4167
Willy Tarreaua453bdd2008-01-08 19:50:52 +01004168
Willy Tarreau9ea05a72009-06-14 12:07:01 +02004169option tcp-smart-accept
4170no option tcp-smart-accept
4171 Enable or disable the saving of one ACK packet during the accept sequence
4172 May be used in sections : defaults | frontend | listen | backend
4173 yes | yes | yes | no
4174 Arguments : none
4175
4176 When an HTTP connection request comes in, the system acknowledges it on
4177 behalf of HAProxy, then the client immediately sends its request, and the
4178 system acknowledges it too while it is notifying HAProxy about the new
4179 connection. HAProxy then reads the request and responds. This means that we
4180 have one TCP ACK sent by the system for nothing, because the request could
4181 very well be acknowledged by HAProxy when it sends its response.
4182
4183 For this reason, in HTTP mode, HAProxy automatically asks the system to avoid
4184 sending this useless ACK on platforms which support it (currently at least
4185 Linux). It must not cause any problem, because the system will send it anyway
4186 after 40 ms if the response takes more time than expected to come.
4187
4188 During complex network debugging sessions, it may be desirable to disable
4189 this optimization because delayed ACKs can make troubleshooting more complex
4190 when trying to identify where packets are delayed. It is then possible to
4191 fall back to normal behaviour by specifying "no option tcp-smart-accept".
4192
4193 It is also possible to force it for non-HTTP proxies by simply specifying
4194 "option tcp-smart-accept". For instance, it can make sense with some services
4195 such as SMTP where the server speaks first.
4196
4197 It is recommended to avoid forcing this option in a defaults section. In case
4198 of doubt, consider setting it back to automatic values by prepending the
4199 "default" keyword before it, or disabling it using the "no" keyword.
4200
Willy Tarreaud88edf22009-06-14 15:48:17 +02004201 See also : "option tcp-smart-connect"
4202
4203
4204option tcp-smart-connect
4205no option tcp-smart-connect
4206 Enable or disable the saving of one ACK packet during the connect sequence
4207 May be used in sections : defaults | frontend | listen | backend
4208 yes | no | yes | yes
4209 Arguments : none
4210
4211 On certain systems (at least Linux), HAProxy can ask the kernel not to
4212 immediately send an empty ACK upon a connection request, but to directly
4213 send the buffer request instead. This saves one packet on the network and
4214 thus boosts performance. It can also be useful for some servers, because they
4215 immediately get the request along with the incoming connection.
4216
4217 This feature is enabled when "option tcp-smart-connect" is set in a backend.
4218 It is not enabled by default because it makes network troubleshooting more
4219 complex.
4220
4221 It only makes sense to enable it with protocols where the client speaks first
4222 such as HTTP. In other situations, if there is no data to send in place of
4223 the ACK, a normal ACK is sent.
4224
4225 If this option has been enabled in a "defaults" section, it can be disabled
4226 in a specific instance by prepending the "no" keyword before it.
4227
4228 See also : "option tcp-smart-accept"
4229
Willy Tarreau9ea05a72009-06-14 12:07:01 +02004230
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004231option tcpka
4232 Enable or disable the sending of TCP keepalive packets on both sides
4233 May be used in sections : defaults | frontend | listen | backend
4234 yes | yes | yes | yes
4235 Arguments : none
4236
4237 When there is a firewall or any session-aware component between a client and
4238 a server, and when the protocol involves very long sessions with long idle
4239 periods (eg: remote desktops), there is a risk that one of the intermediate
4240 components decides to expire a session which has remained idle for too long.
4241
4242 Enabling socket-level TCP keep-alives makes the system regularly send packets
4243 to the other end of the connection, leaving it active. The delay between
4244 keep-alive probes is controlled by the system only and depends both on the
4245 operating system and its tuning parameters.
4246
4247 It is important to understand that keep-alive packets are neither emitted nor
4248 received at the application level. It is only the network stacks which sees
4249 them. For this reason, even if one side of the proxy already uses keep-alives
4250 to maintain its connection alive, those keep-alive packets will not be
4251 forwarded to the other side of the proxy.
4252
4253 Please note that this has nothing to do with HTTP keep-alive.
4254
4255 Using option "tcpka" enables the emission of TCP keep-alive probes on both
4256 the client and server sides of a connection. Note that this is meaningful
4257 only in "defaults" or "listen" sections. If this option is used in a
4258 frontend, only the client side will get keep-alives, and if this option is
4259 used in a backend, only the server side will get keep-alives. For this
4260 reason, it is strongly recommended to explicitly use "option clitcpka" and
4261 "option srvtcpka" when the configuration is split between frontends and
4262 backends.
4263
4264 See also : "option clitcpka", "option srvtcpka"
4265
Willy Tarreau844e3c52008-01-11 16:28:18 +01004266
4267option tcplog
4268 Enable advanced logging of TCP connections with session state and timers
4269 May be used in sections : defaults | frontend | listen | backend
4270 yes | yes | yes | yes
4271 Arguments : none
4272
4273 By default, the log output format is very poor, as it only contains the
4274 source and destination addresses, and the instance name. By specifying
4275 "option tcplog", each log line turns into a much richer format including, but
4276 not limited to, the connection timers, the session status, the connections
4277 numbers, the frontend, backend and server name, and of course the source
4278 address and ports. This option is useful for pure TCP proxies in order to
4279 find which of the client or server disconnects or times out. For normal HTTP
4280 proxies, it's better to use "option httplog" which is even more complete.
4281
4282 This option may be set either in the frontend or the backend.
4283
Willy Tarreauc57f0e22009-05-10 13:12:33 +02004284 See also : "option httplog", and section 8 about logging.
Willy Tarreau844e3c52008-01-11 16:28:18 +01004285
4286
Willy Tarreau844e3c52008-01-11 16:28:18 +01004287option transparent
4288no option transparent
4289 Enable client-side transparent proxying
4290 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau4b1f8592008-12-23 23:13:55 +01004291 yes | no | yes | yes
Willy Tarreau844e3c52008-01-11 16:28:18 +01004292 Arguments : none
4293
4294 This option was introduced in order to provide layer 7 persistence to layer 3
4295 load balancers. The idea is to use the OS's ability to redirect an incoming
4296 connection for a remote address to a local process (here HAProxy), and let
4297 this process know what address was initially requested. When this option is
4298 used, sessions without cookies will be forwarded to the original destination
4299 IP address of the incoming request (which should match that of another
4300 equipment), while requests with cookies will still be forwarded to the
4301 appropriate server.
4302
4303 Note that contrary to a common belief, this option does NOT make HAProxy
4304 present the client's IP to the server when establishing the connection.
4305
Willy Tarreaua1146052011-03-01 09:51:54 +01004306 See also: the "usesrc" argument of the "source" keyword, and the
Willy Tarreaueabeafa2008-01-16 16:17:06 +01004307 "transparent" option of the "bind" keyword.
Willy Tarreau844e3c52008-01-11 16:28:18 +01004308
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004309
Emeric Brun647caf12009-06-30 17:57:00 +02004310persist rdp-cookie
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02004311persist rdp-cookie(<name>)
Emeric Brun647caf12009-06-30 17:57:00 +02004312 Enable RDP cookie-based persistence
4313 May be used in sections : defaults | frontend | listen | backend
4314 yes | no | yes | yes
4315 Arguments :
4316 <name> is the optional name of the RDP cookie to check. If omitted, the
Willy Tarreau61e28f22010-05-16 22:31:05 +02004317 default cookie name "msts" will be used. There currently is no
4318 valid reason to change this name.
Emeric Brun647caf12009-06-30 17:57:00 +02004319
4320 This statement enables persistence based on an RDP cookie. The RDP cookie
4321 contains all information required to find the server in the list of known
4322 servers. So when this option is set in the backend, the request is analysed
4323 and if an RDP cookie is found, it is decoded. If it matches a known server
4324 which is still UP (or if "option persist" is set), then the connection is
4325 forwarded to this server.
4326
4327 Note that this only makes sense in a TCP backend, but for this to work, the
4328 frontend must have waited long enough to ensure that an RDP cookie is present
4329 in the request buffer. This is the same requirement as with the "rdp-cookie"
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01004330 load-balancing method. Thus it is highly recommended to put all statements in
Emeric Brun647caf12009-06-30 17:57:00 +02004331 a single "listen" section.
4332
Willy Tarreau61e28f22010-05-16 22:31:05 +02004333 Also, it is important to understand that the terminal server will emit this
4334 RDP cookie only if it is configured for "token redirection mode", which means
4335 that the "IP address redirection" option is disabled.
4336
Emeric Brun647caf12009-06-30 17:57:00 +02004337 Example :
4338 listen tse-farm
4339 bind :3389
4340 # wait up to 5s for an RDP cookie in the request
4341 tcp-request inspect-delay 5s
4342 tcp-request content accept if RDP_COOKIE
4343 # apply RDP cookie persistence
4344 persist rdp-cookie
4345 # if server is unknown, let's balance on the same cookie.
Cyril Bontédc4d9032012-04-08 21:57:39 +02004346 # alternatively, "balance leastconn" may be useful too.
Emeric Brun647caf12009-06-30 17:57:00 +02004347 balance rdp-cookie
4348 server srv1 1.1.1.1:3389
4349 server srv2 1.1.1.2:3389
4350
Simon Hormanab814e02011-06-24 14:50:20 +09004351 See also : "balance rdp-cookie", "tcp-request", the "req_rdp_cookie" ACL and
4352 the rdp_cookie pattern fetch function.
Emeric Brun647caf12009-06-30 17:57:00 +02004353
4354
Willy Tarreau3a7d2072009-03-05 23:48:25 +01004355rate-limit sessions <rate>
4356 Set a limit on the number of new sessions accepted per second on a frontend
4357 May be used in sections : defaults | frontend | listen | backend
4358 yes | yes | yes | no
4359 Arguments :
4360 <rate> The <rate> parameter is an integer designating the maximum number
4361 of new sessions per second to accept on the frontend.
4362
4363 When the frontend reaches the specified number of new sessions per second, it
4364 stops accepting new connections until the rate drops below the limit again.
4365 During this time, the pending sessions will be kept in the socket's backlog
4366 (in system buffers) and haproxy will not even be aware that sessions are
4367 pending. When applying very low limit on a highly loaded service, it may make
4368 sense to increase the socket's backlog using the "backlog" keyword.
4369
4370 This feature is particularly efficient at blocking connection-based attacks
4371 or service abuse on fragile servers. Since the session rate is measured every
4372 millisecond, it is extremely accurate. Also, the limit applies immediately,
4373 no delay is needed at all to detect the threshold.
4374
4375 Example : limit the connection rate on SMTP to 10 per second max
4376 listen smtp
4377 mode tcp
4378 bind :25
4379 rate-limit sessions 10
4380 server 127.0.0.1:1025
4381
Willy Tarreaua17c2d92011-07-25 08:16:20 +02004382 Note : when the maximum rate is reached, the frontend's status is not changed
4383 but its sockets appear as "WAITING" in the statistics if the
4384 "socket-stats" option is enabled.
Willy Tarreau3a7d2072009-03-05 23:48:25 +01004385
4386 See also : the "backlog" keyword and the "fe_sess_rate" ACL criterion.
4387
4388
Willy Tarreau2e1dca82012-09-12 08:43:15 +02004389redirect location <loc> [code <code>] <option> [{if | unless} <condition>]
4390redirect prefix <pfx> [code <code>] <option> [{if | unless} <condition>]
4391redirect scheme <sch> [code <code>] <option> [{if | unless} <condition>]
Willy Tarreaub463dfb2008-06-07 23:08:56 +02004392 Return an HTTP redirection if/unless a condition is matched
4393 May be used in sections : defaults | frontend | listen | backend
4394 no | yes | yes | yes
4395
4396 If/unless the condition is matched, the HTTP request will lead to a redirect
Willy Tarreauf285f542010-01-03 20:03:03 +01004397 response. If no condition is specified, the redirect applies unconditionally.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02004398
Willy Tarreau0140f252008-11-19 21:07:09 +01004399 Arguments :
Willy Tarreau2e1dca82012-09-12 08:43:15 +02004400 <loc> With "redirect location", the exact value in <loc> is placed into
4401 the HTTP "Location" header.
4402
4403 <pfx> With "redirect prefix", the "Location" header is built from the
4404 concatenation of <pfx> and the complete URI path, including the
4405 query string, unless the "drop-query" option is specified (see
4406 below). As a special case, if <pfx> equals exactly "/", then
4407 nothing is inserted before the original URI. It allows one to
4408 redirect to the same URL (for instance, to insert a cookie).
4409
4410 <sch> With "redirect scheme", then the "Location" header is built by
4411 concatenating <sch> with "://" then the first occurrence of the
4412 "Host" header, and then the URI path, including the query string
4413 unless the "drop-query" option is specified (see below). If no
4414 path is found or if the path is "*", then "/" is used instead. If
4415 no "Host" header is found, then an empty host component will be
4416 returned, which most recent browsers interprete as redirecting to
4417 the same host. This directive is mostly used to redirect HTTP to
4418 HTTPS.
Willy Tarreau0140f252008-11-19 21:07:09 +01004419
4420 <code> The code is optional. It indicates which type of HTTP redirection
4421 is desired. Only codes 301, 302 and 303 are supported, and 302 is
4422 used if no code is specified. 301 means "Moved permanently", and
4423 a browser may cache the Location. 302 means "Moved permanently"
4424 and means that the browser should not cache the redirection. 303
4425 is equivalent to 302 except that the browser will fetch the
4426 location with a GET method.
4427
4428 <option> There are several options which can be specified to adjust the
4429 expected behaviour of a redirection :
4430
4431 - "drop-query"
4432 When this keyword is used in a prefix-based redirection, then the
4433 location will be set without any possible query-string, which is useful
4434 for directing users to a non-secure page for instance. It has no effect
4435 with a location-type redirect.
4436
Willy Tarreau81e3b4f2010-01-10 00:42:19 +01004437 - "append-slash"
4438 This keyword may be used in conjunction with "drop-query" to redirect
4439 users who use a URL not ending with a '/' to the same one with the '/'.
4440 It can be useful to ensure that search engines will only see one URL.
4441 For this, a return code 301 is preferred.
4442
Willy Tarreau0140f252008-11-19 21:07:09 +01004443 - "set-cookie NAME[=value]"
4444 A "Set-Cookie" header will be added with NAME (and optionally "=value")
4445 to the response. This is sometimes used to indicate that a user has
4446 been seen, for instance to protect against some types of DoS. No other
4447 cookie option is added, so the cookie will be a session cookie. Note
4448 that for a browser, a sole cookie name without an equal sign is
4449 different from a cookie with an equal sign.
4450
4451 - "clear-cookie NAME[=]"
4452 A "Set-Cookie" header will be added with NAME (and optionally "="), but
4453 with the "Max-Age" attribute set to zero. This will tell the browser to
4454 delete this cookie. It is useful for instance on logout pages. It is
4455 important to note that clearing the cookie "NAME" will not remove a
4456 cookie set with "NAME=value". You have to clear the cookie "NAME=" for
4457 that, because the browser makes the difference.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02004458
4459 Example: move the login URL only to HTTPS.
4460 acl clear dst_port 80
4461 acl secure dst_port 8080
4462 acl login_page url_beg /login
Willy Tarreau0140f252008-11-19 21:07:09 +01004463 acl logout url_beg /logout
Willy Tarreau79da4692008-11-19 20:03:04 +01004464 acl uid_given url_reg /login?userid=[^&]+
Willy Tarreau0140f252008-11-19 21:07:09 +01004465 acl cookie_set hdr_sub(cookie) SEEN=1
4466
4467 redirect prefix https://mysite.com set-cookie SEEN=1 if !cookie_set
Willy Tarreau79da4692008-11-19 20:03:04 +01004468 redirect prefix https://mysite.com if login_page !secure
4469 redirect prefix http://mysite.com drop-query if login_page !uid_given
4470 redirect location http://mysite.com/ if !login_page secure
Willy Tarreau0140f252008-11-19 21:07:09 +01004471 redirect location / clear-cookie USERID= if logout
Willy Tarreaub463dfb2008-06-07 23:08:56 +02004472
Willy Tarreau81e3b4f2010-01-10 00:42:19 +01004473 Example: send redirects for request for articles without a '/'.
4474 acl missing_slash path_reg ^/article/[^/]*$
4475 redirect code 301 prefix / drop-query append-slash if missing_slash
4476
Willy Tarreau2e1dca82012-09-12 08:43:15 +02004477 Example: redirect all HTTP traffic to HTTPS when SSL is handled by haproxy.
David BERARDe7153042012-11-03 00:11:31 +01004478 redirect scheme https if !{ ssl_fc }
Willy Tarreau2e1dca82012-09-12 08:43:15 +02004479
Willy Tarreauc57f0e22009-05-10 13:12:33 +02004480 See section 7 about ACL usage.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02004481
4482
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01004483redisp (deprecated)
4484redispatch (deprecated)
4485 Enable or disable session redistribution in case of connection failure
4486 May be used in sections: defaults | frontend | listen | backend
4487 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01004488 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01004489
4490 In HTTP mode, if a server designated by a cookie is down, clients may
4491 definitely stick to it because they cannot flush the cookie, so they will not
4492 be able to access the service anymore.
4493
4494 Specifying "redispatch" will allow the proxy to break their persistence and
4495 redistribute them to a working server.
4496
4497 It also allows to retry last connection to another server in case of multiple
4498 connection failures. Of course, it requires having "retries" set to a nonzero
4499 value.
Willy Tarreaud72758d2010-01-12 10:42:19 +01004500
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01004501 This form is deprecated, do not use it in any new configuration, use the new
4502 "option redispatch" instead.
4503
4504 See also : "option redispatch"
4505
Willy Tarreaueabeafa2008-01-16 16:17:06 +01004506
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01004507reqadd <string> [{if | unless} <cond>]
Willy Tarreau303c0352008-01-17 19:01:39 +01004508 Add a header at the end of the HTTP request
4509 May be used in sections : defaults | frontend | listen | backend
4510 no | yes | yes | yes
4511 Arguments :
4512 <string> is the complete line to be added. Any space or known delimiter
4513 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02004514 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01004515
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01004516 <cond> is an optional matching condition built from ACLs. It makes it
4517 possible to ignore this rule when other conditions are not met.
4518
Willy Tarreau303c0352008-01-17 19:01:39 +01004519 A new line consisting in <string> followed by a line feed will be added after
4520 the last header of an HTTP request.
4521
4522 Header transformations only apply to traffic which passes through HAProxy,
4523 and not to traffic generated by HAProxy, such as health-checks or error
4524 responses.
4525
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01004526 Example : add "X-Proto: SSL" to requests coming via port 81
4527 acl is-ssl dst_port 81
4528 reqadd X-Proto:\ SSL if is-ssl
4529
4530 See also: "rspadd", section 6 about HTTP header manipulation, and section 7
4531 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01004532
4533
Willy Tarreau5321c422010-01-28 20:35:13 +01004534reqallow <search> [{if | unless} <cond>]
4535reqiallow <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01004536 Definitely allow an HTTP request if a line matches a regular expression
4537 May be used in sections : defaults | frontend | listen | backend
4538 no | yes | yes | yes
4539 Arguments :
4540 <search> is the regular expression applied to HTTP headers and to the
4541 request line. This is an extended regular expression. Parenthesis
4542 grouping is supported and no preliminary backslash is required.
4543 Any space or known delimiter must be escaped using a backslash
4544 ('\'). The pattern applies to a full line at a time. The
4545 "reqallow" keyword strictly matches case while "reqiallow"
4546 ignores case.
4547
Willy Tarreau5321c422010-01-28 20:35:13 +01004548 <cond> is an optional matching condition built from ACLs. It makes it
4549 possible to ignore this rule when other conditions are not met.
4550
Willy Tarreau303c0352008-01-17 19:01:39 +01004551 A request containing any line which matches extended regular expression
4552 <search> will mark the request as allowed, even if any later test would
4553 result in a deny. The test applies both to the request line and to request
4554 headers. Keep in mind that URLs in request line are case-sensitive while
Willy Tarreaud72758d2010-01-12 10:42:19 +01004555 header names are not.
Willy Tarreau303c0352008-01-17 19:01:39 +01004556
4557 It is easier, faster and more powerful to use ACLs to write access policies.
4558 Reqdeny, reqallow and reqpass should be avoided in new designs.
4559
4560 Example :
4561 # allow www.* but refuse *.local
4562 reqiallow ^Host:\ www\.
4563 reqideny ^Host:\ .*\.local
4564
Willy Tarreau5321c422010-01-28 20:35:13 +01004565 See also: "reqdeny", "block", section 6 about HTTP header manipulation, and
4566 section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01004567
4568
Willy Tarreau5321c422010-01-28 20:35:13 +01004569reqdel <search> [{if | unless} <cond>]
4570reqidel <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01004571 Delete all headers matching a regular expression in an HTTP request
4572 May be used in sections : defaults | frontend | listen | backend
4573 no | yes | yes | yes
4574 Arguments :
4575 <search> is the regular expression applied to HTTP headers and to the
4576 request line. This is an extended regular expression. Parenthesis
4577 grouping is supported and no preliminary backslash is required.
4578 Any space or known delimiter must be escaped using a backslash
4579 ('\'). The pattern applies to a full line at a time. The "reqdel"
4580 keyword strictly matches case while "reqidel" ignores case.
4581
Willy Tarreau5321c422010-01-28 20:35:13 +01004582 <cond> is an optional matching condition built from ACLs. It makes it
4583 possible to ignore this rule when other conditions are not met.
4584
Willy Tarreau303c0352008-01-17 19:01:39 +01004585 Any header line matching extended regular expression <search> in the request
4586 will be completely deleted. Most common use of this is to remove unwanted
4587 and/or dangerous headers or cookies from a request before passing it to the
4588 next servers.
4589
4590 Header transformations only apply to traffic which passes through HAProxy,
4591 and not to traffic generated by HAProxy, such as health-checks or error
4592 responses. Keep in mind that header names are not case-sensitive.
4593
4594 Example :
4595 # remove X-Forwarded-For header and SERVER cookie
4596 reqidel ^X-Forwarded-For:.*
4597 reqidel ^Cookie:.*SERVER=
4598
Willy Tarreau5321c422010-01-28 20:35:13 +01004599 See also: "reqadd", "reqrep", "rspdel", section 6 about HTTP header
4600 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01004601
4602
Willy Tarreau5321c422010-01-28 20:35:13 +01004603reqdeny <search> [{if | unless} <cond>]
4604reqideny <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01004605 Deny an HTTP request if a line matches a regular expression
4606 May be used in sections : defaults | frontend | listen | backend
4607 no | yes | yes | yes
4608 Arguments :
4609 <search> is the regular expression applied to HTTP headers and to the
4610 request line. This is an extended regular expression. Parenthesis
4611 grouping is supported and no preliminary backslash is required.
4612 Any space or known delimiter must be escaped using a backslash
4613 ('\'). The pattern applies to a full line at a time. The
4614 "reqdeny" keyword strictly matches case while "reqideny" ignores
4615 case.
4616
Willy Tarreau5321c422010-01-28 20:35:13 +01004617 <cond> is an optional matching condition built from ACLs. It makes it
4618 possible to ignore this rule when other conditions are not met.
4619
Willy Tarreau303c0352008-01-17 19:01:39 +01004620 A request containing any line which matches extended regular expression
4621 <search> will mark the request as denied, even if any later test would
4622 result in an allow. The test applies both to the request line and to request
4623 headers. Keep in mind that URLs in request line are case-sensitive while
Willy Tarreaud72758d2010-01-12 10:42:19 +01004624 header names are not.
Willy Tarreau303c0352008-01-17 19:01:39 +01004625
Willy Tarreauced27012008-01-17 20:35:34 +01004626 A denied request will generate an "HTTP 403 forbidden" response once the
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01004627 complete request has been parsed. This is consistent with what is practiced
Willy Tarreaud72758d2010-01-12 10:42:19 +01004628 using ACLs.
Willy Tarreauced27012008-01-17 20:35:34 +01004629
Willy Tarreau303c0352008-01-17 19:01:39 +01004630 It is easier, faster and more powerful to use ACLs to write access policies.
4631 Reqdeny, reqallow and reqpass should be avoided in new designs.
4632
4633 Example :
4634 # refuse *.local, then allow www.*
4635 reqideny ^Host:\ .*\.local
4636 reqiallow ^Host:\ www\.
4637
Willy Tarreau5321c422010-01-28 20:35:13 +01004638 See also: "reqallow", "rspdeny", "block", section 6 about HTTP header
4639 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01004640
4641
Willy Tarreau5321c422010-01-28 20:35:13 +01004642reqpass <search> [{if | unless} <cond>]
4643reqipass <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01004644 Ignore any HTTP request line matching a regular expression in next rules
4645 May be used in sections : defaults | frontend | listen | backend
4646 no | yes | yes | yes
4647 Arguments :
4648 <search> is the regular expression applied to HTTP headers and to the
4649 request line. This is an extended regular expression. Parenthesis
4650 grouping is supported and no preliminary backslash is required.
4651 Any space or known delimiter must be escaped using a backslash
4652 ('\'). The pattern applies to a full line at a time. The
4653 "reqpass" keyword strictly matches case while "reqipass" ignores
4654 case.
4655
Willy Tarreau5321c422010-01-28 20:35:13 +01004656 <cond> is an optional matching condition built from ACLs. It makes it
4657 possible to ignore this rule when other conditions are not met.
4658
Willy Tarreau303c0352008-01-17 19:01:39 +01004659 A request containing any line which matches extended regular expression
4660 <search> will skip next rules, without assigning any deny or allow verdict.
4661 The test applies both to the request line and to request headers. Keep in
4662 mind that URLs in request line are case-sensitive while header names are not.
4663
4664 It is easier, faster and more powerful to use ACLs to write access policies.
4665 Reqdeny, reqallow and reqpass should be avoided in new designs.
4666
4667 Example :
4668 # refuse *.local, then allow www.*, but ignore "www.private.local"
4669 reqipass ^Host:\ www.private\.local
4670 reqideny ^Host:\ .*\.local
4671 reqiallow ^Host:\ www\.
4672
Willy Tarreau5321c422010-01-28 20:35:13 +01004673 See also: "reqallow", "reqdeny", "block", section 6 about HTTP header
4674 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01004675
4676
Willy Tarreau5321c422010-01-28 20:35:13 +01004677reqrep <search> <string> [{if | unless} <cond>]
4678reqirep <search> <string> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01004679 Replace a regular expression with a string in an HTTP request line
4680 May be used in sections : defaults | frontend | listen | backend
4681 no | yes | yes | yes
4682 Arguments :
4683 <search> is the regular expression applied to HTTP headers and to the
4684 request line. This is an extended regular expression. Parenthesis
4685 grouping is supported and no preliminary backslash is required.
4686 Any space or known delimiter must be escaped using a backslash
4687 ('\'). The pattern applies to a full line at a time. The "reqrep"
4688 keyword strictly matches case while "reqirep" ignores case.
4689
4690 <string> is the complete line to be added. Any space or known delimiter
4691 must be escaped using a backslash ('\'). References to matched
4692 pattern groups are possible using the common \N form, with N
4693 being a single digit between 0 and 9. Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02004694 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01004695
Willy Tarreau5321c422010-01-28 20:35:13 +01004696 <cond> is an optional matching condition built from ACLs. It makes it
4697 possible to ignore this rule when other conditions are not met.
4698
Willy Tarreau303c0352008-01-17 19:01:39 +01004699 Any line matching extended regular expression <search> in the request (both
4700 the request line and header lines) will be completely replaced with <string>.
4701 Most common use of this is to rewrite URLs or domain names in "Host" headers.
4702
4703 Header transformations only apply to traffic which passes through HAProxy,
4704 and not to traffic generated by HAProxy, such as health-checks or error
4705 responses. Note that for increased readability, it is suggested to add enough
4706 spaces between the request and the response. Keep in mind that URLs in
4707 request line are case-sensitive while header names are not.
4708
4709 Example :
4710 # replace "/static/" with "/" at the beginning of any request path.
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04004711 reqrep ^([^\ :]*)\ /static/(.*) \1\ /\2
Willy Tarreau303c0352008-01-17 19:01:39 +01004712 # replace "www.mydomain.com" with "www" in the host name.
4713 reqirep ^Host:\ www.mydomain.com Host:\ www
4714
Dmitry Sivachenkof6f4f7b2012-10-21 18:10:25 +04004715 See also: "reqadd", "reqdel", "rsprep", "tune.bufsize", section 6 about
4716 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01004717
4718
Willy Tarreau5321c422010-01-28 20:35:13 +01004719reqtarpit <search> [{if | unless} <cond>]
4720reqitarpit <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01004721 Tarpit an HTTP request containing a line matching a regular expression
4722 May be used in sections : defaults | frontend | listen | backend
4723 no | yes | yes | yes
4724 Arguments :
4725 <search> is the regular expression applied to HTTP headers and to the
4726 request line. This is an extended regular expression. Parenthesis
4727 grouping is supported and no preliminary backslash is required.
4728 Any space or known delimiter must be escaped using a backslash
4729 ('\'). The pattern applies to a full line at a time. The
4730 "reqtarpit" keyword strictly matches case while "reqitarpit"
4731 ignores case.
4732
Willy Tarreau5321c422010-01-28 20:35:13 +01004733 <cond> is an optional matching condition built from ACLs. It makes it
4734 possible to ignore this rule when other conditions are not met.
4735
Willy Tarreau303c0352008-01-17 19:01:39 +01004736 A request containing any line which matches extended regular expression
4737 <search> will be tarpitted, which means that it will connect to nowhere, will
Willy Tarreauced27012008-01-17 20:35:34 +01004738 be kept open for a pre-defined time, then will return an HTTP error 500 so
4739 that the attacker does not suspect it has been tarpitted. The status 500 will
4740 be reported in the logs, but the completion flags will indicate "PT". The
Willy Tarreau303c0352008-01-17 19:01:39 +01004741 delay is defined by "timeout tarpit", or "timeout connect" if the former is
4742 not set.
4743
4744 The goal of the tarpit is to slow down robots attacking servers with
4745 identifiable requests. Many robots limit their outgoing number of connections
4746 and stay connected waiting for a reply which can take several minutes to
4747 come. Depending on the environment and attack, it may be particularly
4748 efficient at reducing the load on the network and firewalls.
4749
Willy Tarreau5321c422010-01-28 20:35:13 +01004750 Examples :
Willy Tarreau303c0352008-01-17 19:01:39 +01004751 # ignore user-agents reporting any flavour of "Mozilla" or "MSIE", but
4752 # block all others.
4753 reqipass ^User-Agent:\.*(Mozilla|MSIE)
4754 reqitarpit ^User-Agent:
4755
Willy Tarreau5321c422010-01-28 20:35:13 +01004756 # block bad guys
4757 acl badguys src 10.1.0.3 172.16.13.20/28
4758 reqitarpit . if badguys
4759
4760 See also: "reqallow", "reqdeny", "reqpass", section 6 about HTTP header
4761 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01004762
4763
Willy Tarreaue5c5ce92008-06-20 17:27:19 +02004764retries <value>
4765 Set the number of retries to perform on a server after a connection failure
4766 May be used in sections: defaults | frontend | listen | backend
4767 yes | no | yes | yes
4768 Arguments :
4769 <value> is the number of times a connection attempt should be retried on
4770 a server when a connection either is refused or times out. The
4771 default value is 3.
4772
4773 It is important to understand that this value applies to the number of
4774 connection attempts, not full requests. When a connection has effectively
4775 been established to a server, there will be no more retry.
4776
4777 In order to avoid immediate reconnections to a server which is restarting,
4778 a turn-around timer of 1 second is applied before a retry occurs.
4779
4780 When "option redispatch" is set, the last retry may be performed on another
4781 server even if a cookie references a different server.
4782
4783 See also : "option redispatch"
4784
4785
Willy Tarreaufdb563c2010-01-31 15:43:27 +01004786rspadd <string> [{if | unless} <cond>]
Willy Tarreau303c0352008-01-17 19:01:39 +01004787 Add a header at the end of the HTTP response
4788 May be used in sections : defaults | frontend | listen | backend
4789 no | yes | yes | yes
4790 Arguments :
4791 <string> is the complete line to be added. Any space or known delimiter
4792 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02004793 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01004794
Willy Tarreaufdb563c2010-01-31 15:43:27 +01004795 <cond> is an optional matching condition built from ACLs. It makes it
4796 possible to ignore this rule when other conditions are not met.
4797
Willy Tarreau303c0352008-01-17 19:01:39 +01004798 A new line consisting in <string> followed by a line feed will be added after
4799 the last header of an HTTP response.
4800
4801 Header transformations only apply to traffic which passes through HAProxy,
4802 and not to traffic generated by HAProxy, such as health-checks or error
4803 responses.
4804
Willy Tarreaufdb563c2010-01-31 15:43:27 +01004805 See also: "reqadd", section 6 about HTTP header manipulation, and section 7
4806 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01004807
4808
Willy Tarreaufdb563c2010-01-31 15:43:27 +01004809rspdel <search> [{if | unless} <cond>]
4810rspidel <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01004811 Delete all headers matching a regular expression in an HTTP response
4812 May be used in sections : defaults | frontend | listen | backend
4813 no | yes | yes | yes
4814 Arguments :
4815 <search> is the regular expression applied to HTTP headers and to the
4816 response line. This is an extended regular expression, so
4817 parenthesis grouping is supported and no preliminary backslash
4818 is required. Any space or known delimiter must be escaped using
4819 a backslash ('\'). The pattern applies to a full line at a time.
4820 The "rspdel" keyword strictly matches case while "rspidel"
4821 ignores case.
4822
Willy Tarreaufdb563c2010-01-31 15:43:27 +01004823 <cond> is an optional matching condition built from ACLs. It makes it
4824 possible to ignore this rule when other conditions are not met.
4825
Willy Tarreau303c0352008-01-17 19:01:39 +01004826 Any header line matching extended regular expression <search> in the response
4827 will be completely deleted. Most common use of this is to remove unwanted
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02004828 and/or sensitive headers or cookies from a response before passing it to the
Willy Tarreau303c0352008-01-17 19:01:39 +01004829 client.
4830
4831 Header transformations only apply to traffic which passes through HAProxy,
4832 and not to traffic generated by HAProxy, such as health-checks or error
4833 responses. Keep in mind that header names are not case-sensitive.
4834
4835 Example :
4836 # remove the Server header from responses
4837 reqidel ^Server:.*
4838
Willy Tarreaufdb563c2010-01-31 15:43:27 +01004839 See also: "rspadd", "rsprep", "reqdel", section 6 about HTTP header
4840 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01004841
4842
Willy Tarreaufdb563c2010-01-31 15:43:27 +01004843rspdeny <search> [{if | unless} <cond>]
4844rspideny <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01004845 Block an HTTP response if a line matches a regular expression
4846 May be used in sections : defaults | frontend | listen | backend
4847 no | yes | yes | yes
4848 Arguments :
4849 <search> is the regular expression applied to HTTP headers and to the
4850 response line. This is an extended regular expression, so
4851 parenthesis grouping is supported and no preliminary backslash
4852 is required. Any space or known delimiter must be escaped using
4853 a backslash ('\'). The pattern applies to a full line at a time.
4854 The "rspdeny" keyword strictly matches case while "rspideny"
4855 ignores case.
4856
Willy Tarreaufdb563c2010-01-31 15:43:27 +01004857 <cond> is an optional matching condition built from ACLs. It makes it
4858 possible to ignore this rule when other conditions are not met.
4859
Willy Tarreau303c0352008-01-17 19:01:39 +01004860 A response containing any line which matches extended regular expression
4861 <search> will mark the request as denied. The test applies both to the
4862 response line and to response headers. Keep in mind that header names are not
4863 case-sensitive.
4864
4865 Main use of this keyword is to prevent sensitive information leak and to
Willy Tarreauced27012008-01-17 20:35:34 +01004866 block the response before it reaches the client. If a response is denied, it
4867 will be replaced with an HTTP 502 error so that the client never retrieves
4868 any sensitive data.
Willy Tarreau303c0352008-01-17 19:01:39 +01004869
4870 It is easier, faster and more powerful to use ACLs to write access policies.
4871 Rspdeny should be avoided in new designs.
4872
4873 Example :
4874 # Ensure that no content type matching ms-word will leak
4875 rspideny ^Content-type:\.*/ms-word
4876
Willy Tarreaufdb563c2010-01-31 15:43:27 +01004877 See also: "reqdeny", "acl", "block", section 6 about HTTP header manipulation
4878 and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01004879
4880
Willy Tarreaufdb563c2010-01-31 15:43:27 +01004881rsprep <search> <string> [{if | unless} <cond>]
4882rspirep <search> <string> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01004883 Replace a regular expression with a string in an HTTP response line
4884 May be used in sections : defaults | frontend | listen | backend
4885 no | yes | yes | yes
4886 Arguments :
4887 <search> is the regular expression applied to HTTP headers and to the
4888 response line. This is an extended regular expression, so
4889 parenthesis grouping is supported and no preliminary backslash
4890 is required. Any space or known delimiter must be escaped using
4891 a backslash ('\'). The pattern applies to a full line at a time.
4892 The "rsprep" keyword strictly matches case while "rspirep"
4893 ignores case.
4894
4895 <string> is the complete line to be added. Any space or known delimiter
4896 must be escaped using a backslash ('\'). References to matched
4897 pattern groups are possible using the common \N form, with N
4898 being a single digit between 0 and 9. Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02004899 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01004900
Willy Tarreaufdb563c2010-01-31 15:43:27 +01004901 <cond> is an optional matching condition built from ACLs. It makes it
4902 possible to ignore this rule when other conditions are not met.
4903
Willy Tarreau303c0352008-01-17 19:01:39 +01004904 Any line matching extended regular expression <search> in the response (both
4905 the response line and header lines) will be completely replaced with
4906 <string>. Most common use of this is to rewrite Location headers.
4907
4908 Header transformations only apply to traffic which passes through HAProxy,
4909 and not to traffic generated by HAProxy, such as health-checks or error
4910 responses. Note that for increased readability, it is suggested to add enough
4911 spaces between the request and the response. Keep in mind that header names
4912 are not case-sensitive.
4913
4914 Example :
4915 # replace "Location: 127.0.0.1:8080" with "Location: www.mydomain.com"
4916 rspirep ^Location:\ 127.0.0.1:8080 Location:\ www.mydomain.com
4917
Willy Tarreaufdb563c2010-01-31 15:43:27 +01004918 See also: "rspadd", "rspdel", "reqrep", section 6 about HTTP header
4919 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01004920
4921
David du Colombier486df472011-03-17 10:40:26 +01004922server <name> <address>[:[port]] [param*]
Willy Tarreaueabeafa2008-01-16 16:17:06 +01004923 Declare a server in a backend
4924 May be used in sections : defaults | frontend | listen | backend
4925 no | no | yes | yes
4926 Arguments :
4927 <name> is the internal name assigned to this server. This name will
Cyril Bonté941a0c62012-10-15 19:44:24 +02004928 appear in logs and alerts. If "http-send-name-header" is
Mark Lamourinec2247f02012-01-04 13:02:01 -05004929 set, it will be added to the request header sent to the server.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01004930
David du Colombier486df472011-03-17 10:40:26 +01004931 <address> is the IPv4 or IPv6 address of the server. Alternatively, a
4932 resolvable hostname is supported, but this name will be resolved
4933 during start-up. Address "0.0.0.0" or "*" has a special meaning.
4934 It indicates that the connection will be forwarded to the same IP
Willy Tarreaud669a4f2010-07-13 14:49:50 +02004935 address as the one from the client connection. This is useful in
4936 transparent proxy architectures where the client's connection is
4937 intercepted and haproxy must forward to the original destination
4938 address. This is more or less what the "transparent" keyword does
4939 except that with a server it's possible to limit concurrency and
4940 to report statistics.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01004941
Willy Tarreaub6205fd2012-09-24 12:27:33 +02004942 <port> is an optional port specification. If set, all connections will
Willy Tarreaueabeafa2008-01-16 16:17:06 +01004943 be sent to this port. If unset, the same port the client
4944 connected to will be used. The port may also be prefixed by a "+"
4945 or a "-". In this case, the server's port will be determined by
4946 adding this value to the client's port.
4947
4948 <param*> is a list of parameters for this server. The "server" keywords
4949 accepts an important number of options and has a complete section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02004950 dedicated to it. Please refer to section 5 for more details.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01004951
4952 Examples :
4953 server first 10.1.1.1:1080 cookie first check inter 1000
4954 server second 10.1.1.2:1080 cookie second check inter 1000
4955
Mark Lamourinec2247f02012-01-04 13:02:01 -05004956 See also: "default-server", "http-send-name-header" and section 5 about
4957 server options
Willy Tarreaueabeafa2008-01-16 16:17:06 +01004958
4959
4960source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
Willy Tarreaubce70882009-09-07 11:51:47 +02004961source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | hdr_ip(<hdr>[,<occ>]) } ]
Willy Tarreaud53f96b2009-02-04 18:46:54 +01004962source <addr>[:<port>] [interface <name>]
Willy Tarreaueabeafa2008-01-16 16:17:06 +01004963 Set the source address for outgoing connections
4964 May be used in sections : defaults | frontend | listen | backend
4965 yes | no | yes | yes
4966 Arguments :
4967 <addr> is the IPv4 address HAProxy will bind to before connecting to a
4968 server. This address is also used as a source for health checks.
4969 The default value of 0.0.0.0 means that the system will select
4970 the most appropriate address to reach its destination.
4971
4972 <port> is an optional port. It is normally not needed but may be useful
4973 in some very specific contexts. The default value of zero means
Willy Tarreauc6f4ce82009-06-10 11:09:37 +02004974 the system will select a free port. Note that port ranges are not
4975 supported in the backend. If you want to force port ranges, you
4976 have to specify them on each "server" line.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01004977
4978 <addr2> is the IP address to present to the server when connections are
4979 forwarded in full transparent proxy mode. This is currently only
4980 supported on some patched Linux kernels. When this address is
4981 specified, clients connecting to the server will be presented
4982 with this address, while health checks will still use the address
4983 <addr>.
4984
4985 <port2> is the optional port to present to the server when connections
4986 are forwarded in full transparent proxy mode (see <addr2> above).
4987 The default value of zero means the system will select a free
4988 port.
4989
Willy Tarreaubce70882009-09-07 11:51:47 +02004990 <hdr> is the name of a HTTP header in which to fetch the IP to bind to.
4991 This is the name of a comma-separated header list which can
4992 contain multiple IP addresses. By default, the last occurrence is
4993 used. This is designed to work with the X-Forwarded-For header
4994 and to automatically bind to the the client's IP address as seen
4995 by previous proxy, typically Stunnel. In order to use another
4996 occurrence from the last one, please see the <occ> parameter
4997 below. When the header (or occurrence) is not found, no binding
4998 is performed so that the proxy's default IP address is used. Also
4999 keep in mind that the header name is case insensitive, as for any
5000 HTTP header.
5001
5002 <occ> is the occurrence number of a value to be used in a multi-value
5003 header. This is to be used in conjunction with "hdr_ip(<hdr>)",
Jamie Gloudonaaa21002012-08-25 00:18:33 -04005004 in order to specify which occurrence to use for the source IP
Willy Tarreaubce70882009-09-07 11:51:47 +02005005 address. Positive values indicate a position from the first
5006 occurrence, 1 being the first one. Negative values indicate
5007 positions relative to the last one, -1 being the last one. This
5008 is helpful for situations where an X-Forwarded-For header is set
5009 at the entry point of an infrastructure and must be used several
5010 proxy layers away. When this value is not specified, -1 is
5011 assumed. Passing a zero here disables the feature.
5012
Willy Tarreaud53f96b2009-02-04 18:46:54 +01005013 <name> is an optional interface name to which to bind to for outgoing
5014 traffic. On systems supporting this features (currently, only
5015 Linux), this allows one to bind all traffic to the server to
5016 this interface even if it is not the one the system would select
5017 based on routing tables. This should be used with extreme care.
5018 Note that using this option requires root privileges.
5019
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005020 The "source" keyword is useful in complex environments where a specific
5021 address only is allowed to connect to the servers. It may be needed when a
5022 private address must be used through a public gateway for instance, and it is
5023 known that the system cannot determine the adequate source address by itself.
5024
5025 An extension which is available on certain patched Linux kernels may be used
5026 through the "usesrc" optional keyword. It makes it possible to connect to the
5027 servers with an IP address which does not belong to the system itself. This
5028 is called "full transparent proxy mode". For this to work, the destination
5029 servers have to route their traffic back to this address through the machine
5030 running HAProxy, and IP forwarding must generally be enabled on this machine.
5031
5032 In this "full transparent proxy" mode, it is possible to force a specific IP
5033 address to be presented to the servers. This is not much used in fact. A more
5034 common use is to tell HAProxy to present the client's IP address. For this,
5035 there are two methods :
5036
5037 - present the client's IP and port addresses. This is the most transparent
5038 mode, but it can cause problems when IP connection tracking is enabled on
5039 the machine, because a same connection may be seen twice with different
5040 states. However, this solution presents the huge advantage of not
5041 limiting the system to the 64k outgoing address+port couples, because all
5042 of the client ranges may be used.
5043
5044 - present only the client's IP address and select a spare port. This
5045 solution is still quite elegant but slightly less transparent (downstream
5046 firewalls logs will not match upstream's). It also presents the downside
5047 of limiting the number of concurrent connections to the usual 64k ports.
5048 However, since the upstream and downstream ports are different, local IP
5049 connection tracking on the machine will not be upset by the reuse of the
5050 same session.
5051
5052 Note that depending on the transparent proxy technology used, it may be
5053 required to force the source address. In fact, cttproxy version 2 requires an
5054 IP address in <addr> above, and does not support setting of "0.0.0.0" as the
5055 IP address because it creates NAT entries which much match the exact outgoing
5056 address. Tproxy version 4 and some other kernel patches which work in pure
5057 forwarding mode generally will not have this limitation.
5058
5059 This option sets the default source for all servers in the backend. It may
5060 also be specified in a "defaults" section. Finer source address specification
5061 is possible at the server level using the "source" server option. Refer to
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005062 section 5 for more information.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005063
5064 Examples :
5065 backend private
5066 # Connect to the servers using our 192.168.1.200 source address
5067 source 192.168.1.200
5068
5069 backend transparent_ssl1
5070 # Connect to the SSL farm from the client's source address
5071 source 192.168.1.200 usesrc clientip
5072
5073 backend transparent_ssl2
5074 # Connect to the SSL farm from the client's source address and port
5075 # not recommended if IP conntrack is present on the local machine.
5076 source 192.168.1.200 usesrc client
5077
5078 backend transparent_ssl3
5079 # Connect to the SSL farm from the client's source address. It
5080 # is more conntrack-friendly.
5081 source 192.168.1.200 usesrc clientip
5082
5083 backend transparent_smtp
5084 # Connect to the SMTP farm from the client's source address/port
5085 # with Tproxy version 4.
5086 source 0.0.0.0 usesrc clientip
5087
Willy Tarreaubce70882009-09-07 11:51:47 +02005088 backend transparent_http
5089 # Connect to the servers using the client's IP as seen by previous
5090 # proxy.
5091 source 0.0.0.0 usesrc hdr_ip(x-forwarded-for,-1)
5092
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005093 See also : the "source" server option in section 5, the Tproxy patches for
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005094 the Linux kernel on www.balabit.com, the "bind" keyword.
5095
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01005096
Willy Tarreau844e3c52008-01-11 16:28:18 +01005097srvtimeout <timeout> (deprecated)
5098 Set the maximum inactivity time on the server side.
5099 May be used in sections : defaults | frontend | listen | backend
5100 yes | no | yes | yes
5101 Arguments :
5102 <timeout> is the timeout value specified in milliseconds by default, but
5103 can be in any other unit if the number is suffixed by the unit,
5104 as explained at the top of this document.
5105
5106 The inactivity timeout applies when the server is expected to acknowledge or
5107 send data. In HTTP mode, this timeout is particularly important to consider
5108 during the first phase of the server's response, when it has to send the
5109 headers, as it directly represents the server's processing time for the
5110 request. To find out what value to put there, it's often good to start with
5111 what would be considered as unacceptable response times, then check the logs
5112 to observe the response time distribution, and adjust the value accordingly.
5113
5114 The value is specified in milliseconds by default, but can be in any other
5115 unit if the number is suffixed by the unit, as specified at the top of this
5116 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
5117 recommended that the client timeout remains equal to the server timeout in
5118 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01005119 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01005120 packet losses by specifying timeouts that are slightly above multiples of 3
Willy Tarreaud72758d2010-01-12 10:42:19 +01005121 seconds (eg: 4 or 5 seconds minimum).
Willy Tarreau844e3c52008-01-11 16:28:18 +01005122
5123 This parameter is specific to backends, but can be specified once for all in
5124 "defaults" sections. This is in fact one of the easiest solutions not to
5125 forget about it. An unspecified timeout results in an infinite timeout, which
5126 is not recommended. Such a usage is accepted and works but reports a warning
5127 during startup because it may results in accumulation of expired sessions in
5128 the system if the system's timeouts are not configured either.
5129
5130 This parameter is provided for compatibility but is currently deprecated.
5131 Please use "timeout server" instead.
5132
Willy Tarreauce887fd2012-05-12 12:50:00 +02005133 See also : "timeout server", "timeout tunnel", "timeout client" and
5134 "clitimeout".
Willy Tarreau844e3c52008-01-11 16:28:18 +01005135
5136
Cyril Bonté66c327d2010-10-12 00:14:37 +02005137stats admin { if | unless } <cond>
5138 Enable statistics admin level if/unless a condition is matched
5139 May be used in sections : defaults | frontend | listen | backend
5140 no | no | yes | yes
5141
5142 This statement enables the statistics admin level if/unless a condition is
5143 matched.
5144
5145 The admin level allows to enable/disable servers from the web interface. By
5146 default, statistics page is read-only for security reasons.
5147
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01005148 Note : Consider not using this feature in multi-process mode (nbproc > 1)
5149 unless you know what you do : memory is not shared between the
5150 processes, which can result in random behaviours.
5151
Cyril Bonté23b39d92011-02-10 22:54:44 +01005152 Currently, the POST request is limited to the buffer size minus the reserved
5153 buffer space, which means that if the list of servers is too long, the
5154 request won't be processed. It is recommended to alter few servers at a
5155 time.
Cyril Bonté66c327d2010-10-12 00:14:37 +02005156
5157 Example :
5158 # statistics admin level only for localhost
5159 backend stats_localhost
5160 stats enable
5161 stats admin if LOCALHOST
5162
5163 Example :
5164 # statistics admin level always enabled because of the authentication
5165 backend stats_auth
5166 stats enable
5167 stats auth admin:AdMiN123
5168 stats admin if TRUE
5169
5170 Example :
5171 # statistics admin level depends on the authenticated user
5172 userlist stats-auth
5173 group admin users admin
5174 user admin insecure-password AdMiN123
5175 group readonly users haproxy
5176 user haproxy insecure-password haproxy
5177
5178 backend stats_auth
5179 stats enable
5180 acl AUTH http_auth(stats-auth)
5181 acl AUTH_ADMIN http_auth_group(stats-auth) admin
5182 stats http-request auth unless AUTH
5183 stats admin if AUTH_ADMIN
5184
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01005185 See also : "stats enable", "stats auth", "stats http-request", "nbproc",
5186 "bind-process", section 3.4 about userlists and section 7 about
5187 ACL usage.
Cyril Bonté66c327d2010-10-12 00:14:37 +02005188
5189
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005190stats auth <user>:<passwd>
5191 Enable statistics with authentication and grant access to an account
5192 May be used in sections : defaults | frontend | listen | backend
5193 yes | no | yes | yes
5194 Arguments :
5195 <user> is a user name to grant access to
5196
5197 <passwd> is the cleartext password associated to this user
5198
5199 This statement enables statistics with default settings, and restricts access
5200 to declared users only. It may be repeated as many times as necessary to
5201 allow as many users as desired. When a user tries to access the statistics
5202 without a valid account, a "401 Forbidden" response will be returned so that
5203 the browser asks the user to provide a valid user and password. The real
5204 which will be returned to the browser is configurable using "stats realm".
5205
5206 Since the authentication method is HTTP Basic Authentication, the passwords
5207 circulate in cleartext on the network. Thus, it was decided that the
5208 configuration file would also use cleartext passwords to remind the users
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02005209 that those ones should not be sensitive and not shared with any other account.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005210
5211 It is also possible to reduce the scope of the proxies which appear in the
5212 report using "stats scope".
5213
5214 Though this statement alone is enough to enable statistics reporting, it is
5215 recommended to set all other settings in order to avoid relying on default
5216 unobvious parameters.
5217
5218 Example :
5219 # public access (limited to this backend only)
5220 backend public_www
5221 server srv1 192.168.0.1:80
5222 stats enable
5223 stats hide-version
5224 stats scope .
5225 stats uri /admin?stats
5226 stats realm Haproxy\ Statistics
5227 stats auth admin1:AdMiN123
5228 stats auth admin2:AdMiN321
5229
5230 # internal monitoring access (unlimited)
5231 backend private_monitoring
5232 stats enable
5233 stats uri /admin?stats
5234 stats refresh 5s
5235
5236 See also : "stats enable", "stats realm", "stats scope", "stats uri"
5237
5238
5239stats enable
5240 Enable statistics reporting with default settings
5241 May be used in sections : defaults | frontend | listen | backend
5242 yes | no | yes | yes
5243 Arguments : none
5244
5245 This statement enables statistics reporting with default settings defined
5246 at build time. Unless stated otherwise, these settings are used :
5247 - stats uri : /haproxy?stats
5248 - stats realm : "HAProxy Statistics"
5249 - stats auth : no authentication
5250 - stats scope : no restriction
5251
5252 Though this statement alone is enough to enable statistics reporting, it is
5253 recommended to set all other settings in order to avoid relying on default
5254 unobvious parameters.
5255
5256 Example :
5257 # public access (limited to this backend only)
5258 backend public_www
5259 server srv1 192.168.0.1:80
5260 stats enable
5261 stats hide-version
5262 stats scope .
5263 stats uri /admin?stats
5264 stats realm Haproxy\ Statistics
5265 stats auth admin1:AdMiN123
5266 stats auth admin2:AdMiN321
5267
5268 # internal monitoring access (unlimited)
5269 backend private_monitoring
5270 stats enable
5271 stats uri /admin?stats
5272 stats refresh 5s
5273
5274 See also : "stats auth", "stats realm", "stats uri"
5275
5276
Willy Tarreaud63335a2010-02-26 12:56:52 +01005277stats hide-version
5278 Enable statistics and hide HAProxy version reporting
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02005279 May be used in sections : defaults | frontend | listen | backend
5280 yes | no | yes | yes
Willy Tarreaud63335a2010-02-26 12:56:52 +01005281 Arguments : none
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02005282
Willy Tarreaud63335a2010-02-26 12:56:52 +01005283 By default, the stats page reports some useful status information along with
5284 the statistics. Among them is HAProxy's version. However, it is generally
5285 considered dangerous to report precise version to anyone, as it can help them
5286 target known weaknesses with specific attacks. The "stats hide-version"
5287 statement removes the version from the statistics report. This is recommended
5288 for public sites or any site with a weak login/password.
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02005289
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +02005290 Though this statement alone is enough to enable statistics reporting, it is
5291 recommended to set all other settings in order to avoid relying on default
5292 unobvious parameters.
5293
Willy Tarreaud63335a2010-02-26 12:56:52 +01005294 Example :
5295 # public access (limited to this backend only)
5296 backend public_www
5297 server srv1 192.168.0.1:80
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +02005298 stats enable
Willy Tarreaud63335a2010-02-26 12:56:52 +01005299 stats hide-version
5300 stats scope .
5301 stats uri /admin?stats
5302 stats realm Haproxy\ Statistics
5303 stats auth admin1:AdMiN123
5304 stats auth admin2:AdMiN321
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02005305
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02005306 # internal monitoring access (unlimited)
5307 backend private_monitoring
5308 stats enable
Willy Tarreaud63335a2010-02-26 12:56:52 +01005309 stats uri /admin?stats
5310 stats refresh 5s
Krzysztof Piotr Oledzki15514c22010-01-04 16:03:09 +01005311
Willy Tarreaud63335a2010-02-26 12:56:52 +01005312 See also : "stats auth", "stats enable", "stats realm", "stats uri"
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02005313
Willy Tarreau983e01e2010-01-11 18:42:06 +01005314
Cyril Bonté2be1b3f2010-09-30 23:46:30 +02005315stats http-request { allow | deny | auth [realm <realm>] }
5316 [ { if | unless } <condition> ]
5317 Access control for statistics
5318
5319 May be used in sections: defaults | frontend | listen | backend
5320 no | no | yes | yes
5321
5322 As "http-request", these set of options allow to fine control access to
5323 statistics. Each option may be followed by if/unless and acl.
5324 First option with matched condition (or option without condition) is final.
5325 For "deny" a 403 error will be returned, for "allow" normal processing is
5326 performed, for "auth" a 401/407 error code is returned so the client
5327 should be asked to enter a username and password.
5328
5329 There is no fixed limit to the number of http-request statements per
5330 instance.
5331
5332 See also : "http-request", section 3.4 about userlists and section 7
5333 about ACL usage.
5334
5335
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005336stats realm <realm>
5337 Enable statistics and set authentication realm
5338 May be used in sections : defaults | frontend | listen | backend
5339 yes | no | yes | yes
5340 Arguments :
5341 <realm> is the name of the HTTP Basic Authentication realm reported to
5342 the browser. The browser uses it to display it in the pop-up
5343 inviting the user to enter a valid username and password.
5344
5345 The realm is read as a single word, so any spaces in it should be escaped
5346 using a backslash ('\').
5347
5348 This statement is useful only in conjunction with "stats auth" since it is
5349 only related to authentication.
5350
5351 Though this statement alone is enough to enable statistics reporting, it is
5352 recommended to set all other settings in order to avoid relying on default
5353 unobvious parameters.
5354
5355 Example :
5356 # public access (limited to this backend only)
5357 backend public_www
5358 server srv1 192.168.0.1:80
5359 stats enable
5360 stats hide-version
5361 stats scope .
5362 stats uri /admin?stats
5363 stats realm Haproxy\ Statistics
5364 stats auth admin1:AdMiN123
5365 stats auth admin2:AdMiN321
5366
5367 # internal monitoring access (unlimited)
5368 backend private_monitoring
5369 stats enable
5370 stats uri /admin?stats
5371 stats refresh 5s
5372
5373 See also : "stats auth", "stats enable", "stats uri"
5374
5375
5376stats refresh <delay>
5377 Enable statistics with automatic refresh
5378 May be used in sections : defaults | frontend | listen | backend
5379 yes | no | yes | yes
5380 Arguments :
5381 <delay> is the suggested refresh delay, specified in seconds, which will
5382 be returned to the browser consulting the report page. While the
5383 browser is free to apply any delay, it will generally respect it
5384 and refresh the page this every seconds. The refresh interval may
5385 be specified in any other non-default time unit, by suffixing the
5386 unit after the value, as explained at the top of this document.
5387
5388 This statement is useful on monitoring displays with a permanent page
5389 reporting the load balancer's activity. When set, the HTML report page will
5390 include a link "refresh"/"stop refresh" so that the user can select whether
5391 he wants automatic refresh of the page or not.
5392
5393 Though this statement alone is enough to enable statistics reporting, it is
5394 recommended to set all other settings in order to avoid relying on default
5395 unobvious parameters.
5396
5397 Example :
5398 # public access (limited to this backend only)
5399 backend public_www
5400 server srv1 192.168.0.1:80
5401 stats enable
5402 stats hide-version
5403 stats scope .
5404 stats uri /admin?stats
5405 stats realm Haproxy\ Statistics
5406 stats auth admin1:AdMiN123
5407 stats auth admin2:AdMiN321
5408
5409 # internal monitoring access (unlimited)
5410 backend private_monitoring
5411 stats enable
5412 stats uri /admin?stats
5413 stats refresh 5s
5414
5415 See also : "stats auth", "stats enable", "stats realm", "stats uri"
5416
5417
5418stats scope { <name> | "." }
5419 Enable statistics and limit access scope
5420 May be used in sections : defaults | frontend | listen | backend
5421 yes | no | yes | yes
5422 Arguments :
5423 <name> is the name of a listen, frontend or backend section to be
5424 reported. The special name "." (a single dot) designates the
5425 section in which the statement appears.
5426
5427 When this statement is specified, only the sections enumerated with this
5428 statement will appear in the report. All other ones will be hidden. This
5429 statement may appear as many times as needed if multiple sections need to be
5430 reported. Please note that the name checking is performed as simple string
5431 comparisons, and that it is never checked that a give section name really
5432 exists.
5433
5434 Though this statement alone is enough to enable statistics reporting, it is
5435 recommended to set all other settings in order to avoid relying on default
5436 unobvious parameters.
5437
5438 Example :
5439 # public access (limited to this backend only)
5440 backend public_www
5441 server srv1 192.168.0.1:80
5442 stats enable
5443 stats hide-version
5444 stats scope .
5445 stats uri /admin?stats
5446 stats realm Haproxy\ Statistics
5447 stats auth admin1:AdMiN123
5448 stats auth admin2:AdMiN321
5449
5450 # internal monitoring access (unlimited)
5451 backend private_monitoring
5452 stats enable
5453 stats uri /admin?stats
5454 stats refresh 5s
5455
5456 See also : "stats auth", "stats enable", "stats realm", "stats uri"
5457
Willy Tarreaud63335a2010-02-26 12:56:52 +01005458
Willy Tarreauc9705a12010-07-27 20:05:50 +02005459stats show-desc [ <desc> ]
Willy Tarreaud63335a2010-02-26 12:56:52 +01005460 Enable reporting of a description on the statistics page.
5461 May be used in sections : defaults | frontend | listen | backend
5462 yes | no | yes | yes
5463
Willy Tarreauc9705a12010-07-27 20:05:50 +02005464 <desc> is an optional description to be reported. If unspecified, the
Willy Tarreaud63335a2010-02-26 12:56:52 +01005465 description from global section is automatically used instead.
5466
5467 This statement is useful for users that offer shared services to their
5468 customers, where node or description should be different for each customer.
5469
5470 Though this statement alone is enough to enable statistics reporting, it is
5471 recommended to set all other settings in order to avoid relying on default
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04005472 unobvious parameters. By default description is not shown.
Willy Tarreaud63335a2010-02-26 12:56:52 +01005473
5474 Example :
5475 # internal monitoring access (unlimited)
5476 backend private_monitoring
5477 stats enable
5478 stats show-desc Master node for Europe, Asia, Africa
5479 stats uri /admin?stats
5480 stats refresh 5s
5481
5482 See also: "show-node", "stats enable", "stats uri" and "description" in
5483 global section.
5484
5485
5486stats show-legends
5487 Enable reporting additional informations on the statistics page :
5488 - cap: capabilities (proxy)
5489 - mode: one of tcp, http or health (proxy)
5490 - id: SNMP ID (proxy, socket, server)
5491 - IP (socket, server)
5492 - cookie (backend, server)
5493
5494 Though this statement alone is enough to enable statistics reporting, it is
5495 recommended to set all other settings in order to avoid relying on default
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04005496 unobvious parameters. Default behaviour is not to show this information.
Willy Tarreaud63335a2010-02-26 12:56:52 +01005497
5498 See also: "stats enable", "stats uri".
5499
5500
5501stats show-node [ <name> ]
5502 Enable reporting of a host name on the statistics page.
5503 May be used in sections : defaults | frontend | listen | backend
5504 yes | no | yes | yes
5505 Arguments:
5506 <name> is an optional name to be reported. If unspecified, the
5507 node name from global section is automatically used instead.
5508
5509 This statement is useful for users that offer shared services to their
5510 customers, where node or description might be different on a stats page
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04005511 provided for each customer. Default behaviour is not to show host name.
Willy Tarreaud63335a2010-02-26 12:56:52 +01005512
5513 Though this statement alone is enough to enable statistics reporting, it is
5514 recommended to set all other settings in order to avoid relying on default
5515 unobvious parameters.
5516
5517 Example:
5518 # internal monitoring access (unlimited)
5519 backend private_monitoring
5520 stats enable
5521 stats show-node Europe-1
5522 stats uri /admin?stats
5523 stats refresh 5s
5524
5525 See also: "show-desc", "stats enable", "stats uri", and "node" in global
5526 section.
5527
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005528
5529stats uri <prefix>
5530 Enable statistics and define the URI prefix to access them
5531 May be used in sections : defaults | frontend | listen | backend
5532 yes | no | yes | yes
5533 Arguments :
5534 <prefix> is the prefix of any URI which will be redirected to stats. This
5535 prefix may contain a question mark ('?') to indicate part of a
5536 query string.
5537
5538 The statistics URI is intercepted on the relayed traffic, so it appears as a
5539 page within the normal application. It is strongly advised to ensure that the
5540 selected URI will never appear in the application, otherwise it will never be
5541 possible to reach it in the application.
5542
5543 The default URI compiled in haproxy is "/haproxy?stats", but this may be
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005544 changed at build time, so it's better to always explicitly specify it here.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005545 It is generally a good idea to include a question mark in the URI so that
5546 intermediate proxies refrain from caching the results. Also, since any string
5547 beginning with the prefix will be accepted as a stats request, the question
5548 mark helps ensuring that no valid URI will begin with the same words.
5549
5550 It is sometimes very convenient to use "/" as the URI prefix, and put that
5551 statement in a "listen" instance of its own. That makes it easy to dedicate
5552 an address or a port to statistics only.
5553
5554 Though this statement alone is enough to enable statistics reporting, it is
5555 recommended to set all other settings in order to avoid relying on default
5556 unobvious parameters.
5557
5558 Example :
5559 # public access (limited to this backend only)
5560 backend public_www
5561 server srv1 192.168.0.1:80
5562 stats enable
5563 stats hide-version
5564 stats scope .
5565 stats uri /admin?stats
5566 stats realm Haproxy\ Statistics
5567 stats auth admin1:AdMiN123
5568 stats auth admin2:AdMiN321
5569
5570 # internal monitoring access (unlimited)
5571 backend private_monitoring
5572 stats enable
5573 stats uri /admin?stats
5574 stats refresh 5s
5575
5576 See also : "stats auth", "stats enable", "stats realm"
5577
5578
Willy Tarreaud63335a2010-02-26 12:56:52 +01005579stick match <pattern> [table <table>] [{if | unless} <cond>]
5580 Define a request pattern matching condition to stick a user to a server
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005581 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaud63335a2010-02-26 12:56:52 +01005582 no | no | yes | yes
Willy Tarreaub937b7e2010-01-12 15:27:54 +01005583
5584 Arguments :
5585 <pattern> is a pattern extraction rule as described in section 7.8. It
5586 describes what elements of the incoming request or connection
5587 will be analysed in the hope to find a matching entry in a
5588 stickiness table. This rule is mandatory.
5589
5590 <table> is an optional stickiness table name. If unspecified, the same
5591 backend's table is used. A stickiness table is declared using
5592 the "stick-table" statement.
5593
5594 <cond> is an optional matching condition. It makes it possible to match
5595 on a certain criterion only when other conditions are met (or
5596 not met). For instance, it could be used to match on a source IP
5597 address except when a request passes through a known proxy, in
5598 which case we'd match on a header containing that IP address.
5599
5600 Some protocols or applications require complex stickiness rules and cannot
5601 always simply rely on cookies nor hashing. The "stick match" statement
5602 describes a rule to extract the stickiness criterion from an incoming request
5603 or connection. See section 7 for a complete list of possible patterns and
5604 transformation rules.
5605
5606 The table has to be declared using the "stick-table" statement. It must be of
5607 a type compatible with the pattern. By default it is the one which is present
5608 in the same backend. It is possible to share a table with other backends by
5609 referencing it using the "table" keyword. If another table is referenced,
5610 the server's ID inside the backends are used. By default, all server IDs
5611 start at 1 in each backend, so the server ordering is enough. But in case of
5612 doubt, it is highly recommended to force server IDs using their "id" setting.
5613
5614 It is possible to restrict the conditions where a "stick match" statement
5615 will apply, using "if" or "unless" followed by a condition. See section 7 for
5616 ACL based conditions.
5617
5618 There is no limit on the number of "stick match" statements. The first that
5619 applies and matches will cause the request to be directed to the same server
5620 as was used for the request which created the entry. That way, multiple
5621 matches can be used as fallbacks.
5622
5623 The stick rules are checked after the persistence cookies, so they will not
5624 affect stickiness if a cookie has already been used to select a server. That
5625 way, it becomes very easy to insert cookies and match on IP addresses in
5626 order to maintain stickiness between HTTP and HTTPS.
5627
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01005628 Note : Consider not using this feature in multi-process mode (nbproc > 1)
5629 unless you know what you do : memory is not shared between the
5630 processes, which can result in random behaviours.
5631
Willy Tarreaub937b7e2010-01-12 15:27:54 +01005632 Example :
5633 # forward SMTP users to the same server they just used for POP in the
5634 # last 30 minutes
5635 backend pop
5636 mode tcp
5637 balance roundrobin
5638 stick store-request src
5639 stick-table type ip size 200k expire 30m
5640 server s1 192.168.1.1:110
5641 server s2 192.168.1.1:110
5642
5643 backend smtp
5644 mode tcp
5645 balance roundrobin
5646 stick match src table pop
5647 server s1 192.168.1.1:25
5648 server s2 192.168.1.1:25
5649
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01005650 See also : "stick-table", "stick on", "nbproc", "bind-process" and section 7
5651 about ACLs and pattern extraction.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01005652
5653
5654stick on <pattern> [table <table>] [{if | unless} <condition>]
5655 Define a request pattern to associate a user to a server
5656 May be used in sections : defaults | frontend | listen | backend
5657 no | no | yes | yes
5658
5659 Note : This form is exactly equivalent to "stick match" followed by
5660 "stick store-request", all with the same arguments. Please refer
5661 to both keywords for details. It is only provided as a convenience
5662 for writing more maintainable configurations.
5663
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01005664 Note : Consider not using this feature in multi-process mode (nbproc > 1)
5665 unless you know what you do : memory is not shared between the
5666 processes, which can result in random behaviours.
5667
Willy Tarreaub937b7e2010-01-12 15:27:54 +01005668 Examples :
5669 # The following form ...
Willy Tarreauec579d82010-02-26 19:15:04 +01005670 stick on src table pop if !localhost
Willy Tarreaub937b7e2010-01-12 15:27:54 +01005671
5672 # ...is strictly equivalent to this one :
5673 stick match src table pop if !localhost
5674 stick store-request src table pop if !localhost
5675
5676
5677 # Use cookie persistence for HTTP, and stick on source address for HTTPS as
5678 # well as HTTP without cookie. Share the same table between both accesses.
5679 backend http
5680 mode http
5681 balance roundrobin
5682 stick on src table https
5683 cookie SRV insert indirect nocache
5684 server s1 192.168.1.1:80 cookie s1
5685 server s2 192.168.1.1:80 cookie s2
5686
5687 backend https
5688 mode tcp
5689 balance roundrobin
5690 stick-table type ip size 200k expire 30m
5691 stick on src
5692 server s1 192.168.1.1:443
5693 server s2 192.168.1.1:443
5694
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01005695 See also : "stick match", "stick store-request", "nbproc" and "bind-process".
Willy Tarreaub937b7e2010-01-12 15:27:54 +01005696
5697
5698stick store-request <pattern> [table <table>] [{if | unless} <condition>]
5699 Define a request pattern used to create an entry in a stickiness table
5700 May be used in sections : defaults | frontend | listen | backend
5701 no | no | yes | yes
5702
5703 Arguments :
5704 <pattern> is a pattern extraction rule as described in section 7.8. It
5705 describes what elements of the incoming request or connection
5706 will be analysed, extracted and stored in the table once a
5707 server is selected.
5708
5709 <table> is an optional stickiness table name. If unspecified, the same
5710 backend's table is used. A stickiness table is declared using
5711 the "stick-table" statement.
5712
5713 <cond> is an optional storage condition. It makes it possible to store
5714 certain criteria only when some conditions are met (or not met).
5715 For instance, it could be used to store the source IP address
5716 except when the request passes through a known proxy, in which
5717 case we'd store a converted form of a header containing that IP
5718 address.
5719
5720 Some protocols or applications require complex stickiness rules and cannot
5721 always simply rely on cookies nor hashing. The "stick store-request" statement
5722 describes a rule to decide what to extract from the request and when to do
5723 it, in order to store it into a stickiness table for further requests to
5724 match it using the "stick match" statement. Obviously the extracted part must
5725 make sense and have a chance to be matched in a further request. Storing a
5726 client's IP address for instance often makes sense. Storing an ID found in a
5727 URL parameter also makes sense. Storing a source port will almost never make
5728 any sense because it will be randomly matched. See section 7 for a complete
5729 list of possible patterns and transformation rules.
5730
5731 The table has to be declared using the "stick-table" statement. It must be of
5732 a type compatible with the pattern. By default it is the one which is present
5733 in the same backend. It is possible to share a table with other backends by
5734 referencing it using the "table" keyword. If another table is referenced,
5735 the server's ID inside the backends are used. By default, all server IDs
5736 start at 1 in each backend, so the server ordering is enough. But in case of
5737 doubt, it is highly recommended to force server IDs using their "id" setting.
5738
5739 It is possible to restrict the conditions where a "stick store-request"
5740 statement will apply, using "if" or "unless" followed by a condition. This
5741 condition will be evaluated while parsing the request, so any criteria can be
5742 used. See section 7 for ACL based conditions.
5743
5744 There is no limit on the number of "stick store-request" statements, but
5745 there is a limit of 8 simultaneous stores per request or response. This
5746 makes it possible to store up to 8 criteria, all extracted from either the
5747 request or the response, regardless of the number of rules. Only the 8 first
5748 ones which match will be kept. Using this, it is possible to feed multiple
5749 tables at once in the hope to increase the chance to recognize a user on
5750 another protocol or access method.
5751
5752 The "store-request" rules are evaluated once the server connection has been
5753 established, so that the table will contain the real server that processed
5754 the request.
5755
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01005756 Note : Consider not using this feature in multi-process mode (nbproc > 1)
5757 unless you know what you do : memory is not shared between the
5758 processes, which can result in random behaviours.
5759
Willy Tarreaub937b7e2010-01-12 15:27:54 +01005760 Example :
5761 # forward SMTP users to the same server they just used for POP in the
5762 # last 30 minutes
5763 backend pop
5764 mode tcp
5765 balance roundrobin
5766 stick store-request src
5767 stick-table type ip size 200k expire 30m
5768 server s1 192.168.1.1:110
5769 server s2 192.168.1.1:110
5770
5771 backend smtp
5772 mode tcp
5773 balance roundrobin
5774 stick match src table pop
5775 server s1 192.168.1.1:25
5776 server s2 192.168.1.1:25
5777
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01005778 See also : "stick-table", "stick on", "nbproc", "bind-process" and section 7
5779 about ACLs and pattern extraction.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01005780
5781
Emeric Brun7c6b82e2010-09-24 16:34:28 +02005782stick-table type {ip | integer | string [len <length>] | binary [len <length>]}
Emeric Brunf099e792010-09-27 12:05:28 +02005783 size <size> [expire <expire>] [nopurge] [peers <peersect>]
5784 [store <data_type>]*
Willy Tarreaub937b7e2010-01-12 15:27:54 +01005785 Configure the stickiness table for the current backend
5786 May be used in sections : defaults | frontend | listen | backend
Willy Tarreauc00cdc22010-06-06 16:48:26 +02005787 no | yes | yes | yes
Willy Tarreaub937b7e2010-01-12 15:27:54 +01005788
5789 Arguments :
5790 ip a table declared with "type ip" will only store IPv4 addresses.
5791 This form is very compact (about 50 bytes per entry) and allows
5792 very fast entry lookup and stores with almost no overhead. This
5793 is mainly used to store client source IP addresses.
5794
David du Colombier9a6d3c92011-03-17 10:40:24 +01005795 ipv6 a table declared with "type ipv6" will only store IPv6 addresses.
5796 This form is very compact (about 60 bytes per entry) and allows
5797 very fast entry lookup and stores with almost no overhead. This
5798 is mainly used to store client source IP addresses.
5799
Willy Tarreaub937b7e2010-01-12 15:27:54 +01005800 integer a table declared with "type integer" will store 32bit integers
5801 which can represent a client identifier found in a request for
5802 instance.
5803
5804 string a table declared with "type string" will store substrings of up
5805 to <len> characters. If the string provided by the pattern
5806 extractor is larger than <len>, it will be truncated before
5807 being stored. During matching, at most <len> characters will be
5808 compared between the string in the table and the extracted
5809 pattern. When not specified, the string is automatically limited
Emeric Brun7c6b82e2010-09-24 16:34:28 +02005810 to 32 characters.
5811
5812 binary a table declared with "type binary" will store binary blocks
5813 of <len> bytes. If the block provided by the pattern
5814 extractor is larger than <len>, it will be truncated before
5815 being stored. If the block provided by the pattern extractor
5816 is shorter than <len>, it will be padded by 0. When not
5817 specified, the block is automatically limited to 32 bytes.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01005818
5819 <length> is the maximum number of characters that will be stored in a
Emeric Brun7c6b82e2010-09-24 16:34:28 +02005820 "string" type table (See type "string" above). Or the number
5821 of bytes of the block in "binary" type table. Be careful when
Willy Tarreaub937b7e2010-01-12 15:27:54 +01005822 changing this parameter as memory usage will proportionally
5823 increase.
5824
5825 <size> is the maximum number of entries that can fit in the table. This
Cyril Bonté78caf842010-03-10 22:41:43 +01005826 value directly impacts memory usage. Count approximately
5827 50 bytes per entry, plus the size of a string if any. The size
5828 supports suffixes "k", "m", "g" for 2^10, 2^20 and 2^30 factors.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01005829
5830 [nopurge] indicates that we refuse to purge older entries when the table
5831 is full. When not specified and the table is full when haproxy
5832 wants to store an entry in it, it will flush a few of the oldest
5833 entries in order to release some space for the new ones. This is
5834 most often the desired behaviour. In some specific cases, it
5835 be desirable to refuse new entries instead of purging the older
5836 ones. That may be the case when the amount of data to store is
5837 far above the hardware limits and we prefer not to offer access
5838 to new clients than to reject the ones already connected. When
5839 using this parameter, be sure to properly set the "expire"
5840 parameter (see below).
5841
Emeric Brunf099e792010-09-27 12:05:28 +02005842 <peersect> is the name of the peers section to use for replication. Entries
5843 which associate keys to server IDs are kept synchronized with
5844 the remote peers declared in this section. All entries are also
5845 automatically learned from the local peer (old process) during a
5846 soft restart.
5847
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01005848 NOTE : peers can't be used in multi-process mode.
5849
Willy Tarreaub937b7e2010-01-12 15:27:54 +01005850 <expire> defines the maximum duration of an entry in the table since it
5851 was last created, refreshed or matched. The expiration delay is
5852 defined using the standard time format, similarly as the various
5853 timeouts. The maximum duration is slightly above 24 days. See
5854 section 2.2 for more information. If this delay is not specified,
Cyril Bontédc4d9032012-04-08 21:57:39 +02005855 the session won't automatically expire, but older entries will
Willy Tarreaub937b7e2010-01-12 15:27:54 +01005856 be removed once full. Be sure not to use the "nopurge" parameter
5857 if not expiration delay is specified.
5858
Willy Tarreau08d5f982010-06-06 13:34:54 +02005859 <data_type> is used to store additional information in the stick-table. This
5860 may be used by ACLs in order to control various criteria related
5861 to the activity of the client matching the stick-table. For each
5862 item specified here, the size of each entry will be inflated so
Willy Tarreauc9705a12010-07-27 20:05:50 +02005863 that the additional data can fit. Several data types may be
5864 stored with an entry. Multiple data types may be specified after
5865 the "store" keyword, as a comma-separated list. Alternatively,
5866 it is possible to repeat the "store" keyword followed by one or
5867 several data types. Except for the "server_id" type which is
5868 automatically detected and enabled, all data types must be
5869 explicitly declared to be stored. If an ACL references a data
5870 type which is not stored, the ACL will simply not match. Some
5871 data types require an argument which must be passed just after
5872 the type between parenthesis. See below for the supported data
5873 types and their arguments.
5874
5875 The data types that can be stored with an entry are the following :
5876 - server_id : this is an integer which holds the numeric ID of the server a
5877 request was assigned to. It is used by the "stick match", "stick store",
5878 and "stick on" rules. It is automatically enabled when referenced.
5879
5880 - gpc0 : first General Purpose Counter. It is a positive 32-bit integer
5881 integer which may be used for anything. Most of the time it will be used
5882 to put a special tag on some entries, for instance to note that a
5883 specific behaviour was detected and must be known for future matches.
5884
5885 - conn_cnt : Connection Count. It is a positive 32-bit integer which counts
5886 the absolute number of connections received from clients which matched
5887 this entry. It does not mean the connections were accepted, just that
5888 they were received.
5889
5890 - conn_cur : Current Connections. It is a positive 32-bit integer which
5891 stores the concurrent connection counts for the entry. It is incremented
5892 once an incoming connection matches the entry, and decremented once the
5893 connection leaves. That way it is possible to know at any time the exact
5894 number of concurrent connections for an entry.
5895
5896 - conn_rate(<period>) : frequency counter (takes 12 bytes). It takes an
5897 integer parameter <period> which indicates in milliseconds the length
5898 of the period over which the average is measured. It reports the average
5899 incoming connection rate over that period, in connections per period. The
5900 result is an integer which can be matched using ACLs.
5901
5902 - sess_cnt : Session Count. It is a positive 32-bit integer which counts
5903 the absolute number of sessions received from clients which matched this
5904 entry. A session is a connection that was accepted by the layer 4 rules.
5905
5906 - sess_rate(<period>) : frequency counter (takes 12 bytes). It takes an
5907 integer parameter <period> which indicates in milliseconds the length
5908 of the period over which the average is measured. It reports the average
5909 incoming session rate over that period, in sessions per period. The
5910 result is an integer which can be matched using ACLs.
5911
5912 - http_req_cnt : HTTP request Count. It is a positive 32-bit integer which
5913 counts the absolute number of HTTP requests received from clients which
5914 matched this entry. It does not matter whether they are valid requests or
5915 not. Note that this is different from sessions when keep-alive is used on
5916 the client side.
5917
5918 - http_req_rate(<period>) : frequency counter (takes 12 bytes). It takes an
5919 integer parameter <period> which indicates in milliseconds the length
5920 of the period over which the average is measured. It reports the average
5921 HTTP request rate over that period, in requests per period. The result is
5922 an integer which can be matched using ACLs. It does not matter whether
5923 they are valid requests or not. Note that this is different from sessions
5924 when keep-alive is used on the client side.
5925
5926 - http_err_cnt : HTTP Error Count. It is a positive 32-bit integer which
5927 counts the absolute number of HTTP requests errors induced by clients
5928 which matched this entry. Errors are counted on invalid and truncated
5929 requests, as well as on denied or tarpitted requests, and on failed
5930 authentications. If the server responds with 4xx, then the request is
5931 also counted as an error since it's an error triggered by the client
5932 (eg: vulnerability scan).
5933
5934 - http_err_rate(<period>) : frequency counter (takes 12 bytes). It takes an
5935 integer parameter <period> which indicates in milliseconds the length
5936 of the period over which the average is measured. It reports the average
5937 HTTP request error rate over that period, in requests per period (see
5938 http_err_cnt above for what is accounted as an error). The result is an
5939 integer which can be matched using ACLs.
5940
5941 - bytes_in_cnt : client to server byte count. It is a positive 64-bit
5942 integer which counts the cumulated amount of bytes received from clients
5943 which matched this entry. Headers are included in the count. This may be
5944 used to limit abuse of upload features on photo or video servers.
5945
5946 - bytes_in_rate(<period>) : frequency counter (takes 12 bytes). It takes an
5947 integer parameter <period> which indicates in milliseconds the length
5948 of the period over which the average is measured. It reports the average
5949 incoming bytes rate over that period, in bytes per period. It may be used
5950 to detect users which upload too much and too fast. Warning: with large
5951 uploads, it is possible that the amount of uploaded data will be counted
5952 once upon termination, thus causing spikes in the average transfer speed
5953 instead of having a smooth one. This may partially be smoothed with
5954 "option contstats" though this is not perfect yet. Use of byte_in_cnt is
5955 recommended for better fairness.
5956
5957 - bytes_out_cnt : server to client byte count. It is a positive 64-bit
5958 integer which counts the cumulated amount of bytes sent to clients which
5959 matched this entry. Headers are included in the count. This may be used
5960 to limit abuse of bots sucking the whole site.
5961
5962 - bytes_out_rate(<period>) : frequency counter (takes 12 bytes). It takes
5963 an integer parameter <period> which indicates in milliseconds the length
5964 of the period over which the average is measured. It reports the average
5965 outgoing bytes rate over that period, in bytes per period. It may be used
5966 to detect users which download too much and too fast. Warning: with large
5967 transfers, it is possible that the amount of transferred data will be
5968 counted once upon termination, thus causing spikes in the average
5969 transfer speed instead of having a smooth one. This may partially be
5970 smoothed with "option contstats" though this is not perfect yet. Use of
5971 byte_out_cnt is recommended for better fairness.
Willy Tarreau08d5f982010-06-06 13:34:54 +02005972
Willy Tarreauc00cdc22010-06-06 16:48:26 +02005973 There is only one stick-table per proxy. At the moment of writing this doc,
5974 it does not seem useful to have multiple tables per proxy. If this happens
Willy Tarreaub937b7e2010-01-12 15:27:54 +01005975 to be required, simply create a dummy backend with a stick-table in it and
5976 reference it.
5977
5978 It is important to understand that stickiness based on learning information
5979 has some limitations, including the fact that all learned associations are
5980 lost upon restart. In general it can be good as a complement but not always
5981 as an exclusive stickiness.
5982
Willy Tarreauc9705a12010-07-27 20:05:50 +02005983 Last, memory requirements may be important when storing many data types.
5984 Indeed, storing all indicators above at once in each entry requires 116 bytes
5985 per entry, or 116 MB for a 1-million entries table. This is definitely not
5986 something that can be ignored.
5987
5988 Example:
5989 # Keep track of counters of up to 1 million IP addresses over 5 minutes
5990 # and store a general purpose counter and the average connection rate
5991 # computed over a sliding window of 30 seconds.
5992 stick-table type ip size 1m expire 5m store gpc0,conn_rate(30s)
5993
5994 See also : "stick match", "stick on", "stick store-request", section 2.2
David du Colombiera13d1b92011-03-17 10:40:22 +01005995 about time format and section 7 about ACLs.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01005996
5997
Emeric Brun6a1cefa2010-09-24 18:15:17 +02005998stick store-response <pattern> [table <table>] [{if | unless} <condition>]
5999 Define a request pattern used to create an entry in a stickiness table
6000 May be used in sections : defaults | frontend | listen | backend
6001 no | no | yes | yes
6002
6003 Arguments :
6004 <pattern> is a pattern extraction rule as described in section 7.8. It
6005 describes what elements of the response or connection will
6006 be analysed, extracted and stored in the table once a
6007 server is selected.
6008
6009 <table> is an optional stickiness table name. If unspecified, the same
6010 backend's table is used. A stickiness table is declared using
6011 the "stick-table" statement.
6012
6013 <cond> is an optional storage condition. It makes it possible to store
6014 certain criteria only when some conditions are met (or not met).
6015 For instance, it could be used to store the SSL session ID only
6016 when the response is a SSL server hello.
6017
6018 Some protocols or applications require complex stickiness rules and cannot
6019 always simply rely on cookies nor hashing. The "stick store-response"
6020 statement describes a rule to decide what to extract from the response and
6021 when to do it, in order to store it into a stickiness table for further
6022 requests to match it using the "stick match" statement. Obviously the
6023 extracted part must make sense and have a chance to be matched in a further
Cyril Bonté108cf6e2012-04-21 23:30:29 +02006024 request. Storing an ID found in a header of a response makes sense.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02006025 See section 7 for a complete list of possible patterns and transformation
6026 rules.
6027
6028 The table has to be declared using the "stick-table" statement. It must be of
6029 a type compatible with the pattern. By default it is the one which is present
6030 in the same backend. It is possible to share a table with other backends by
6031 referencing it using the "table" keyword. If another table is referenced,
6032 the server's ID inside the backends are used. By default, all server IDs
6033 start at 1 in each backend, so the server ordering is enough. But in case of
6034 doubt, it is highly recommended to force server IDs using their "id" setting.
6035
6036 It is possible to restrict the conditions where a "stick store-response"
6037 statement will apply, using "if" or "unless" followed by a condition. This
6038 condition will be evaluated while parsing the response, so any criteria can
6039 be used. See section 7 for ACL based conditions.
6040
6041 There is no limit on the number of "stick store-response" statements, but
6042 there is a limit of 8 simultaneous stores per request or response. This
6043 makes it possible to store up to 8 criteria, all extracted from either the
6044 request or the response, regardless of the number of rules. Only the 8 first
6045 ones which match will be kept. Using this, it is possible to feed multiple
6046 tables at once in the hope to increase the chance to recognize a user on
6047 another protocol or access method.
6048
6049 The table will contain the real server that processed the request.
6050
6051 Example :
6052 # Learn SSL session ID from both request and response and create affinity.
6053 backend https
6054 mode tcp
6055 balance roundrobin
Cyril Bontédc4d9032012-04-08 21:57:39 +02006056 # maximum SSL session ID length is 32 bytes.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02006057 stick-table type binary len 32 size 30k expire 30m
Cyril Bonté108cf6e2012-04-21 23:30:29 +02006058
Emeric Brun6a1cefa2010-09-24 18:15:17 +02006059 acl clienthello req_ssl_hello_type 1
6060 acl serverhello rep_ssl_hello_type 2
6061
6062 # use tcp content accepts to detects ssl client and server hello.
6063 tcp-request inspect-delay 5s
6064 tcp-request content accept if clienthello
6065
6066 # no timeout on response inspect delay by default.
6067 tcp-response content accept if serverhello
Cyril Bonté108cf6e2012-04-21 23:30:29 +02006068
Emeric Brun6a1cefa2010-09-24 18:15:17 +02006069 # SSL session ID (SSLID) may be present on a client or server hello.
6070 # Its length is coded on 1 byte at offset 43 and its value starts
6071 # at offset 44.
6072
6073 # Match and learn on request if client hello.
6074 stick on payload_lv(43,1) if clienthello
6075
6076 # Learn on response if server hello.
6077 stick store-response payload_lv(43,1) if serverhello
Cyril Bontédc4d9032012-04-08 21:57:39 +02006078
Emeric Brun6a1cefa2010-09-24 18:15:17 +02006079 server s1 192.168.1.1:443
6080 server s2 192.168.1.1:443
6081
6082 See also : "stick-table", "stick on", and section 7 about ACLs and pattern
6083 extraction.
6084
6085
Willy Tarreaue9656522010-08-17 15:40:09 +02006086tcp-request connection <action> [{if | unless} <condition>]
6087 Perform an action on an incoming connection depending on a layer 4 condition
Willy Tarreau1a687942010-05-23 22:40:30 +02006088 May be used in sections : defaults | frontend | listen | backend
6089 no | yes | yes | no
Willy Tarreaue9656522010-08-17 15:40:09 +02006090 Arguments :
6091 <action> defines the action to perform if the condition applies. Valid
6092 actions include : "accept", "reject", "track-sc1", "track-sc2".
6093 See below for more details.
Willy Tarreau1a687942010-05-23 22:40:30 +02006094
Willy Tarreaue9656522010-08-17 15:40:09 +02006095 <condition> is a standard layer4-only ACL-based condition (see section 7).
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006096
6097 Immediately after acceptance of a new incoming connection, it is possible to
6098 evaluate some conditions to decide whether this connection must be accepted
Willy Tarreaue9656522010-08-17 15:40:09 +02006099 or dropped or have its counters tracked. Those conditions cannot make use of
6100 any data contents because the connection has not been read from yet, and the
6101 buffers are not yet allocated. This is used to selectively and very quickly
6102 accept or drop connections from various sources with a very low overhead. If
6103 some contents need to be inspected in order to take the decision, the
6104 "tcp-request content" statements must be used instead.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006105
Willy Tarreaue9656522010-08-17 15:40:09 +02006106 The "tcp-request connection" rules are evaluated in their exact declaration
6107 order. If no rule matches or if there is no rule, the default action is to
6108 accept the incoming connection. There is no specific limit to the number of
6109 rules which may be inserted.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006110
Willy Tarreaue9656522010-08-17 15:40:09 +02006111 Three types of actions are supported :
6112 - accept :
6113 accepts the connection if the condition is true (when used with "if")
6114 or false (when used with "unless"). The first such rule executed ends
6115 the rules evaluation.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006116
Willy Tarreaue9656522010-08-17 15:40:09 +02006117 - reject :
6118 rejects the connection if the condition is true (when used with "if")
6119 or false (when used with "unless"). The first such rule executed ends
6120 the rules evaluation. Rejected connections do not even become a
6121 session, which is why they are accounted separately for in the stats,
6122 as "denied connections". They are not considered for the session
6123 rate-limit and are not logged either. The reason is that these rules
6124 should only be used to filter extremely high connection rates such as
6125 the ones encountered during a massive DDoS attack. Under these extreme
6126 conditions, the simple action of logging each event would make the
6127 system collapse and would considerably lower the filtering capacity. If
6128 logging is absolutely desired, then "tcp-request content" rules should
6129 be used instead.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006130
Willy Tarreaue9656522010-08-17 15:40:09 +02006131 - { track-sc1 | track-sc2 } <key> [table <table>] :
6132 enables tracking of sticky counters from current connection. These
6133 rules do not stop evaluation and do not change default action. Two sets
6134 of counters may be simultaneously tracked by the same connection. The
6135 first "track-sc1" rule executed enables tracking of the counters of the
6136 specified table as the first set. The first "track-sc2" rule executed
6137 enables tracking of the counters of the specified table as the second
6138 set. It is a recommended practice to use the first set of counters for
6139 the per-frontend counters and the second set for the per-backend ones.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006140
Willy Tarreaue9656522010-08-17 15:40:09 +02006141 These actions take one or two arguments :
6142 <key> is mandatory, and defines the criterion the tracking key will
6143 be derived from. At the moment, only "src" is supported. With
6144 it, the key will be the connection's source IPv4 address.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006145
Willy Tarreaue9656522010-08-17 15:40:09 +02006146 <table> is an optional table to be used instead of the default one,
6147 which is the stick-table declared in the current proxy. All
6148 the counters for the matches and updates for the key will
6149 then be performed in that table until the session ends.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006150
Willy Tarreaue9656522010-08-17 15:40:09 +02006151 Once a "track-sc*" rule is executed, the key is looked up in the table
6152 and if it is not found, an entry is allocated for it. Then a pointer to
6153 that entry is kept during all the session's life, and this entry's
6154 counters are updated as often as possible, every time the session's
6155 counters are updated, and also systematically when the session ends.
6156 If the entry tracks concurrent connection counters, one connection is
6157 counted for as long as the entry is tracked, and the entry will not
6158 expire during that time. Tracking counters also provides a performance
6159 advantage over just checking the keys, because only one table lookup is
6160 performed for all ACL checks that make use of it.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006161
Willy Tarreaue9656522010-08-17 15:40:09 +02006162 Note that the "if/unless" condition is optional. If no condition is set on
6163 the action, it is simply performed unconditionally. That can be useful for
6164 "track-sc*" actions as well as for changing the default action to a reject.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006165
Willy Tarreaue9656522010-08-17 15:40:09 +02006166 Example: accept all connections from white-listed hosts, reject too fast
6167 connection without counting them, and track accepted connections.
6168 This results in connection rate being capped from abusive sources.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006169
Willy Tarreaue9656522010-08-17 15:40:09 +02006170 tcp-request connection accept if { src -f /etc/haproxy/whitelist.lst }
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006171 tcp-request connection reject if { src_conn_rate gt 10 }
Willy Tarreaue9656522010-08-17 15:40:09 +02006172 tcp-request connection track-sc1 src
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006173
Willy Tarreaue9656522010-08-17 15:40:09 +02006174 Example: accept all connections from white-listed hosts, count all other
6175 connections and reject too fast ones. This results in abusive ones
6176 being blocked as long as they don't slow down.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006177
Willy Tarreaue9656522010-08-17 15:40:09 +02006178 tcp-request connection accept if { src -f /etc/haproxy/whitelist.lst }
6179 tcp-request connection track-sc1 src
6180 tcp-request connection reject if { sc1_conn_rate gt 10 }
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006181
6182 See section 7 about ACL usage.
6183
Willy Tarreaue9656522010-08-17 15:40:09 +02006184 See also : "tcp-request content", "stick-table"
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006185
6186
Willy Tarreaue9656522010-08-17 15:40:09 +02006187tcp-request content <action> [{if | unless} <condition>]
6188 Perform an action on a new session depending on a layer 4-7 condition
Willy Tarreau62644772008-07-16 18:36:06 +02006189 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaufb356202010-08-03 14:02:05 +02006190 no | yes | yes | yes
Willy Tarreaue9656522010-08-17 15:40:09 +02006191 Arguments :
6192 <action> defines the action to perform if the condition applies. Valid
6193 actions include : "accept", "reject", "track-sc1", "track-sc2".
6194 See "tcp-request connection" above for their signification.
Willy Tarreau62644772008-07-16 18:36:06 +02006195
Willy Tarreaue9656522010-08-17 15:40:09 +02006196 <condition> is a standard layer 4-7 ACL-based condition (see section 7).
Willy Tarreau62644772008-07-16 18:36:06 +02006197
Willy Tarreaue9656522010-08-17 15:40:09 +02006198 A request's contents can be analysed at an early stage of request processing
6199 called "TCP content inspection". During this stage, ACL-based rules are
6200 evaluated every time the request contents are updated, until either an
6201 "accept" or a "reject" rule matches, or the TCP request inspection delay
6202 expires with no matching rule.
Willy Tarreau62644772008-07-16 18:36:06 +02006203
Willy Tarreaue9656522010-08-17 15:40:09 +02006204 The first difference between these rules and "tcp-request connection" rules
6205 is that "tcp-request content" rules can make use of contents to take a
6206 decision. Most often, these decisions will consider a protocol recognition or
6207 validity. The second difference is that content-based rules can be used in
6208 both frontends and backends. In frontends, they will be evaluated upon new
6209 connections. In backends, they will be evaluated once a session is assigned
6210 a backend. This means that a single frontend connection may be evaluated
6211 several times by one or multiple backends when a session gets reassigned
6212 (for instance after a client-side HTTP keep-alive request).
Willy Tarreau62644772008-07-16 18:36:06 +02006213
Willy Tarreaue9656522010-08-17 15:40:09 +02006214 Content-based rules are evaluated in their exact declaration order. If no
6215 rule matches or if there is no rule, the default action is to accept the
6216 contents. There is no specific limit to the number of rules which may be
6217 inserted.
Willy Tarreau62644772008-07-16 18:36:06 +02006218
Willy Tarreaue9656522010-08-17 15:40:09 +02006219 Three types of actions are supported :
6220 - accept :
6221 - reject :
6222 - { track-sc1 | track-sc2 } <key> [table <table>]
Willy Tarreau62644772008-07-16 18:36:06 +02006223
Willy Tarreaue9656522010-08-17 15:40:09 +02006224 They have the same meaning as their counter-parts in "tcp-request connection"
6225 so please refer to that section for a complete description.
Willy Tarreau62644772008-07-16 18:36:06 +02006226
Willy Tarreaue9656522010-08-17 15:40:09 +02006227 Also, it is worth noting that if sticky counters are tracked from a rule
6228 defined in a backend, this tracking will automatically end when the session
6229 releases the backend. That allows per-backend counter tracking even in case
6230 of HTTP keep-alive requests when the backend changes. While there is nothing
6231 mandatory about it, it is recommended to use the track-sc1 pointer to track
6232 per-frontend counters and track-sc2 to track per-backend counters.
Willy Tarreau62644772008-07-16 18:36:06 +02006233
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01006234 Note that the "if/unless" condition is optional. If no condition is set on
Willy Tarreaue9656522010-08-17 15:40:09 +02006235 the action, it is simply performed unconditionally. That can be useful for
6236 "track-sc*" actions as well as for changing the default action to a reject.
Willy Tarreau62644772008-07-16 18:36:06 +02006237
Willy Tarreaue9656522010-08-17 15:40:09 +02006238 It is perfectly possible to match layer 7 contents with "tcp-request content"
Willy Tarreauc0239e02012-04-16 14:42:55 +02006239 rules, since HTTP-specific ACL matches are able to preliminarily parse the
6240 contents of a buffer before extracting the required data. If the buffered
6241 contents do not parse as a valid HTTP message, then the ACL does not match.
6242 The parser which is involved there is exactly the same as for all other HTTP
6243 processing, so there is no risk of parsing something differently.
Willy Tarreau62644772008-07-16 18:36:06 +02006244
6245 Example:
Willy Tarreaue9656522010-08-17 15:40:09 +02006246 # Accept HTTP requests containing a Host header saying "example.com"
6247 # and reject everything else.
6248 acl is_host_com hdr(Host) -i example.com
6249 tcp-request inspect-delay 30s
Willy Tarreauc0239e02012-04-16 14:42:55 +02006250 tcp-request content accept if is_host_com
Willy Tarreaue9656522010-08-17 15:40:09 +02006251 tcp-request content reject
6252
6253 Example:
Willy Tarreau62644772008-07-16 18:36:06 +02006254 # reject SMTP connection if client speaks first
6255 tcp-request inspect-delay 30s
6256 acl content_present req_len gt 0
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006257 tcp-request content reject if content_present
Willy Tarreau62644772008-07-16 18:36:06 +02006258
6259 # Forward HTTPS connection only if client speaks
6260 tcp-request inspect-delay 30s
6261 acl content_present req_len gt 0
Willy Tarreau68c03ab2010-08-06 15:08:45 +02006262 tcp-request content accept if content_present
Willy Tarreaue9656522010-08-17 15:40:09 +02006263 tcp-request content reject
6264
6265 Example: track per-frontend and per-backend counters, block abusers at the
6266 frontend when the backend detects abuse.
6267
6268 frontend http
6269 # Use General Purpose Couter 0 in SC1 as a global abuse counter
6270 # protecting all our sites
6271 stick-table type ip size 1m expire 5m store gpc0
6272 tcp-request connection track-sc1 src
6273 tcp-request connection reject if { sc1_get_gpc0 gt 0 }
6274 ...
6275 use_backend http_dynamic if { path_end .php }
6276
6277 backend http_dynamic
6278 # if a source makes too fast requests to this dynamic site (tracked
6279 # by SC2), block it globally in the frontend.
6280 stick-table type ip size 1m expire 5m store http_req_rate(10s)
6281 acl click_too_fast sc2_http_req_rate gt 10
6282 acl mark_as_abuser sc1_inc_gpc0
6283 tcp-request content track-sc2 src
6284 tcp-request content reject if click_too_fast mark_as_abuser
Willy Tarreau62644772008-07-16 18:36:06 +02006285
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006286 See section 7 about ACL usage.
Willy Tarreau62644772008-07-16 18:36:06 +02006287
Willy Tarreaue9656522010-08-17 15:40:09 +02006288 See also : "tcp-request connection", "tcp-request inspect-delay"
Willy Tarreau62644772008-07-16 18:36:06 +02006289
6290
6291tcp-request inspect-delay <timeout>
6292 Set the maximum allowed time to wait for data during content inspection
6293 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaufb356202010-08-03 14:02:05 +02006294 no | yes | yes | yes
Willy Tarreau62644772008-07-16 18:36:06 +02006295 Arguments :
6296 <timeout> is the timeout value specified in milliseconds by default, but
6297 can be in any other unit if the number is suffixed by the unit,
6298 as explained at the top of this document.
6299
6300 People using haproxy primarily as a TCP relay are often worried about the
6301 risk of passing any type of protocol to a server without any analysis. In
6302 order to be able to analyze the request contents, we must first withhold
6303 the data then analyze them. This statement simply enables withholding of
6304 data for at most the specified amount of time.
6305
Willy Tarreaufb356202010-08-03 14:02:05 +02006306 TCP content inspection applies very early when a connection reaches a
6307 frontend, then very early when the connection is forwarded to a backend. This
6308 means that a connection may experience a first delay in the frontend and a
6309 second delay in the backend if both have tcp-request rules.
6310
Willy Tarreau62644772008-07-16 18:36:06 +02006311 Note that when performing content inspection, haproxy will evaluate the whole
6312 rules for every new chunk which gets in, taking into account the fact that
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01006313 those data are partial. If no rule matches before the aforementioned delay,
Willy Tarreau62644772008-07-16 18:36:06 +02006314 a last check is performed upon expiration, this time considering that the
Willy Tarreaud869b242009-03-15 14:43:58 +01006315 contents are definitive. If no delay is set, haproxy will not wait at all
6316 and will immediately apply a verdict based on the available information.
6317 Obviously this is unlikely to be very useful and might even be racy, so such
6318 setups are not recommended.
Willy Tarreau62644772008-07-16 18:36:06 +02006319
6320 As soon as a rule matches, the request is released and continues as usual. If
6321 the timeout is reached and no rule matches, the default policy will be to let
6322 it pass through unaffected.
6323
6324 For most protocols, it is enough to set it to a few seconds, as most clients
6325 send the full request immediately upon connection. Add 3 or more seconds to
6326 cover TCP retransmits but that's all. For some protocols, it may make sense
Willy Tarreaud72758d2010-01-12 10:42:19 +01006327 to use large values, for instance to ensure that the client never talks
Willy Tarreau62644772008-07-16 18:36:06 +02006328 before the server (eg: SMTP), or to wait for a client to talk before passing
6329 data to the server (eg: SSL). Note that the client timeout must cover at
Willy Tarreaub824b002010-09-29 16:36:16 +02006330 least the inspection delay, otherwise it will expire first. If the client
6331 closes the connection or if the buffer is full, the delay immediately expires
6332 since the contents will not be able to change anymore.
Willy Tarreau62644772008-07-16 18:36:06 +02006333
Willy Tarreau55165fe2009-05-10 12:02:55 +02006334 See also : "tcp-request content accept", "tcp-request content reject",
Willy Tarreau62644772008-07-16 18:36:06 +02006335 "timeout client".
6336
6337
Emeric Brun0a3b67f2010-09-24 15:34:53 +02006338tcp-response content <action> [{if | unless} <condition>]
6339 Perform an action on a session response depending on a layer 4-7 condition
6340 May be used in sections : defaults | frontend | listen | backend
6341 no | no | yes | yes
6342 Arguments :
6343 <action> defines the action to perform if the condition applies. Valid
6344 actions include : "accept", "reject".
6345 See "tcp-request connection" above for their signification.
6346
6347 <condition> is a standard layer 4-7 ACL-based condition (see section 7).
6348
6349 Response contents can be analysed at an early stage of response processing
6350 called "TCP content inspection". During this stage, ACL-based rules are
6351 evaluated every time the response contents are updated, until either an
6352 "accept" or a "reject" rule matches, or a TCP response inspection delay is
Cyril Bonté108cf6e2012-04-21 23:30:29 +02006353 set and expires with no matching rule.
Emeric Brun0a3b67f2010-09-24 15:34:53 +02006354
6355 Most often, these decisions will consider a protocol recognition or validity.
6356
6357 Content-based rules are evaluated in their exact declaration order. If no
6358 rule matches or if there is no rule, the default action is to accept the
6359 contents. There is no specific limit to the number of rules which may be
6360 inserted.
6361
6362 Two types of actions are supported :
6363 - accept :
6364 accepts the response if the condition is true (when used with "if")
6365 or false (when used with "unless"). The first such rule executed ends
6366 the rules evaluation.
6367
6368 - reject :
6369 rejects the response if the condition is true (when used with "if")
6370 or false (when used with "unless"). The first such rule executed ends
Jamie Gloudonaaa21002012-08-25 00:18:33 -04006371 the rules evaluation. Rejected session are immediately closed.
Emeric Brun0a3b67f2010-09-24 15:34:53 +02006372
6373 Note that the "if/unless" condition is optional. If no condition is set on
6374 the action, it is simply performed unconditionally. That can be useful for
6375 for changing the default action to a reject.
6376
Jamie Gloudonaaa21002012-08-25 00:18:33 -04006377 It is perfectly possible to match layer 7 contents with "tcp-response
6378 content" rules, but then it is important to ensure that a full response has
6379 been buffered, otherwise no contents will match. In order to achieve this,
6380 the best solution involves detecting the HTTP protocol during the inspection
Emeric Brun0a3b67f2010-09-24 15:34:53 +02006381 period.
6382
6383 See section 7 about ACL usage.
6384
6385 See also : "tcp-request content", "tcp-response inspect-delay"
6386
6387
6388tcp-response inspect-delay <timeout>
6389 Set the maximum allowed time to wait for a response during content inspection
6390 May be used in sections : defaults | frontend | listen | backend
6391 no | no | yes | yes
6392 Arguments :
6393 <timeout> is the timeout value specified in milliseconds by default, but
6394 can be in any other unit if the number is suffixed by the unit,
6395 as explained at the top of this document.
6396
6397 See also : "tcp-response content", "tcp-request inspect-delay".
6398
6399
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01006400timeout check <timeout>
6401 Set additional check timeout, but only after a connection has been already
6402 established.
6403
6404 May be used in sections: defaults | frontend | listen | backend
6405 yes | no | yes | yes
6406 Arguments:
6407 <timeout> is the timeout value specified in milliseconds by default, but
6408 can be in any other unit if the number is suffixed by the unit,
6409 as explained at the top of this document.
6410
6411 If set, haproxy uses min("timeout connect", "inter") as a connect timeout
6412 for check and "timeout check" as an additional read timeout. The "min" is
6413 used so that people running with *very* long "timeout connect" (eg. those
6414 who needed this due to the queue or tarpit) do not slow down their checks.
Willy Tarreaud7550a22010-02-10 05:10:19 +01006415 (Please also note that there is no valid reason to have such long connect
6416 timeouts, because "timeout queue" and "timeout tarpit" can always be used to
6417 avoid that).
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01006418
6419 If "timeout check" is not set haproxy uses "inter" for complete check
6420 timeout (connect + read) exactly like all <1.3.15 version.
6421
6422 In most cases check request is much simpler and faster to handle than normal
6423 requests and people may want to kick out laggy servers so this timeout should
Willy Tarreau41a340d2008-01-22 12:25:31 +01006424 be smaller than "timeout server".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01006425
6426 This parameter is specific to backends, but can be specified once for all in
6427 "defaults" sections. This is in fact one of the easiest solutions not to
6428 forget about it.
6429
Willy Tarreau41a340d2008-01-22 12:25:31 +01006430 See also: "timeout connect", "timeout queue", "timeout server",
6431 "timeout tarpit".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01006432
6433
Willy Tarreau0ba27502007-12-24 16:55:16 +01006434timeout client <timeout>
6435timeout clitimeout <timeout> (deprecated)
6436 Set the maximum inactivity time on the client side.
6437 May be used in sections : defaults | frontend | listen | backend
6438 yes | yes | yes | no
6439 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01006440 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01006441 can be in any other unit if the number is suffixed by the unit,
6442 as explained at the top of this document.
6443
6444 The inactivity timeout applies when the client is expected to acknowledge or
6445 send data. In HTTP mode, this timeout is particularly important to consider
6446 during the first phase, when the client sends the request, and during the
6447 response while it is reading data sent by the server. The value is specified
6448 in milliseconds by default, but can be in any other unit if the number is
6449 suffixed by the unit, as specified at the top of this document. In TCP mode
6450 (and to a lesser extent, in HTTP mode), it is highly recommended that the
6451 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01006452 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01006453 losses by specifying timeouts that are slightly above multiples of 3 seconds
Willy Tarreauce887fd2012-05-12 12:50:00 +02006454 (eg: 4 or 5 seconds). If some long-lived sessions are mixed with short-lived
6455 sessions (eg: WebSocket and HTTP), it's worth considering "timeout tunnel",
6456 which overrides "timeout client" and "timeout server" for tunnels.
Willy Tarreau0ba27502007-12-24 16:55:16 +01006457
6458 This parameter is specific to frontends, but can be specified once for all in
6459 "defaults" sections. This is in fact one of the easiest solutions not to
6460 forget about it. An unspecified timeout results in an infinite timeout, which
6461 is not recommended. Such a usage is accepted and works but reports a warning
6462 during startup because it may results in accumulation of expired sessions in
6463 the system if the system's timeouts are not configured either.
6464
6465 This parameter replaces the old, deprecated "clitimeout". It is recommended
6466 to use it to write new configurations. The form "timeout clitimeout" is
6467 provided only by backwards compatibility but its use is strongly discouraged.
6468
Willy Tarreauce887fd2012-05-12 12:50:00 +02006469 See also : "clitimeout", "timeout server", "timeout tunnel".
Willy Tarreau0ba27502007-12-24 16:55:16 +01006470
6471
6472timeout connect <timeout>
6473timeout contimeout <timeout> (deprecated)
6474 Set the maximum time to wait for a connection attempt to a server to succeed.
6475 May be used in sections : defaults | frontend | listen | backend
6476 yes | no | yes | yes
6477 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01006478 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01006479 can be in any other unit if the number is suffixed by the unit,
6480 as explained at the top of this document.
6481
6482 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01006483 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreaud72758d2010-01-12 10:42:19 +01006484 cover one or several TCP packet losses by specifying timeouts that are
Willy Tarreau0ba27502007-12-24 16:55:16 +01006485 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01006486 connect timeout also presets both queue and tarpit timeouts to the same value
6487 if these have not been specified.
Willy Tarreau0ba27502007-12-24 16:55:16 +01006488
6489 This parameter is specific to backends, but can be specified once for all in
6490 "defaults" sections. This is in fact one of the easiest solutions not to
6491 forget about it. An unspecified timeout results in an infinite timeout, which
6492 is not recommended. Such a usage is accepted and works but reports a warning
6493 during startup because it may results in accumulation of failed sessions in
6494 the system if the system's timeouts are not configured either.
6495
6496 This parameter replaces the old, deprecated "contimeout". It is recommended
6497 to use it to write new configurations. The form "timeout contimeout" is
6498 provided only by backwards compatibility but its use is strongly discouraged.
6499
Willy Tarreau41a340d2008-01-22 12:25:31 +01006500 See also: "timeout check", "timeout queue", "timeout server", "contimeout",
6501 "timeout tarpit".
Willy Tarreau0ba27502007-12-24 16:55:16 +01006502
6503
Willy Tarreaub16a5742010-01-10 14:46:16 +01006504timeout http-keep-alive <timeout>
6505 Set the maximum allowed time to wait for a new HTTP request to appear
6506 May be used in sections : defaults | frontend | listen | backend
6507 yes | yes | yes | yes
6508 Arguments :
6509 <timeout> is the timeout value specified in milliseconds by default, but
6510 can be in any other unit if the number is suffixed by the unit,
6511 as explained at the top of this document.
6512
6513 By default, the time to wait for a new request in case of keep-alive is set
6514 by "timeout http-request". However this is not always convenient because some
6515 people want very short keep-alive timeouts in order to release connections
6516 faster, and others prefer to have larger ones but still have short timeouts
6517 once the request has started to present itself.
6518
6519 The "http-keep-alive" timeout covers these needs. It will define how long to
6520 wait for a new HTTP request to start coming after a response was sent. Once
6521 the first byte of request has been seen, the "http-request" timeout is used
6522 to wait for the complete request to come. Note that empty lines prior to a
6523 new request do not refresh the timeout and are not counted as a new request.
6524
6525 There is also another difference between the two timeouts : when a connection
6526 expires during timeout http-keep-alive, no error is returned, the connection
6527 just closes. If the connection expires in "http-request" while waiting for a
6528 connection to complete, a HTTP 408 error is returned.
6529
6530 In general it is optimal to set this value to a few tens to hundreds of
6531 milliseconds, to allow users to fetch all objects of a page at once but
6532 without waiting for further clicks. Also, if set to a very small value (eg:
6533 1 millisecond) it will probably only accept pipelined requests but not the
6534 non-pipelined ones. It may be a nice trade-off for very large sites running
Patrick Mézard2382ad62010-05-09 10:43:32 +02006535 with tens to hundreds of thousands of clients.
Willy Tarreaub16a5742010-01-10 14:46:16 +01006536
6537 If this parameter is not set, the "http-request" timeout applies, and if both
6538 are not set, "timeout client" still applies at the lower level. It should be
6539 set in the frontend to take effect, unless the frontend is in TCP mode, in
6540 which case the HTTP backend's timeout will be used.
6541
6542 See also : "timeout http-request", "timeout client".
6543
6544
Willy Tarreau036fae02008-01-06 13:24:40 +01006545timeout http-request <timeout>
6546 Set the maximum allowed time to wait for a complete HTTP request
6547 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaucd7afc02009-07-12 10:03:17 +02006548 yes | yes | yes | yes
Willy Tarreau036fae02008-01-06 13:24:40 +01006549 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01006550 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau036fae02008-01-06 13:24:40 +01006551 can be in any other unit if the number is suffixed by the unit,
6552 as explained at the top of this document.
6553
6554 In order to offer DoS protection, it may be required to lower the maximum
6555 accepted time to receive a complete HTTP request without affecting the client
6556 timeout. This helps protecting against established connections on which
6557 nothing is sent. The client timeout cannot offer a good protection against
6558 this abuse because it is an inactivity timeout, which means that if the
6559 attacker sends one character every now and then, the timeout will not
6560 trigger. With the HTTP request timeout, no matter what speed the client
6561 types, the request will be aborted if it does not complete in time.
6562
6563 Note that this timeout only applies to the header part of the request, and
6564 not to any data. As soon as the empty line is received, this timeout is not
Willy Tarreaub16a5742010-01-10 14:46:16 +01006565 used anymore. It is used again on keep-alive connections to wait for a second
6566 request if "timeout http-keep-alive" is not set.
Willy Tarreau036fae02008-01-06 13:24:40 +01006567
6568 Generally it is enough to set it to a few seconds, as most clients send the
6569 full request immediately upon connection. Add 3 or more seconds to cover TCP
6570 retransmits but that's all. Setting it to very low values (eg: 50 ms) will
6571 generally work on local networks as long as there are no packet losses. This
6572 will prevent people from sending bare HTTP requests using telnet.
6573
6574 If this parameter is not set, the client timeout still applies between each
Willy Tarreaucd7afc02009-07-12 10:03:17 +02006575 chunk of the incoming request. It should be set in the frontend to take
6576 effect, unless the frontend is in TCP mode, in which case the HTTP backend's
6577 timeout will be used.
Willy Tarreau036fae02008-01-06 13:24:40 +01006578
Willy Tarreaub16a5742010-01-10 14:46:16 +01006579 See also : "timeout http-keep-alive", "timeout client".
Willy Tarreau036fae02008-01-06 13:24:40 +01006580
Willy Tarreau844e3c52008-01-11 16:28:18 +01006581
6582timeout queue <timeout>
6583 Set the maximum time to wait in the queue for a connection slot to be free
6584 May be used in sections : defaults | frontend | listen | backend
6585 yes | no | yes | yes
6586 Arguments :
6587 <timeout> is the timeout value specified in milliseconds by default, but
6588 can be in any other unit if the number is suffixed by the unit,
6589 as explained at the top of this document.
6590
6591 When a server's maxconn is reached, connections are left pending in a queue
6592 which may be server-specific or global to the backend. In order not to wait
6593 indefinitely, a timeout is applied to requests pending in the queue. If the
6594 timeout is reached, it is considered that the request will almost never be
6595 served, so it is dropped and a 503 error is returned to the client.
6596
6597 The "timeout queue" statement allows to fix the maximum time for a request to
6598 be left pending in a queue. If unspecified, the same value as the backend's
6599 connection timeout ("timeout connect") is used, for backwards compatibility
6600 with older versions with no "timeout queue" parameter.
6601
6602 See also : "timeout connect", "contimeout".
6603
6604
6605timeout server <timeout>
6606timeout srvtimeout <timeout> (deprecated)
6607 Set the maximum inactivity time on the server side.
6608 May be used in sections : defaults | frontend | listen | backend
6609 yes | no | yes | yes
6610 Arguments :
6611 <timeout> is the timeout value specified in milliseconds by default, but
6612 can be in any other unit if the number is suffixed by the unit,
6613 as explained at the top of this document.
6614
6615 The inactivity timeout applies when the server is expected to acknowledge or
6616 send data. In HTTP mode, this timeout is particularly important to consider
6617 during the first phase of the server's response, when it has to send the
6618 headers, as it directly represents the server's processing time for the
6619 request. To find out what value to put there, it's often good to start with
6620 what would be considered as unacceptable response times, then check the logs
6621 to observe the response time distribution, and adjust the value accordingly.
6622
6623 The value is specified in milliseconds by default, but can be in any other
6624 unit if the number is suffixed by the unit, as specified at the top of this
6625 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
6626 recommended that the client timeout remains equal to the server timeout in
6627 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01006628 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01006629 packet losses by specifying timeouts that are slightly above multiples of 3
Willy Tarreauce887fd2012-05-12 12:50:00 +02006630 seconds (eg: 4 or 5 seconds minimum). If some long-lived sessions are mixed
6631 with short-lived sessions (eg: WebSocket and HTTP), it's worth considering
6632 "timeout tunnel", which overrides "timeout client" and "timeout server" for
6633 tunnels.
Willy Tarreau844e3c52008-01-11 16:28:18 +01006634
6635 This parameter is specific to backends, but can be specified once for all in
6636 "defaults" sections. This is in fact one of the easiest solutions not to
6637 forget about it. An unspecified timeout results in an infinite timeout, which
6638 is not recommended. Such a usage is accepted and works but reports a warning
6639 during startup because it may results in accumulation of expired sessions in
6640 the system if the system's timeouts are not configured either.
6641
6642 This parameter replaces the old, deprecated "srvtimeout". It is recommended
6643 to use it to write new configurations. The form "timeout srvtimeout" is
6644 provided only by backwards compatibility but its use is strongly discouraged.
6645
Willy Tarreauce887fd2012-05-12 12:50:00 +02006646 See also : "srvtimeout", "timeout client" and "timeout tunnel".
Willy Tarreau844e3c52008-01-11 16:28:18 +01006647
6648
6649timeout tarpit <timeout>
Cyril Bonté78caf842010-03-10 22:41:43 +01006650 Set the duration for which tarpitted connections will be maintained
Willy Tarreau844e3c52008-01-11 16:28:18 +01006651 May be used in sections : defaults | frontend | listen | backend
6652 yes | yes | yes | yes
6653 Arguments :
6654 <timeout> is the tarpit duration specified in milliseconds by default, but
6655 can be in any other unit if the number is suffixed by the unit,
6656 as explained at the top of this document.
6657
6658 When a connection is tarpitted using "reqtarpit", it is maintained open with
6659 no activity for a certain amount of time, then closed. "timeout tarpit"
6660 defines how long it will be maintained open.
6661
6662 The value is specified in milliseconds by default, but can be in any other
6663 unit if the number is suffixed by the unit, as specified at the top of this
6664 document. If unspecified, the same value as the backend's connection timeout
6665 ("timeout connect") is used, for backwards compatibility with older versions
Cyril Bonté78caf842010-03-10 22:41:43 +01006666 with no "timeout tarpit" parameter.
Willy Tarreau844e3c52008-01-11 16:28:18 +01006667
6668 See also : "timeout connect", "contimeout".
6669
6670
Willy Tarreauce887fd2012-05-12 12:50:00 +02006671timeout tunnel <timeout>
6672 Set the maximum inactivity time on the client and server side for tunnels.
6673 May be used in sections : defaults | frontend | listen | backend
6674 yes | no | yes | yes
6675 Arguments :
6676 <timeout> is the timeout value specified in milliseconds by default, but
6677 can be in any other unit if the number is suffixed by the unit,
6678 as explained at the top of this document.
6679
Jamie Gloudonaaa21002012-08-25 00:18:33 -04006680 The tunnel timeout applies when a bidirectional connection is established
Willy Tarreauce887fd2012-05-12 12:50:00 +02006681 between a client and a server, and the connection remains inactive in both
6682 directions. This timeout supersedes both the client and server timeouts once
6683 the connection becomes a tunnel. In TCP, this timeout is used as soon as no
6684 analyser remains attached to either connection (eg: tcp content rules are
6685 accepted). In HTTP, this timeout is used when a connection is upgraded (eg:
6686 when switching to the WebSocket protocol, or forwarding a CONNECT request
6687 to a proxy), or after the first response when no keepalive/close option is
6688 specified.
6689
6690 The value is specified in milliseconds by default, but can be in any other
6691 unit if the number is suffixed by the unit, as specified at the top of this
6692 document. Whatever the expected normal idle time, it is a good practice to
6693 cover at least one or several TCP packet losses by specifying timeouts that
6694 are slightly above multiples of 3 seconds (eg: 4 or 5 seconds minimum).
6695
6696 This parameter is specific to backends, but can be specified once for all in
6697 "defaults" sections. This is in fact one of the easiest solutions not to
6698 forget about it.
6699
6700 Example :
6701 defaults http
6702 option http-server-close
6703 timeout connect 5s
6704 timeout client 30s
6705 timeout client 30s
6706 timeout server 30s
6707 timeout tunnel 1h # timeout to use with WebSocket and CONNECT
6708
6709 See also : "timeout client", "timeout server".
6710
6711
Willy Tarreau844e3c52008-01-11 16:28:18 +01006712transparent (deprecated)
6713 Enable client-side transparent proxying
6714 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau4b1f8592008-12-23 23:13:55 +01006715 yes | no | yes | yes
Willy Tarreau844e3c52008-01-11 16:28:18 +01006716 Arguments : none
6717
6718 This keyword was introduced in order to provide layer 7 persistence to layer
6719 3 load balancers. The idea is to use the OS's ability to redirect an incoming
6720 connection for a remote address to a local process (here HAProxy), and let
6721 this process know what address was initially requested. When this option is
6722 used, sessions without cookies will be forwarded to the original destination
6723 IP address of the incoming request (which should match that of another
6724 equipment), while requests with cookies will still be forwarded to the
6725 appropriate server.
6726
6727 The "transparent" keyword is deprecated, use "option transparent" instead.
6728
6729 Note that contrary to a common belief, this option does NOT make HAProxy
6730 present the client's IP to the server when establishing the connection.
6731
Willy Tarreau844e3c52008-01-11 16:28:18 +01006732 See also: "option transparent"
6733
William Lallemanda73203e2012-03-12 12:48:57 +01006734unique-id-format <string>
6735 Generate a unique ID for each request.
6736 May be used in sections : defaults | frontend | listen | backend
6737 yes | yes | yes | no
6738 Arguments :
6739 <string> is a log-format string.
6740
Cyril Bonté108cf6e2012-04-21 23:30:29 +02006741 This keyword creates a ID for each request using the custom log format. A
6742 unique ID is useful to trace a request passing through many components of
6743 a complex infrastructure. The newly created ID may also be logged using the
6744 %ID tag the log-format string.
William Lallemanda73203e2012-03-12 12:48:57 +01006745
Cyril Bonté108cf6e2012-04-21 23:30:29 +02006746 The format should be composed from elements that are guaranteed to be
6747 unique when combined together. For instance, if multiple haproxy instances
6748 are involved, it might be important to include the node name. It is often
6749 needed to log the incoming connection's source and destination addresses
6750 and ports. Note that since multiple requests may be performed over the same
6751 connection, including a request counter may help differentiate them.
6752 Similarly, a timestamp may protect against a rollover of the counter.
6753 Logging the process ID will avoid collisions after a service restart.
William Lallemanda73203e2012-03-12 12:48:57 +01006754
Cyril Bonté108cf6e2012-04-21 23:30:29 +02006755 It is recommended to use hexadecimal notation for many fields since it
6756 makes them more compact and saves space in logs.
William Lallemanda73203e2012-03-12 12:48:57 +01006757
Cyril Bonté108cf6e2012-04-21 23:30:29 +02006758 Example:
William Lallemanda73203e2012-03-12 12:48:57 +01006759
6760 unique-id-format %{+X}o\ %Ci:%Cp_%Fi:%Fp_%Ts_%rt:%pid
6761
6762 will generate:
6763
6764 7F000001:8296_7F00001E:1F90_4F7B0A69_0003:790A
6765
6766 See also: "unique-id-header"
6767
6768unique-id-header <name>
6769 Add a unique ID header in the HTTP request.
6770 May be used in sections : defaults | frontend | listen | backend
6771 yes | yes | yes | no
6772 Arguments :
6773 <name> is the name of the header.
6774
Cyril Bonté108cf6e2012-04-21 23:30:29 +02006775 Add a unique-id header in the HTTP request sent to the server, using the
6776 unique-id-format. It can't work if the unique-id-format doesn't exist.
William Lallemanda73203e2012-03-12 12:48:57 +01006777
Cyril Bonté108cf6e2012-04-21 23:30:29 +02006778 Example:
William Lallemanda73203e2012-03-12 12:48:57 +01006779
6780 unique-id-format %{+X}o\ %Ci:%Cp_%Fi:%Fp_%Ts_%rt:%pid
6781 unique-id-header X-Unique-ID
6782
6783 will generate:
6784
6785 X-Unique-ID: 7F000001:8296_7F00001E:1F90_4F7B0A69_0003:790A
6786
6787 See also: "unique-id-format"
Willy Tarreau844e3c52008-01-11 16:28:18 +01006788
6789use_backend <backend> if <condition>
6790use_backend <backend> unless <condition>
Willy Tarreau1d0dfb12009-07-07 15:10:31 +02006791 Switch to a specific backend if/unless an ACL-based condition is matched.
Willy Tarreau844e3c52008-01-11 16:28:18 +01006792 May be used in sections : defaults | frontend | listen | backend
6793 no | yes | yes | no
6794 Arguments :
6795 <backend> is the name of a valid backend or "listen" section.
6796
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006797 <condition> is a condition composed of ACLs, as described in section 7.
Willy Tarreau844e3c52008-01-11 16:28:18 +01006798
6799 When doing content-switching, connections arrive on a frontend and are then
6800 dispatched to various backends depending on a number of conditions. The
6801 relation between the conditions and the backends is described with the
Willy Tarreau1d0dfb12009-07-07 15:10:31 +02006802 "use_backend" keyword. While it is normally used with HTTP processing, it can
6803 also be used in pure TCP, either without content using stateless ACLs (eg:
6804 source address validation) or combined with a "tcp-request" rule to wait for
6805 some payload.
Willy Tarreau844e3c52008-01-11 16:28:18 +01006806
6807 There may be as many "use_backend" rules as desired. All of these rules are
6808 evaluated in their declaration order, and the first one which matches will
6809 assign the backend.
6810
6811 In the first form, the backend will be used if the condition is met. In the
6812 second form, the backend will be used if the condition is not met. If no
6813 condition is valid, the backend defined with "default_backend" will be used.
6814 If no default backend is defined, either the servers in the same section are
6815 used (in case of a "listen" section) or, in case of a frontend, no server is
6816 used and a 503 service unavailable response is returned.
6817
Willy Tarreau51aecc72009-07-12 09:47:04 +02006818 Note that it is possible to switch from a TCP frontend to an HTTP backend. In
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01006819 this case, either the frontend has already checked that the protocol is HTTP,
Willy Tarreau51aecc72009-07-12 09:47:04 +02006820 and backend processing will immediately follow, or the backend will wait for
6821 a complete HTTP request to get in. This feature is useful when a frontend
6822 must decode several protocols on a unique port, one of them being HTTP.
6823
Willy Tarreau1d0dfb12009-07-07 15:10:31 +02006824 See also: "default_backend", "tcp-request", and section 7 about ACLs.
Willy Tarreaud72758d2010-01-12 10:42:19 +01006825
Willy Tarreau036fae02008-01-06 13:24:40 +01006826
Willy Tarreau4a5cade2012-04-05 21:09:48 +02006827use-server <server> if <condition>
6828use-server <server> unless <condition>
6829 Only use a specific server if/unless an ACL-based condition is matched.
6830 May be used in sections : defaults | frontend | listen | backend
6831 no | no | yes | yes
6832 Arguments :
Cyril Bonté108cf6e2012-04-21 23:30:29 +02006833 <server> is the name of a valid server in the same backend section.
Willy Tarreau4a5cade2012-04-05 21:09:48 +02006834
6835 <condition> is a condition composed of ACLs, as described in section 7.
6836
6837 By default, connections which arrive to a backend are load-balanced across
6838 the available servers according to the configured algorithm, unless a
6839 persistence mechanism such as a cookie is used and found in the request.
6840
6841 Sometimes it is desirable to forward a particular request to a specific
6842 server without having to declare a dedicated backend for this server. This
6843 can be achieved using the "use-server" rules. These rules are evaluated after
6844 the "redirect" rules and before evaluating cookies, and they have precedence
6845 on them. There may be as many "use-server" rules as desired. All of these
6846 rules are evaluated in their declaration order, and the first one which
6847 matches will assign the server.
6848
6849 If a rule designates a server which is down, and "option persist" is not used
6850 and no force-persist rule was validated, it is ignored and evaluation goes on
6851 with the next rules until one matches.
6852
6853 In the first form, the server will be used if the condition is met. In the
6854 second form, the server will be used if the condition is not met. If no
6855 condition is valid, the processing continues and the server will be assigned
6856 according to other persistence mechanisms.
6857
6858 Note that even if a rule is matched, cookie processing is still performed but
6859 does not assign the server. This allows prefixed cookies to have their prefix
6860 stripped.
6861
6862 The "use-server" statement works both in HTTP and TCP mode. This makes it
6863 suitable for use with content-based inspection. For instance, a server could
6864 be selected in a farm according to the TLS SNI field. And if these servers
6865 have their weight set to zero, they will not be used for other traffic.
6866
6867 Example :
6868 # intercept incoming TLS requests based on the SNI field
6869 use-server www if { req_ssl_sni -i www.example.com }
6870 server www 192.168.0.1:443 weight 0
6871 use-server mail if { req_ssl_sni -i mail.example.com }
6872 server mail 192.168.0.1:587 weight 0
6873 use-server imap if { req_ssl_sni -i imap.example.com }
6874 server mail 192.168.0.1:993 weight 0
6875 # all the rest is forwarded to this server
6876 server default 192.168.0.2:443 check
6877
6878 See also: "use_backend", serction 5 about server and section 7 about ACLs.
6879
Willy Tarreaub6205fd2012-09-24 12:27:33 +02006880
68815. Bind and Server options
6882--------------------------
6883
6884The "bind", "server" and "default-server" keywords support a number of settings
6885depending on some build options and on the system HAProxy was built on. These
6886settings generally each consist in one word sometimes followed by a value,
6887written on the same line as the "bind" or "server" line. All these options are
6888described in this section.
6889
6890
68915.1. Bind options
6892-----------------
6893
6894The "bind" keyword supports a certain number of settings which are all passed
6895as arguments on the same line. The order in which those arguments appear makes
6896no importance, provided that they appear after the bind address. All of these
6897parameters are optional. Some of them consist in a single words (booleans),
6898while other ones expect a value after them. In this case, the value must be
6899provided immediately after the setting name.
6900
6901The currently supported settings are the following ones.
6902
6903accept-proxy
6904 Enforces the use of the PROXY protocol over any connection accepted by any of
6905 the sockets declared on the same line. The PROXY protocol dictates the layer
6906 3/4 addresses of the incoming connection to be used everywhere an address is
6907 used, with the only exception of "tcp-request connection" rules which will
6908 only see the real connection address. Logs will reflect the addresses
6909 indicated in the protocol, unless it is violated, in which case the real
6910 address will still be used. This keyword combined with support from external
6911 components can be used as an efficient and reliable alternative to the
6912 X-Forwarded-For mechanism which is not always reliable and not even always
6913 usable.
6914
6915backlog <backlog>
6916 Sets the socket's backlog to this value. If unspecified, the frontend's
6917 backlog is used instead, which generally defaults to the maxconn value.
6918
Emeric Brun7fb34422012-09-28 15:26:15 +02006919ecdhe <named curve>
6920 This setting is only available when support for OpenSSL was built in. It sets
6921 the named curve (RFC 4492) used to generate ECDH ephemeral keys and makes
6922 ECDHE cipher suites usable.
6923
Emeric Brunfd33a262012-10-11 16:28:27 +02006924ca-file <cafile>
Emeric Brun1a073b42012-09-28 17:07:34 +02006925 This setting is only available when support for OpenSSL was built in. It
6926 designates a PEM file from which to load CA certificates used to verify
6927 client's certificate.
6928
Emeric Brunb6dc9342012-09-28 17:55:37 +02006929ca-ignore-err [all|<errorID>,...]
6930 This setting is only available when support for OpenSSL was built in.
6931 Sets a comma separated list of errorIDs to ignore during verify at depth > 0.
6932 If set to 'all', all errors are ignored. SSL handshake is not aborted if an
6933 error is ignored.
6934
Willy Tarreaub6205fd2012-09-24 12:27:33 +02006935ciphers <ciphers>
6936 This setting is only available when support for OpenSSL was built in. It sets
6937 the string describing the list of cipher algorithms ("cipher suite") that are
6938 negociated during the SSL/TLS handshake. The format of the string is defined
6939 in "man 1 ciphers" from OpenSSL man pages, and can be for instance a string
6940 such as "AES:ALL:!aNULL:!eNULL:+RC4:@STRENGTH" (without quotes).
6941
Emeric Brunfd33a262012-10-11 16:28:27 +02006942crl-file <crlfile>
Emeric Brun1a073b42012-09-28 17:07:34 +02006943 This setting is only available when support for OpenSSL was built in. It
6944 designates a PEM file from which to load certificate revocation list used
6945 to verify client's certificate.
6946
Willy Tarreaub6205fd2012-09-24 12:27:33 +02006947crt <cert>
6948 This setting is only available when support for OpenSSL was built in.
6949 It designates a PEM file from which to load both a certificate and the
6950 associated private key. This file can be built by concatenating both PEM
Emeric Brune032bfa2012-09-28 13:01:45 +02006951 files into one. If the OpenSSL used supports Diffie-Hellman, parameters
6952 present in this file are also loaded. If a directory name is used instead of a
6953 PEM file, then all files found in that directory will be loaded. This
6954 directive may be specified multiple times in order to load certificates from
6955 multiple files or directories. The certificates will be presented to clients
6956 who provide a valid TLS Server Name Indication field matching one of their CN
6957 or alt subjects. Wildcards are supported, where a wildcard character '*' is
6958 used instead of the first hostname component (eg: *.example.org matches
Willy Tarreaub6205fd2012-09-24 12:27:33 +02006959 www.example.org but not www.sub.example.org). If no SNI is provided by the
Emeric Brune032bfa2012-09-28 13:01:45 +02006960 client or if the SSL library does not support TLS extensions, or if the client
6961 provides and SNI which does not match any certificate, then the first loaded
6962 certificate will be presented. This means that when loading certificates from
6963 a directory, it is highly recommended to load the default one first as a file.
6964 Note that the same cert may be loaded multiple times without side effects.
Willy Tarreaub6205fd2012-09-24 12:27:33 +02006965
Emeric Brunb6dc9342012-09-28 17:55:37 +02006966crt-ignore-err <errors>
6967 This setting is only available when support for OpenSSL was built in.
6968 Sets a comma separated list of errorIDs to ignore during verify at depth == 0.
6969 If set to 'all', all errors are ignored. SSL handshake is not abored if an
6970 error is ignored.
6971
Willy Tarreaub6205fd2012-09-24 12:27:33 +02006972defer-accept
6973 Is an optional keyword which is supported only on certain Linux kernels. It
6974 states that a connection will only be accepted once some data arrive on it,
6975 or at worst after the first retransmit. This should be used only on protocols
6976 for which the client talks first (eg: HTTP). It can slightly improve
6977 performance by ensuring that most of the request is already available when
6978 the connection is accepted. On the other hand, it will not be able to detect
6979 connections which don't talk. It is important to note that this option is
6980 broken in all kernels up to 2.6.31, as the connection is never accepted until
6981 the client talks. This can cause issues with front firewalls which would see
6982 an established connection while the proxy will only see it in SYN_RECV. This
6983 option is only supported on TCPv4/TCPv6 sockets and ignored by other ones.
6984
Emeric Brun2cb7ae52012-10-05 14:14:21 +02006985force-sslv3
6986 This option enforces use of SSLv3 only on SSL connections instanciated from
6987 this listener. SSLv3 is generally less expensive than the TLS counterparts
6988 for high connection rates. See also "force-tls*", "no-sslv3", and "no-tls*".
6989
6990force-tlsv10
6991 This option enforces use of TLSv1.0 only on SSL connections instanciated from
6992 this listener. See also "force-tls*", "no-sslv3", and "no-tls*".
6993
6994force-tlsv11
6995 This option enforces use of TLSv1.1 only on SSL connections instanciated from
6996 this listener. See also "force-tls*", "no-sslv3", and "no-tls*".
6997
6998force-tlsv12
6999 This option enforces use of TLSv1.2 only on SSL connections instanciated from
7000 this listener. See also "force-tls*", "no-sslv3", and "no-tls*".
7001
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007002gid <gid>
7003 Sets the group of the UNIX sockets to the designated system gid. It can also
7004 be set by default in the global section's "unix-bind" statement. Note that
7005 some platforms simply ignore this. This setting is equivalent to the "group"
7006 setting except that the group ID is used instead of its name. This setting is
7007 ignored by non UNIX sockets.
7008
7009group <group>
7010 Sets the group of the UNIX sockets to the designated system group. It can
7011 also be set by default in the global section's "unix-bind" statement. Note
7012 that some platforms simply ignore this. This setting is equivalent to the
7013 "gid" setting except that the group name is used instead of its gid. This
7014 setting is ignored by non UNIX sockets.
7015
7016id <id>
7017 Fixes the socket ID. By default, socket IDs are automatically assigned, but
7018 sometimes it is more convenient to fix them to ease monitoring. This value
7019 must be strictly positive and unique within the listener/frontend. This
7020 option can only be used when defining only a single socket.
7021
7022interface <interface>
7023 Sets the name of the network interface to listen. This is currently only
7024 supported on Linux. The interface must be a primary system interface, not an
7025 aliased interface. When specified, all addresses on the same line will only
7026 be accepted if the incoming packets physically come through the designated
7027 interface. It is also possible to bind multiple frontends to the same address
7028 if they are bound to different interfaces. Note that binding to a network
7029 interface requires root privileges. This parameter is only compatible with
7030 TCPv4/TCPv6 sockets.
7031
Willy Tarreauabb175f2012-09-24 12:43:26 +02007032level <level>
7033 This setting is used with the stats sockets only to restrict the nature of
7034 the commands that can be issued on the socket. It is ignored by other
7035 sockets. <level> can be one of :
7036 - "user" is the least privileged level ; only non-sensitive stats can be
7037 read, and no change is allowed. It would make sense on systems where it
7038 is not easy to restrict access to the socket.
7039 - "operator" is the default level and fits most common uses. All data can
7040 be read, and only non-sensitive changes are permitted (eg: clear max
7041 counters).
7042 - "admin" should be used with care, as everything is permitted (eg: clear
7043 all counters).
7044
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007045maxconn <maxconn>
7046 Limits the sockets to this number of concurrent connections. Extraneous
7047 connections will remain in the system's backlog until a connection is
7048 released. If unspecified, the limit will be the same as the frontend's
7049 maxconn. Note that in case of port ranges or multiple addresses, the same
7050 value will be applied to each socket. This setting enables different
7051 limitations on expensive sockets, for instance SSL entries which may easily
7052 eat all memory.
7053
7054mode <mode>
7055 Sets the octal mode used to define access permissions on the UNIX socket. It
7056 can also be set by default in the global section's "unix-bind" statement.
7057 Note that some platforms simply ignore this. This setting is ignored by non
7058 UNIX sockets.
7059
7060mss <maxseg>
7061 Sets the TCP Maximum Segment Size (MSS) value to be advertised on incoming
7062 connections. This can be used to force a lower MSS for certain specific
7063 ports, for instance for connections passing through a VPN. Note that this
7064 relies on a kernel feature which is theoretically supported under Linux but
7065 was buggy in all versions prior to 2.6.28. It may or may not work on other
7066 operating systems. It may also not change the advertised value but change the
7067 effective size of outgoing segments. The commonly advertised value for TCPv4
7068 over Ethernet networks is 1460 = 1500(MTU) - 40(IP+TCP). If this value is
7069 positive, it will be used as the advertised MSS. If it is negative, it will
7070 indicate by how much to reduce the incoming connection's advertised MSS for
7071 outgoing segments. This parameter is only compatible with TCP v4/v6 sockets.
7072
7073name <name>
7074 Sets an optional name for these sockets, which will be reported on the stats
7075 page.
7076
7077nice <nice>
7078 Sets the 'niceness' of connections initiated from the socket. Value must be
7079 in the range -1024..1024 inclusive, and defaults to zero. Positive values
7080 means that such connections are more friendly to others and easily offer
7081 their place in the scheduler. On the opposite, negative values mean that
7082 connections want to run with a higher priority than others. The difference
7083 only happens under high loads when the system is close to saturation.
7084 Negative values are appropriate for low-latency or administration services,
7085 and high values are generally recommended for CPU intensive tasks such as SSL
7086 processing or bulk transfers which are less sensible to latency. For example,
7087 it may make sense to use a positive value for an SMTP socket and a negative
7088 one for an RDP socket.
7089
Emeric Brun9b3009b2012-10-05 11:55:06 +02007090no-sslv3
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007091 This setting is only available when support for OpenSSL was built in. It
7092 disables support for SSLv3 on any sockets instanciated from the listener when
7093 SSL is supported. Note that SSLv2 is forced disabled in the code and cannot
Emeric Brun2cb7ae52012-10-05 14:14:21 +02007094 be enabled using any configuration option. See also "force-tls*",
7095 and "force-sslv3".
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007096
Emeric Brun90ad8722012-10-02 14:00:59 +02007097no-tls-tickets
7098 This setting is only available when support for OpenSSL was built in. It
7099 disables the stateless session resumption (RFC 5077 TLS Ticket
7100 extension) and force to use stateful session resumption. Stateless
7101 session resumption is more expensive in CPU usage.
7102
Emeric Brun9b3009b2012-10-05 11:55:06 +02007103no-tlsv10
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007104 This setting is only available when support for OpenSSL was built in. It
Emeric Brun2cb7ae52012-10-05 14:14:21 +02007105 disables support for TLSv1.0 on any sockets instanciated from the listener
7106 when SSL is supported. Note that SSLv2 is forced disabled in the code and
7107 cannot be enabled using any configuration option. See also "force-tls*",
7108 and "force-sslv3".
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007109
Emeric Brun9b3009b2012-10-05 11:55:06 +02007110no-tlsv11
Emeric Brunf5da4932012-09-28 19:42:54 +02007111 This setting is only available when support for OpenSSL was built in. It
Emeric Brun2cb7ae52012-10-05 14:14:21 +02007112 disables support for TLSv1.1 on any sockets instanciated from the listener
7113 when SSL is supported. Note that SSLv2 is forced disabled in the code and
7114 cannot be enabled using any configuration option. See also "force-tls*",
7115 and "force-sslv3".
Emeric Brunf5da4932012-09-28 19:42:54 +02007116
Emeric Brun9b3009b2012-10-05 11:55:06 +02007117no-tlsv12
Emeric Brunf5da4932012-09-28 19:42:54 +02007118 This setting is only available when support for OpenSSL was built in. It
Emeric Brun2cb7ae52012-10-05 14:14:21 +02007119 disables support for TLSv1.2 on any sockets instanciated from the listener
7120 when SSL is supported. Note that SSLv2 is forced disabled in the code and
7121 cannot be enabled using any configuration option. See also "force-tls*",
7122 and "force-sslv3".
Emeric Brunf5da4932012-09-28 19:42:54 +02007123
Willy Tarreau6c9a3d52012-10-18 18:57:14 +02007124npn <protocols>
7125 This enables the NPN TLS extension and advertises the specified protocol list
7126 as supported on top of NPN. The protocol list consists in a comma-delimited
7127 list of protocol names, for instance: "http/1.1,http/1.0" (without quotes).
7128 This requires that the SSL library is build with support for TLS extensions
7129 enabled (check with haproxy -vv).
7130
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007131ssl
7132 This setting is only available when support for OpenSSL was built in. It
7133 enables SSL deciphering on connections instanciated from this listener. A
7134 certificate is necessary (see "crt" above). All contents in the buffers will
7135 appear in clear text, so that ACLs and HTTP processing will only have access
7136 to deciphered contents.
7137
Willy Tarreau1c862c52012-10-05 16:21:00 +02007138tfo
7139 Is an optional keyword which is supported only on Linux kernels >= 3.6. It
7140 enables TCP Fast Open on the listening socket, which means that clients which
7141 support this feature will be able to send a request and receive a response
7142 during the 3-way handshake starting from second connection, thus saving one
7143 round-trip after the first connection. This only makes sense with protocols
7144 that use high connection rates and where each round trip matters. This can
7145 possibly cause issues with many firewalls which do not accept data on SYN
7146 packets, so this option should only be enabled once well tested. This option
7147 is only supported on TCPv4/TCPv6 sockets and ignored by other ones.
7148
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007149transparent
7150 Is an optional keyword which is supported only on certain Linux kernels. It
7151 indicates that the addresses will be bound even if they do not belong to the
7152 local machine, and that packets targeting any of these addresses will be
7153 intercepted just as if the addresses were locally configured. This normally
7154 requires that IP forwarding is enabled. Caution! do not use this with the
7155 default address '*', as it would redirect any traffic for the specified port.
7156 This keyword is available only when HAProxy is built with USE_LINUX_TPROXY=1.
7157 This parameter is only compatible with TCPv4 and TCPv6 sockets, depending on
7158 kernel version. Some distribution kernels include backports of the feature,
7159 so check for support with your vendor.
7160
Willy Tarreau77e3af92012-11-24 15:07:23 +01007161v4v6
7162 Is an optional keyword which is supported only on most recent systems
7163 including Linux kernels >= 2.4.21. It is used to bind a socket to both IPv4
7164 and IPv6 when it uses the default address. Doing so is sometimes necessary
7165 on systems which bind to IPv6 only by default. It has no effect on non-IPv6
7166 sockets, and is overriden by the "v6only" option.
7167
Willy Tarreau9b6700f2012-11-24 11:55:28 +01007168v6only
7169 Is an optional keyword which is supported only on most recent systems
7170 including Linux kernels >= 2.4.21. It is used to bind a socket to IPv6 only
7171 when it uses the default address. Doing so is sometimes preferred to doing it
Willy Tarreau77e3af92012-11-24 15:07:23 +01007172 system-wide as it is per-listener. It has no effect on non-IPv6 sockets and
7173 has precedence over the "v4v6" option.
Willy Tarreau9b6700f2012-11-24 11:55:28 +01007174
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007175uid <uid>
7176 Sets the owner of the UNIX sockets to the designated system uid. It can also
7177 be set by default in the global section's "unix-bind" statement. Note that
7178 some platforms simply ignore this. This setting is equivalent to the "user"
7179 setting except that the user numeric ID is used instead of its name. This
7180 setting is ignored by non UNIX sockets.
7181
7182user <user>
7183 Sets the owner of the UNIX sockets to the designated system user. It can also
7184 be set by default in the global section's "unix-bind" statement. Note that
7185 some platforms simply ignore this. This setting is equivalent to the "uid"
7186 setting except that the user name is used instead of its uid. This setting is
7187 ignored by non UNIX sockets.
7188
Emeric Brun1a073b42012-09-28 17:07:34 +02007189verify [none|optional|required]
7190 This setting is only available when support for OpenSSL was built in. If set
7191 to 'none', client certificate is not requested. This is the default. In other
7192 cases, a client certificate is requested. If the client does not provide a
7193 certificate after the request and if 'verify' is set to 'required', then the
7194 handshake is aborted, while it would have succeeded if set to 'optional'. The
Emeric Brunfd33a262012-10-11 16:28:27 +02007195 certificate provided by the client is always verified using CAs from
7196 'ca-file' and optional CRLs from 'crl-file'. On verify failure the handshake
7197 is aborted, regardless of the 'verify' option, unless the error code exactly
7198 matches one of those listed with 'ca-ignore-err' or 'crt-ignore-err'.
Willy Tarreau4a5cade2012-04-05 21:09:48 +02007199
Willy Tarreaub6205fd2012-09-24 12:27:33 +020072005.2. Server and default-server options
Cyril Bontéf0c60612010-02-06 14:44:47 +01007201------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02007202
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01007203The "server" and "default-server" keywords support a certain number of settings
7204which are all passed as arguments on the server line. The order in which those
7205arguments appear does not count, and they are all optional. Some of those
7206settings are single words (booleans) while others expect one or several values
7207after them. In this case, the values must immediately follow the setting name.
7208Except default-server, all those settings must be specified after the server's
7209address if they are used:
Willy Tarreau6a06a402007-07-15 20:15:28 +02007210
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007211 server <name> <address>[:port] [settings ...]
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01007212 default-server [settings ...]
Willy Tarreau6a06a402007-07-15 20:15:28 +02007213
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007214The currently supported settings are the following ones.
Willy Tarreau0ba27502007-12-24 16:55:16 +01007215
Willy Tarreauceb4ac92012-04-28 00:41:46 +02007216addr <ipv4|ipv6>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007217 Using the "addr" parameter, it becomes possible to use a different IP address
7218 to send health-checks. On some servers, it may be desirable to dedicate an IP
7219 address to specific component able to perform complex tests which are more
7220 suitable to health-checks than the application. This parameter is ignored if
7221 the "check" parameter is not set. See also the "port" parameter.
Willy Tarreau6a06a402007-07-15 20:15:28 +02007222
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007223 Supported in default-server: No
7224
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007225backup
7226 When "backup" is present on a server line, the server is only used in load
7227 balancing when all other non-backup servers are unavailable. Requests coming
7228 with a persistence cookie referencing the server will always be served
7229 though. By default, only the first operational backup server is used, unless
7230 the "allbackups" option is set in the backend. See also the "allbackups"
7231 option.
Willy Tarreau6a06a402007-07-15 20:15:28 +02007232
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007233 Supported in default-server: No
7234
Emeric Brunef42d922012-10-11 16:11:36 +02007235ca-file <cafile>
7236 This setting is only available when support for OpenSSL was built in. It
7237 designates a PEM file from which to load CA certificates used to verify
7238 server's certificate.
7239
7240 Supported in default-server: No
7241
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007242check
7243 This option enables health checks on the server. By default, a server is
Patrick Mézardb7aeec62012-01-22 16:01:22 +01007244 always considered available. If "check" is set, the server is available when
7245 accepting periodic TCP connections, to ensure that it is really able to serve
7246 requests. The default address and port to send the tests to are those of the
7247 server, and the default source is the same as the one defined in the
7248 backend. It is possible to change the address using the "addr" parameter, the
7249 port using the "port" parameter, the source address using the "source"
7250 address, and the interval and timers using the "inter", "rise" and "fall"
7251 parameters. The request method is define in the backend using the "httpchk",
7252 "smtpchk", "mysql-check", "pgsql-check" and "ssl-hello-chk" options. Please
7253 refer to those options and parameters for more information.
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007254
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007255 Supported in default-server: No
7256
Willy Tarreau6c16adc2012-10-05 00:04:16 +02007257check-send-proxy
7258 This option forces emission of a PROXY protocol line with outgoing health
7259 checks, regardless of whether the server uses send-proxy or not for the
7260 normal traffic. By default, the PROXY protocol is enabled for health checks
7261 if it is already enabled for normal traffic and if no "port" nor "addr"
7262 directive is present. However, if such a directive is present, the
7263 "check-send-proxy" option needs to be used to force the use of the
7264 protocol. See also the "send-proxy" option for more information.
7265
7266 Supported in default-server: No
7267
Willy Tarreau763a95b2012-10-04 23:15:39 +02007268check-ssl
7269 This option forces encryption of all health checks over SSL, regardless of
7270 whether the server uses SSL or not for the normal traffic. This is generally
7271 used when an explicit "port" or "addr" directive is specified and SSL health
7272 checks are not inherited. It is important to understand that this option
7273 inserts an SSL transport layer below the ckecks, so that a simple TCP connect
7274 check becomes an SSL connect, which replaces the old ssl-hello-chk. The most
7275 common use is to send HTTPS checks by combining "httpchk" with SSL checks.
7276 All SSL settings are common to health checks and traffic (eg: ciphers).
7277 See the "ssl" option for more information.
7278
7279 Supported in default-server: No
7280
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02007281ciphers <ciphers>
7282 This option sets the string describing the list of cipher algorithms that is
7283 is negociated during the SSL/TLS handshake with the server. The format of the
7284 string is defined in "man 1 ciphers". When SSL is used to communicate with
7285 servers on the local network, it is common to see a weaker set of algorithms
7286 than what is used over the internet. Doing so reduces CPU usage on both the
7287 server and haproxy while still keeping it compatible with deployed software.
7288 Some algorithms such as RC4-SHA1 are reasonably cheap. If no security at all
7289 is needed and just connectivity, using DES can be appropriate.
7290
Willy Tarreau763a95b2012-10-04 23:15:39 +02007291 Supported in default-server: No
7292
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007293cookie <value>
7294 The "cookie" parameter sets the cookie value assigned to the server to
7295 <value>. This value will be checked in incoming requests, and the first
7296 operational server possessing the same value will be selected. In return, in
7297 cookie insertion or rewrite modes, this value will be assigned to the cookie
7298 sent to the client. There is nothing wrong in having several servers sharing
7299 the same cookie value, and it is in fact somewhat common between normal and
7300 backup servers. See also the "cookie" keyword in backend section.
7301
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007302 Supported in default-server: No
7303
Emeric Brunef42d922012-10-11 16:11:36 +02007304crl-file <crlfile>
7305 This setting is only available when support for OpenSSL was built in. It
7306 designates a PEM file from which to load certificate revocation list used
7307 to verify server's certificate.
7308
7309 Supported in default-server: No
7310
Emeric Bruna7aa3092012-10-26 12:58:00 +02007311crt <cert>
7312 This setting is only available when support for OpenSSL was built in.
7313 It designates a PEM file from which to load both a certificate and the
7314 associated private key. This file can be built by concatenating both PEM
7315 files into one. This certificate will be sent if the server send a client
7316 certificate request.
7317
7318 Supported in default-server: No
7319
Willy Tarreau96839092010-03-29 10:02:24 +02007320disabled
7321 The "disabled" keyword starts the server in the "disabled" state. That means
7322 that it is marked down in maintenance mode, and no connection other than the
7323 ones allowed by persist mode will reach it. It is very well suited to setup
7324 new servers, because normal traffic will never reach them, while it is still
7325 possible to test the service by making use of the force-persist mechanism.
7326
7327 Supported in default-server: No
7328
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007329error-limit <count>
Willy Tarreau983e01e2010-01-11 18:42:06 +01007330 If health observing is enabled, the "error-limit" parameter specifies the
7331 number of consecutive errors that triggers event selected by the "on-error"
7332 option. By default it is set to 10 consecutive errors.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01007333
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007334 Supported in default-server: Yes
7335
7336 See also the "check", "error-limit" and "on-error".
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01007337
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007338fall <count>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007339 The "fall" parameter states that a server will be considered as dead after
7340 <count> consecutive unsuccessful health checks. This value defaults to 3 if
7341 unspecified. See also the "check", "inter" and "rise" parameters.
7342
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007343 Supported in default-server: Yes
7344
Emeric Brun8694b9a2012-10-05 14:39:07 +02007345force-sslv3
7346 This option enforces use of SSLv3 only when SSL is used to communicate with
7347 the server. SSLv3 is generally less expensive than the TLS counterparts for
7348 high connection rates. See also "no-tlsv*", "no-sslv3".
7349
7350 Supported in default-server: No
7351
7352force-tlsv10
7353 This option enforces use of TLSv1.0 only when SSL is used to communicate with
7354 the server. See also "no-tlsv*", "no-sslv3".
7355
7356 Supported in default-server: No
7357
7358force-tlsv11
7359 This option enforces use of TLSv1.1 only when SSL is used to communicate with
7360 the server. See also "no-tlsv*", "no-sslv3".
7361
7362 Supported in default-server: No
7363
7364force-tlsv12
7365 This option enforces use of TLSv1.2 only when SSL is used to communicate with
7366 the server. See also "no-tlsv*", "no-sslv3".
7367
7368 Supported in default-server: No
7369
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007370id <value>
Willy Tarreau53fb4ae2009-10-04 23:04:08 +02007371 Set a persistent ID for the server. This ID must be positive and unique for
7372 the proxy. An unused ID will automatically be assigned if unset. The first
7373 assigned value will be 1. This ID is currently only returned in statistics.
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007374
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007375 Supported in default-server: No
7376
7377inter <delay>
7378fastinter <delay>
7379downinter <delay>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007380 The "inter" parameter sets the interval between two consecutive health checks
7381 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
7382 It is also possible to use "fastinter" and "downinter" to optimize delays
7383 between checks depending on the server state :
7384
7385 Server state | Interval used
7386 ---------------------------------+-----------------------------------------
7387 UP 100% (non-transitional) | "inter"
7388 ---------------------------------+-----------------------------------------
7389 Transitionally UP (going down), |
7390 Transitionally DOWN (going up), | "fastinter" if set, "inter" otherwise.
7391 or yet unchecked. |
7392 ---------------------------------+-----------------------------------------
7393 DOWN 100% (non-transitional) | "downinter" if set, "inter" otherwise.
7394 ---------------------------------+-----------------------------------------
Willy Tarreaud72758d2010-01-12 10:42:19 +01007395
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007396 Just as with every other time-based parameter, they can be entered in any
7397 other explicit unit among { us, ms, s, m, h, d }. The "inter" parameter also
7398 serves as a timeout for health checks sent to servers if "timeout check" is
7399 not set. In order to reduce "resonance" effects when multiple servers are
7400 hosted on the same hardware, the health-checks of all servers are started
7401 with a small time offset between them. It is also possible to add some random
7402 noise in the health checks interval using the global "spread-checks"
7403 keyword. This makes sense for instance when a lot of backends use the same
7404 servers.
7405
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007406 Supported in default-server: Yes
7407
7408maxconn <maxconn>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007409 The "maxconn" parameter specifies the maximal number of concurrent
7410 connections that will be sent to this server. If the number of incoming
7411 concurrent requests goes higher than this value, they will be queued, waiting
7412 for a connection to be released. This parameter is very important as it can
7413 save fragile servers from going down under extreme loads. If a "minconn"
7414 parameter is specified, the limit becomes dynamic. The default value is "0"
7415 which means unlimited. See also the "minconn" and "maxqueue" parameters, and
7416 the backend's "fullconn" keyword.
7417
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007418 Supported in default-server: Yes
7419
7420maxqueue <maxqueue>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007421 The "maxqueue" parameter specifies the maximal number of connections which
7422 will wait in the queue for this server. If this limit is reached, next
7423 requests will be redispatched to other servers instead of indefinitely
7424 waiting to be served. This will break persistence but may allow people to
7425 quickly re-log in when the server they try to connect to is dying. The
7426 default value is "0" which means the queue is unlimited. See also the
7427 "maxconn" and "minconn" parameters.
7428
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007429 Supported in default-server: Yes
7430
7431minconn <minconn>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007432 When the "minconn" parameter is set, the maxconn limit becomes a dynamic
7433 limit following the backend's load. The server will always accept at least
7434 <minconn> connections, never more than <maxconn>, and the limit will be on
7435 the ramp between both values when the backend has less than <fullconn>
7436 concurrent connections. This makes it possible to limit the load on the
7437 server during normal loads, but push it further for important loads without
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01007438 overloading the server during exceptional loads. See also the "maxconn"
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007439 and "maxqueue" parameters, as well as the "fullconn" backend keyword.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01007440
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007441 Supported in default-server: Yes
7442
Emeric Brun9b3009b2012-10-05 11:55:06 +02007443no-sslv3
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02007444 This option disables support for SSLv3 when SSL is used to communicate with
7445 the server. Note that SSLv2 is disabled in the code and cannot be enabled
Emeric Brun8694b9a2012-10-05 14:39:07 +02007446 using any configuration option. See also "force-sslv3", "force-tlsv*".
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02007447
Willy Tarreau763a95b2012-10-04 23:15:39 +02007448 Supported in default-server: No
7449
Emeric Brunf9c5c472012-10-11 15:28:34 +02007450no-tls-tickets
7451 This setting is only available when support for OpenSSL was built in. It
7452 disables the stateless session resumption (RFC 5077 TLS Ticket
7453 extension) and force to use stateful session resumption. Stateless
7454 session resumption is more expensive in CPU usage for servers.
7455
7456 Supported in default-server: No
7457
Emeric Brun9b3009b2012-10-05 11:55:06 +02007458no-tlsv10
Emeric Brun8694b9a2012-10-05 14:39:07 +02007459 This option disables support for TLSv1.0 when SSL is used to communicate with
Emeric Brunf5da4932012-09-28 19:42:54 +02007460 the server. Note that SSLv2 is disabled in the code and cannot be enabled
7461 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun8694b9a2012-10-05 14:39:07 +02007462 often makes sense to disable it when communicating with local servers. See
7463 also "force-sslv3", "force-tlsv*".
Emeric Brunf5da4932012-09-28 19:42:54 +02007464
Willy Tarreau763a95b2012-10-04 23:15:39 +02007465 Supported in default-server: No
7466
Emeric Brun9b3009b2012-10-05 11:55:06 +02007467no-tlsv11
Emeric Brun8694b9a2012-10-05 14:39:07 +02007468 This option disables support for TLSv1.1 when SSL is used to communicate with
Emeric Brunf5da4932012-09-28 19:42:54 +02007469 the server. Note that SSLv2 is disabled in the code and cannot be enabled
7470 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun8694b9a2012-10-05 14:39:07 +02007471 often makes sense to disable it when communicating with local servers. See
7472 also "force-sslv3", "force-tlsv*".
Emeric Brunf5da4932012-09-28 19:42:54 +02007473
Willy Tarreau763a95b2012-10-04 23:15:39 +02007474 Supported in default-server: No
7475
Emeric Brun9b3009b2012-10-05 11:55:06 +02007476no-tlsv12
Emeric Brun8694b9a2012-10-05 14:39:07 +02007477 This option disables support for TLSv1.2 when SSL is used to communicate with
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02007478 the server. Note that SSLv2 is disabled in the code and cannot be enabled
7479 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun8694b9a2012-10-05 14:39:07 +02007480 often makes sense to disable it when communicating with local servers. See
7481 also "force-sslv3", "force-tlsv*".
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02007482
Willy Tarreau763a95b2012-10-04 23:15:39 +02007483 Supported in default-server: No
7484
Simon Hormanfa461682011-06-25 09:39:49 +09007485non-stick
7486 Never add connections allocated to this sever to a stick-table.
7487 This may be used in conjunction with backup to ensure that
7488 stick-table persistence is disabled for backup servers.
7489
Willy Tarreau763a95b2012-10-04 23:15:39 +02007490 Supported in default-server: No
7491
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01007492observe <mode>
7493 This option enables health adjusting based on observing communication with
7494 the server. By default this functionality is disabled and enabling it also
7495 requires to enable health checks. There are two supported modes: "layer4" and
7496 "layer7". In layer4 mode, only successful/unsuccessful tcp connections are
7497 significant. In layer7, which is only allowed for http proxies, responses
7498 received from server are verified, like valid/wrong http code, unparsable
Willy Tarreau150d1462012-03-10 08:19:02 +01007499 headers, a timeout, etc. Valid status codes include 100 to 499, 501 and 505.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01007500
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007501 Supported in default-server: No
7502
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01007503 See also the "check", "on-error" and "error-limit".
7504
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007505on-error <mode>
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01007506 Select what should happen when enough consecutive errors are detected.
7507 Currently, four modes are available:
7508 - fastinter: force fastinter
7509 - fail-check: simulate a failed check, also forces fastinter (default)
7510 - sudden-death: simulate a pre-fatal failed health check, one more failed
7511 check will mark a server down, forces fastinter
7512 - mark-down: mark the server immediately down and force fastinter
7513
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007514 Supported in default-server: Yes
7515
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01007516 See also the "check", "observe" and "error-limit".
7517
Simon Hormane0d1bfb2011-06-21 14:34:58 +09007518on-marked-down <action>
7519 Modify what occurs when a server is marked down.
7520 Currently one action is available:
Justin Karnegeseb2c24a2012-05-24 15:28:52 -07007521 - shutdown-sessions: Shutdown peer sessions. When this setting is enabled,
7522 all connections to the server are immediately terminated when the server
7523 goes down. It might be used if the health check detects more complex cases
7524 than a simple connection status, and long timeouts would cause the service
7525 to remain unresponsive for too long a time. For instance, a health check
7526 might detect that a database is stuck and that there's no chance to reuse
7527 existing connections anymore. Connections killed this way are logged with
7528 a 'D' termination code (for "Down").
Simon Hormane0d1bfb2011-06-21 14:34:58 +09007529
7530 Actions are disabled by default
7531
7532 Supported in default-server: Yes
7533
Justin Karnegeseb2c24a2012-05-24 15:28:52 -07007534on-marked-up <action>
7535 Modify what occurs when a server is marked up.
7536 Currently one action is available:
7537 - shutdown-backup-sessions: Shutdown sessions on all backup servers. This is
7538 done only if the server is not in backup state and if it is not disabled
7539 (it must have an effective weight > 0). This can be used sometimes to force
7540 an active server to take all the traffic back after recovery when dealing
7541 with long sessions (eg: LDAP, SQL, ...). Doing this can cause more trouble
7542 than it tries to solve (eg: incomplete transactions), so use this feature
7543 with extreme care. Sessions killed because a server comes up are logged
7544 with an 'U' termination code (for "Up").
7545
7546 Actions are disabled by default
7547
7548 Supported in default-server: Yes
7549
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007550port <port>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007551 Using the "port" parameter, it becomes possible to use a different port to
7552 send health-checks. On some servers, it may be desirable to dedicate a port
7553 to a specific component able to perform complex tests which are more suitable
7554 to health-checks than the application. It is common to run a simple script in
7555 inetd for instance. This parameter is ignored if the "check" parameter is not
7556 set. See also the "addr" parameter.
7557
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007558 Supported in default-server: Yes
7559
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007560redir <prefix>
7561 The "redir" parameter enables the redirection mode for all GET and HEAD
7562 requests addressing this server. This means that instead of having HAProxy
7563 forward the request to the server, it will send an "HTTP 302" response with
7564 the "Location" header composed of this prefix immediately followed by the
7565 requested URI beginning at the leading '/' of the path component. That means
7566 that no trailing slash should be used after <prefix>. All invalid requests
7567 will be rejected, and all non-GET or HEAD requests will be normally served by
7568 the server. Note that since the response is completely forged, no header
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01007569 mangling nor cookie insertion is possible in the response. However, cookies in
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007570 requests are still analysed, making this solution completely usable to direct
7571 users to a remote location in case of local disaster. Main use consists in
7572 increasing bandwidth for static servers by having the clients directly
7573 connect to them. Note: never use a relative location here, it would cause a
7574 loop between the client and HAProxy!
7575
7576 Example : server srv1 192.168.1.1:80 redir http://image1.mydomain.com check
7577
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007578 Supported in default-server: No
7579
7580rise <count>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007581 The "rise" parameter states that a server will be considered as operational
7582 after <count> consecutive successful health checks. This value defaults to 2
7583 if unspecified. See also the "check", "inter" and "fall" parameters.
7584
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007585 Supported in default-server: Yes
7586
Willy Tarreau5ab04ec2011-03-20 10:32:26 +01007587send-proxy
7588 The "send-proxy" parameter enforces use of the PROXY protocol over any
7589 connection established to this server. The PROXY protocol informs the other
7590 end about the layer 3/4 addresses of the incoming connection, so that it can
7591 know the client's address or the public address it accessed to, whatever the
7592 upper layer protocol. For connections accepted by an "accept-proxy" listener,
7593 the advertised address will be used. Only TCPv4 and TCPv6 address families
7594 are supported. Other families such as Unix sockets, will report an UNKNOWN
7595 family. Servers using this option can fully be chained to another instance of
7596 haproxy listening with an "accept-proxy" setting. This setting must not be
Willy Tarreau6c16adc2012-10-05 00:04:16 +02007597 used if the server isn't aware of the protocol. When health checks are sent
7598 to the server, the PROXY protocol is automatically used when this option is
7599 set, unless there is an explicit "port" or "addr" directive, in which case an
7600 explicit "check-send-proxy" directive would also be needed to use the PROXY
7601 protocol. See also the "accept-proxy" option of the "bind" keyword.
Willy Tarreau5ab04ec2011-03-20 10:32:26 +01007602
7603 Supported in default-server: No
7604
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007605slowstart <start_time_in_ms>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007606 The "slowstart" parameter for a server accepts a value in milliseconds which
7607 indicates after how long a server which has just come back up will run at
7608 full speed. Just as with every other time-based parameter, it can be entered
7609 in any other explicit unit among { us, ms, s, m, h, d }. The speed grows
7610 linearly from 0 to 100% during this time. The limitation applies to two
7611 parameters :
7612
7613 - maxconn: the number of connections accepted by the server will grow from 1
7614 to 100% of the usual dynamic limit defined by (minconn,maxconn,fullconn).
7615
7616 - weight: when the backend uses a dynamic weighted algorithm, the weight
7617 grows linearly from 1 to 100%. In this case, the weight is updated at every
7618 health-check. For this reason, it is important that the "inter" parameter
7619 is smaller than the "slowstart", in order to maximize the number of steps.
7620
7621 The slowstart never applies when haproxy starts, otherwise it would cause
7622 trouble to running servers. It only applies when a server has been previously
7623 seen as failed.
7624
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007625 Supported in default-server: Yes
7626
Willy Tarreauc6f4ce82009-06-10 11:09:37 +02007627source <addr>[:<pl>[-<ph>]] [usesrc { <addr2>[:<port2>] | client | clientip } ]
Willy Tarreaubce70882009-09-07 11:51:47 +02007628source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | hdr_ip(<hdr>[,<occ>]) } ]
Willy Tarreauc6f4ce82009-06-10 11:09:37 +02007629source <addr>[:<pl>[-<ph>]] [interface <name>] ...
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007630 The "source" parameter sets the source address which will be used when
7631 connecting to the server. It follows the exact same parameters and principle
7632 as the backend "source" keyword, except that it only applies to the server
7633 referencing it. Please consult the "source" keyword for details.
7634
Willy Tarreauc6f4ce82009-06-10 11:09:37 +02007635 Additionally, the "source" statement on a server line allows one to specify a
7636 source port range by indicating the lower and higher bounds delimited by a
7637 dash ('-'). Some operating systems might require a valid IP address when a
7638 source port range is specified. It is permitted to have the same IP/range for
7639 several servers. Doing so makes it possible to bypass the maximum of 64k
7640 total concurrent connections. The limit will then reach 64k connections per
7641 server.
7642
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007643 Supported in default-server: No
7644
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02007645ssl
Willy Tarreau763a95b2012-10-04 23:15:39 +02007646 This option enables SSL ciphering on outgoing connections to the server. At
7647 the moment, server certificates are not checked, so this is prone to man in
7648 the middle attacks. The real intended use is to permit SSL communication
7649 with software which cannot work in other modes over networks that would
7650 otherwise be considered safe enough for clear text communications. When this
7651 option is used, health checks are automatically sent in SSL too unless there
7652 is a "port" or an "addr" directive indicating the check should be sent to a
7653 different location. See the "check-ssl" optino to force SSL health checks.
7654
7655 Supported in default-server: No
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02007656
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007657track [<proxy>/]<server>
7658 This option enables ability to set the current state of the server by
7659 tracking another one. Only a server with checks enabled can be tracked
7660 so it is not possible for example to track a server that tracks another
7661 one. If <proxy> is omitted the current one is used. If disable-on-404 is
7662 used, it has to be enabled on both proxies.
7663
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007664 Supported in default-server: No
7665
Emeric Brunef42d922012-10-11 16:11:36 +02007666verify [none|required]
7667 This setting is only available when support for OpenSSL was built in. If set
7668 to 'none', server certificate is not verified. This is the default. In the
7669 other case, The certificate provided by the server is verified using CAs from
7670 'ca-file' and optional CRLs from 'crl-file'. On verify failure the handshake
7671 is aborted.
7672
7673 Supported in default-server: No
7674
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007675weight <weight>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007676 The "weight" parameter is used to adjust the server's weight relative to
7677 other servers. All servers will receive a load proportional to their weight
7678 relative to the sum of all weights, so the higher the weight, the higher the
Willy Tarreau6704d672009-06-15 10:56:05 +02007679 load. The default weight is 1, and the maximal value is 256. A value of 0
7680 means the server will not participate in load-balancing but will still accept
7681 persistent connections. If this parameter is used to distribute the load
7682 according to server's capacity, it is recommended to start with values which
7683 can both grow and shrink, for instance between 10 and 100 to leave enough
7684 room above and below for later adjustments.
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007685
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01007686 Supported in default-server: Yes
7687
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007688
76896. HTTP header manipulation
7690---------------------------
7691
7692In HTTP mode, it is possible to rewrite, add or delete some of the request and
7693response headers based on regular expressions. It is also possible to block a
7694request or a response if a particular header matches a regular expression,
7695which is enough to stop most elementary protocol attacks, and to protect
7696against information leak from the internal network. But there is a limitation
7697to this : since HAProxy's HTTP engine does not support keep-alive, only headers
7698passed during the first request of a TCP session will be seen. All subsequent
7699headers will be considered data only and not analyzed. Furthermore, HAProxy
7700never touches data contents, it stops analysis at the end of headers.
7701
Willy Tarreau816b9792009-09-15 21:25:21 +02007702There is an exception though. If HAProxy encounters an "Informational Response"
7703(status code 1xx), it is able to process all rsp* rules which can allow, deny,
7704rewrite or delete a header, but it will refuse to add a header to any such
7705messages as this is not HTTP-compliant. The reason for still processing headers
7706in such responses is to stop and/or fix any possible information leak which may
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01007707happen, for instance because another downstream equipment would unconditionally
Willy Tarreau816b9792009-09-15 21:25:21 +02007708add a header, or if a server name appears there. When such messages are seen,
7709normal processing still occurs on the next non-informational messages.
7710
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007711This section covers common usage of the following keywords, described in detail
7712in section 4.2 :
7713
7714 - reqadd <string>
7715 - reqallow <search>
7716 - reqiallow <search>
7717 - reqdel <search>
7718 - reqidel <search>
7719 - reqdeny <search>
7720 - reqideny <search>
7721 - reqpass <search>
7722 - reqipass <search>
7723 - reqrep <search> <replace>
7724 - reqirep <search> <replace>
7725 - reqtarpit <search>
7726 - reqitarpit <search>
7727 - rspadd <string>
7728 - rspdel <search>
7729 - rspidel <search>
7730 - rspdeny <search>
7731 - rspideny <search>
7732 - rsprep <search> <replace>
7733 - rspirep <search> <replace>
7734
7735With all these keywords, the same conventions are used. The <search> parameter
7736is a POSIX extended regular expression (regex) which supports grouping through
7737parenthesis (without the backslash). Spaces and other delimiters must be
7738prefixed with a backslash ('\') to avoid confusion with a field delimiter.
7739Other characters may be prefixed with a backslash to change their meaning :
7740
7741 \t for a tab
7742 \r for a carriage return (CR)
7743 \n for a new line (LF)
7744 \ to mark a space and differentiate it from a delimiter
7745 \# to mark a sharp and differentiate it from a comment
7746 \\ to use a backslash in a regex
7747 \\\\ to use a backslash in the text (*2 for regex, *2 for haproxy)
7748 \xXX to write the ASCII hex code XX as in the C language
7749
7750The <replace> parameter contains the string to be used to replace the largest
7751portion of text matching the regex. It can make use of the special characters
7752above, and can reference a substring which is delimited by parenthesis in the
7753regex, by writing a backslash ('\') immediately followed by one digit from 0 to
77549 indicating the group position (0 designating the entire line). This practice
7755is very common to users of the "sed" program.
7756
7757The <string> parameter represents the string which will systematically be added
7758after the last header line. It can also use special character sequences above.
7759
7760Notes related to these keywords :
7761---------------------------------
7762 - these keywords are not always convenient to allow/deny based on header
7763 contents. It is strongly recommended to use ACLs with the "block" keyword
7764 instead, resulting in far more flexible and manageable rules.
7765
7766 - lines are always considered as a whole. It is not possible to reference
7767 a header name only or a value only. This is important because of the way
7768 headers are written (notably the number of spaces after the colon).
7769
7770 - the first line is always considered as a header, which makes it possible to
7771 rewrite or filter HTTP requests URIs or response codes, but in turn makes
7772 it harder to distinguish between headers and request line. The regex prefix
7773 ^[^\ \t]*[\ \t] matches any HTTP method followed by a space, and the prefix
7774 ^[^ \t:]*: matches any header name followed by a colon.
7775
7776 - for performances reasons, the number of characters added to a request or to
7777 a response is limited at build time to values between 1 and 4 kB. This
7778 should normally be far more than enough for most usages. If it is too short
7779 on occasional usages, it is possible to gain some space by removing some
7780 useless headers before adding new ones.
7781
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01007782 - keywords beginning with "reqi" and "rspi" are the same as their counterpart
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007783 without the 'i' letter except that they ignore case when matching patterns.
7784
7785 - when a request passes through a frontend then a backend, all req* rules
7786 from the frontend will be evaluated, then all req* rules from the backend
7787 will be evaluated. The reverse path is applied to responses.
7788
7789 - req* statements are applied after "block" statements, so that "block" is
7790 always the first one, but before "use_backend" in order to permit rewriting
Willy Tarreaud72758d2010-01-12 10:42:19 +01007791 before switching.
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007792
7793
Willy Tarreaub937b7e2010-01-12 15:27:54 +010077947. Using ACLs and pattern extraction
7795------------------------------------
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007796
7797The use of Access Control Lists (ACL) provides a flexible solution to perform
7798content switching and generally to take decisions based on content extracted
7799from the request, the response or any environmental status. The principle is
7800simple :
7801
7802 - define test criteria with sets of values
7803 - perform actions only if a set of tests is valid
7804
7805The actions generally consist in blocking the request, or selecting a backend.
7806
7807In order to define a test, the "acl" keyword is used. The syntax is :
7808
7809 acl <aclname> <criterion> [flags] [operator] <value> ...
7810
7811This creates a new ACL <aclname> or completes an existing one with new tests.
7812Those tests apply to the portion of request/response specified in <criterion>
7813and may be adjusted with optional flags [flags]. Some criteria also support
7814an operator which may be specified before the set of values. The values are
7815of the type supported by the criterion, and are separated by spaces.
7816
7817ACL names must be formed from upper and lower case letters, digits, '-' (dash),
7818'_' (underscore) , '.' (dot) and ':' (colon). ACL names are case-sensitive,
7819which means that "my_acl" and "My_Acl" are two different ACLs.
7820
7821There is no enforced limit to the number of ACLs. The unused ones do not affect
7822performance, they just consume a small amount of memory.
7823
7824The following ACL flags are currently supported :
7825
Willy Tarreau2b5285d2010-05-09 23:45:24 +02007826 -i : ignore case during matching of all subsequent patterns.
7827 -f : load patterns from a file.
Willy Tarreau6a06a402007-07-15 20:15:28 +02007828 -- : force end of flags. Useful when a string looks like one of the flags.
7829
Willy Tarreau2b5285d2010-05-09 23:45:24 +02007830The "-f" flag is special as it loads all of the lines it finds in the file
7831specified in argument and loads all of them before continuing. It is even
7832possible to pass multiple "-f" arguments if the patterns are to be loaded from
Willy Tarreau58215a02010-05-13 22:07:43 +02007833multiple files. Empty lines as well as lines beginning with a sharp ('#') will
7834be ignored. All leading spaces and tabs will be stripped. If it is absolutely
7835needed to insert a valid pattern beginning with a sharp, just prefix it with a
7836space so that it is not taken for a comment. Depending on the data type and
7837match method, haproxy may load the lines into a binary tree, allowing very fast
7838lookups. This is true for IPv4 and exact string matching. In this case,
7839duplicates will automatically be removed. Also, note that the "-i" flag applies
Jamie Gloudonaaa21002012-08-25 00:18:33 -04007840to subsequent entries and not to entries loaded from files preceding it. For
Willy Tarreau58215a02010-05-13 22:07:43 +02007841instance :
Willy Tarreau2b5285d2010-05-09 23:45:24 +02007842
7843 acl valid-ua hdr(user-agent) -f exact-ua.lst -i -f generic-ua.lst test
7844
7845In this example, each line of "exact-ua.lst" will be exactly matched against
7846the "user-agent" header of the request. Then each line of "generic-ua" will be
7847case-insensitively matched. Then the word "test" will be insensitively matched
7848too.
7849
7850Note that right now it is difficult for the ACL parsers to report errors, so if
7851a file is unreadable or unparsable, the most you'll get is a parse error in the
7852ACL. Thus, file-based ACLs should only be produced by reliable processes.
7853
Willy Tarreau6a06a402007-07-15 20:15:28 +02007854Supported types of values are :
Willy Tarreau0ba27502007-12-24 16:55:16 +01007855
Willy Tarreau6a06a402007-07-15 20:15:28 +02007856 - integers or integer ranges
7857 - strings
7858 - regular expressions
7859 - IP addresses and networks
7860
7861
Willy Tarreauc57f0e22009-05-10 13:12:33 +020078627.1. Matching integers
7863----------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02007864
7865Matching integers is special in that ranges and operators are permitted. Note
7866that integer matching only applies to positive values. A range is a value
7867expressed with a lower and an upper bound separated with a colon, both of which
7868may be omitted.
7869
7870For instance, "1024:65535" is a valid range to represent a range of
7871unprivileged ports, and "1024:" would also work. "0:1023" is a valid
7872representation of privileged ports, and ":1023" would also work.
7873
Willy Tarreau62644772008-07-16 18:36:06 +02007874As a special case, some ACL functions support decimal numbers which are in fact
7875two integers separated by a dot. This is used with some version checks for
7876instance. All integer properties apply to those decimal numbers, including
7877ranges and operators.
7878
Willy Tarreau6a06a402007-07-15 20:15:28 +02007879For an easier usage, comparison operators are also supported. Note that using
Willy Tarreau0ba27502007-12-24 16:55:16 +01007880operators with ranges does not make much sense and is strongly discouraged.
7881Similarly, it does not make much sense to perform order comparisons with a set
7882of values.
Willy Tarreau6a06a402007-07-15 20:15:28 +02007883
Willy Tarreau0ba27502007-12-24 16:55:16 +01007884Available operators for integer matching are :
Willy Tarreau6a06a402007-07-15 20:15:28 +02007885
7886 eq : true if the tested value equals at least one value
7887 ge : true if the tested value is greater than or equal to at least one value
7888 gt : true if the tested value is greater than at least one value
7889 le : true if the tested value is less than or equal to at least one value
7890 lt : true if the tested value is less than at least one value
7891
Willy Tarreau0ba27502007-12-24 16:55:16 +01007892For instance, the following ACL matches any negative Content-Length header :
Willy Tarreau6a06a402007-07-15 20:15:28 +02007893
7894 acl negative-length hdr_val(content-length) lt 0
7895
Willy Tarreau62644772008-07-16 18:36:06 +02007896This one matches SSL versions between 3.0 and 3.1 (inclusive) :
7897
7898 acl sslv3 req_ssl_ver 3:3.1
7899
Willy Tarreau6a06a402007-07-15 20:15:28 +02007900
Willy Tarreauc57f0e22009-05-10 13:12:33 +020079017.2. Matching strings
7902---------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02007903
7904String matching applies to verbatim strings as they are passed, with the
7905exception of the backslash ("\") which makes it possible to escape some
7906characters such as the space. If the "-i" flag is passed before the first
7907string, then the matching will be performed ignoring the case. In order
7908to match the string "-i", either set it second, or pass the "--" flag
Willy Tarreau0ba27502007-12-24 16:55:16 +01007909before the first string. Same applies of course to match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +02007910
7911
Willy Tarreauc57f0e22009-05-10 13:12:33 +020079127.3. Matching regular expressions (regexes)
7913-------------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02007914
7915Just like with string matching, regex matching applies to verbatim strings as
7916they are passed, with the exception of the backslash ("\") which makes it
7917possible to escape some characters such as the space. If the "-i" flag is
7918passed before the first regex, then the matching will be performed ignoring
7919the case. In order to match the string "-i", either set it second, or pass
Willy Tarreau0ba27502007-12-24 16:55:16 +01007920the "--" flag before the first string. Same principle applies of course to
7921match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +02007922
7923
Willy Tarreauceb4ac92012-04-28 00:41:46 +020079247.4. Matching IPv4 and IPv6 addresses
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007925----------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02007926
7927IPv4 addresses values can be specified either as plain addresses or with a
7928netmask appended, in which case the IPv4 address matches whenever it is
7929within the network. Plain addresses may also be replaced with a resolvable
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01007930host name, but this practice is generally discouraged as it makes it more
Willy Tarreau0ba27502007-12-24 16:55:16 +01007931difficult to read and debug configurations. If hostnames are used, you should
7932at least ensure that they are present in /etc/hosts so that the configuration
7933does not depend on any random DNS match at the moment the configuration is
7934parsed.
Willy Tarreau6a06a402007-07-15 20:15:28 +02007935
Willy Tarreauceb4ac92012-04-28 00:41:46 +02007936IPv6 may be entered in their usual form, with or without a netmask appended.
7937Only bit counts are accepted for IPv6 netmasks. In order to avoid any risk of
7938trouble with randomly resolved IP addresses, host names are never allowed in
7939IPv6 patterns.
7940
7941HAProxy is also able to match IPv4 addresses with IPv6 addresses in the
7942following situations :
7943 - tested address is IPv4, pattern address is IPv4, the match applies
7944 in IPv4 using the supplied mask if any.
7945 - tested address is IPv6, pattern address is IPv6, the match applies
7946 in IPv6 using the supplied mask if any.
7947 - tested address is IPv6, pattern address is IPv4, the match applies in IPv4
7948 using the pattern's mask if the IPv6 address matches with 2002:IPV4::,
7949 ::IPV4 or ::ffff:IPV4, otherwise it fails.
7950 - tested address is IPv4, pattern address is IPv6, the IPv4 address is first
7951 converted to IPv6 by prefixing ::ffff: in front of it, then the match is
7952 applied in IPv6 using the supplied IPv6 mask.
7953
Willy Tarreau6a06a402007-07-15 20:15:28 +02007954
Willy Tarreauc57f0e22009-05-10 13:12:33 +020079557.5. Available matching criteria
7956--------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02007957
Willy Tarreauc57f0e22009-05-10 13:12:33 +020079587.5.1. Matching at Layer 4 and below
7959------------------------------------
Willy Tarreau0ba27502007-12-24 16:55:16 +01007960
7961A first set of criteria applies to information which does not require any
7962analysis of the request or response contents. Those generally include TCP/IP
Jamie Gloudon801a0a32012-08-25 00:18:33 -04007963addresses and ports, as well as internal values independent on the stream.
Willy Tarreau0ba27502007-12-24 16:55:16 +01007964
Willy Tarreau6a06a402007-07-15 20:15:28 +02007965always_false
7966 This one never matches. All values and flags are ignored. It may be used as
7967 a temporary replacement for another one when adjusting configurations.
7968
7969always_true
7970 This one always matches. All values and flags are ignored. It may be used as
7971 a temporary replacement for another one when adjusting configurations.
7972
Willy Tarreaud63335a2010-02-26 12:56:52 +01007973avg_queue <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02007974avg_queue(<backend>) <integer>
Willy Tarreaud63335a2010-02-26 12:56:52 +01007975 Returns the total number of queued connections of the designated backend
7976 divided by the number of active servers. This is very similar to "queue"
7977 except that the size of the farm is considered, in order to give a more
7978 accurate measurement of the time it may take for a new connection to be
7979 processed. The main usage is to return a sorry page to new users when it
7980 becomes certain they will get a degraded service. Note that in the event
7981 there would not be any active server anymore, we would consider twice the
7982 number of queued connections as the measured value. This is a fair estimate,
7983 as we expect one server to get back soon anyway, but we still prefer to send
7984 new traffic to another backend if in better shape. See also the "queue",
7985 "be_conn", and "be_sess_rate" criteria.
Krzysztof Piotr Oledzki346f76d2010-01-12 21:59:30 +01007986
Willy Tarreaua36af912009-10-10 12:02:45 +02007987be_conn <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02007988be_conn(<backend>) <integer>
Willy Tarreaua36af912009-10-10 12:02:45 +02007989 Applies to the number of currently established connections on the backend,
7990 possibly including the connection being evaluated. If no backend name is
7991 specified, the current one is used. But it is also possible to check another
7992 backend. It can be used to use a specific farm when the nominal one is full.
7993 See also the "fe_conn", "queue" and "be_sess_rate" criteria.
Willy Tarreau6a06a402007-07-15 20:15:28 +02007994
Hervé COMMOWICK35ed8012010-12-15 14:04:51 +01007995be_id <integer>
7996 Applies to the backend's id. Can be used in frontends to check from which
7997 backend it was called.
7998
Willy Tarreaud63335a2010-02-26 12:56:52 +01007999be_sess_rate <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008000be_sess_rate(<backend>) <integer>
Willy Tarreaud63335a2010-02-26 12:56:52 +01008001 Returns true when the sessions creation rate on the backend matches the
8002 specified values or ranges, in number of new sessions per second. This is
8003 used to switch to an alternate backend when an expensive or fragile one
8004 reaches too high a session rate, or to limit abuse of service (eg. prevent
8005 sucking of an online dictionary).
8006
8007 Example :
8008 # Redirect to an error page if the dictionary is requested too often
8009 backend dynamic
8010 mode http
8011 acl being_scanned be_sess_rate gt 100
8012 redirect location /denied.html if being_scanned
Willy Tarreau0ba27502007-12-24 16:55:16 +01008013
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +08008014connslots <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008015connslots(<backend>) <integer>
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +08008016 The basic idea here is to be able to measure the number of connection "slots"
Willy Tarreau55165fe2009-05-10 12:02:55 +02008017 still available (connection + queue), so that anything beyond that (intended
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +08008018 usage; see "use_backend" keyword) can be redirected to a different backend.
8019
Willy Tarreau55165fe2009-05-10 12:02:55 +02008020 'connslots' = number of available server connection slots, + number of
8021 available server queue slots.
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +08008022
Willy Tarreaua36af912009-10-10 12:02:45 +02008023 Note that while "fe_conn" may be used, "connslots" comes in especially
Willy Tarreau55165fe2009-05-10 12:02:55 +02008024 useful when you have a case of traffic going to one single ip, splitting into
8025 multiple backends (perhaps using acls to do name-based load balancing) and
8026 you want to be able to differentiate between different backends, and their
8027 available "connslots". Also, whereas "nbsrv" only measures servers that are
8028 actually *down*, this acl is more fine-grained and looks into the number of
Willy Tarreaua36af912009-10-10 12:02:45 +02008029 available connection slots as well. See also "queue" and "avg_queue".
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +08008030
Willy Tarreau55165fe2009-05-10 12:02:55 +02008031 OTHER CAVEATS AND NOTES: at this point in time, the code does not take care
8032 of dynamic connections. Also, if any of the server maxconn, or maxqueue is 0,
8033 then this acl clearly does not make sense, in which case the value returned
8034 will be -1.
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +08008035
Willy Tarreaud63335a2010-02-26 12:56:52 +01008036dst <ip_address>
Willy Tarreauceb4ac92012-04-28 00:41:46 +02008037 Applies to the local IPv4 or IPv6 address the client connected to. It can be
8038 used to switch to a different backend for some alternative addresses.
Willy Tarreaua36af912009-10-10 12:02:45 +02008039
Willy Tarreaud63335a2010-02-26 12:56:52 +01008040dst_conn <integer>
8041 Applies to the number of currently established connections on the same socket
8042 including the one being evaluated. It can be used to either return a sorry
8043 page before hard-blocking, or to use a specific backend to drain new requests
8044 when the socket is considered saturated. This offers the ability to assign
8045 different limits to different listening ports or addresses. See also the
8046 "fe_conn" and "be_conn" criteria.
8047
8048dst_port <integer>
8049 Applies to the local port the client connected to. It can be used to switch
8050 to a different backend for some alternative ports.
8051
8052fe_conn <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008053fe_conn(<frontend>) <integer>
Willy Tarreaud63335a2010-02-26 12:56:52 +01008054 Applies to the number of currently established connections on the frontend,
8055 possibly including the connection being evaluated. If no frontend name is
8056 specified, the current one is used. But it is also possible to check another
8057 frontend. It can be used to either return a sorry page before hard-blocking,
8058 or to use a specific backend to drain new requests when the farm is
8059 considered saturated. See also the "dst_conn", "be_conn" and "fe_sess_rate"
8060 criteria.
8061
8062fe_id <integer>
Cyril Bonté78caf842010-03-10 22:41:43 +01008063 Applies to the frontend's id. Can be used in backends to check from which
Willy Tarreaud63335a2010-02-26 12:56:52 +01008064 frontend it was called.
Willy Tarreaua36af912009-10-10 12:02:45 +02008065
Willy Tarreau079ff0a2009-03-05 21:34:28 +01008066fe_sess_rate <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008067fe_sess_rate(<frontend>) <integer>
Willy Tarreau079ff0a2009-03-05 21:34:28 +01008068 Returns true when the session creation rate on the current or the named
8069 frontend matches the specified values or ranges, expressed in new sessions
8070 per second. This is used to limit the connection rate to acceptable ranges in
8071 order to prevent abuse of service at the earliest moment. This can be
8072 combined with layer 4 ACLs in order to force the clients to wait a bit for
8073 the rate to go down below the limit.
8074
8075 Example :
8076 # This frontend limits incoming mails to 10/s with a max of 100
8077 # concurrent connections. We accept any connection below 10/s, and
8078 # force excess clients to wait for 100 ms. Since clients are limited to
8079 # 100 max, there cannot be more than 10 incoming mails per second.
8080 frontend mail
8081 bind :25
8082 mode tcp
8083 maxconn 100
8084 acl too_fast fe_sess_rate ge 10
8085 tcp-request inspect-delay 100ms
8086 tcp-request content accept if ! too_fast
8087 tcp-request content accept if WAIT_END
Willy Tarreaud72758d2010-01-12 10:42:19 +01008088
Willy Tarreaud63335a2010-02-26 12:56:52 +01008089nbsrv <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008090nbsrv(<backend>) <integer>
Willy Tarreaud63335a2010-02-26 12:56:52 +01008091 Returns true when the number of usable servers of either the current backend
8092 or the named backend matches the values or ranges specified. This is used to
8093 switch to an alternate backend when the number of servers is too low to
8094 to handle some load. It is useful to report a failure when combined with
8095 "monitor fail".
Willy Tarreau079ff0a2009-03-05 21:34:28 +01008096
Willy Tarreaud63335a2010-02-26 12:56:52 +01008097queue <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008098queue(<backend>) <integer>
Willy Tarreaud63335a2010-02-26 12:56:52 +01008099 Returns the total number of queued connections of the designated backend,
8100 including all the connections in server queues. If no backend name is
8101 specified, the current one is used, but it is also possible to check another
8102 one. This can be used to take actions when queuing goes above a known level,
8103 generally indicating a surge of traffic or a massive slowdown on the servers.
8104 One possible action could be to reject new users but still accept old ones.
8105 See also the "avg_queue", "be_conn", and "be_sess_rate" criteria.
8106
Willy Tarreaue9656522010-08-17 15:40:09 +02008107sc1_bytes_in_rate
8108sc2_bytes_in_rate
8109 Returns the average client-to-server bytes rate from the currently tracked
8110 counters, measured in amount of bytes over the period configured in the
8111 table. See also src_bytes_in_rate.
8112
8113sc1_bytes_out_rate
8114sc2_bytes_out_rate
8115 Returns the average server-to-client bytes rate from the currently tracked
8116 counters, measured in amount of bytes over the period configured in the
8117 table. See also src_bytes_out_rate.
8118
Willy Tarreauf73cd112011-08-13 01:45:16 +02008119sc1_clr_gpc0
8120sc2_clr_gpc0
8121 Clears the first General Purpose Counter associated to the currently tracked
8122 counters, and returns its previous value. Before the first invocation, the
8123 stored value is zero, so first invocation will always return zero. The test
8124 can also be used alone and always returns true. This is typically used as a
8125 second ACL in an expression in order to mark a connection when a first ACL
8126 was verified :
8127
8128 # block if 5 consecutive requests continue to come faster than 10 sess
8129 # per second, and reset the counter as soon as the traffic slows down.
8130 acl abuse sc1_http_req_rate gt 10
8131 acl kill sc1_inc_gpc0 gt 5
8132 acl save sc1_clr_gpc0
8133 tcp-request connection accept if !abuse save
8134 tcp-request connection reject if abuse kill
8135
Willy Tarreaue9656522010-08-17 15:40:09 +02008136sc1_conn_cnt
8137sc2_conn_cnt
8138 Returns the cumulated number of incoming connections from currently tracked
8139 counters. See also src_conn_cnt.
8140
8141sc1_conn_cur
8142sc2_conn_cur
8143 Returns the current amount of concurrent connections tracking the same
8144 tracked counters. This number is automatically incremented when tracking
8145 begins and decremented when tracking stops. See also src_conn_cur.
8146
8147sc1_conn_rate
8148sc2_conn_rate
8149 Returns the average connection rate from the currently tracked counters,
8150 measured in amount of connections over the period configured in the table.
8151 See also src_conn_rate.
8152
8153sc1_get_gpc0
8154sc2_get_gpc0
8155 Returns the value of the first General Purpose Counter associated to the
8156 currently tracked counters. See also src_get_gpc0 and sc1/sc2_inc_gpc0.
8157
8158sc1_http_err_cnt
8159sc2_http_err_cnt
8160 Returns the cumulated number of HTTP errors from the currently tracked
8161 counters. This includes the both request errors and 4xx error responses.
8162 See also src_http_err_cnt.
8163
8164sc1_http_err_rate
8165sc2_http_err_rate
8166 Returns the average rate of HTTP errors from the currently tracked counters,
8167 measured in amount of errors over the period configured in the table. This
8168 includes the both request errors and 4xx error responses. See also
8169 src_http_err_rate.
8170
8171sc1_http_req_cnt
8172sc2_http_req_cnt
8173 Returns the cumulated number of HTTP requests from the currently tracked
8174 counters. This includes every started request, valid or not. See also
8175 src_http_req_cnt.
8176
8177sc1_http_req_rate
8178sc2_http_req_rate
8179 Returns the average rate of HTTP requests from the currently tracked
8180 counters, measured in amount of requests over the period configured in
8181 the table. This includes every started request, valid or not. See also
8182 src_http_req_rate.
8183
8184sc1_inc_gpc0
8185sc2_inc_gpc0
8186 Increments the first General Purpose Counter associated to the currently
8187 tracked counters, and returns its value. Before the first invocation, the
8188 stored value is zero, so first invocation will increase it to 1 and will
8189 return 1. The test can also be used alone and always returns true. This is
8190 typically used as a second ACL in an expression in order to mark a connection
8191 when a first ACL was verified :
8192
8193 acl abuse sc1_http_req_rate gt 10
8194 acl kill sc1_inc_gpc0
8195 tcp-request connection reject if abuse kill
8196
8197sc1_kbytes_in
8198sc2_kbytes_in
8199 Returns the amount of client-to-server data from the currently tracked
8200 counters, measured in kilobytes over the period configured in the table. The
8201 test is currently performed on 32-bit integers, which limits values to 4
8202 terabytes. See also src_kbytes_in.
8203
8204sc1_kbytes_out
8205sc2_kbytes_out
8206 Returns the amount of server-to-client data from the currently tracked
8207 counters, measured in kilobytes over the period configured in the table. The
8208 test is currently performed on 32-bit integers, which limits values to 4
8209 terabytes. See also src_kbytes_out.
8210
8211sc1_sess_cnt
8212sc2_sess_cnt
8213 Returns the cumulated number of incoming connections that were transformed
8214 into sessions, which means that they were accepted by a "tcp-request
8215 connection" rule, from the currently tracked counters. A backend may count
8216 more sessions than connections because each connection could result in many
Jamie Gloudonaaa21002012-08-25 00:18:33 -04008217 backend sessions if some HTTP keep-alive is performed over the connection
Willy Tarreaue9656522010-08-17 15:40:09 +02008218 with the client. See also src_sess_cnt.
8219
8220sc1_sess_rate
8221sc2_sess_rate
8222 Returns the average session rate from the currently tracked counters,
8223 measured in amount of sessions over the period configured in the table. A
8224 session is a connection that got past the early "tcp-request connection"
8225 rules. A backend may count more sessions than connections because each
8226 connection could result in many backend sessions if some HTTP keep-alive is
Jamie Gloudonaaa21002012-08-25 00:18:33 -04008227 performed over the connection with the client. See also src_sess_rate.
Willy Tarreaue9656522010-08-17 15:40:09 +02008228
Willy Tarreaud63335a2010-02-26 12:56:52 +01008229so_id <integer>
8230 Applies to the socket's id. Useful in frontends with many bind keywords.
8231
8232src <ip_address>
Willy Tarreauceb4ac92012-04-28 00:41:46 +02008233 Applies to the client's IPv4 or IPv6 address. It is usually used to limit
8234 access to certain resources such as statistics. Note that it is the TCP-level
8235 source address which is used, and not the address of a client behind a proxy.
Willy Tarreaud63335a2010-02-26 12:56:52 +01008236
Willy Tarreauc9705a12010-07-27 20:05:50 +02008237src_bytes_in_rate <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008238src_bytes_in_rate(<table>) <integer>
Willy Tarreauc9705a12010-07-27 20:05:50 +02008239 Returns the average bytes rate from the connection's source IPv4 address in
8240 the current proxy's stick-table or in the designated stick-table, measured in
8241 amount of bytes over the period configured in the table. If the address is
Willy Tarreaue9656522010-08-17 15:40:09 +02008242 not found, zero is returned. See also sc1/sc2_bytes_in_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +02008243
8244src_bytes_out_rate <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008245src_bytes_out_rate(<table>) <integer>
Willy Tarreauc9705a12010-07-27 20:05:50 +02008246 Returns the average bytes rate to the connection's source IPv4 address in the
8247 current proxy's stick-table or in the designated stick-table, measured in
8248 amount of bytes over the period configured in the table. If the address is
Willy Tarreaue9656522010-08-17 15:40:09 +02008249 not found, zero is returned. See also sc1/sc2_bytes_out_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +02008250
Willy Tarreauf73cd112011-08-13 01:45:16 +02008251src_clr_gpc0 <integer>
8252src_clr_gpc0(<table>) <integer>
8253 Clears the first General Purpose Counter associated to the connection's
8254 source IPv4 address in the current proxy's stick-table or in the designated
8255 stick-table, and returns its previous value. If the address is not found, an
8256 entry is created and 0 is returned. The test can also be used alone and
8257 always returns true. This is typically used as a second ACL in an expression
8258 in order to mark a connection when a first ACL was verified :
8259
8260 # block if 5 consecutive requests continue to come faster than 10 sess
8261 # per second, and reset the counter as soon as the traffic slows down.
8262 acl abuse src_http_req_rate gt 10
8263 acl kill src_inc_gpc0 gt 5
8264 acl save src_clr_gpc0
8265 tcp-request connection accept if !abuse save
8266 tcp-request connection reject if abuse kill
8267
Willy Tarreauc9705a12010-07-27 20:05:50 +02008268src_conn_cnt <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008269src_conn_cnt(<table>) <integer>
Willy Tarreauc9705a12010-07-27 20:05:50 +02008270 Returns the cumulated number of connections initiated from the current
8271 connection's source IPv4 address in the current proxy's stick-table or in
8272 the designated stick-table. If the address is not found, zero is returned.
Willy Tarreaue9656522010-08-17 15:40:09 +02008273 See also sc1/sc2_conn_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +02008274
8275src_conn_cur <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008276src_conn_cur(<table>) <integer>
Willy Tarreauc9705a12010-07-27 20:05:50 +02008277 Returns the current amount of concurrent connections initiated from the
8278 current connection's source IPv4 address in the current proxy's stick-table
8279 or in the designated stick-table. If the address is not found, zero is
Willy Tarreaue9656522010-08-17 15:40:09 +02008280 returned. See also sc1/sc2_conn_cur.
Willy Tarreauc9705a12010-07-27 20:05:50 +02008281
8282src_conn_rate <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008283src_conn_rate(<table>) <integer>
Willy Tarreauc9705a12010-07-27 20:05:50 +02008284 Returns the average connection rate from the connection's source IPv4 address
8285 in the current proxy's stick-table or in the designated stick-table, measured
8286 in amount of connections over the period configured in the table. If the
Willy Tarreaue9656522010-08-17 15:40:09 +02008287 address is not found, zero is returned. See also sc1/sc2_conn_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +02008288
8289src_get_gpc0 <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008290src_get_gpc0(<table>) <integer>
Willy Tarreauc9705a12010-07-27 20:05:50 +02008291 Returns the value of the first General Purpose Counter associated to the
8292 connection's source IPv4 address in the current proxy's stick-table or in
8293 the designated stick-table. If the address is not found, zero is returned.
Willy Tarreaue9656522010-08-17 15:40:09 +02008294 See also sc1/sc2_get_gpc0 and src_inc_gpc0.
Willy Tarreauc9705a12010-07-27 20:05:50 +02008295
8296src_http_err_cnt <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008297src_http_err_cnt(<table>) <integer>
Willy Tarreauc9705a12010-07-27 20:05:50 +02008298 Returns the cumulated number of HTTP errors from the current connection's
8299 source IPv4 address in the current proxy's stick-table or in the designated
8300 stick-table. This includes the both request errors and 4xx error responses.
Willy Tarreaue9656522010-08-17 15:40:09 +02008301 If the address is not found, zero is returned. See also sc1/sc2_http_err_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +02008302
8303src_http_err_rate <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008304src_http_err_rate(<table>) <integer>
Willy Tarreauc9705a12010-07-27 20:05:50 +02008305 Returns the average rate of HTTP errors from the current connection's source
8306 IPv4 address in the current proxy's stick-table or in the designated stick-
8307 table, measured in amount of errors over the period configured in the table.
8308 This includes the both request errors and 4xx error responses. If the address
Willy Tarreaue9656522010-08-17 15:40:09 +02008309 is not found, zero is returned. See also sc1/sc2_http_err_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +02008310
8311src_http_req_cnt <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008312src_http_req_cnt(<table>) <integer>
Willy Tarreauc9705a12010-07-27 20:05:50 +02008313 Returns the cumulated number of HTTP requests from the current connection's
8314 source IPv4 address in the current proxy's stick-table or in the designated
8315 stick-table. This includes every started request, valid or not. If the
Willy Tarreaue9656522010-08-17 15:40:09 +02008316 address is not found, zero is returned. See also sc1/sc2_http_req_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +02008317
8318src_http_req_rate <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008319src_http_req_rate(<table>) <integer>
Willy Tarreauc9705a12010-07-27 20:05:50 +02008320 Returns the average rate of HTTP requests from the current connection's
8321 source IPv4 address in the current proxy's stick-table or in the designated
8322 stick-table, measured in amount of requests over the period configured in the
8323 table. This includes every started request, valid or not. If the address is
Willy Tarreaue9656522010-08-17 15:40:09 +02008324 not found, zero is returned. See also sc1/sc2_http_req_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +02008325
8326src_inc_gpc0 <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008327src_inc_gpc0(<table>) <integer>
Willy Tarreauc9705a12010-07-27 20:05:50 +02008328 Increments the first General Purpose Counter associated to the connection's
8329 source IPv4 address in the current proxy's stick-table or in the designated
8330 stick-table, and returns its value. If the address is not found, an entry is
8331 created and 1 is returned. The test can also be used alone and always returns
8332 true. This is typically used as a second ACL in an expression in order to
8333 mark a connection when a first ACL was verified :
8334
8335 acl abuse src_http_req_rate gt 10
8336 acl kill src_inc_gpc0
Willy Tarreaue9656522010-08-17 15:40:09 +02008337 tcp-request connection reject if abuse kill
Willy Tarreauc9705a12010-07-27 20:05:50 +02008338
8339src_kbytes_in <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008340src_kbytes_in(<table>) <integer>
Willy Tarreauc9705a12010-07-27 20:05:50 +02008341 Returns the amount of data received from the connection's source IPv4 address
8342 in the current proxy's stick-table or in the designated stick-table, measured
8343 in kilobytes over the period configured in the table. If the address is not
8344 found, zero is returned. The test is currently performed on 32-bit integers,
Willy Tarreaue9656522010-08-17 15:40:09 +02008345 which limits values to 4 terabytes. See also sc1/sc2_kbytes_in.
Willy Tarreauc9705a12010-07-27 20:05:50 +02008346
8347src_kbytes_out <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008348src_kbytes_out(<table>) <integer>
Willy Tarreauc9705a12010-07-27 20:05:50 +02008349 Returns the amount of data sent to the connection's source IPv4 address in
8350 the current proxy's stick-table or in the designated stick-table, measured
8351 in kilobytes over the period configured in the table. If the address is not
8352 found, zero is returned. The test is currently performed on 32-bit integers,
Willy Tarreaue9656522010-08-17 15:40:09 +02008353 which limits values to 4 terabytes. See also sc1/sc2_kbytes_out.
Willy Tarreaua975b8f2010-06-05 19:13:27 +02008354
Willy Tarreaud63335a2010-02-26 12:56:52 +01008355src_port <integer>
8356 Applies to the client's TCP source port. This has a very limited usage.
Willy Tarreau079ff0a2009-03-05 21:34:28 +01008357
Willy Tarreauc9705a12010-07-27 20:05:50 +02008358src_sess_cnt <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008359src_sess_cnt(<table>) <integer>
Willy Tarreauc9705a12010-07-27 20:05:50 +02008360 Returns the cumulated number of connections initiated from the current
8361 connection's source IPv4 address in the current proxy's stick-table or in the
8362 designated stick-table, that were transformed into sessions, which means that
8363 they were accepted by "tcp-request" rules. If the address is not found, zero
Willy Tarreaue9656522010-08-17 15:40:09 +02008364 is returned. See also sc1/sc2_sess_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +02008365
8366src_sess_rate <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008367src_sess_rate(<table>) <integer>
Willy Tarreauc9705a12010-07-27 20:05:50 +02008368 Returns the average session rate from the connection's source IPv4 address in
8369 the current proxy's stick-table or in the designated stick-table, measured in
8370 amount of sessions over the period configured in the table. A session is a
8371 connection that got past the early "tcp-request" rules. If the address is not
Willy Tarreaue9656522010-08-17 15:40:09 +02008372 found, zero is returned. See also sc1/sc2_sess_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +02008373
8374src_updt_conn_cnt <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008375src_updt_conn_cnt(<table>) <integer>
Willy Tarreaua975b8f2010-06-05 19:13:27 +02008376 Creates or updates the entry associated to the source IPv4 address in the
Willy Tarreauc9705a12010-07-27 20:05:50 +02008377 current proxy's stick-table or in the designated stick-table. This table
8378 must be configured to store the "conn_cnt" data type, otherwise the match
Willy Tarreaua975b8f2010-06-05 19:13:27 +02008379 will be ignored. The current count is incremented by one, and the expiration
8380 timer refreshed. The updated count is returned, so this match can't return
8381 zero. This is used to reject service abusers based on their source address.
Willy Tarreauc9705a12010-07-27 20:05:50 +02008382 Note: it is recommended to use the more complete "track-counters" instead.
Willy Tarreaua975b8f2010-06-05 19:13:27 +02008383
8384 Example :
8385 # This frontend limits incoming SSH connections to 3 per 10 second for
8386 # each source address, and rejects excess connections until a 10 second
8387 # silence is observed. At most 20 addresses are tracked.
8388 listen ssh
8389 bind :22
8390 mode tcp
8391 maxconn 100
Willy Tarreauc9705a12010-07-27 20:05:50 +02008392 stick-table type ip size 20 expire 10s store conn_cnt
Willy Tarreaua975b8f2010-06-05 19:13:27 +02008393 tcp-request content reject if { src_update_count gt 3 }
8394 server local 127.0.0.1:22
8395
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008396srv_conn(<backend>/<server>) <integer>
Hervé COMMOWICKdaa824e2011-08-05 12:09:44 +02008397 Applies to the number of currently established connections on the server,
8398 possibly including the connection being evaluated.
8399 It can be used to use a specific farm when one server is full.
8400 See also the "fe_conn", "be_conn" and "queue" criteria.
8401
Hervé COMMOWICK35ed8012010-12-15 14:04:51 +01008402srv_id <integer>
8403 Applies to the server's id. Can be used in frontends or backends.
8404
Willy Tarreau0b1cd942010-05-16 22:18:27 +02008405srv_is_up(<server>)
8406srv_is_up(<backend>/<server>)
8407 Returns true when the designated server is UP, and false when it is either
8408 DOWN or in maintenance mode. If <backend> is omitted, then the server is
8409 looked up in the current backend. The function takes no arguments since it
8410 is used as a boolean. It is mainly used to take action based on an external
8411 status reported via a health check (eg: a geographical site's availability).
8412 Another possible use which is more of a hack consists in using dummy servers
8413 as boolean variables that can be enabled or disabled from the CLI, so that
8414 rules depending on those ACLs can be tweaked in realtime.
8415
Willy Tarreauc735a072011-03-29 00:57:02 +02008416table_avl <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008417table_avl(<table>) <integer>
Willy Tarreauc735a072011-03-29 00:57:02 +02008418 Returns the total number of available entries in the current proxy's
8419 stick-table or in the designated stick-table. See also table_cnt.
8420
8421table_cnt <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008422table_cnt(<table>) <integer>
Willy Tarreauc735a072011-03-29 00:57:02 +02008423 Returns the total number of entries currently in use in the current proxy's
8424 stick-table or in the designated stick-table. See also src_conn_cnt and
8425 table_avl for other entry counting methods.
8426
Willy Tarreau0ba27502007-12-24 16:55:16 +01008427
Willy Tarreaue9656522010-08-17 15:40:09 +020084287.5.2. Matching contents at Layer 4 (also called Layer 6)
8429---------------------------------------------------------
Willy Tarreau62644772008-07-16 18:36:06 +02008430
8431A second set of criteria depends on data found in buffers, but which can change
8432during analysis. This requires that some data has been buffered, for instance
Willy Tarreaue9656522010-08-17 15:40:09 +02008433through TCP request content inspection. Please see the "tcp-request content"
8434keyword for more detailed information on the subject.
Willy Tarreau62644772008-07-16 18:36:06 +02008435
Willy Tarreaub6672b52011-12-12 17:23:41 +01008436rep_ssl_hello_type <integer>
8437 Returns true when data in the response buffer looks like a complete SSL (v3
8438 or superior) hello message and handshake type is equal to <integer>.
8439 This test was designed to be used with TCP response content inspection: a
Willy Tarreau7875d092012-09-10 08:20:03 +02008440 SSL session ID may be fetched. Note that this only applies to raw contents
8441 found in the request buffer and not to contents deciphered via an SSL data
8442 layer, so this will not work with "bind" lines having the "ssl" option.
Willy Tarreaub6672b52011-12-12 17:23:41 +01008443
Willy Tarreau62644772008-07-16 18:36:06 +02008444req_len <integer>
Emeric Brunbede3d02009-06-30 17:54:00 +02008445 Returns true when the length of the data in the request buffer matches the
Willy Tarreau62644772008-07-16 18:36:06 +02008446 specified range. It is important to understand that this test does not
8447 return false as long as the buffer is changing. This means that a check with
8448 equality to zero will almost always immediately match at the beginning of the
8449 session, while a test for more data will wait for that data to come in and
8450 return false only when haproxy is certain that no more data will come in.
8451 This test was designed to be used with TCP request content inspection.
8452
Willy Tarreau2492d5b2009-07-11 00:06:00 +02008453req_proto_http
8454 Returns true when data in the request buffer look like HTTP and correctly
8455 parses as such. It is the same parser as the common HTTP request parser which
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01008456 is used so there should be no surprises. This test can be used for instance
Willy Tarreau2492d5b2009-07-11 00:06:00 +02008457 to direct HTTP traffic to a given port and HTTPS traffic to another one
8458 using TCP request content inspection rules.
8459
Emeric Brunbede3d02009-06-30 17:54:00 +02008460req_rdp_cookie <string>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008461req_rdp_cookie(<name>) <string>
Emeric Brunbede3d02009-06-30 17:54:00 +02008462 Returns true when data in the request buffer look like the RDP protocol, and
8463 a cookie is present and equal to <string>. By default, any cookie name is
8464 checked, but a specific cookie name can be specified in parenthesis. The
8465 parser only checks for the first cookie, as illustrated in the RDP protocol
8466 specification. The cookie name is case insensitive. This ACL can be useful
8467 with the "MSTS" cookie, as it can contain the user name of the client
8468 connecting to the server if properly configured on the client. This can be
8469 used to restrict access to certain servers to certain users.
8470
8471req_rdp_cookie_cnt <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008472req_rdp_cookie_cnt(<name>) <integer>
Emeric Brunbede3d02009-06-30 17:54:00 +02008473 Returns true when the data in the request buffer look like the RDP protocol
8474 and the number of RDP cookies matches the specified range (typically zero or
8475 one). Optionally a specific cookie name can be checked. This is a simple way
8476 of detecting the RDP protocol, as clients generally send the MSTS or MSTSHASH
8477 cookies.
8478
Willy Tarreaub6672b52011-12-12 17:23:41 +01008479req_ssl_hello_type <integer>
8480 Returns true when data in the request buffer looks like a complete SSL (v3
8481 or superior) hello message and handshake type is equal to <integer>.
8482 This test was designed to be used with TCP request content inspection: an
Willy Tarreau7875d092012-09-10 08:20:03 +02008483 SSL session ID may be fetched. Note that this only applies to raw contents
8484 found in the request buffer and not to contents deciphered via an SSL data
8485 layer, so this will not work with "bind" lines having the "ssl" option.
Willy Tarreaub6672b52011-12-12 17:23:41 +01008486
8487req_ssl_sni <string>
8488 Returns true when data in the request buffer looks like a complete SSL (v3
8489 or superior) client hello message with a Server Name Indication TLS extension
8490 (SNI) matching <string>. SNI normally contains the name of the host the
8491 client tries to connect to (for recent browsers). SNI is useful for allowing
8492 or denying access to certain hosts when SSL/TLS is used by the client. This
8493 test was designed to be used with TCP request content inspection. If content
8494 switching is needed, it is recommended to first wait for a complete client
Willy Tarreau7875d092012-09-10 08:20:03 +02008495 hello (type 1), like in the example below. Note that this only applies to raw
8496 contents found in the request buffer and not to contents deciphered via an
Willy Tarreauf7bc57c2012-10-03 00:19:48 +02008497 SSL transport layer, so this will not work with "bind" lines having the "ssl"
Willy Tarreau7875d092012-09-10 08:20:03 +02008498 option. See also "ssl_sni" below.
Willy Tarreaub6672b52011-12-12 17:23:41 +01008499
8500 Examples :
8501 # Wait for a client hello for at most 5 seconds
8502 tcp-request inspect-delay 5s
8503 tcp-request content accept if { req_ssl_hello_type 1 }
8504 use_backend bk_allow if { req_ssl_sni -f allowed_sites }
8505 default_backend bk_sorry_page
8506
Willy Tarreau62644772008-07-16 18:36:06 +02008507req_ssl_ver <decimal>
8508 Returns true when data in the request buffer look like SSL, with a protocol
8509 version matching the specified range. Both SSLv2 hello messages and SSLv3
8510 messages are supported. The test tries to be strict enough to avoid being
8511 easily fooled. In particular, it waits for as many bytes as announced in the
8512 message header if this header looks valid (bound to the buffer size). Note
8513 that TLSv1 is announced as SSL version 3.1. This test was designed to be used
Willy Tarreau7875d092012-09-10 08:20:03 +02008514 with TCP request content inspection. Note that this only applies to raw
8515 contents found in the request buffer and not to contents deciphered via an
Willy Tarreauf7bc57c2012-10-03 00:19:48 +02008516 SSL transport layer, so this will not work with "bind" lines having the "ssl"
Willy Tarreau7875d092012-09-10 08:20:03 +02008517 option.
8518
Emeric Brun2525b6b2012-10-18 15:59:43 +02008519ssl_c_ca_err <integer>
8520 Returns true when the incoming connection was made over an SSL/TLS transport
8521 layer, and the ID of the first error detected during verification of the
8522 client certificate at depth > 0 matches the specified value (check man verify
8523 for possible values). Note that error zero means no error was encountered
8524 during this verification process.
8525
8526ssl_c_ca_err_depth <integer>
8527 Returns true when the incoming connection was made over an SSL/TLS transport
8528 layer, and the depth in the CA chain of the first error detected during the
8529 verification of the client certificate matches the specified value. When no
8530 error is found, depth 0 is returned.
8531
8532ssl_c_err <integer>
8533 Returns true when the incoming connection was made over an SSL/TLS transport
8534 layer, and the ID of the first error detected during verification at depth==0
8535 matches the specified value (check man verify for possible values). Note that
8536 error zero means no error was encountered during this verification process.
8537
Emeric Brun87855892012-10-17 17:39:35 +02008538ssl_c_i_dn <string>
8539ssl_c_i_dn(entry[,occ]) <string>
8540 If no entry specified, returns true when the incoming connection was made
8541 over an SSL/TLS transport layer, and the full distinguished name of the
8542 issuer of the certificate presented by the client matches the specified
8543 string. Otherwise returns true if the value of the first given entry from
8544 the beginning of the DN matches the specified string. If a positive/negative
8545 occurrence number is specified as the optional second argument, it returns
8546 true if the value of the nth given entry value from the beginning/end of the
8547 DN matches the specified string.
8548
Emeric Brun7f56e742012-10-19 18:15:40 +02008549ssl_c_key_alg <string>
8550 Returns true when the incoming connection was made over an SSL/TLS transport
8551 layer, and the name of the algorithm used to generate the key of the
8552 certificate presented by the client matches the string.
8553
Emeric Brunce5ad802012-10-22 14:11:22 +02008554ssl_c_notafter <string>
8555 Returns true when the incoming connection was made over an SSL/TLS transport
8556 layer, and the end date of the certificate presented by the client matches
8557 the string formatted as YYMMDDhhmmss[Z].
8558
8559ssl_c_notbefore <string>
8560 Returns true when the incoming connection was made over an SSL/TLS transport
8561 layer, and the start date of the certificate presented by the client matches
8562 the string formatted as YYMMDDhhmmss[Z].
8563
Emeric Brun87855892012-10-17 17:39:35 +02008564ssl_c_s_dn <string>
8565ssl_c_s_dn(entry[,occ]) <string>
8566 If no entry specified, returns true when the incoming connection was made
8567 over an SSL/TLS transport layer, and the full distinguished name of the
8568 subject of the certificate presented by the client matches the specified
8569 string. Otherwise returns true if the value of the first given entry from
8570 the beginning of the DN matches the specified string. If a positive/negative
8571 occurrence number is specified as the optional second argument, it returns
8572 true if the value of the nth given entry value from the beginning/end of the
8573 DN matches the specified string.
8574
Willy Tarreau8d598402012-10-22 17:58:39 +02008575ssl_c_serial <hexa>
8576 Returns true when the incoming connection was made over an SSL/TLS transport
8577 layer, and the serial of the certificate presented by the client matches
8578 the value written in hexa.
8579
Emeric Brun7f56e742012-10-19 18:15:40 +02008580ssl_c_sig_alg <string>
8581 Returns true when the incoming connection was made over an SSL/TLS transport
8582 layer, and the name of the algorithm used to sign the certificate presented
8583 by the client matches the string.
8584
Emeric Brun2525b6b2012-10-18 15:59:43 +02008585ssl_c_verify <integer>
8586 Returns true when the incoming connection was made over an SSL/TLS transport
8587 layer, and the verify result matches the specified value (check man verify
8588 for possible values). Zero indicates no error was detected.
8589
Emeric Bruna7359fd2012-10-17 15:03:11 +02008590ssl_c_version <integer>
8591 Returns true when the incoming connection was made over an SSL/TLS transport
8592 layer, and the version of the certificate presented by the client matches
8593 the value.
8594
Emeric Brun87855892012-10-17 17:39:35 +02008595ssl_f_i_dn <string>
8596ssl_f_i_dn(entry[,occ]) <string>
8597 If no entry specified, returns true when the incoming connection was made
8598 over an SSL/TLS transport layer, and the full distinguished name of the
8599 issuer of the certificate presented by the frontend matches the specified
8600 string. Otherwise returns true if the value of the first given entry from
8601 the beginning of the DN matches the specified string. If a positive/negative
8602 occurrence number is specified as the optional second argument, it returns
8603 true if the value of the nth given entry value from the beginning/end of the
8604 DN matches the specified string.
8605
Emeric Brun7f56e742012-10-19 18:15:40 +02008606ssl_c_key_alg <string>
8607 Returns true when the incoming connection was made over an SSL/TLS transport
8608 layer, and the name of the algorithm used to generate the key of the
8609 certificate presented by the frontend matches the string.
8610
Emeric Brunce5ad802012-10-22 14:11:22 +02008611ssl_f_notafter <string>
8612 Returns true when the incoming connection was made over an SSL/TLS transport
8613 layer, and the end date of the certificate presented by the frontend matches
8614 the string formatted as YYMMDDhhmmss[Z].
8615
8616ssl_f_notbefore <string>
8617 Returns true when the incoming connection was made over an SSL/TLS transport
8618 layer, and the start date of the certificate presented by the frontend matches
8619 the string formatted as YYMMDDhhmmss[Z].
8620
Emeric Brun87855892012-10-17 17:39:35 +02008621ssl_f_s_dn <string>
8622ssl_f_s_dn(entry[,occ]) <string>
8623 If no entry specified, returns true when the incoming connection was made
8624 over an SSL/TLS transport layer, and the full distinguished name of the
8625 subject of the certificate presented by the frontend matches the specified
8626 string. Otherwise returns true if the value of the first given entry from
8627 the beginning of the DN matches the specified string. If a positive/negative
8628 occurrence number is specified as the optional second argument, it returns
8629 true if the value of the nth given entry value from the beginning/end of the
8630 DN matches the specified string.
8631
Willy Tarreau8d598402012-10-22 17:58:39 +02008632ssl_f_serial <hexa>
8633 Returns true when the incoming connection was made over an SSL/TLS transport
8634 layer, and the serial of the certificate presented by the frontend matches
8635 the value written in hexa.
8636
Emeric Brun7f56e742012-10-19 18:15:40 +02008637ssl_f_sig_alg <string>
8638 Returns true when the incoming connection was made over an SSL/TLS transport
8639 layer, and the name of the algorithm used to sign the certificate presented
8640 by the frontend matches the string.
8641
Emeric Bruna7359fd2012-10-17 15:03:11 +02008642ssl_f_version <integer>
8643 Returns true when the incoming connection was made over an SSL/TLS transport
8644 layer, and the version of the certificate presented by the frontend matches
8645 the value.
8646
Emeric Brun2525b6b2012-10-18 15:59:43 +02008647ssl_fc
8648 Returns true when the front connection was made via an SSL/TLS transport
8649 layer and is locally deciphered. This means it has matched a socket declared
8650 with a "bind" line having the "ssl" option.
8651
Emeric Brun589fcad2012-10-16 14:13:26 +02008652ssl_fc_alg_keysize <integer>
8653 Returns true when the incoming connection was made over an SSL/TLS transport
8654 layer and the symmetric cipher key size supported in bits matches the value.
8655
8656ssl_fc_cipher <string>
8657 returns true when the incoming connection was made over an ssl/tls transport
8658 layer and the name of the used cipher matches the string.
8659
Emeric Brun2525b6b2012-10-18 15:59:43 +02008660ssl_fc_has_crt
8661 Returns true if a client certificate is present in an incoming connection over
8662 SSL/TLS transport layer. Useful if 'verify' statement is set to 'optional'.
8663
8664ssl_fc_has_sni
Willy Tarreau7875d092012-09-10 08:20:03 +02008665 This is used to check for presence of a Server Name Indication TLS extension
Willy Tarreauf7bc57c2012-10-03 00:19:48 +02008666 in an incoming connection was made over an SSL/TLS transport layer. Returns
8667 true when the incoming connection presents a TLS SNI field. This requires
8668 that the SSL library is build with support for TLS extensions enabled (check
8669 haproxy -vv).
Willy Tarreau7875d092012-09-10 08:20:03 +02008670
Emeric Brun2525b6b2012-10-18 15:59:43 +02008671ssl_fc_npn <string>
Willy Tarreaua33c6542012-10-15 13:19:06 +02008672 Returns true when the incoming connection was made over an SSL/TLS transport
8673 layer which deciphered it and found a Next Protocol Negociation TLS extension
8674 sent by the client, matching the specified string. This requires that the SSL
8675 library is build with support for TLS extensions enabled (check haproxy -vv).
Willy Tarreau6c9a3d52012-10-18 18:57:14 +02008676 Note that the TLS NPN extension is not advertised unless the "npn" keyword on
8677 the "bind" line specifies a protocol list. Also, nothing forces the client to
8678 pick a protocol from this list, any other one may be requested.
Willy Tarreaua33c6542012-10-15 13:19:06 +02008679
Emeric Brun589fcad2012-10-16 14:13:26 +02008680ssl_fc_protocol <string>
8681 Returns true when the incoming connection was made over an SSL/TLS transport
8682 layer and the name of the used protocol matches the string.
8683
Emeric Brun2525b6b2012-10-18 15:59:43 +02008684ssl_fc_sni <string>
Willy Tarreauf7bc57c2012-10-03 00:19:48 +02008685 Returns true when the incoming connection was made over an SSL/TLS transport
8686 layer which deciphered it and found a Server Name Indication TLS extension
8687 sent by the client, matching the specified string. In HTTPS, the SNI field
8688 (when present) is equal to the requested host name. This match is different
Cyril Bonté9c1eb1e2012-10-09 22:45:34 +02008689 from "req_ssl_sni" above in that it applies to the connection being
8690 deciphered by haproxy and not to SSL contents being blindly forwarded.
Emeric Brun2525b6b2012-10-18 15:59:43 +02008691 See also "ssl_fc_sni_end" and "ssl_fc_sni_req" below. This requires that the
8692 SSL library is build with support for TLS extensions enabled (check
8693 haproxy -vv).
Willy Tarreau7875d092012-09-10 08:20:03 +02008694
Emeric Brun2525b6b2012-10-18 15:59:43 +02008695ssl_fc_sni_end <string>
Willy Tarreauf7bc57c2012-10-03 00:19:48 +02008696 Returns true when the incoming connection was made over an SSL/TLS transport
8697 layer which deciphered it and found a Server Name Indication TLS extension
8698 sent by the client, ending like the specified string. In HTTPS, the SNI field
8699 (when present) is equal to the requested host name. This match is different
Cyril Bonté9c1eb1e2012-10-09 22:45:34 +02008700 from "req_ssl_sni" above in that it applies to the connection being
8701 deciphered by haproxy and not to SSL contents being blindly forwarded. This
8702 requires that the SSL library is build with support for TLS extensions
8703 enabled (check haproxy -vv).
Willy Tarreau7875d092012-09-10 08:20:03 +02008704
Emeric Brun2525b6b2012-10-18 15:59:43 +02008705ssl_fc_sni_reg <regex>
Willy Tarreauf7bc57c2012-10-03 00:19:48 +02008706 Returns true when the incoming connection was made over an SSL/TLS transport
8707 layer which deciphered it and found a Server Name Indication TLS extension
8708 sent by the client, matching the specified regex. In HTTPS, the SNI field
8709 (when present) is equal to the requested host name. This match is different
Cyril Bonté9c1eb1e2012-10-09 22:45:34 +02008710 from "req_ssl_sni" above in that it applies to the connection being
8711 deciphered by haproxy and not to SSL contents being blindly forwarded. This
8712 requires that the SSL library is build with support for TLS extensions
8713 enabled (check haproxy -vv).
Willy Tarreau62644772008-07-16 18:36:06 +02008714
Emeric Brun589fcad2012-10-16 14:13:26 +02008715ssl_fc_use_keysize <integer>
8716 Returns true when the incoming connection was made over an SSL/TLS transport
8717 layer and the symmetric cipher key size used in bits matches the value.
8718
Willy Tarreaub6fb4202008-07-20 11:18:28 +02008719wait_end
8720 Waits for the end of the analysis period to return true. This may be used in
8721 conjunction with content analysis to avoid returning a wrong verdict early.
8722 It may also be used to delay some actions, such as a delayed reject for some
8723 special addresses. Since it either stops the rules evaluation or immediately
8724 returns true, it is recommended to use this acl as the last one in a rule.
8725 Please note that the default ACL "WAIT_END" is always usable without prior
8726 declaration. This test was designed to be used with TCP request content
8727 inspection.
8728
8729 Examples :
8730 # delay every incoming request by 2 seconds
8731 tcp-request inspect-delay 2s
8732 tcp-request content accept if WAIT_END
8733
8734 # don't immediately tell bad guys they are rejected
8735 tcp-request inspect-delay 10s
8736 acl goodguys src 10.0.0.0/24
8737 acl badguys src 10.0.1.0/24
8738 tcp-request content accept if goodguys
8739 tcp-request content reject if badguys WAIT_END
8740 tcp-request content reject
8741
Willy Tarreau62644772008-07-16 18:36:06 +02008742
Willy Tarreauc57f0e22009-05-10 13:12:33 +020087437.5.3. Matching at Layer 7
8744--------------------------
Willy Tarreau0ba27502007-12-24 16:55:16 +01008745
Willy Tarreau62644772008-07-16 18:36:06 +02008746A third set of criteria applies to information which can be found at the
Willy Tarreau0ba27502007-12-24 16:55:16 +01008747application layer (layer 7). Those require that a full HTTP request has been
8748read, and are only evaluated then. They may require slightly more CPU resources
8749than the layer 4 ones, but not much since the request and response are indexed.
8750
Willy Tarreaua7ad50c2012-04-29 15:39:40 +02008751base <string>
8752 Returns true when the concatenation of the first Host header and the path
8753 part of the request, which starts at the first slash and ends before the
8754 question mark, equals one of the strings. It may be used to match known
8755 files in virtual hosting environments, such as "www.example.com/favicon.ico".
8756 See also "path" and "uri".
8757
8758base_beg <string>
8759 Returns true when the base (see above) begins with one of the strings. This
8760 can be used to send certain directory names to alternative backends. See also
8761 "path_beg".
8762
8763base_dir <string>
8764 Returns true when one of the strings is found isolated or delimited with
8765 slashes in the base (see above). Probably of little use, see "url_dir" and
8766 "path_dir" instead.
8767
8768base_dom <string>
8769 Returns true when one of the strings is found isolated or delimited with dots
8770 in the base (see above). Probably of little use, see "path_dom" and "url_dom"
8771 instead.
8772
8773base_end <string>
8774 Returns true when the base (see above) ends with one of the strings. This may
8775 be used to control file name extension, though "path_end" is cheaper.
8776
8777base_len <integer>
8778 Returns true when the base (see above) length matches the values or ranges
8779 specified. This may be used to detect abusive requests for instance.
8780
8781base_reg <regex>
8782 Returns true when the base (see above) matches one of the regular
8783 expressions. It can be used any time, but it is important to remember that
8784 regex matching is slower than other methods. See also "path_reg", "url_reg"
8785 and all "base_" criteria.
8786
8787base_sub <string>
8788 Returns true when the base (see above) contains one of the strings. It can be
8789 used to detect particular patterns in paths, such as "../" for example. See
8790 also "base_dir".
8791
Willy Tarreau04aa6a92012-04-06 18:57:55 +02008792cook(<name>) <string>
8793 All "cook*" matching criteria inspect all "Cookie" headers to find a cookie
8794 with the name between parenthesis. If multiple occurrences of the cookie are
8795 found in the request, they will all be evaluated. Spaces around the name and
8796 the value are ignored as requested by the Cookie specification (RFC6265). The
8797 cookie name is case-sensitive. Use the scook() variant for response cookies
8798 sent by the server.
8799
8800 The "cook" criteria returns true if any of the request cookies <name> match
8801 any of the strings. This can be used to check exact for values. For instance,
8802 checking that the "profile" cookie is set to either "silver" or "gold" :
8803
8804 cook(profile) silver gold
8805
8806cook_beg(<name>) <string>
8807 Returns true if any of the request cookies <name> begins with one of the
8808 strings. See "cook" for more information on cookie matching. Use the
8809 scook_beg() variant for response cookies sent by the server.
8810
8811cook_cnt(<name>) <integer>
8812 Returns true when the number of occurrences of the specified cookie matches
8813 the values or ranges specified. This is used to detect presence, absence or
8814 abuse of a specific cookie. See "cook" for more information on header
8815 matching. Use the scook_cnt() variant for response cookies sent by the
8816 server.
8817
8818cook_dir(<name>) <string>
8819 Returns true if any of the request cookies <name> contains one of the strings
8820 either isolated or delimited by slashes. This is used to perform filename or
8821 directory name matching, though it generally is of limited use with cookies.
8822 See "cook" for more information on cookie matching. Use the scook_dir()
8823 variant for response cookies sent by the server.
8824
8825cook_dom(<name>) <string>
8826 Returns true if any of the request cookies <name> contains one of the strings
8827 either isolated or delimited by dots. This is used to perform domain name
8828 matching. See "cook" for more information on cookie matching. Use the
8829 scook_dom() variant for response cookies sent by the server.
8830
8831cook_end(<name>) <string>
8832 Returns true if any of the request cookies <name> ends with one of the
8833 strings. See "cook" for more information on cookie matching. Use the
8834 scook_end() variant for response cookies sent by the server.
8835
8836cook_len(<name>) <integer>
8837 Returns true if any of the request cookies <name> has a length which matches
8838 the values or ranges specified. This may be used to detect empty or too large
8839 cookie values. Note that an absent cookie does not match a zero-length test.
8840 See "cook" for more information on cookie matching. Use the scook_len()
8841 variant for response cookies sent by the server.
8842
8843cook_reg(<name>) <regex>
8844 Returns true if any of the request cookies <name> matches any of the regular
8845 expressions. It can be used at any time, but it is important to remember that
8846 regex matching is slower than other methods. See also other "cook_" criteria,
8847 as well as "cook" for more information on cookie matching. Use the
8848 scook_reg() variant for response cookies sent by the server.
8849
8850cook_sub(<name>) <string>
8851 Returns true if any of the request cookies <name> contains at least one of
8852 the strings. See "cook" for more information on cookie matching. Use the
8853 scook_sub() variant for response cookies sent by the server.
8854
Willy Tarreau51539362012-05-08 12:46:28 +02008855cook_val(<name>) <integer>
8856 Returns true if any of the request cookies <name> starts with a number which
8857 matches the values or ranges specified. This may be used to select a server
8858 based on application-specific cookies. Note that an absent cookie does not
8859 match any value. See "cook" for more information on cookie matching. Use the
8860 scook_val() variant for response cookies sent by the server.
8861
Willy Tarreaud63335a2010-02-26 12:56:52 +01008862hdr <string>
Willy Tarreau185b5c42012-04-26 15:11:51 +02008863hdr(<header>[,<occ>]) <string>
Willy Tarreaud63335a2010-02-26 12:56:52 +01008864 Note: all the "hdr*" matching criteria either apply to all headers, or to a
8865 particular header whose name is passed between parenthesis and without any
8866 space. The header name is not case-sensitive. The header matching complies
8867 with RFC2616, and treats as separate headers all values delimited by commas.
Willy Tarreau185b5c42012-04-26 15:11:51 +02008868 If an occurrence number is specified as the optional second argument, only
8869 this occurrence will be considered. Positive values indicate a position from
8870 the first occurrence, 1 being the first one. Negative values indicate
8871 positions relative to the last one, -1 being the last one. Use the shdr()
8872 variant for response headers sent by the server.
Willy Tarreaud63335a2010-02-26 12:56:52 +01008873
8874 The "hdr" criteria returns true if any of the headers matching the criteria
Willy Tarreau25c1ebc2012-04-25 16:21:44 +02008875 match any of the strings. This can be used to check for exact values. For
Willy Tarreaud63335a2010-02-26 12:56:52 +01008876 instance, checking that "connection: close" is set :
8877
8878 hdr(Connection) -i close
8879
8880hdr_beg <string>
Willy Tarreau185b5c42012-04-26 15:11:51 +02008881hdr_beg(<header>[,<occ>]) <string>
Willy Tarreaud63335a2010-02-26 12:56:52 +01008882 Returns true when one of the headers begins with one of the strings. See
8883 "hdr" for more information on header matching. Use the shdr_beg() variant for
8884 response headers sent by the server.
8885
8886hdr_cnt <integer>
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008887hdr_cnt(<header>) <integer>
Willy Tarreaud63335a2010-02-26 12:56:52 +01008888 Returns true when the number of occurrence of the specified header matches
8889 the values or ranges specified. It is important to remember that one header
8890 line may count as several headers if it has several values. This is used to
8891 detect presence, absence or abuse of a specific header, as well as to block
8892 request smuggling attacks by rejecting requests which contain more than one
8893 of certain headers. See "hdr" for more information on header matching. Use
8894 the shdr_cnt() variant for response headers sent by the server.
8895
8896hdr_dir <string>
Willy Tarreau185b5c42012-04-26 15:11:51 +02008897hdr_dir(<header>[,<occ>]) <string>
Willy Tarreaud63335a2010-02-26 12:56:52 +01008898 Returns true when one of the headers contains one of the strings either
8899 isolated or delimited by slashes. This is used to perform filename or
8900 directory name matching, and may be used with Referer. See "hdr" for more
8901 information on header matching. Use the shdr_dir() variant for response
8902 headers sent by the server.
8903
8904hdr_dom <string>
Willy Tarreau185b5c42012-04-26 15:11:51 +02008905hdr_dom(<header>[,<occ>]) <string>
Willy Tarreaud63335a2010-02-26 12:56:52 +01008906 Returns true when one of the headers contains one of the strings either
8907 isolated or delimited by dots. This is used to perform domain name matching,
8908 and may be used with the Host header. See "hdr" for more information on
8909 header matching. Use the shdr_dom() variant for response headers sent by the
8910 server.
8911
8912hdr_end <string>
Willy Tarreau185b5c42012-04-26 15:11:51 +02008913hdr_end(<header>[,<occ>]) <string>
Willy Tarreaud63335a2010-02-26 12:56:52 +01008914 Returns true when one of the headers ends with one of the strings. See "hdr"
8915 for more information on header matching. Use the shdr_end() variant for
8916 response headers sent by the server.
8917
8918hdr_ip <ip_address>
Willy Tarreauceb4ac92012-04-28 00:41:46 +02008919hdr_ip(<header>[,<occ>]) <address>
8920 Returns true when one of the headers' values contains an IPv4 or IPv6 address
8921 matching <address>. This is mainly used with headers such as X-Forwarded-For
8922 or X-Client-IP. See "hdr" for more information on header matching. Use the
Willy Tarreaud63335a2010-02-26 12:56:52 +01008923 shdr_ip() variant for response headers sent by the server.
8924
Willy Tarreau0e698542011-09-16 08:32:32 +02008925hdr_len <integer>
Willy Tarreau185b5c42012-04-26 15:11:51 +02008926hdr_len(<header>[,<occ>]) <integer>
Willy Tarreau0e698542011-09-16 08:32:32 +02008927 Returns true when at least one of the headers has a length which matches the
8928 values or ranges specified. This may be used to detect empty or too large
8929 headers. See "hdr" for more information on header matching. Use the
8930 shdr_len() variant for response headers sent by the server.
8931
Willy Tarreaud63335a2010-02-26 12:56:52 +01008932hdr_reg <regex>
Willy Tarreau185b5c42012-04-26 15:11:51 +02008933hdr_reg(<header>[,<occ>]) <regex>
Willy Tarreau04aa6a92012-04-06 18:57:55 +02008934 Returns true it one of the headers matches one of the regular expressions. It
Willy Tarreaud63335a2010-02-26 12:56:52 +01008935 can be used at any time, but it is important to remember that regex matching
8936 is slower than other methods. See also other "hdr_" criteria, as well as
8937 "hdr" for more information on header matching. Use the shdr_reg() variant for
8938 response headers sent by the server.
8939
8940hdr_sub <string>
Willy Tarreau185b5c42012-04-26 15:11:51 +02008941hdr_sub(<header>[,<occ>]) <string>
Willy Tarreaud63335a2010-02-26 12:56:52 +01008942 Returns true when one of the headers contains one of the strings. See "hdr"
8943 for more information on header matching. Use the shdr_sub() variant for
8944 response headers sent by the server.
8945
8946hdr_val <integer>
Willy Tarreau185b5c42012-04-26 15:11:51 +02008947hdr_val(<header>[,<occ>]) <integer>
Willy Tarreaud63335a2010-02-26 12:56:52 +01008948 Returns true when one of the headers starts with a number which matches the
8949 values or ranges specified. This may be used to limit content-length to
8950 acceptable values for example. See "hdr" for more information on header
8951 matching. Use the shdr_val() variant for response headers sent by the server.
8952
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02008953http_auth(<userlist>)
8954http_auth_group(<userlist>) <group> [<group>]*
Willy Tarreaud63335a2010-02-26 12:56:52 +01008955 Returns true when authentication data received from the client matches
8956 username & password stored on the userlist. It is also possible to
8957 use http_auth_group to check if the user is assigned to at least one
8958 of specified groups.
8959
8960 Currently only http basic auth is supported.
8961
Willy Tarreau85c27da2011-09-16 07:53:52 +02008962http_first_req
Willy Tarreau7f18e522010-10-22 20:04:13 +02008963 Returns true when the request being processed is the first one of the
8964 connection. This can be used to add or remove headers that may be missing
8965 from some requests when a request is not the first one, or even to perform
8966 some specific ACL checks only on the first request.
8967
Willy Tarreau6a06a402007-07-15 20:15:28 +02008968method <string>
8969 Applies to the method in the HTTP request, eg: "GET". Some predefined ACL
8970 already check for most common methods.
8971
Willy Tarreau6a06a402007-07-15 20:15:28 +02008972path <string>
8973 Returns true when the path part of the request, which starts at the first
8974 slash and ends before the question mark, equals one of the strings. It may be
8975 used to match known files, such as /favicon.ico.
8976
8977path_beg <string>
Willy Tarreau0ba27502007-12-24 16:55:16 +01008978 Returns true when the path begins with one of the strings. This can be used
8979 to send certain directory names to alternative backends.
Willy Tarreau6a06a402007-07-15 20:15:28 +02008980
Willy Tarreau6a06a402007-07-15 20:15:28 +02008981path_dir <string>
8982 Returns true when one of the strings is found isolated or delimited with
8983 slashes in the path. This is used to perform filename or directory name
8984 matching without the risk of wrong match due to colliding prefixes. See also
8985 "url_dir" and "path_sub".
8986
8987path_dom <string>
8988 Returns true when one of the strings is found isolated or delimited with dots
8989 in the path. This may be used to perform domain name matching in proxy
8990 requests. See also "path_sub" and "url_dom".
8991
Willy Tarreaud63335a2010-02-26 12:56:52 +01008992path_end <string>
8993 Returns true when the path ends with one of the strings. This may be used to
8994 control file name extension.
8995
Willy Tarreau0e698542011-09-16 08:32:32 +02008996path_len <integer>
8997 Returns true when the path length matches the values or ranges specified.
8998 This may be used to detect abusive requests for instance.
8999
Willy Tarreau6a06a402007-07-15 20:15:28 +02009000path_reg <regex>
9001 Returns true when the path matches one of the regular expressions. It can be
9002 used any time, but it is important to remember that regex matching is slower
9003 than other methods. See also "url_reg" and all "path_" criteria.
9004
Willy Tarreaud63335a2010-02-26 12:56:52 +01009005path_sub <string>
9006 Returns true when the path contains one of the strings. It can be used to
9007 detect particular patterns in paths, such as "../" for example. See also
9008 "path_dir".
9009
Willy Tarreau0ce3aa02012-04-25 18:46:33 +02009010payload(<offset>,<length>) <string>
9011 Returns true if the block of <length> bytes, starting at byte <offset> in the
9012 request or response buffer (depending on the rule) exactly matches one of the
9013 strings.
9014
9015payload_lv(<offset1>,<length>[,<offset2>])
9016 Returns true if the block whose size is specified at <offset1> for <length>
9017 bytes, and which starts at <offset2> if specified or just after the length in
9018 the request or response buffer (depending on the rule) exactly matches one of
9019 the strings. The <offset2> parameter also supports relative offsets if
9020 prepended with a '+' or '-' sign.
9021
Willy Tarreaud63335a2010-02-26 12:56:52 +01009022req_ver <string>
9023 Applies to the version string in the HTTP request, eg: "1.0". Some predefined
9024 ACL already check for versions 1.0 and 1.1.
9025
9026status <integer>
9027 Applies to the HTTP status code in the HTTP response, eg: "302". It can be
9028 used to act on responses depending on status ranges, for instance, remove
9029 any Location header if the response is not a 3xx.
9030
Willy Tarreau6a06a402007-07-15 20:15:28 +02009031url <string>
9032 Applies to the whole URL passed in the request. The only real use is to match
Willy Tarreaua7ad50c2012-04-29 15:39:40 +02009033 "*", for which there already is a predefined ACL. See also "base".
Willy Tarreau6a06a402007-07-15 20:15:28 +02009034
9035url_beg <string>
9036 Returns true when the URL begins with one of the strings. This can be used to
Willy Tarreaua7ad50c2012-04-29 15:39:40 +02009037 check whether a URL begins with a slash or with a protocol scheme. See also
9038 "base_beg".
Willy Tarreau6a06a402007-07-15 20:15:28 +02009039
Willy Tarreau6a06a402007-07-15 20:15:28 +02009040url_dir <string>
9041 Returns true when one of the strings is found isolated or delimited with
9042 slashes in the URL. This is used to perform filename or directory name
9043 matching without the risk of wrong match due to colliding prefixes. See also
9044 "path_dir" and "url_sub".
9045
9046url_dom <string>
9047 Returns true when one of the strings is found isolated or delimited with dots
9048 in the URL. This is used to perform domain name matching without the risk of
9049 wrong match due to colliding prefixes. See also "url_sub".
9050
Willy Tarreaud63335a2010-02-26 12:56:52 +01009051url_end <string>
9052 Returns true when the URL ends with one of the strings. It has very limited
9053 use. "path_end" should be used instead for filename matching.
Willy Tarreau6a06a402007-07-15 20:15:28 +02009054
Willy Tarreauceb4ac92012-04-28 00:41:46 +02009055url_ip <address>
9056 Applies to the IPv4 or IPv6 address specified in the absolute URI in an HTTP
9057 request. It can be used to prevent access to certain resources such as local
9058 network. It is useful with option "http_proxy".
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01009059
Willy Tarreau0e698542011-09-16 08:32:32 +02009060url_len <integer>
9061 Returns true when the url length matches the values or ranges specified. This
9062 may be used to detect abusive requests for instance.
9063
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01009064url_port <integer>
Willy Tarreau0ba27502007-12-24 16:55:16 +01009065 Applies to the port specified in the absolute URI in an HTTP request. It can
9066 be used to prevent access to certain resources. It is useful with option
Willy Tarreau198a7442008-01-17 12:05:32 +01009067 "http_proxy". Note that if the port is not specified in the request, port 80
Willy Tarreau0ba27502007-12-24 16:55:16 +01009068 is assumed.
Alexandre Cassen5eb1a902007-11-29 15:43:32 +01009069
Willy Tarreaud63335a2010-02-26 12:56:52 +01009070url_reg <regex>
9071 Returns true when the URL matches one of the regular expressions. It can be
9072 used any time, but it is important to remember that regex matching is slower
Willy Tarreaua7ad50c2012-04-29 15:39:40 +02009073 than other methods. See also "base_reg", "path_reg" and all "url_" criteria.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01009074
Willy Tarreaud63335a2010-02-26 12:56:52 +01009075url_sub <string>
9076 Returns true when the URL contains one of the strings. It can be used to
9077 detect particular patterns in query strings for example. See also "path_sub".
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01009078
Willy Tarreau25c1ebc2012-04-25 16:21:44 +02009079urlp(<name>) <string>
9080 Note: all "urlp*" matching criteria apply to the first occurrence of the
9081 parameter <name> in the query string. The parameter name is case-sensitive.
9082
9083 The "urlp" matching criteria returns true if the designated URL parameter
9084 matches any of the strings. This can be used to check for exact values.
9085
9086urlp_beg(<name>) <string>
9087 Returns true when the URL parameter "<name>" begins with one of the strings.
9088 This can be used to check whether a URL begins with a slash or with a
9089 protocol scheme.
9090
9091urlp_dir(<name>) <string>
9092 Returns true when the URL parameter "<name>" contains one of the strings
9093 either isolated or delimited with slashes. This is used to perform filename
9094 or directory name matching in a specific URL parameter without the risk of
9095 wrong match due to colliding prefixes. See also "path_dir" and "urlp_sub".
9096
9097urlp_dom(<name>) <string>
9098 Returns true when one of the strings is found isolated or delimited with dots
9099 in the URL parameter "<name>". This is used to perform domain name matching
9100 in a specific URL parameter without the risk of wrong match due to colliding
9101 prefixes. See also "urlp_sub".
9102
9103urlp_end(<name>) <string>
9104 Returns true when the URL parameter "<name>" ends with one of the strings.
9105
9106urlp_ip(<name>) <ip_address>
Willy Tarreauceb4ac92012-04-28 00:41:46 +02009107 Returns true when the URL parameter "<name>" contains an IPv4 or IPv6 address
9108 which matches one of the specified addresses.
Willy Tarreau25c1ebc2012-04-25 16:21:44 +02009109
9110urlp_len(<name>) <integer>
9111 Returns true when the URL parameter "<name>" has a length matching the values
9112 or ranges specified. This is used to detect abusive requests for instance.
9113
9114urlp_reg(<name>) <regex>
9115 Returns true when the URL parameter "<name>" matches one of the regular
9116 expressions. It can be used any time, but it is important to remember that
9117 regex matching is slower than other methods. See also "path_reg" and all
9118 "urlp_" criteria.
9119
9120urlp_sub(<name>) <string>
9121 Returns true when the URL parameter "<name>" contains one of the strings. It
9122 can be used to detect particular patterns in query strings for example. See
9123 also "path_sub" and other "urlp_" criteria.
9124
Willy Tarreaua9fddca2012-07-31 07:51:48 +02009125urlp_val(<name>) <integer>
9126 Returns true when the URL parameter "<name>" starts with a number matching
9127 the values or ranges specified. Note that the absence of the parameter does
9128 not match anything. Integers are unsigned so it is not possible to match
9129 negative data.
9130
Willy Tarreau198a7442008-01-17 12:05:32 +01009131
Willy Tarreauc57f0e22009-05-10 13:12:33 +020091327.6. Pre-defined ACLs
9133---------------------
Willy Tarreauced27012008-01-17 20:35:34 +01009134
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009135Some predefined ACLs are hard-coded so that they do not have to be declared in
9136every frontend which needs them. They all have their names in upper case in
Patrick Mézard2382ad62010-05-09 10:43:32 +02009137order to avoid confusion. Their equivalence is provided below.
Willy Tarreauced27012008-01-17 20:35:34 +01009138
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009139ACL name Equivalent to Usage
9140---------------+-----------------------------+---------------------------------
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009141FALSE always_false never match
Willy Tarreau2492d5b2009-07-11 00:06:00 +02009142HTTP req_proto_http match if protocol is valid HTTP
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009143HTTP_1.0 req_ver 1.0 match HTTP version 1.0
9144HTTP_1.1 req_ver 1.1 match HTTP version 1.1
Willy Tarreaud63335a2010-02-26 12:56:52 +01009145HTTP_CONTENT hdr_val(content-length) gt 0 match an existing content-length
9146HTTP_URL_ABS url_reg ^[^/:]*:// match absolute URL with scheme
9147HTTP_URL_SLASH url_beg / match URL beginning with "/"
9148HTTP_URL_STAR url * match URL equal to "*"
9149LOCALHOST src 127.0.0.1/8 match connection from local host
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009150METH_CONNECT method CONNECT match HTTP CONNECT method
9151METH_GET method GET HEAD match HTTP GET or HEAD method
9152METH_HEAD method HEAD match HTTP HEAD method
9153METH_OPTIONS method OPTIONS match HTTP OPTIONS method
9154METH_POST method POST match HTTP POST method
9155METH_TRACE method TRACE match HTTP TRACE method
Emeric Brunbede3d02009-06-30 17:54:00 +02009156RDP_COOKIE req_rdp_cookie_cnt gt 0 match presence of an RDP cookie
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009157REQ_CONTENT req_len gt 0 match data in the request buffer
Willy Tarreaud63335a2010-02-26 12:56:52 +01009158TRUE always_true always match
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009159WAIT_END wait_end wait for end of content analysis
9160---------------+-----------------------------+---------------------------------
Willy Tarreauced27012008-01-17 20:35:34 +01009161
Willy Tarreauced27012008-01-17 20:35:34 +01009162
Willy Tarreauc57f0e22009-05-10 13:12:33 +020091637.7. Using ACLs to form conditions
9164----------------------------------
Willy Tarreauced27012008-01-17 20:35:34 +01009165
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009166Some actions are only performed upon a valid condition. A condition is a
9167combination of ACLs with operators. 3 operators are supported :
Willy Tarreauced27012008-01-17 20:35:34 +01009168
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009169 - AND (implicit)
9170 - OR (explicit with the "or" keyword or the "||" operator)
9171 - Negation with the exclamation mark ("!")
Willy Tarreauced27012008-01-17 20:35:34 +01009172
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01009173A condition is formed as a disjunctive form:
Willy Tarreauced27012008-01-17 20:35:34 +01009174
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009175 [!]acl1 [!]acl2 ... [!]acln { or [!]acl1 [!]acl2 ... [!]acln } ...
Willy Tarreauced27012008-01-17 20:35:34 +01009176
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009177Such conditions are generally used after an "if" or "unless" statement,
9178indicating when the condition will trigger the action.
Willy Tarreauced27012008-01-17 20:35:34 +01009179
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009180For instance, to block HTTP requests to the "*" URL with methods other than
9181"OPTIONS", as well as POST requests without content-length, and GET or HEAD
9182requests with a content-length greater than 0, and finally every request which
9183is not either GET/HEAD/POST/OPTIONS !
Willy Tarreauced27012008-01-17 20:35:34 +01009184
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009185 acl missing_cl hdr_cnt(Content-length) eq 0
9186 block if HTTP_URL_STAR !METH_OPTIONS || METH_POST missing_cl
9187 block if METH_GET HTTP_CONTENT
9188 block unless METH_GET or METH_POST or METH_OPTIONS
Willy Tarreauced27012008-01-17 20:35:34 +01009189
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009190To select a different backend for requests to static contents on the "www" site
9191and to every request on the "img", "video", "download" and "ftp" hosts :
Willy Tarreauced27012008-01-17 20:35:34 +01009192
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009193 acl url_static path_beg /static /images /img /css
9194 acl url_static path_end .gif .png .jpg .css .js
9195 acl host_www hdr_beg(host) -i www
9196 acl host_static hdr_beg(host) -i img. video. download. ftp.
Willy Tarreauced27012008-01-17 20:35:34 +01009197
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009198 # now use backend "static" for all static-only hosts, and for static urls
9199 # of host "www". Use backend "www" for the rest.
9200 use_backend static if host_static or host_www url_static
9201 use_backend www if host_www
Willy Tarreauced27012008-01-17 20:35:34 +01009202
Willy Tarreau95fa4692010-02-01 13:05:50 +01009203It is also possible to form rules using "anonymous ACLs". Those are unnamed ACL
9204expressions that are built on the fly without needing to be declared. They must
9205be enclosed between braces, with a space before and after each brace (because
Jamie Gloudon801a0a32012-08-25 00:18:33 -04009206the braces must be seen as independent words). Example :
Willy Tarreau95fa4692010-02-01 13:05:50 +01009207
9208 The following rule :
9209
9210 acl missing_cl hdr_cnt(Content-length) eq 0
9211 block if METH_POST missing_cl
9212
9213 Can also be written that way :
9214
9215 block if METH_POST { hdr_cnt(Content-length) eq 0 }
9216
9217It is generally not recommended to use this construct because it's a lot easier
9218to leave errors in the configuration when written that way. However, for very
9219simple rules matching only one source IP address for instance, it can make more
9220sense to use them than to declare ACLs with random names. Another example of
9221good use is the following :
9222
9223 With named ACLs :
9224
9225 acl site_dead nbsrv(dynamic) lt 2
9226 acl site_dead nbsrv(static) lt 2
9227 monitor fail if site_dead
9228
9229 With anonymous ACLs :
9230
9231 monitor fail if { nbsrv(dynamic) lt 2 } || { nbsrv(static) lt 2 }
9232
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009233See section 4.2 for detailed help on the "block" and "use_backend" keywords.
Willy Tarreauced27012008-01-17 20:35:34 +01009234
Willy Tarreau5764b382007-11-30 17:46:49 +01009235
Willy Tarreaub937b7e2010-01-12 15:27:54 +010092367.8. Pattern extraction
9237-----------------------
9238
9239The stickiness features relies on pattern extraction in the request and
9240response. Sometimes the data needs to be converted first before being stored,
9241for instance converted from ASCII to IP or upper case to lower case.
9242
9243All these operations of data extraction and conversion are defined as
9244"pattern extraction rules". A pattern rule always has the same format. It
9245begins with a single pattern fetch word, potentially followed by a list of
9246arguments within parenthesis then an optional list of transformations. As
9247much as possible, the pattern fetch functions use the same name as their
9248equivalent used in ACLs.
9249
9250The list of currently supported pattern fetch functions is the following :
9251
Willy Tarreaua7ad50c2012-04-29 15:39:40 +02009252 base This returns the concatenation of the first Host header and the
9253 path part of the request, which starts at the first slash and
9254 ends before the question mark. It can be useful in virtual
9255 hosted environments to detect URL abuses as well as to improve
9256 shared caches efficiency. Using this with a limited size stick
9257 table also allows one to collect statistics about most commonly
9258 requested objects by host/path.
9259
Willy Tarreaub937b7e2010-01-12 15:27:54 +01009260 src This is the source IPv4 address of the client of the session.
David du Colombier9a6d3c92011-03-17 10:40:24 +01009261 It is of type IPv4 and works on both IPv4 and IPv6 tables.
9262 On IPv6 tables, IPv4 address is mapped to its IPv6 equivalent,
9263 according to RFC 4291.
9264
Willy Tarreaub937b7e2010-01-12 15:27:54 +01009265 dst This is the destination IPv4 address of the session on the
9266 client side, which is the address the client connected to.
9267 It can be useful when running in transparent mode. It is of
David du Colombier9a6d3c92011-03-17 10:40:24 +01009268 type IPv4 and works on both IPv4 and IPv6 tables.
9269 On IPv6 tables, IPv4 address is mapped to its IPv6 equivalent,
9270 according to RFC 4291.
9271
Willy Tarreaub937b7e2010-01-12 15:27:54 +01009272 dst_port This is the destination TCP port of the session on the client
9273 side, which is the port the client connected to. This might be
9274 used when running in transparent mode or when assigning dynamic
9275 ports to some clients for a whole application session. It is of
9276 type integer and only works with such tables.
9277
Willy Tarreau185b5c42012-04-26 15:11:51 +02009278 hdr(<name>[,<occ>])
9279 This extracts the last occurrence of header <name> in an HTTP
9280 request. Optionally, a specific occurrence might be specified as
9281 a position number. Positive values indicate a position from the
9282 first occurrence, with 1 being the first one. Negative values
9283 indicate positions relative to the last one, with -1 being the
9284 last one. A typical use is with the X-Forwarded-For header once
Willy Tarreaue428fb72011-12-16 21:50:30 +01009285 converted to IP, associated with an IP stick-table.
Willy Tarreau4a568972010-05-12 08:08:50 +02009286
Willy Tarreau6812bcf2012-04-29 09:28:50 +02009287 path This extracts the request's URL path (without the host part). A
9288 typical use is with prefetch-capable caches, and with portals
9289 which need to aggregate multiple information from databases and
9290 keep them in caches. Note that with outgoing caches, it would be
9291 wiser to use "url" instead.
9292
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02009293 payload(<offset>,<length>)
Emeric Brun6a1cefa2010-09-24 18:15:17 +02009294 This extracts a binary block of <length> bytes, and starting
9295 at bytes <offset> in the buffer of request or response (request
9296 on "stick on" or "stick match" or response in on "stick store
9297 response").
Willy Tarreaub937b7e2010-01-12 15:27:54 +01009298
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02009299 payload_lv(<offset1>,<length>[,<offset2>])
Emeric Brun6a1cefa2010-09-24 18:15:17 +02009300 This extracts a binary block. In a first step the size of the
9301 block is read from response or request buffer at <offset>
9302 bytes and considered coded on <length> bytes. In a second step
9303 data of the block are read from buffer at <offset2> bytes
9304 (by default <lengthoffset> + <lengthsize>).
9305 If <offset2> is prefixed by '+' or '-', it is relative to
9306 <lengthoffset> + <lengthsize> else it is absolute.
9307 Ex: see SSL session id example in "stick table" chapter.
Cyril Bonté108cf6e2012-04-21 23:30:29 +02009308
Willy Tarreau25c1ebc2012-04-25 16:21:44 +02009309 src_port This is the source TCP port of the session on the client side,
9310 which is the port the client connected from. It is very unlikely
9311 that this function will be useful but it's available at no cost.
9312 It is of type integer and only works with such tables.
9313
Emeric Brun2525b6b2012-10-18 15:59:43 +02009314 ssl_c_ca_err Returns the ID of the first error detected during verify of the
9315 client certificate at depth > 0, or 0 if no error was detected.
9316
9317 ssl_c_ca_err_depth
9318 Returns the depth of the first error detected during verify. If
9319 no error is encountered in the CA chain, zero is returned.
9320
9321 ssl_c_err Returns the ID of the first error detected during verify of the
9322 client certificate at depth == 0, or 0 if no errors.
9323
Emeric Brun87855892012-10-17 17:39:35 +02009324 ssl_c_i_dn[(entry[,occ])]
9325 If no entry specified, returns the full distinguished name of
9326 the issuer of the certificate presented by the client when
9327 the incoming connection was made over an SSL/TLS transport
9328 layer. Otherwise returns the the value of the first given entry
9329 found from the the beginning of the DN. If a positive/negative
9330 occurrence number is specified as the optional second argument,
9331 it returns the value of the nth given entry found from the
9332 beginning/end of the DN. For instance to retrieve the common
9333 name ssl_c_i_dn(CN) and the second organization unit
9334 ssl_c_i_dn(OU,2).
9335
Emeric Brun7f56e742012-10-19 18:15:40 +02009336 ssl_c_key_alg
9337 Returns the name of the algorithm used to generate the key of
9338 the certificate presented by the client when the incoming
9339 connection was made over an SSL/TLS transport layer.
9340
Emeric Brunce5ad802012-10-22 14:11:22 +02009341 ssl_c_notafter
9342 Returns the end date presented by the client as a formatted
9343 string YYMMDDhhmmss[Z] when the incoming connection was made
9344 over an SSL/TLS transport layer.
9345
9346 ssl_c_notbefore
9347 Returns the start date presented by the client as a formatted
9348 string YYMMDDhhmmss[Z] when the incoming connection was made
9349 over an SSL/TLS transport layer.
9350
Emeric Brun87855892012-10-17 17:39:35 +02009351 ssl_c_s_dn[(entry[,occ])]
9352 If no entry specified, returns the full distinguished name of
9353 the subject of the certificate presented by the client when
9354 the incoming connection was made over an SSL/TLS transport
9355 layer. Otherwise returns the the value of the first given entry
9356 found from the the beginning of the DN. If a positive/negative
9357 occurrence number is specified as the optional second argument,
9358 it returns the value of the nth given entry found from the
9359 beginning/end of the DN. For instance to retrieve the common
9360 name ssl_c_s_dn(CN) and the second organization unit
9361 ssl_c_s_dn(OU,2).
9362
Willy Tarreau8d598402012-10-22 17:58:39 +02009363 ssl_c_serial Returns the serial of the certificate presented by the client
9364 when the incoming connection was made over an SSL/TLS transport
9365 layer.
9366
Emeric Brun7f56e742012-10-19 18:15:40 +02009367 ssl_c_sig_alg
9368 Returns the name of the algorithm used to sign the certificate
9369 presented by the client when the incoming connection was made
9370 over an SSL/TLS transport layer.
9371
Emeric Brun2525b6b2012-10-18 15:59:43 +02009372 ssl_c_verify Returns the verify result errorID when the incoming connection
9373 was made over an SSL/TLS transport layer, otherwise zero if no
9374 error is encountered.
9375
Emeric Bruna7359fd2012-10-17 15:03:11 +02009376 ssl_c_version
9377 Returns the version of the certificate presented by the client
9378 when the incoming connection was made over an SSL/TLS transport
9379 layer.
9380
Emeric Brun87855892012-10-17 17:39:35 +02009381 ssl_f_i_dn[(entry[,occ])]
9382 If no entry specified, returns the full distinguished name of
9383 the issuer of the certificate presented by the frontend when
9384 the incoming connection was made over an SSL/TLS transport
9385 layer. Otherwise returns the the value of the first given entry
9386 found from the the beginning of the DN. If a positive/negative
9387 occurrence number is specified as the optional second argument,
9388 it returns the value of the nth given entry found from the
9389 beginning/end of the DN. For instance to retrieve the common
9390 name ssl_f_i_dn(CN) and the second organization unit
9391 ssl_f_i_dn(OU,2).
9392
Emeric Brun7f56e742012-10-19 18:15:40 +02009393 ssl_f_key_alg
9394 Returns the name of the algorithm used to generate the key of
9395 the certificate presented by the frontend when the incoming
9396 connection was made over an SSL/TLS transport layer.
9397
Emeric Brunce5ad802012-10-22 14:11:22 +02009398 ssl_f_notafter
9399 Returns the end date presented by the frontend as a formatted
9400 string YYMMDDhhmmss[Z] when the incoming connection was made
9401 over an SSL/TLS transport layer.
9402
9403 ssl_f_notbefore
9404 Returns the start date presented by the frontend as a formatted
9405 string YYMMDDhhmmss[Z] when the incoming connection was made
9406 over an SSL/TLS transport layer.
9407
Emeric Brun87855892012-10-17 17:39:35 +02009408 ssl_f_s_dn[(entry[,occ])]
9409 If no entry specified, returns the full distinguished name of
9410 the subject of the certificate presented by the frontend when
9411 the incoming connection was made over an SSL/TLS transport
9412 layer. Otherwise returns the the value of the first given entry
9413 found from the the beginning of the DN. If a positive/negative
9414 occurrence number is specified as the optional second argument,
9415 it returns the value of the nth given entry found from the
9416 beginning/end of the DN. For instance to retrieve the common
9417 name ssl_f_s_dn(CN) and the second organization unit
9418 ssl_f_s_dn(OU,2).
9419
Willy Tarreau8d598402012-10-22 17:58:39 +02009420 ssl_f_serial Returns the serial of the certificate presented by the frontend
9421 when the incoming connection was made over an SSL/TLS transport
9422 layer.
9423
Emeric Brun7f56e742012-10-19 18:15:40 +02009424 ssl_f_sig_alg
9425 Returns the name of the algorithm used to sign the certificate
9426 presented by the frontend when the incoming connection was made
9427 over an SSL/TLS transport layer.
9428
Emeric Bruna7359fd2012-10-17 15:03:11 +02009429 ssl_f_version
9430 Returns the version of the certificate presented by the frontend
9431 when the incoming connection was made over an SSL/TLS transport
9432 layer.
9433
Emeric Brun2525b6b2012-10-18 15:59:43 +02009434 ssl_fc This checks the transport layer used on the front connection,
9435 and returns 1 if it was made via an SSL/TLS transport layer,
9436 otherwise zero.
9437
Emeric Brun589fcad2012-10-16 14:13:26 +02009438 ssl_fc_alg_keysize
9439 Returns the symmetric cipher key size support d in bits when the
9440 incoming connection was made over an SSL/TLS transport layer.
9441
9442 ssl_fc_cipher
9443 Returns the name of the used cipher when the incoming connection
9444 was made over an SSL/TLS transport layer.
9445
Emeric Brun2525b6b2012-10-18 15:59:43 +02009446 ssl_fc_has_crt
9447 Returns 1 if a client certificate is present in the front
9448 connection over SSL/TLS transport layer, otherwise 0.
9449
9450 ssl_fc_has_sni
9451 This checks the transport layer used by the front connection, and
Willy Tarreauf7bc57c2012-10-03 00:19:48 +02009452 returns 1 if the connection was made via an SSL/TLS transport
9453 layer and the client sent a Server Name Indication TLS extension,
Willy Tarreau7875d092012-09-10 08:20:03 +02009454 otherwise zero. This requires that the SSL library is build with
Willy Tarreauf7bc57c2012-10-03 00:19:48 +02009455 support for TLS extensions enabled (check haproxy -vv).
Willy Tarreau7875d092012-09-10 08:20:03 +02009456
Emeric Brun2525b6b2012-10-18 15:59:43 +02009457 ssl_fc_npn This extracts the Next Protocol Negociation field from an
Willy Tarreaua33c6542012-10-15 13:19:06 +02009458 incoming connection made via an SSL/TLS transport layer and
9459 locally deciphered by haproxy. The result is a string containing
9460 the protocol name advertised by the client. The SSL library must
9461 have been built with support for TLS extensions enabled (check
Emeric Brun2525b6b2012-10-18 15:59:43 +02009462 haproxy -vv). See also the "npn" bind keyword.
Willy Tarreaua33c6542012-10-15 13:19:06 +02009463
Emeric Brun589fcad2012-10-16 14:13:26 +02009464 ssl_fc_protocol
Cyril Bonté316a8cf2012-11-11 13:38:27 +01009465 Returns the name of the used protocol when the incoming
9466 connection was made over an SSL/TLS transport layer.
Emeric Brun589fcad2012-10-16 14:13:26 +02009467
Emeric Brunfe68f682012-10-16 14:59:28 +02009468 ssl_fc_session_id
9469 Returns the SSL ID of the front connection when the incoming
9470 connection was made over an SSL/TLS transport layer. Useful to
9471 stick on a given client.
9472
Emeric Brun2525b6b2012-10-18 15:59:43 +02009473 ssl_fc_sni This extracts the Server Name Indication field from an incoming
Willy Tarreauf7bc57c2012-10-03 00:19:48 +02009474 connection made via an SSL/TLS transport layer and locally
9475 deciphered by haproxy. The result typically is a string matching
9476 the HTTPS host name (253 chars or less). The SSL library must
9477 have been built with support for TLS extensions enabled (check
9478 haproxy -vv).
Willy Tarreau7875d092012-09-10 08:20:03 +02009479
Emeric Brun589fcad2012-10-16 14:13:26 +02009480 ssl_fc_use_keysize
9481 Returns the symmetric cipher key size used in bits when the
9482 incoming connection was made over an SSL/TLS transport layer.
9483
Willy Tarreau6812bcf2012-04-29 09:28:50 +02009484 url This extracts the request's URL as presented in the request. A
9485 typical use is with prefetch-capable caches, and with portals
9486 which need to aggregate multiple information from databases and
9487 keep them in caches. See also "path".
9488
9489 url_ip This extracts the IP address from the request's URL when the
9490 host part is presented as an IP address. Its use is very
9491 limited. For instance, a monitoring system might use this field
9492 as an alternative for the source IP in order to test what path a
9493 given source address would follow, or to force an entry in a
9494 table for a given source address.
9495
9496 url_port This extracts the port part from the request's URL. It probably
9497 is totally useless but it was available at no cost.
9498
bedis4c75cca2012-10-05 08:38:24 +02009499 url_param(<name>[,<delim>])
Cyril Bontédc4d9032012-04-08 21:57:39 +02009500 This extracts the first occurrence of the parameter <name> in
bedis4c75cca2012-10-05 08:38:24 +02009501 the parameter string of the request and uses the corresponding
9502 value to match. Optionally, a delimiter can be provided. If not
9503 then the question mark '?' is used by default.
9504 A typical use is to get sticky session through url for cases
9505 where cookies cannot be used.
9506
9507 Example :
9508 # match http://example.com/foo?PHPSESSIONID=some_id
9509 stick on url_param(PHPSESSIONID)
9510 # match http://example.com/foo;JSESSIONID=some_id
9511 stick on url_param(JSESSIONID,;)
David Cournapeau16023ee2010-12-23 20:55:41 +09009512
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02009513 rdp_cookie(<name>)
Cyril Bontédc4d9032012-04-08 21:57:39 +02009514 This extracts the value of the rdp cookie <name> as a string
9515 and uses this value to match. This enables implementation of
9516 persistence based on the mstshash cookie. This is typically
9517 done if there is no msts cookie present.
Simon Hormanab814e02011-06-24 14:50:20 +09009518
Cyril Bontédc4d9032012-04-08 21:57:39 +02009519 This differs from "balance rdp-cookie" in that any balancing
9520 algorithm may be used and thus the distribution of clients
9521 to backend servers is not linked to a hash of the RDP
9522 cookie. It is envisaged that using a balancing algorithm
9523 such as "balance roundrobin" or "balance leastconnect" will
9524 lead to a more even distribution of clients to backend
9525 servers than the hash used by "balance rdp-cookie".
Simon Hormanab814e02011-06-24 14:50:20 +09009526
Cyril Bontédc4d9032012-04-08 21:57:39 +02009527 Example :
9528 listen tse-farm
9529 bind 0.0.0.0:3389
9530 # wait up to 5s for an RDP cookie in the request
9531 tcp-request inspect-delay 5s
9532 tcp-request content accept if RDP_COOKIE
9533 # apply RDP cookie persistence
9534 persist rdp-cookie
9535 # Persist based on the mstshash cookie
9536 # This is only useful makes sense if
9537 # balance rdp-cookie is not used
9538 stick-table type string size 204800
9539 stick on rdp_cookie(mstshash)
9540 server srv1 1.1.1.1:3389
9541 server srv1 1.1.1.2:3389
Simon Hormanab814e02011-06-24 14:50:20 +09009542
Cyril Bontédc4d9032012-04-08 21:57:39 +02009543 See also : "balance rdp-cookie", "persist rdp-cookie",
9544 "tcp-request" and the "req_rdp_cookie" ACL.
Simon Hormanab814e02011-06-24 14:50:20 +09009545
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02009546 cookie(<name>)
Cyril Bontédc4d9032012-04-08 21:57:39 +02009547 This extracts the last occurrence of the cookie name <name> on a
Willy Tarreau28376d62012-04-26 21:26:10 +02009548 "Cookie" header line from the request, or a "Set-Cookie" header
9549 from the response, and uses the corresponding value to match. A
9550 typical use is to get multiple clients sharing a same profile
9551 use the same server. This can be similar to what "appsession"
9552 does with the "request-learn" statement, but with support for
9553 multi-peer synchronization and state keeping across restarts.
Willy Tarreaub3eb2212011-07-01 16:16:17 +02009554
Cyril Bontédc4d9032012-04-08 21:57:39 +02009555 See also : "appsession"
Willy Tarreaub3eb2212011-07-01 16:16:17 +02009556
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02009557 set-cookie(<name>)
Willy Tarreau28376d62012-04-26 21:26:10 +02009558 This fetch function is deprecated and has been superseded by the
9559 "cookie" fetch which is capable of handling both requests and
9560 responses. This keyword will disappear soon.
9561
Cyril Bontédc4d9032012-04-08 21:57:39 +02009562 This extracts the last occurrence of the cookie name <name> on a
9563 "Set-Cookie" header line from the response and uses the
9564 corresponding value to match. This can be comparable to what
9565 "appsession" does with default options, but with support for
9566 multi-peer synchronization and state keeping across restarts.
Willy Tarreaub3eb2212011-07-01 16:16:17 +02009567
Cyril Bontédc4d9032012-04-08 21:57:39 +02009568 See also : "appsession"
Willy Tarreaub3eb2212011-07-01 16:16:17 +02009569
Simon Hormanab814e02011-06-24 14:50:20 +09009570
Willy Tarreaub937b7e2010-01-12 15:27:54 +01009571The currently available list of transformations include :
9572
9573 lower Convert a string pattern to lower case. This can only be placed
9574 after a string pattern fetch function or after a conversion
9575 function returning a string type. The result is of type string.
9576
9577 upper Convert a string pattern to upper case. This can only be placed
9578 after a string pattern fetch function or after a conversion
9579 function returning a string type. The result is of type string.
9580
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02009581 ipmask(<mask>) Apply a mask to an IPv4 address, and use the result for lookups
Willy Tarreaud31d6eb2010-01-26 18:01:41 +01009582 and storage. This can be used to make all hosts within a
9583 certain mask to share the same table entries and as such use
9584 the same server. The mask can be passed in dotted form (eg:
9585 255.255.255.0) or in CIDR form (eg: 24).
9586
Willy Tarreaub937b7e2010-01-12 15:27:54 +01009587
Willy Tarreauc57f0e22009-05-10 13:12:33 +020095888. Logging
9589----------
Willy Tarreau844e3c52008-01-11 16:28:18 +01009590
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009591One of HAProxy's strong points certainly lies is its precise logs. It probably
9592provides the finest level of information available for such a product, which is
9593very important for troubleshooting complex environments. Standard information
9594provided in logs include client ports, TCP/HTTP state timers, precise session
9595state at termination and precise termination cause, information about decisions
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01009596to direct traffic to a server, and of course the ability to capture arbitrary
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009597headers.
9598
9599In order to improve administrators reactivity, it offers a great transparency
9600about encountered problems, both internal and external, and it is possible to
9601send logs to different sources at the same time with different level filters :
9602
9603 - global process-level logs (system errors, start/stop, etc..)
9604 - per-instance system and internal errors (lack of resource, bugs, ...)
9605 - per-instance external troubles (servers up/down, max connections)
9606 - per-instance activity (client connections), either at the establishment or
9607 at the termination.
9608
9609The ability to distribute different levels of logs to different log servers
9610allow several production teams to interact and to fix their problems as soon
9611as possible. For example, the system team might monitor system-wide errors,
9612while the application team might be monitoring the up/down for their servers in
9613real time, and the security team might analyze the activity logs with one hour
9614delay.
9615
9616
Willy Tarreauc57f0e22009-05-10 13:12:33 +020096178.1. Log levels
9618---------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009619
Simon Hormandf791f52011-05-29 15:01:10 +09009620TCP and HTTP connections can be logged with information such as the date, time,
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009621source IP address, destination address, connection duration, response times,
Simon Hormandf791f52011-05-29 15:01:10 +09009622HTTP request, HTTP return code, number of bytes transmitted, conditions
9623in which the session ended, and even exchanged cookies values. For example
9624track a particular user's problems. All messages may be sent to up to two
9625syslog servers. Check the "log" keyword in section 4.2 for more information
9626about log facilities.
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009627
9628
Willy Tarreauc57f0e22009-05-10 13:12:33 +020096298.2. Log formats
9630----------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009631
William Lallemand48940402012-01-30 16:47:22 +01009632HAProxy supports 5 log formats. Several fields are common between these formats
Simon Hormandf791f52011-05-29 15:01:10 +09009633and will be detailed in the following sections. A few of them may vary
9634slightly with the configuration, due to indicators specific to certain
9635options. The supported formats are as follows :
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009636
9637 - the default format, which is very basic and very rarely used. It only
9638 provides very basic information about the incoming connection at the moment
9639 it is accepted : source IP:port, destination IP:port, and frontend-name.
9640 This mode will eventually disappear so it will not be described to great
9641 extents.
9642
9643 - the TCP format, which is more advanced. This format is enabled when "option
9644 tcplog" is set on the frontend. HAProxy will then usually wait for the
9645 connection to terminate before logging. This format provides much richer
9646 information, such as timers, connection counts, queue size, etc... This
9647 format is recommended for pure TCP proxies.
9648
9649 - the HTTP format, which is the most advanced for HTTP proxying. This format
9650 is enabled when "option httplog" is set on the frontend. It provides the
9651 same information as the TCP format with some HTTP-specific fields such as
9652 the request, the status code, and captures of headers and cookies. This
9653 format is recommended for HTTP proxies.
9654
Emeric Brun3a058f32009-06-30 18:26:00 +02009655 - the CLF HTTP format, which is equivalent to the HTTP format, but with the
9656 fields arranged in the same order as the CLF format. In this mode, all
9657 timers, captures, flags, etc... appear one per field after the end of the
9658 common fields, in the same order they appear in the standard HTTP format.
9659
William Lallemand48940402012-01-30 16:47:22 +01009660 - the custom log format, allows you to make your own log line.
9661
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009662Next sections will go deeper into details for each of these formats. Format
9663specification will be performed on a "field" basis. Unless stated otherwise, a
9664field is a portion of text delimited by any number of spaces. Since syslog
9665servers are susceptible of inserting fields at the beginning of a line, it is
9666always assumed that the first field is the one containing the process name and
9667identifier.
9668
9669Note : Since log lines may be quite long, the log examples in sections below
9670 might be broken into multiple lines. The example log lines will be
9671 prefixed with 3 closing angle brackets ('>>>') and each time a log is
9672 broken into multiple lines, each non-final line will end with a
9673 backslash ('\') and the next line will start indented by two characters.
9674
9675
Willy Tarreauc57f0e22009-05-10 13:12:33 +020096768.2.1. Default log format
9677-------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009678
9679This format is used when no specific option is set. The log is emitted as soon
9680as the connection is accepted. One should note that this currently is the only
9681format which logs the request's destination IP and ports.
9682
9683 Example :
9684 listen www
9685 mode http
9686 log global
9687 server srv1 127.0.0.1:8000
9688
9689 >>> Feb 6 12:12:09 localhost \
9690 haproxy[14385]: Connect from 10.0.1.2:33312 to 10.0.3.31:8012 \
9691 (www/HTTP)
9692
9693 Field Format Extract from the example above
9694 1 process_name '[' pid ']:' haproxy[14385]:
9695 2 'Connect from' Connect from
9696 3 source_ip ':' source_port 10.0.1.2:33312
9697 4 'to' to
9698 5 destination_ip ':' destination_port 10.0.3.31:8012
9699 6 '(' frontend_name '/' mode ')' (www/HTTP)
9700
9701Detailed fields description :
9702 - "source_ip" is the IP address of the client which initiated the connection.
9703 - "source_port" is the TCP port of the client which initiated the connection.
9704 - "destination_ip" is the IP address the client connected to.
9705 - "destination_port" is the TCP port the client connected to.
9706 - "frontend_name" is the name of the frontend (or listener) which received
9707 and processed the connection.
9708 - "mode is the mode the frontend is operating (TCP or HTTP).
9709
Willy Tarreauceb24bc2010-11-09 12:46:41 +01009710In case of a UNIX socket, the source and destination addresses are marked as
9711"unix:" and the ports reflect the internal ID of the socket which accepted the
9712connection (the same ID as reported in the stats).
9713
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009714It is advised not to use this deprecated format for newer installations as it
9715will eventually disappear.
9716
9717
Willy Tarreauc57f0e22009-05-10 13:12:33 +020097188.2.2. TCP log format
9719---------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009720
9721The TCP format is used when "option tcplog" is specified in the frontend, and
9722is the recommended format for pure TCP proxies. It provides a lot of precious
9723information for troubleshooting. Since this format includes timers and byte
9724counts, the log is normally emitted at the end of the session. It can be
9725emitted earlier if "option logasap" is specified, which makes sense in most
9726environments with long sessions such as remote terminals. Sessions which match
9727the "monitor" rules are never logged. It is also possible not to emit logs for
9728sessions for which no data were exchanged between the client and the server, by
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02009729specifying "option dontlognull" in the frontend. Successful connections will
9730not be logged if "option dontlog-normal" is specified in the frontend. A few
9731fields may slightly vary depending on some configuration options, those are
9732marked with a star ('*') after the field name below.
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009733
9734 Example :
9735 frontend fnt
9736 mode tcp
9737 option tcplog
9738 log global
9739 default_backend bck
9740
9741 backend bck
9742 server srv1 127.0.0.1:8000
9743
9744 >>> Feb 6 12:12:56 localhost \
9745 haproxy[14387]: 10.0.1.2:33313 [06/Feb/2009:12:12:51.443] fnt \
9746 bck/srv1 0/0/5007 212 -- 0/0/0/0/3 0/0
9747
9748 Field Format Extract from the example above
9749 1 process_name '[' pid ']:' haproxy[14387]:
9750 2 client_ip ':' client_port 10.0.1.2:33313
9751 3 '[' accept_date ']' [06/Feb/2009:12:12:51.443]
9752 4 frontend_name fnt
9753 5 backend_name '/' server_name bck/srv1
9754 6 Tw '/' Tc '/' Tt* 0/0/5007
9755 7 bytes_read* 212
9756 8 termination_state --
9757 9 actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 0/0/0/0/3
9758 10 srv_queue '/' backend_queue 0/0
9759
9760Detailed fields description :
9761 - "client_ip" is the IP address of the client which initiated the TCP
Willy Tarreauceb24bc2010-11-09 12:46:41 +01009762 connection to haproxy. If the connection was accepted on a UNIX socket
9763 instead, the IP address would be replaced with the word "unix". Note that
9764 when the connection is accepted on a socket configured with "accept-proxy"
9765 and the PROXY protocol is correctly used, then the logs will reflect the
9766 forwarded connection's information.
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009767
9768 - "client_port" is the TCP port of the client which initiated the connection.
Willy Tarreauceb24bc2010-11-09 12:46:41 +01009769 If the connection was accepted on a UNIX socket instead, the port would be
9770 replaced with the ID of the accepting socket, which is also reported in the
9771 stats interface.
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009772
9773 - "accept_date" is the exact date when the connection was received by haproxy
9774 (which might be very slightly different from the date observed on the
9775 network if there was some queuing in the system's backlog). This is usually
9776 the same date which may appear in any upstream firewall's log.
9777
9778 - "frontend_name" is the name of the frontend (or listener) which received
9779 and processed the connection.
9780
9781 - "backend_name" is the name of the backend (or listener) which was selected
9782 to manage the connection to the server. This will be the same as the
9783 frontend if no switching rule has been applied, which is common for TCP
9784 applications.
9785
9786 - "server_name" is the name of the last server to which the connection was
9787 sent, which might differ from the first one if there were connection errors
9788 and a redispatch occurred. Note that this server belongs to the backend
9789 which processed the request. If the connection was aborted before reaching
9790 a server, "<NOSRV>" is indicated instead of a server name.
9791
9792 - "Tw" is the total time in milliseconds spent waiting in the various queues.
9793 It can be "-1" if the connection was aborted before reaching the queue.
9794 See "Timers" below for more details.
9795
9796 - "Tc" is the total time in milliseconds spent waiting for the connection to
9797 establish to the final server, including retries. It can be "-1" if the
9798 connection was aborted before a connection could be established. See
9799 "Timers" below for more details.
9800
9801 - "Tt" is the total time in milliseconds elapsed between the accept and the
9802 last close. It covers all possible processings. There is one exception, if
9803 "option logasap" was specified, then the time counting stops at the moment
9804 the log is emitted. In this case, a '+' sign is prepended before the value,
9805 indicating that the final one will be larger. See "Timers" below for more
9806 details.
9807
9808 - "bytes_read" is the total number of bytes transmitted from the server to
9809 the client when the log is emitted. If "option logasap" is specified, the
9810 this value will be prefixed with a '+' sign indicating that the final one
9811 may be larger. Please note that this value is a 64-bit counter, so log
9812 analysis tools must be able to handle it without overflowing.
9813
9814 - "termination_state" is the condition the session was in when the session
9815 ended. This indicates the session state, which side caused the end of
9816 session to happen, and for what reason (timeout, error, ...). The normal
9817 flags should be "--", indicating the session was closed by either end with
9818 no data remaining in buffers. See below "Session state at disconnection"
9819 for more details.
9820
9821 - "actconn" is the total number of concurrent connections on the process when
Jamie Gloudonaaa21002012-08-25 00:18:33 -04009822 the session was logged. It is useful to detect when some per-process system
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009823 limits have been reached. For instance, if actconn is close to 512 when
9824 multiple connection errors occur, chances are high that the system limits
9825 the process to use a maximum of 1024 file descriptors and that all of them
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009826 are used. See section 3 "Global parameters" to find how to tune the system.
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009827
9828 - "feconn" is the total number of concurrent connections on the frontend when
9829 the session was logged. It is useful to estimate the amount of resource
9830 required to sustain high loads, and to detect when the frontend's "maxconn"
9831 has been reached. Most often when this value increases by huge jumps, it is
9832 because there is congestion on the backend servers, but sometimes it can be
9833 caused by a denial of service attack.
9834
9835 - "beconn" is the total number of concurrent connections handled by the
9836 backend when the session was logged. It includes the total number of
9837 concurrent connections active on servers as well as the number of
9838 connections pending in queues. It is useful to estimate the amount of
9839 additional servers needed to support high loads for a given application.
9840 Most often when this value increases by huge jumps, it is because there is
9841 congestion on the backend servers, but sometimes it can be caused by a
9842 denial of service attack.
9843
9844 - "srv_conn" is the total number of concurrent connections still active on
9845 the server when the session was logged. It can never exceed the server's
9846 configured "maxconn" parameter. If this value is very often close or equal
9847 to the server's "maxconn", it means that traffic regulation is involved a
9848 lot, meaning that either the server's maxconn value is too low, or that
9849 there aren't enough servers to process the load with an optimal response
9850 time. When only one of the server's "srv_conn" is high, it usually means
9851 that this server has some trouble causing the connections to take longer to
9852 be processed than on other servers.
9853
9854 - "retries" is the number of connection retries experienced by this session
9855 when trying to connect to the server. It must normally be zero, unless a
9856 server is being stopped at the same moment the connection was attempted.
9857 Frequent retries generally indicate either a network problem between
9858 haproxy and the server, or a misconfigured system backlog on the server
9859 preventing new connections from being queued. This field may optionally be
9860 prefixed with a '+' sign, indicating that the session has experienced a
9861 redispatch after the maximal retry count has been reached on the initial
9862 server. In this case, the server name appearing in the log is the one the
9863 connection was redispatched to, and not the first one, though both may
9864 sometimes be the same in case of hashing for instance. So as a general rule
9865 of thumb, when a '+' is present in front of the retry count, this count
9866 should not be attributed to the logged server.
9867
9868 - "srv_queue" is the total number of requests which were processed before
9869 this one in the server queue. It is zero when the request has not gone
9870 through the server queue. It makes it possible to estimate the approximate
9871 server's response time by dividing the time spent in queue by the number of
9872 requests in the queue. It is worth noting that if a session experiences a
9873 redispatch and passes through two server queues, their positions will be
9874 cumulated. A request should not pass through both the server queue and the
9875 backend queue unless a redispatch occurs.
9876
9877 - "backend_queue" is the total number of requests which were processed before
9878 this one in the backend's global queue. It is zero when the request has not
9879 gone through the global queue. It makes it possible to estimate the average
9880 queue length, which easily translates into a number of missing servers when
9881 divided by a server's "maxconn" parameter. It is worth noting that if a
9882 session experiences a redispatch, it may pass twice in the backend's queue,
9883 and then both positions will be cumulated. A request should not pass
9884 through both the server queue and the backend queue unless a redispatch
9885 occurs.
9886
9887
Willy Tarreauc57f0e22009-05-10 13:12:33 +020098888.2.3. HTTP log format
9889----------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009890
9891The HTTP format is the most complete and the best suited for HTTP proxies. It
9892is enabled by when "option httplog" is specified in the frontend. It provides
9893the same level of information as the TCP format with additional features which
9894are specific to the HTTP protocol. Just like the TCP format, the log is usually
9895emitted at the end of the session, unless "option logasap" is specified, which
9896generally only makes sense for download sites. A session which matches the
9897"monitor" rules will never logged. It is also possible not to log sessions for
9898which no data were sent by the client by specifying "option dontlognull" in the
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02009899frontend. Successful connections will not be logged if "option dontlog-normal"
9900is specified in the frontend.
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009901
9902Most fields are shared with the TCP log, some being different. A few fields may
9903slightly vary depending on some configuration options. Those ones are marked
9904with a star ('*') after the field name below.
9905
9906 Example :
9907 frontend http-in
9908 mode http
9909 option httplog
9910 log global
9911 default_backend bck
9912
9913 backend static
9914 server srv1 127.0.0.1:8000
9915
9916 >>> Feb 6 12:14:14 localhost \
9917 haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
9918 static/srv1 10/0/30/69/109 200 2750 - - ---- 1/1/1/1/0 0/0 {1wt.eu} \
Willy Tarreaud72758d2010-01-12 10:42:19 +01009919 {} "GET /index.html HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009920
9921 Field Format Extract from the example above
9922 1 process_name '[' pid ']:' haproxy[14389]:
9923 2 client_ip ':' client_port 10.0.1.2:33317
9924 3 '[' accept_date ']' [06/Feb/2009:12:14:14.655]
9925 4 frontend_name http-in
9926 5 backend_name '/' server_name static/srv1
9927 6 Tq '/' Tw '/' Tc '/' Tr '/' Tt* 10/0/30/69/109
9928 7 status_code 200
9929 8 bytes_read* 2750
9930 9 captured_request_cookie -
9931 10 captured_response_cookie -
9932 11 termination_state ----
9933 12 actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 1/1/1/1/0
9934 13 srv_queue '/' backend_queue 0/0
9935 14 '{' captured_request_headers* '}' {haproxy.1wt.eu}
9936 15 '{' captured_response_headers* '}' {}
9937 16 '"' http_request '"' "GET /index.html HTTP/1.1"
Willy Tarreaud72758d2010-01-12 10:42:19 +01009938
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009939
9940Detailed fields description :
9941 - "client_ip" is the IP address of the client which initiated the TCP
Willy Tarreauceb24bc2010-11-09 12:46:41 +01009942 connection to haproxy. If the connection was accepted on a UNIX socket
9943 instead, the IP address would be replaced with the word "unix". Note that
9944 when the connection is accepted on a socket configured with "accept-proxy"
9945 and the PROXY protocol is correctly used, then the logs will reflect the
9946 forwarded connection's information.
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009947
9948 - "client_port" is the TCP port of the client which initiated the connection.
Willy Tarreauceb24bc2010-11-09 12:46:41 +01009949 If the connection was accepted on a UNIX socket instead, the port would be
9950 replaced with the ID of the accepting socket, which is also reported in the
9951 stats interface.
Willy Tarreaucc6c8912009-02-22 10:53:55 +01009952
9953 - "accept_date" is the exact date when the TCP connection was received by
9954 haproxy (which might be very slightly different from the date observed on
9955 the network if there was some queuing in the system's backlog). This is
9956 usually the same date which may appear in any upstream firewall's log. This
9957 does not depend on the fact that the client has sent the request or not.
9958
9959 - "frontend_name" is the name of the frontend (or listener) which received
9960 and processed the connection.
9961
9962 - "backend_name" is the name of the backend (or listener) which was selected
9963 to manage the connection to the server. This will be the same as the
9964 frontend if no switching rule has been applied.
9965
9966 - "server_name" is the name of the last server to which the connection was
9967 sent, which might differ from the first one if there were connection errors
9968 and a redispatch occurred. Note that this server belongs to the backend
9969 which processed the request. If the request was aborted before reaching a
9970 server, "<NOSRV>" is indicated instead of a server name. If the request was
9971 intercepted by the stats subsystem, "<STATS>" is indicated instead.
9972
9973 - "Tq" is the total time in milliseconds spent waiting for the client to send
9974 a full HTTP request, not counting data. It can be "-1" if the connection
9975 was aborted before a complete request could be received. It should always
9976 be very small because a request generally fits in one single packet. Large
9977 times here generally indicate network trouble between the client and
9978 haproxy. See "Timers" below for more details.
9979
9980 - "Tw" is the total time in milliseconds spent waiting in the various queues.
9981 It can be "-1" if the connection was aborted before reaching the queue.
9982 See "Timers" below for more details.
9983
9984 - "Tc" is the total time in milliseconds spent waiting for the connection to
9985 establish to the final server, including retries. It can be "-1" if the
9986 request was aborted before a connection could be established. See "Timers"
9987 below for more details.
9988
9989 - "Tr" is the total time in milliseconds spent waiting for the server to send
9990 a full HTTP response, not counting data. It can be "-1" if the request was
9991 aborted before a complete response could be received. It generally matches
9992 the server's processing time for the request, though it may be altered by
9993 the amount of data sent by the client to the server. Large times here on
9994 "GET" requests generally indicate an overloaded server. See "Timers" below
9995 for more details.
9996
9997 - "Tt" is the total time in milliseconds elapsed between the accept and the
9998 last close. It covers all possible processings. There is one exception, if
9999 "option logasap" was specified, then the time counting stops at the moment
10000 the log is emitted. In this case, a '+' sign is prepended before the value,
10001 indicating that the final one will be larger. See "Timers" below for more
10002 details.
10003
10004 - "status_code" is the HTTP status code returned to the client. This status
10005 is generally set by the server, but it might also be set by haproxy when
10006 the server cannot be reached or when its response is blocked by haproxy.
10007
10008 - "bytes_read" is the total number of bytes transmitted to the client when
10009 the log is emitted. This does include HTTP headers. If "option logasap" is
10010 specified, the this value will be prefixed with a '+' sign indicating that
10011 the final one may be larger. Please note that this value is a 64-bit
10012 counter, so log analysis tools must be able to handle it without
10013 overflowing.
10014
10015 - "captured_request_cookie" is an optional "name=value" entry indicating that
10016 the client had this cookie in the request. The cookie name and its maximum
10017 length are defined by the "capture cookie" statement in the frontend
10018 configuration. The field is a single dash ('-') when the option is not
10019 set. Only one cookie may be captured, it is generally used to track session
10020 ID exchanges between a client and a server to detect session crossing
10021 between clients due to application bugs. For more details, please consult
10022 the section "Capturing HTTP headers and cookies" below.
10023
10024 - "captured_response_cookie" is an optional "name=value" entry indicating
10025 that the server has returned a cookie with its response. The cookie name
10026 and its maximum length are defined by the "capture cookie" statement in the
10027 frontend configuration. The field is a single dash ('-') when the option is
10028 not set. Only one cookie may be captured, it is generally used to track
10029 session ID exchanges between a client and a server to detect session
10030 crossing between clients due to application bugs. For more details, please
10031 consult the section "Capturing HTTP headers and cookies" below.
10032
10033 - "termination_state" is the condition the session was in when the session
10034 ended. This indicates the session state, which side caused the end of
10035 session to happen, for what reason (timeout, error, ...), just like in TCP
10036 logs, and information about persistence operations on cookies in the last
10037 two characters. The normal flags should begin with "--", indicating the
10038 session was closed by either end with no data remaining in buffers. See
10039 below "Session state at disconnection" for more details.
10040
10041 - "actconn" is the total number of concurrent connections on the process when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040010042 the session was logged. It is useful to detect when some per-process system
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010043 limits have been reached. For instance, if actconn is close to 512 or 1024
10044 when multiple connection errors occur, chances are high that the system
10045 limits the process to use a maximum of 1024 file descriptors and that all
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010046 of them are used. See section 3 "Global parameters" to find how to tune the
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010047 system.
10048
10049 - "feconn" is the total number of concurrent connections on the frontend when
10050 the session was logged. It is useful to estimate the amount of resource
10051 required to sustain high loads, and to detect when the frontend's "maxconn"
10052 has been reached. Most often when this value increases by huge jumps, it is
10053 because there is congestion on the backend servers, but sometimes it can be
10054 caused by a denial of service attack.
10055
10056 - "beconn" is the total number of concurrent connections handled by the
10057 backend when the session was logged. It includes the total number of
10058 concurrent connections active on servers as well as the number of
10059 connections pending in queues. It is useful to estimate the amount of
10060 additional servers needed to support high loads for a given application.
10061 Most often when this value increases by huge jumps, it is because there is
10062 congestion on the backend servers, but sometimes it can be caused by a
10063 denial of service attack.
10064
10065 - "srv_conn" is the total number of concurrent connections still active on
10066 the server when the session was logged. It can never exceed the server's
10067 configured "maxconn" parameter. If this value is very often close or equal
10068 to the server's "maxconn", it means that traffic regulation is involved a
10069 lot, meaning that either the server's maxconn value is too low, or that
10070 there aren't enough servers to process the load with an optimal response
10071 time. When only one of the server's "srv_conn" is high, it usually means
10072 that this server has some trouble causing the requests to take longer to be
10073 processed than on other servers.
10074
10075 - "retries" is the number of connection retries experienced by this session
10076 when trying to connect to the server. It must normally be zero, unless a
10077 server is being stopped at the same moment the connection was attempted.
10078 Frequent retries generally indicate either a network problem between
10079 haproxy and the server, or a misconfigured system backlog on the server
10080 preventing new connections from being queued. This field may optionally be
10081 prefixed with a '+' sign, indicating that the session has experienced a
10082 redispatch after the maximal retry count has been reached on the initial
10083 server. In this case, the server name appearing in the log is the one the
10084 connection was redispatched to, and not the first one, though both may
10085 sometimes be the same in case of hashing for instance. So as a general rule
10086 of thumb, when a '+' is present in front of the retry count, this count
10087 should not be attributed to the logged server.
10088
10089 - "srv_queue" is the total number of requests which were processed before
10090 this one in the server queue. It is zero when the request has not gone
10091 through the server queue. It makes it possible to estimate the approximate
10092 server's response time by dividing the time spent in queue by the number of
10093 requests in the queue. It is worth noting that if a session experiences a
10094 redispatch and passes through two server queues, their positions will be
10095 cumulated. A request should not pass through both the server queue and the
10096 backend queue unless a redispatch occurs.
10097
10098 - "backend_queue" is the total number of requests which were processed before
10099 this one in the backend's global queue. It is zero when the request has not
10100 gone through the global queue. It makes it possible to estimate the average
10101 queue length, which easily translates into a number of missing servers when
10102 divided by a server's "maxconn" parameter. It is worth noting that if a
10103 session experiences a redispatch, it may pass twice in the backend's queue,
10104 and then both positions will be cumulated. A request should not pass
10105 through both the server queue and the backend queue unless a redispatch
10106 occurs.
10107
10108 - "captured_request_headers" is a list of headers captured in the request due
10109 to the presence of the "capture request header" statement in the frontend.
10110 Multiple headers can be captured, they will be delimited by a vertical bar
10111 ('|'). When no capture is enabled, the braces do not appear, causing a
10112 shift of remaining fields. It is important to note that this field may
10113 contain spaces, and that using it requires a smarter log parser than when
10114 it's not used. Please consult the section "Capturing HTTP headers and
10115 cookies" below for more details.
10116
10117 - "captured_response_headers" is a list of headers captured in the response
10118 due to the presence of the "capture response header" statement in the
10119 frontend. Multiple headers can be captured, they will be delimited by a
10120 vertical bar ('|'). When no capture is enabled, the braces do not appear,
10121 causing a shift of remaining fields. It is important to note that this
10122 field may contain spaces, and that using it requires a smarter log parser
10123 than when it's not used. Please consult the section "Capturing HTTP headers
10124 and cookies" below for more details.
10125
10126 - "http_request" is the complete HTTP request line, including the method,
10127 request and HTTP version string. Non-printable characters are encoded (see
10128 below the section "Non-printable characters"). This is always the last
10129 field, and it is always delimited by quotes and is the only one which can
10130 contain quotes. If new fields are added to the log format, they will be
10131 added before this field. This field might be truncated if the request is
10132 huge and does not fit in the standard syslog buffer (1024 characters). This
10133 is the reason why this field must always remain the last one.
10134
10135
Cyril Bontédc4d9032012-04-08 21:57:39 +0200101368.2.4. Custom log format
10137------------------------
William Lallemand48940402012-01-30 16:47:22 +010010138
William Lallemandbddd4fd2012-02-27 11:23:10 +010010139The directive log-format allows you to custom the logs in http mode and tcp
10140mode. It takes a string as argument.
William Lallemand48940402012-01-30 16:47:22 +010010141
10142HAproxy understands some log format variables. % precedes log format variables.
10143Variables can take arguments using braces ('{}'), and multiple arguments are
10144separated by commas within the braces. Flags may be added or removed by
10145prefixing them with a '+' or '-' sign.
10146
10147Special variable "%o" may be used to propagate its flags to all other
10148variables on the same format string. This is particularly handy with quoted
10149string formats ("Q").
10150
10151Note: spaces must be escaped. A space character is considered as a separator.
10152HAproxy will automatically merge consecutive separators.
10153
10154Flags are :
10155 * Q: quote a string
Jamie Gloudonaaa21002012-08-25 00:18:33 -040010156 * X: hexadecimal representation (IPs, Ports, %Ts, %rt, %pid)
William Lallemand48940402012-01-30 16:47:22 +010010157
10158 Example:
10159
10160 log-format %T\ %t\ Some\ Text
10161 log-format %{+Q}o\ %t\ %s\ %{-Q}r
10162
10163At the moment, the default HTTP format is defined this way :
10164
Willy Tarreau773d65f2012-10-12 14:56:11 +020010165 log-format %Ci:%Cp\ [%t]\ %ft\ %b/%s\ %Tq/%Tw/%Tc/%Tr/%Tt\ %st\ %B\ %cc\ \
Willy Tarreau6580c062012-03-12 15:09:42 +010010166 %cs\ %tsc\ %ac/%fc/%bc/%sc/%rc\ %sq/%bq\ %hr\ %hs\ %{+Q}r
William Lallemand48940402012-01-30 16:47:22 +010010167
William Lallemandbddd4fd2012-02-27 11:23:10 +010010168the default CLF format is defined this way :
William Lallemand48940402012-01-30 16:47:22 +010010169
10170 log-format %{+Q}o\ %{-Q}Ci\ -\ -\ [%T]\ %r\ %st\ %B\ \"\"\ \"\"\ %Cp\ \
Willy Tarreau773d65f2012-10-12 14:56:11 +020010171 %ms\ %ft\ %b\ %s\ \%Tq\ %Tw\ %Tc\ %Tr\ %Tt\ %tsc\ %ac\ %fc\ \
William Lallemand48940402012-01-30 16:47:22 +010010172 %bc\ %sc\ %rc\ %sq\ %bq\ %cc\ %cs\ \%hrl\ %hsl
10173
William Lallemandbddd4fd2012-02-27 11:23:10 +010010174and the default TCP format is defined this way :
10175
Willy Tarreau773d65f2012-10-12 14:56:11 +020010176 log-format %Ci:%Cp\ [%t]\ %ft\ %b/%s\ %Tw/%Tc/%Tt\ %B\ %ts\ \
William Lallemandbddd4fd2012-02-27 11:23:10 +010010177 %ac/%fc/%bc/%sc/%rc\ %sq/%bq
10178
William Lallemand48940402012-01-30 16:47:22 +010010179Please refer to the table below for currently defined variables :
10180
William Lallemandbddd4fd2012-02-27 11:23:10 +010010181 +---+------+-----------------------------------------------+-------------+
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020010182 | R | var | field name (8.2.2 and 8.2.3 for description) | type |
William Lallemandbddd4fd2012-02-27 11:23:10 +010010183 +---+------+-----------------------------------------------+-------------+
10184 | | %o | special variable, apply flags on all next var | |
10185 +---+------+-----------------------------------------------+-------------+
10186 | | %B | bytes_read | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020010187 | | %Ci | client_ip | IP |
William Lallemandbddd4fd2012-02-27 11:23:10 +010010188 | | %Cp | client_port | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020010189 | | %Bi | backend_source_ip | IP |
William Lallemandb7ff6a32012-03-02 14:35:21 +010010190 | | %Bp | backend_source_port | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020010191 | | %Fi | frontend_ip | IP |
10192 | | %Fp | frontend_port | numeric |
10193 | | %H | hostname | string |
William Lallemanda73203e2012-03-12 12:48:57 +010010194 | | %ID | unique-id | string |
William Lallemand5f232402012-04-05 18:02:55 +020010195 | | %Si | server_IP | IP |
10196 | | %Sp | server_port | numeric |
10197 | | %T | gmt_date_time | date |
William Lallemandbddd4fd2012-02-27 11:23:10 +010010198 | | %Tc | Tc | numeric |
Yuxans Yao4e25b012012-10-19 10:36:09 +080010199 | | %Tl | local_date_time | date |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020010200 | H | %Tq | Tq | numeric |
10201 | H | %Tr | Tr | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020010202 | | %Ts | timestamp | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010010203 | | %Tt | Tt | numeric |
10204 | | %Tw | Tw | numeric |
10205 | | %ac | actconn | numeric |
10206 | | %b | backend_name | string |
10207 | | %bc | beconn | numeric |
10208 | | %bq | backend_queue | numeric |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020010209 | H | %cc | captured_request_cookie | string |
10210 | H | %rt | http_request_counter | numeric |
10211 | H | %cs | captured_response_cookie | string |
William Lallemandbddd4fd2012-02-27 11:23:10 +010010212 | | %f | frontend_name | string |
Willy Tarreau773d65f2012-10-12 14:56:11 +020010213 | | %ft | frontend_name_transport ('~' suffix for SSL) | string |
William Lallemandbddd4fd2012-02-27 11:23:10 +010010214 | | %fc | feconn | numeric |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020010215 | H | %hr | captured_request_headers default style | string |
10216 | H | %hrl | captured_request_headers CLF style | string list |
10217 | H | %hs | captured_response_headers default style | string |
10218 | H | %hsl | captured_response_headers CLF style | string list |
William Lallemandbddd4fd2012-02-27 11:23:10 +010010219 | | %ms | accept date milliseconds | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020010220 | | %pid | PID | numeric |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020010221 | H | %r | http_request | string |
William Lallemandbddd4fd2012-02-27 11:23:10 +010010222 | | %rc | retries | numeric |
10223 | | %s | server_name | string |
10224 | | %sc | srv_conn | numeric |
10225 | | %sq | srv_queue | numeric |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020010226 | S | %sslc| ssl_ciphers (ex: AES-SHA) | string |
10227 | S | %sslv| ssl_version (ex: TLSv1) | string |
10228 | H | %st | status_code | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020010229 | | %t | date_time | date |
William Lallemandbddd4fd2012-02-27 11:23:10 +010010230 | | %ts | termination_state | string |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020010231 | H | %tsc | termination_state with cookie status | string |
William Lallemandbddd4fd2012-02-27 11:23:10 +010010232 +---+------+-----------------------------------------------+-------------+
William Lallemand48940402012-01-30 16:47:22 +010010233
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020010234 R = Restrictions : H = mode http only ; S = SSL only
William Lallemand48940402012-01-30 16:47:22 +010010235
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200102368.3. Advanced logging options
10237-----------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010238
10239Some advanced logging options are often looked for but are not easy to find out
10240just by looking at the various options. Here is an entry point for the few
10241options which can enable better logging. Please refer to the keywords reference
10242for more information about their usage.
10243
10244
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200102458.3.1. Disabling logging of external tests
10246------------------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010247
10248It is quite common to have some monitoring tools perform health checks on
10249haproxy. Sometimes it will be a layer 3 load-balancer such as LVS or any
10250commercial load-balancer, and sometimes it will simply be a more complete
10251monitoring system such as Nagios. When the tests are very frequent, users often
10252ask how to disable logging for those checks. There are three possibilities :
10253
10254 - if connections come from everywhere and are just TCP probes, it is often
10255 desired to simply disable logging of connections without data exchange, by
10256 setting "option dontlognull" in the frontend. It also disables logging of
10257 port scans, which may or may not be desired.
10258
10259 - if the connection come from a known source network, use "monitor-net" to
10260 declare this network as monitoring only. Any host in this network will then
10261 only be able to perform health checks, and their requests will not be
10262 logged. This is generally appropriate to designate a list of equipments
10263 such as other load-balancers.
10264
10265 - if the tests are performed on a known URI, use "monitor-uri" to declare
10266 this URI as dedicated to monitoring. Any host sending this request will
10267 only get the result of a health-check, and the request will not be logged.
10268
10269
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200102708.3.2. Logging before waiting for the session to terminate
10271----------------------------------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010272
10273The problem with logging at end of connection is that you have no clue about
10274what is happening during very long sessions, such as remote terminal sessions
10275or large file downloads. This problem can be worked around by specifying
10276"option logasap" in the frontend. Haproxy will then log as soon as possible,
10277just before data transfer begins. This means that in case of TCP, it will still
10278log the connection status to the server, and in case of HTTP, it will log just
10279after processing the server headers. In this case, the number of bytes reported
10280is the number of header bytes sent to the client. In order to avoid confusion
10281with normal logs, the total time field and the number of bytes are prefixed
10282with a '+' sign which means that real numbers are certainly larger.
10283
10284
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200102858.3.3. Raising log level upon errors
10286------------------------------------
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020010287
10288Sometimes it is more convenient to separate normal traffic from errors logs,
10289for instance in order to ease error monitoring from log files. When the option
10290"log-separate-errors" is used, connections which experience errors, timeouts,
10291retries, redispatches or HTTP status codes 5xx will see their syslog level
10292raised from "info" to "err". This will help a syslog daemon store the log in
10293a separate file. It is very important to keep the errors in the normal traffic
10294file too, so that log ordering is not altered. You should also be careful if
10295you already have configured your syslog daemon to store all logs higher than
10296"notice" in an "admin" file, because the "err" level is higher than "notice".
10297
10298
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200102998.3.4. Disabling logging of successful connections
10300--------------------------------------------------
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020010301
10302Although this may sound strange at first, some large sites have to deal with
10303multiple thousands of logs per second and are experiencing difficulties keeping
10304them intact for a long time or detecting errors within them. If the option
10305"dontlog-normal" is set on the frontend, all normal connections will not be
10306logged. In this regard, a normal connection is defined as one without any
10307error, timeout, retry nor redispatch. In HTTP, the status code is checked too,
10308and a response with a status 5xx is not considered normal and will be logged
10309too. Of course, doing is is really discouraged as it will remove most of the
10310useful information from the logs. Do this only if you have no other
10311alternative.
10312
10313
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200103148.4. Timing events
10315------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010316
10317Timers provide a great help in troubleshooting network problems. All values are
10318reported in milliseconds (ms). These timers should be used in conjunction with
10319the session termination flags. In TCP mode with "option tcplog" set on the
10320frontend, 3 control points are reported under the form "Tw/Tc/Tt", and in HTTP
10321mode, 5 control points are reported under the form "Tq/Tw/Tc/Tr/Tt" :
10322
10323 - Tq: total time to get the client request (HTTP mode only). It's the time
10324 elapsed between the moment the client connection was accepted and the
10325 moment the proxy received the last HTTP header. The value "-1" indicates
10326 that the end of headers (empty line) has never been seen. This happens when
10327 the client closes prematurely or times out.
10328
10329 - Tw: total time spent in the queues waiting for a connection slot. It
10330 accounts for backend queue as well as the server queues, and depends on the
10331 queue size, and the time needed for the server to complete previous
10332 requests. The value "-1" means that the request was killed before reaching
10333 the queue, which is generally what happens with invalid or denied requests.
10334
10335 - Tc: total time to establish the TCP connection to the server. It's the time
10336 elapsed between the moment the proxy sent the connection request, and the
10337 moment it was acknowledged by the server, or between the TCP SYN packet and
10338 the matching SYN/ACK packet in return. The value "-1" means that the
10339 connection never established.
10340
10341 - Tr: server response time (HTTP mode only). It's the time elapsed between
10342 the moment the TCP connection was established to the server and the moment
10343 the server sent its complete response headers. It purely shows its request
10344 processing time, without the network overhead due to the data transmission.
10345 It is worth noting that when the client has data to send to the server, for
10346 instance during a POST request, the time already runs, and this can distort
10347 apparent response time. For this reason, it's generally wise not to trust
10348 too much this field for POST requests initiated from clients behind an
10349 untrusted network. A value of "-1" here means that the last the response
10350 header (empty line) was never seen, most likely because the server timeout
10351 stroke before the server managed to process the request.
10352
10353 - Tt: total session duration time, between the moment the proxy accepted it
10354 and the moment both ends were closed. The exception is when the "logasap"
10355 option is specified. In this case, it only equals (Tq+Tw+Tc+Tr), and is
10356 prefixed with a '+' sign. From this field, we can deduce "Td", the data
10357 transmission time, by substracting other timers when valid :
10358
10359 Td = Tt - (Tq + Tw + Tc + Tr)
10360
10361 Timers with "-1" values have to be excluded from this equation. In TCP
10362 mode, "Tq" and "Tr" have to be excluded too. Note that "Tt" can never be
10363 negative.
10364
10365These timers provide precious indications on trouble causes. Since the TCP
10366protocol defines retransmit delays of 3, 6, 12... seconds, we know for sure
10367that timers close to multiples of 3s are nearly always related to lost packets
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010010368due to network problems (wires, negotiation, congestion). Moreover, if "Tt" is
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010369close to a timeout value specified in the configuration, it often means that a
10370session has been aborted on timeout.
10371
10372Most common cases :
10373
10374 - If "Tq" is close to 3000, a packet has probably been lost between the
10375 client and the proxy. This is very rare on local networks but might happen
10376 when clients are on far remote networks and send large requests. It may
10377 happen that values larger than usual appear here without any network cause.
10378 Sometimes, during an attack or just after a resource starvation has ended,
10379 haproxy may accept thousands of connections in a few milliseconds. The time
10380 spent accepting these connections will inevitably slightly delay processing
10381 of other connections, and it can happen that request times in the order of
10382 a few tens of milliseconds are measured after a few thousands of new
Patrick Mezard105faca2010-06-12 17:02:46 +020010383 connections have been accepted at once. Setting "option http-server-close"
10384 may display larger request times since "Tq" also measures the time spent
10385 waiting for additional requests.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010386
10387 - If "Tc" is close to 3000, a packet has probably been lost between the
10388 server and the proxy during the server connection phase. This value should
10389 always be very low, such as 1 ms on local networks and less than a few tens
10390 of ms on remote networks.
10391
Willy Tarreau55165fe2009-05-10 12:02:55 +020010392 - If "Tr" is nearly always lower than 3000 except some rare values which seem
10393 to be the average majored by 3000, there are probably some packets lost
10394 between the proxy and the server.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010395
10396 - If "Tt" is large even for small byte counts, it generally is because
10397 neither the client nor the server decides to close the connection, for
10398 instance because both have agreed on a keep-alive connection mode. In order
10399 to solve this issue, it will be needed to specify "option httpclose" on
10400 either the frontend or the backend. If the problem persists, it means that
10401 the server ignores the "close" connection mode and expects the client to
10402 close. Then it will be required to use "option forceclose". Having the
10403 smallest possible 'Tt' is important when connection regulation is used with
10404 the "maxconn" option on the servers, since no new connection will be sent
10405 to the server until another one is released.
10406
10407Other noticeable HTTP log cases ('xx' means any value to be ignored) :
10408
10409 Tq/Tw/Tc/Tr/+Tt The "option logasap" is present on the frontend and the log
10410 was emitted before the data phase. All the timers are valid
10411 except "Tt" which is shorter than reality.
10412
10413 -1/xx/xx/xx/Tt The client was not able to send a complete request in time
10414 or it aborted too early. Check the session termination flags
10415 then "timeout http-request" and "timeout client" settings.
10416
10417 Tq/-1/xx/xx/Tt It was not possible to process the request, maybe because
10418 servers were out of order, because the request was invalid
10419 or forbidden by ACL rules. Check the session termination
10420 flags.
10421
10422 Tq/Tw/-1/xx/Tt The connection could not establish on the server. Either it
10423 actively refused it or it timed out after Tt-(Tq+Tw) ms.
10424 Check the session termination flags, then check the
10425 "timeout connect" setting. Note that the tarpit action might
10426 return similar-looking patterns, with "Tw" equal to the time
10427 the client connection was maintained open.
10428
10429 Tq/Tw/Tc/-1/Tt The server has accepted the connection but did not return
10430 a complete response in time, or it closed its connexion
10431 unexpectedly after Tt-(Tq+Tw+Tc) ms. Check the session
10432 termination flags, then check the "timeout server" setting.
10433
10434
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200104358.5. Session state at disconnection
10436-----------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010437
10438TCP and HTTP logs provide a session termination indicator in the
10439"termination_state" field, just before the number of active connections. It is
104402-characters long in TCP mode, and is extended to 4 characters in HTTP mode,
10441each of which has a special meaning :
10442
10443 - On the first character, a code reporting the first event which caused the
10444 session to terminate :
10445
10446 C : the TCP session was unexpectedly aborted by the client.
10447
10448 S : the TCP session was unexpectedly aborted by the server, or the
10449 server explicitly refused it.
10450
10451 P : the session was prematurely aborted by the proxy, because of a
10452 connection limit enforcement, because a DENY filter was matched,
10453 because of a security check which detected and blocked a dangerous
10454 error in server response which might have caused information leak
10455 (eg: cacheable cookie), or because the response was processed by
10456 the proxy (redirect, stats, etc...).
10457
10458 R : a resource on the proxy has been exhausted (memory, sockets, source
10459 ports, ...). Usually, this appears during the connection phase, and
10460 system logs should contain a copy of the precise error. If this
10461 happens, it must be considered as a very serious anomaly which
10462 should be fixed as soon as possible by any means.
10463
10464 I : an internal error was identified by the proxy during a self-check.
10465 This should NEVER happen, and you are encouraged to report any log
10466 containing this, because this would almost certainly be a bug. It
10467 would be wise to preventively restart the process after such an
10468 event too, in case it would be caused by memory corruption.
10469
Simon Horman752dc4a2011-06-21 14:34:59 +090010470 D : the session was killed by haproxy because the server was detected
10471 as down and was configured to kill all connections when going down.
10472
Justin Karnegeseb2c24a2012-05-24 15:28:52 -070010473 U : the session was killed by haproxy on this backup server because an
10474 active server was detected as up and was configured to kill all
10475 backup connections when going up.
10476
Willy Tarreaua2a64e92011-09-07 23:01:56 +020010477 K : the session was actively killed by an admin operating on haproxy.
10478
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010479 c : the client-side timeout expired while waiting for the client to
10480 send or receive data.
10481
10482 s : the server-side timeout expired while waiting for the server to
10483 send or receive data.
10484
10485 - : normal session completion, both the client and the server closed
10486 with nothing left in the buffers.
10487
10488 - on the second character, the TCP or HTTP session state when it was closed :
10489
Willy Tarreauf7b30a92010-12-06 22:59:17 +010010490 R : the proxy was waiting for a complete, valid REQUEST from the client
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010491 (HTTP mode only). Nothing was sent to any server.
10492
10493 Q : the proxy was waiting in the QUEUE for a connection slot. This can
10494 only happen when servers have a 'maxconn' parameter set. It can
10495 also happen in the global queue after a redispatch consecutive to
10496 a failed attempt to connect to a dying server. If no redispatch is
10497 reported, then no connection attempt was made to any server.
10498
10499 C : the proxy was waiting for the CONNECTION to establish on the
10500 server. The server might at most have noticed a connection attempt.
10501
10502 H : the proxy was waiting for complete, valid response HEADERS from the
10503 server (HTTP only).
10504
10505 D : the session was in the DATA phase.
10506
10507 L : the proxy was still transmitting LAST data to the client while the
10508 server had already finished. This one is very rare as it can only
10509 happen when the client dies while receiving the last packets.
10510
10511 T : the request was tarpitted. It has been held open with the client
10512 during the whole "timeout tarpit" duration or until the client
10513 closed, both of which will be reported in the "Tw" timer.
10514
10515 - : normal session completion after end of data transfer.
10516
10517 - the third character tells whether the persistence cookie was provided by
10518 the client (only in HTTP mode) :
10519
10520 N : the client provided NO cookie. This is usually the case for new
10521 visitors, so counting the number of occurrences of this flag in the
10522 logs generally indicate a valid trend for the site frequentation.
10523
10524 I : the client provided an INVALID cookie matching no known server.
10525 This might be caused by a recent configuration change, mixed
Cyril Bontéa8e7bbc2010-04-25 22:29:29 +020010526 cookies between HTTP/HTTPS sites, persistence conditionally
10527 ignored, or an attack.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010528
10529 D : the client provided a cookie designating a server which was DOWN,
10530 so either "option persist" was used and the client was sent to
10531 this server, or it was not set and the client was redispatched to
10532 another server.
10533
Willy Tarreau996a92c2010-10-13 19:30:47 +020010534 V : the client provided a VALID cookie, and was sent to the associated
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010535 server.
10536
Willy Tarreau996a92c2010-10-13 19:30:47 +020010537 E : the client provided a valid cookie, but with a last date which was
10538 older than what is allowed by the "maxidle" cookie parameter, so
10539 the cookie is consider EXPIRED and is ignored. The request will be
10540 redispatched just as if there was no cookie.
10541
10542 O : the client provided a valid cookie, but with a first date which was
10543 older than what is allowed by the "maxlife" cookie parameter, so
10544 the cookie is consider too OLD and is ignored. The request will be
10545 redispatched just as if there was no cookie.
10546
Willy Tarreauc89ccb62012-04-05 21:18:22 +020010547 U : a cookie was present but was not used to select the server because
10548 some other server selection mechanism was used instead (typically a
10549 "use-server" rule).
10550
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010551 - : does not apply (no cookie set in configuration).
10552
10553 - the last character reports what operations were performed on the persistence
10554 cookie returned by the server (only in HTTP mode) :
10555
10556 N : NO cookie was provided by the server, and none was inserted either.
10557
10558 I : no cookie was provided by the server, and the proxy INSERTED one.
10559 Note that in "cookie insert" mode, if the server provides a cookie,
10560 it will still be overwritten and reported as "I" here.
10561
Willy Tarreau996a92c2010-10-13 19:30:47 +020010562 U : the proxy UPDATED the last date in the cookie that was presented by
10563 the client. This can only happen in insert mode with "maxidle". It
10564 happens everytime there is activity at a different date than the
10565 date indicated in the cookie. If any other change happens, such as
10566 a redispatch, then the cookie will be marked as inserted instead.
10567
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010568 P : a cookie was PROVIDED by the server and transmitted as-is.
10569
10570 R : the cookie provided by the server was REWRITTEN by the proxy, which
10571 happens in "cookie rewrite" or "cookie prefix" modes.
10572
10573 D : the cookie provided by the server was DELETED by the proxy.
10574
10575 - : does not apply (no cookie set in configuration).
10576
Willy Tarreau996a92c2010-10-13 19:30:47 +020010577The combination of the two first flags gives a lot of information about what
10578was happening when the session terminated, and why it did terminate. It can be
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010579helpful to detect server saturation, network troubles, local system resource
10580starvation, attacks, etc...
10581
10582The most common termination flags combinations are indicated below. They are
10583alphabetically sorted, with the lowercase set just after the upper case for
10584easier finding and understanding.
10585
10586 Flags Reason
10587
10588 -- Normal termination.
10589
10590 CC The client aborted before the connection could be established to the
10591 server. This can happen when haproxy tries to connect to a recently
10592 dead (or unchecked) server, and the client aborts while haproxy is
10593 waiting for the server to respond or for "timeout connect" to expire.
10594
10595 CD The client unexpectedly aborted during data transfer. This can be
10596 caused by a browser crash, by an intermediate equipment between the
10597 client and haproxy which decided to actively break the connection,
10598 by network routing issues between the client and haproxy, or by a
10599 keep-alive session between the server and the client terminated first
10600 by the client.
Willy Tarreaud72758d2010-01-12 10:42:19 +010010601
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010602 cD The client did not send nor acknowledge any data for as long as the
10603 "timeout client" delay. This is often caused by network failures on
Cyril Bontédc4d9032012-04-08 21:57:39 +020010604 the client side, or the client simply leaving the net uncleanly.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010605
10606 CH The client aborted while waiting for the server to start responding.
10607 It might be the server taking too long to respond or the client
10608 clicking the 'Stop' button too fast.
10609
10610 cH The "timeout client" stroke while waiting for client data during a
10611 POST request. This is sometimes caused by too large TCP MSS values
10612 for PPPoE networks which cannot transport full-sized packets. It can
10613 also happen when client timeout is smaller than server timeout and
10614 the server takes too long to respond.
10615
10616 CQ The client aborted while its session was queued, waiting for a server
10617 with enough empty slots to accept it. It might be that either all the
10618 servers were saturated or that the assigned server was taking too
10619 long a time to respond.
10620
10621 CR The client aborted before sending a full HTTP request. Most likely
10622 the request was typed by hand using a telnet client, and aborted
10623 too early. The HTTP status code is likely a 400 here. Sometimes this
10624 might also be caused by an IDS killing the connection between haproxy
10625 and the client.
10626
10627 cR The "timeout http-request" stroke before the client sent a full HTTP
10628 request. This is sometimes caused by too large TCP MSS values on the
10629 client side for PPPoE networks which cannot transport full-sized
10630 packets, or by clients sending requests by hand and not typing fast
10631 enough, or forgetting to enter the empty line at the end of the
10632 request. The HTTP status code is likely a 408 here.
10633
10634 CT The client aborted while its session was tarpitted. It is important to
10635 check if this happens on valid requests, in order to be sure that no
Willy Tarreau55165fe2009-05-10 12:02:55 +020010636 wrong tarpit rules have been written. If a lot of them happen, it
10637 might make sense to lower the "timeout tarpit" value to something
10638 closer to the average reported "Tw" timer, in order not to consume
10639 resources for just a few attackers.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010640
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010010641 SC The server or an equipment between it and haproxy explicitly refused
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010642 the TCP connection (the proxy received a TCP RST or an ICMP message
10643 in return). Under some circumstances, it can also be the network
10644 stack telling the proxy that the server is unreachable (eg: no route,
10645 or no ARP response on local network). When this happens in HTTP mode,
10646 the status code is likely a 502 or 503 here.
10647
10648 sC The "timeout connect" stroke before a connection to the server could
10649 complete. When this happens in HTTP mode, the status code is likely a
10650 503 or 504 here.
10651
10652 SD The connection to the server died with an error during the data
10653 transfer. This usually means that haproxy has received an RST from
10654 the server or an ICMP message from an intermediate equipment while
10655 exchanging data with the server. This can be caused by a server crash
10656 or by a network issue on an intermediate equipment.
10657
10658 sD The server did not send nor acknowledge any data for as long as the
10659 "timeout server" setting during the data phase. This is often caused
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010010660 by too short timeouts on L4 equipments before the server (firewalls,
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010661 load-balancers, ...), as well as keep-alive sessions maintained
10662 between the client and the server expiring first on haproxy.
10663
10664 SH The server aborted before sending its full HTTP response headers, or
10665 it crashed while processing the request. Since a server aborting at
10666 this moment is very rare, it would be wise to inspect its logs to
10667 control whether it crashed and why. The logged request may indicate a
10668 small set of faulty requests, demonstrating bugs in the application.
10669 Sometimes this might also be caused by an IDS killing the connection
10670 between haproxy and the server.
10671
10672 sH The "timeout server" stroke before the server could return its
10673 response headers. This is the most common anomaly, indicating too
10674 long transactions, probably caused by server or database saturation.
10675 The immediate workaround consists in increasing the "timeout server"
10676 setting, but it is important to keep in mind that the user experience
10677 will suffer from these long response times. The only long term
10678 solution is to fix the application.
10679
10680 sQ The session spent too much time in queue and has been expired. See
10681 the "timeout queue" and "timeout connect" settings to find out how to
10682 fix this if it happens too often. If it often happens massively in
10683 short periods, it may indicate general problems on the affected
10684 servers due to I/O or database congestion, or saturation caused by
10685 external attacks.
10686
10687 PC The proxy refused to establish a connection to the server because the
10688 process' socket limit has been reached while attempting to connect.
Cyril Bontédc4d9032012-04-08 21:57:39 +020010689 The global "maxconn" parameter may be increased in the configuration
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010690 so that it does not happen anymore. This status is very rare and
10691 might happen when the global "ulimit-n" parameter is forced by hand.
10692
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010010693 PD The proxy blocked an incorrectly formatted chunked encoded message in
10694 a request or a response, after the server has emitted its headers. In
10695 most cases, this will indicate an invalid message from the server to
10696 the client.
10697
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010698 PH The proxy blocked the server's response, because it was invalid,
10699 incomplete, dangerous (cache control), or matched a security filter.
10700 In any case, an HTTP 502 error is sent to the client. One possible
10701 cause for this error is an invalid syntax in an HTTP header name
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010010702 containing unauthorized characters. It is also possible but quite
10703 rare, that the proxy blocked a chunked-encoding request from the
10704 client due to an invalid syntax, before the server responded. In this
10705 case, an HTTP 400 error is sent to the client and reported in the
10706 logs.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010707
10708 PR The proxy blocked the client's HTTP request, either because of an
10709 invalid HTTP syntax, in which case it returned an HTTP 400 error to
10710 the client, or because a deny filter matched, in which case it
10711 returned an HTTP 403 error.
10712
10713 PT The proxy blocked the client's request and has tarpitted its
10714 connection before returning it a 500 server error. Nothing was sent
10715 to the server. The connection was maintained open for as long as
10716 reported by the "Tw" timer field.
10717
10718 RC A local resource has been exhausted (memory, sockets, source ports)
10719 preventing the connection to the server from establishing. The error
10720 logs will tell precisely what was missing. This is very rare and can
10721 only be solved by proper system tuning.
10722
Willy Tarreau996a92c2010-10-13 19:30:47 +020010723The combination of the two last flags gives a lot of information about how
10724persistence was handled by the client, the server and by haproxy. This is very
10725important to troubleshoot disconnections, when users complain they have to
10726re-authenticate. The commonly encountered flags are :
10727
10728 -- Persistence cookie is not enabled.
10729
10730 NN No cookie was provided by the client, none was inserted in the
10731 response. For instance, this can be in insert mode with "postonly"
10732 set on a GET request.
10733
10734 II A cookie designating an invalid server was provided by the client,
10735 a valid one was inserted in the response. This typically happens when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040010736 a "server" entry is removed from the configuration, since its cookie
Willy Tarreau996a92c2010-10-13 19:30:47 +020010737 value can be presented by a client when no other server knows it.
10738
10739 NI No cookie was provided by the client, one was inserted in the
10740 response. This typically happens for first requests from every user
10741 in "insert" mode, which makes it an easy way to count real users.
10742
10743 VN A cookie was provided by the client, none was inserted in the
10744 response. This happens for most responses for which the client has
10745 already got a cookie.
10746
10747 VU A cookie was provided by the client, with a last visit date which is
10748 not completely up-to-date, so an updated cookie was provided in
10749 response. This can also happen if there was no date at all, or if
10750 there was a date but the "maxidle" parameter was not set, so that the
10751 cookie can be switched to unlimited time.
10752
10753 EI A cookie was provided by the client, with a last visit date which is
10754 too old for the "maxidle" parameter, so the cookie was ignored and a
10755 new cookie was inserted in the response.
10756
10757 OI A cookie was provided by the client, with a first visit date which is
10758 too old for the "maxlife" parameter, so the cookie was ignored and a
10759 new cookie was inserted in the response.
10760
10761 DI The server designated by the cookie was down, a new server was
10762 selected and a new cookie was emitted in the response.
10763
10764 VI The server designated by the cookie was not marked dead but could not
10765 be reached. A redispatch happened and selected another one, which was
10766 then advertised in the response.
10767
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010768
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200107698.6. Non-printable characters
10770-----------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010771
10772In order not to cause trouble to log analysis tools or terminals during log
10773consulting, non-printable characters are not sent as-is into log files, but are
10774converted to the two-digits hexadecimal representation of their ASCII code,
10775prefixed by the character '#'. The only characters that can be logged without
10776being escaped are comprised between 32 and 126 (inclusive). Obviously, the
10777escape character '#' itself is also encoded to avoid any ambiguity ("#23"). It
10778is the same for the character '"' which becomes "#22", as well as '{', '|' and
10779'}' when logging headers.
10780
10781Note that the space character (' ') is not encoded in headers, which can cause
10782issues for tools relying on space count to locate fields. A typical header
10783containing spaces is "User-Agent".
10784
10785Last, it has been observed that some syslog daemons such as syslog-ng escape
10786the quote ('"') with a backslash ('\'). The reverse operation can safely be
10787performed since no quote may appear anywhere else in the logs.
10788
10789
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200107908.7. Capturing HTTP cookies
10791---------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010792
10793Cookie capture simplifies the tracking a complete user session. This can be
10794achieved using the "capture cookie" statement in the frontend. Please refer to
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010795section 4.2 for more details. Only one cookie can be captured, and the same
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010796cookie will simultaneously be checked in the request ("Cookie:" header) and in
10797the response ("Set-Cookie:" header). The respective values will be reported in
10798the HTTP logs at the "captured_request_cookie" and "captured_response_cookie"
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010799locations (see section 8.2.3 about HTTP log format). When either cookie is
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010800not seen, a dash ('-') replaces the value. This way, it's easy to detect when a
10801user switches to a new session for example, because the server will reassign it
10802a new cookie. It is also possible to detect if a server unexpectedly sets a
10803wrong cookie to a client, leading to session crossing.
10804
10805 Examples :
10806 # capture the first cookie whose name starts with "ASPSESSION"
10807 capture cookie ASPSESSION len 32
10808
10809 # capture the first cookie whose name is exactly "vgnvisitor"
10810 capture cookie vgnvisitor= len 32
10811
10812
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200108138.8. Capturing HTTP headers
10814---------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010815
10816Header captures are useful to track unique request identifiers set by an upper
10817proxy, virtual host names, user-agents, POST content-length, referrers, etc. In
10818the response, one can search for information about the response length, how the
10819server asked the cache to behave, or an object location during a redirection.
10820
10821Header captures are performed using the "capture request header" and "capture
10822response header" statements in the frontend. Please consult their definition in
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010823section 4.2 for more details.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010824
10825It is possible to include both request headers and response headers at the same
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010010826time. Non-existent headers are logged as empty strings, and if one header
10827appears more than once, only its last occurrence will be logged. Request headers
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010828are grouped within braces '{' and '}' in the same order as they were declared,
10829and delimited with a vertical bar '|' without any space. Response headers
10830follow the same representation, but are displayed after a space following the
10831request headers block. These blocks are displayed just before the HTTP request
10832in the logs.
10833
10834 Example :
10835 # This instance chains to the outgoing proxy
10836 listen proxy-out
10837 mode http
10838 option httplog
10839 option logasap
10840 log global
10841 server cache1 192.168.1.1:3128
10842
10843 # log the name of the virtual server
10844 capture request header Host len 20
10845
10846 # log the amount of data uploaded during a POST
10847 capture request header Content-Length len 10
10848
10849 # log the beginning of the referrer
10850 capture request header Referer len 20
10851
10852 # server name (useful for outgoing proxies only)
10853 capture response header Server len 20
10854
10855 # logging the content-length is useful with "option logasap"
10856 capture response header Content-Length len 10
10857
10858 # log the expected cache behaviour on the response
10859 capture response header Cache-Control len 8
10860
10861 # the Via header will report the next proxy's name
10862 capture response header Via len 20
10863
10864 # log the URL location during a redirection
10865 capture response header Location len 20
10866
10867 >>> Aug 9 20:26:09 localhost \
10868 haproxy[2022]: 127.0.0.1:34014 [09/Aug/2004:20:26:09] proxy-out \
10869 proxy-out/cache1 0/0/0/162/+162 200 +350 - - ---- 0/0/0/0/0 0/0 \
10870 {fr.adserver.yahoo.co||http://fr.f416.mail.} {|864|private||} \
10871 "GET http://fr.adserver.yahoo.com/"
10872
10873 >>> Aug 9 20:30:46 localhost \
10874 haproxy[2022]: 127.0.0.1:34020 [09/Aug/2004:20:30:46] proxy-out \
10875 proxy-out/cache1 0/0/0/182/+182 200 +279 - - ---- 0/0/0/0/0 0/0 \
10876 {w.ods.org||} {Formilux/0.1.8|3495|||} \
Willy Tarreaud72758d2010-01-12 10:42:19 +010010877 "GET http://trafic.1wt.eu/ HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010878
10879 >>> Aug 9 20:30:46 localhost \
10880 haproxy[2022]: 127.0.0.1:34028 [09/Aug/2004:20:30:46] proxy-out \
10881 proxy-out/cache1 0/0/2/126/+128 301 +223 - - ---- 0/0/0/0/0 0/0 \
10882 {www.sytadin.equipement.gouv.fr||http://trafic.1wt.eu/} \
10883 {Apache|230|||http://www.sytadin.} \
Willy Tarreaud72758d2010-01-12 10:42:19 +010010884 "GET http://www.sytadin.equipement.gouv.fr/ HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010885
10886
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200108878.9. Examples of logs
10888---------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010889
10890These are real-world examples of logs accompanied with an explanation. Some of
10891them have been made up by hand. The syslog part has been removed for better
10892reading. Their sole purpose is to explain how to decipher them.
10893
10894 >>> haproxy[674]: 127.0.0.1:33318 [15/Oct/2003:08:31:57.130] px-http \
10895 px-http/srv1 6559/0/7/147/6723 200 243 - - ---- 5/3/3/1/0 0/0 \
10896 "HEAD / HTTP/1.0"
10897
10898 => long request (6.5s) entered by hand through 'telnet'. The server replied
10899 in 147 ms, and the session ended normally ('----')
10900
10901 >>> haproxy[674]: 127.0.0.1:33319 [15/Oct/2003:08:31:57.149] px-http \
10902 px-http/srv1 6559/1230/7/147/6870 200 243 - - ---- 324/239/239/99/0 \
10903 0/9 "HEAD / HTTP/1.0"
10904
10905 => Idem, but the request was queued in the global queue behind 9 other
10906 requests, and waited there for 1230 ms.
10907
10908 >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.654] px-http \
10909 px-http/srv1 9/0/7/14/+30 200 +243 - - ---- 3/3/3/1/0 0/0 \
10910 "GET /image.iso HTTP/1.0"
10911
10912 => request for a long data transfer. The "logasap" option was specified, so
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010010913 the log was produced just before transferring data. The server replied in
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010914 14 ms, 243 bytes of headers were sent to the client, and total time from
10915 accept to first data byte is 30 ms.
10916
10917 >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.925] px-http \
10918 px-http/srv1 9/0/7/14/30 502 243 - - PH-- 3/2/2/0/0 0/0 \
10919 "GET /cgi-bin/bug.cgi? HTTP/1.0"
10920
10921 => the proxy blocked a server response either because of an "rspdeny" or
10922 "rspideny" filter, or because the response was improperly formatted and
Willy Tarreau3c92c5f2011-08-28 09:45:47 +020010923 not HTTP-compliant, or because it blocked sensitive information which
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010924 risked being cached. In this case, the response is replaced with a "502
10925 bad gateway". The flags ("PH--") tell us that it was haproxy who decided
10926 to return the 502 and not the server.
10927
10928 >>> haproxy[18113]: 127.0.0.1:34548 [15/Oct/2003:15:18:55.798] px-http \
Willy Tarreaud72758d2010-01-12 10:42:19 +010010929 px-http/<NOSRV> -1/-1/-1/-1/8490 -1 0 - - CR-- 2/2/2/0/0 0/0 ""
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010930
10931 => the client never completed its request and aborted itself ("C---") after
10932 8.5s, while the proxy was waiting for the request headers ("-R--").
10933 Nothing was sent to any server.
10934
10935 >>> haproxy[18113]: 127.0.0.1:34549 [15/Oct/2003:15:19:06.103] px-http \
10936 px-http/<NOSRV> -1/-1/-1/-1/50001 408 0 - - cR-- 2/2/2/0/0 0/0 ""
10937
10938 => The client never completed its request, which was aborted by the
10939 time-out ("c---") after 50s, while the proxy was waiting for the request
10940 headers ("-R--"). Nothing was sent to any server, but the proxy could
10941 send a 408 return code to the client.
10942
10943 >>> haproxy[18989]: 127.0.0.1:34550 [15/Oct/2003:15:24:28.312] px-tcp \
10944 px-tcp/srv1 0/0/5007 0 cD 0/0/0/0/0 0/0
10945
10946 => This log was produced with "option tcplog". The client timed out after
10947 5 seconds ("c----").
10948
10949 >>> haproxy[18989]: 10.0.0.1:34552 [15/Oct/2003:15:26:31.462] px-http \
10950 px-http/srv1 3183/-1/-1/-1/11215 503 0 - - SC-- 205/202/202/115/3 \
Willy Tarreaud72758d2010-01-12 10:42:19 +010010951 0/0 "HEAD / HTTP/1.0"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010952
10953 => The request took 3s to complete (probably a network problem), and the
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010954 connection to the server failed ('SC--') after 4 attempts of 2 seconds
Willy Tarreaucc6c8912009-02-22 10:53:55 +010010955 (config says 'retries 3'), and no redispatch (otherwise we would have
10956 seen "/+3"). Status code 503 was returned to the client. There were 115
10957 connections on this server, 202 connections on this proxy, and 205 on
10958 the global process. It is possible that the server refused the
10959 connection because of too many already established.
Willy Tarreau844e3c52008-01-11 16:28:18 +010010960
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010010961
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200109629. Statistics and monitoring
10963----------------------------
10964
10965It is possible to query HAProxy about its status. The most commonly used
10966mechanism is the HTTP statistics page. This page also exposes an alternative
10967CSV output format for monitoring tools. The same format is provided on the
10968Unix socket.
10969
10970
109719.1. CSV format
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010010972---------------
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +010010973
Willy Tarreau7f062c42009-03-05 18:43:00 +010010974The statistics may be consulted either from the unix socket or from the HTTP
10975page. Both means provide a CSV format whose fields follow.
10976
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +010010977 0. pxname: proxy name
10978 1. svname: service name (FRONTEND for frontend, BACKEND for backend, any name
10979 for server)
10980 2. qcur: current queued requests
10981 3. qmax: max queued requests
10982 4. scur: current sessions
10983 5. smax: max sessions
10984 6. slim: sessions limit
10985 7. stot: total sessions
10986 8. bin: bytes in
10987 9. bout: bytes out
10988 10. dreq: denied requests
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +010010989 11. dresp: denied responses
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +010010990 12. ereq: request errors
10991 13. econ: connection errors
Willy Tarreauae526782010-03-04 20:34:23 +010010992 14. eresp: response errors (among which srv_abrt)
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +010010993 15. wretr: retries (warning)
10994 16. wredis: redispatches (warning)
Cyril Bonté0dae5852010-02-03 00:26:28 +010010995 17. status: status (UP/DOWN/NOLB/MAINT/MAINT(via)...)
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +010010996 18. weight: server weight (server), total weight (backend)
10997 19. act: server is active (server), number of active servers (backend)
10998 20. bck: server is backup (server), number of backup servers (backend)
10999 21. chkfail: number of failed checks
11000 22. chkdown: number of UP->DOWN transitions
11001 23. lastchg: last status change (in seconds)
11002 24. downtime: total downtime (in seconds)
11003 25. qlimit: queue limit
11004 26. pid: process id (0 for first instance, 1 for second, ...)
11005 27. iid: unique proxy id
11006 28. sid: service id (unique inside a proxy)
11007 29. throttle: warm up status
11008 30. lbtot: total number of times a server was selected
11009 31. tracked: id of proxy/server if tracking is enabled
Krzysztof Piotr Oledzkiaeebf9b2009-10-04 15:43:17 +020011010 32. type (0=frontend, 1=backend, 2=server, 3=socket)
Krzysztof Piotr Oledzkidb57c6b2009-08-31 21:23:27 +020011011 33. rate: number of sessions per second over last elapsed second
11012 34. rate_lim: limit on new sessions per second
11013 35. rate_max: max number of new sessions per second
Krzysztof Piotr Oledzki09605412009-09-23 22:09:24 +020011014 36. check_status: status of last health check, one of:
Cyril Bontéf0c60612010-02-06 14:44:47 +010011015 UNK -> unknown
11016 INI -> initializing
11017 SOCKERR -> socket error
11018 L4OK -> check passed on layer 4, no upper layers testing enabled
11019 L4TMOUT -> layer 1-4 timeout
11020 L4CON -> layer 1-4 connection problem, for example
11021 "Connection refused" (tcp rst) or "No route to host" (icmp)
11022 L6OK -> check passed on layer 6
11023 L6TOUT -> layer 6 (SSL) timeout
11024 L6RSP -> layer 6 invalid response - protocol error
11025 L7OK -> check passed on layer 7
11026 L7OKC -> check conditionally passed on layer 7, for example 404 with
11027 disable-on-404
11028 L7TOUT -> layer 7 (HTTP/SMTP) timeout
11029 L7RSP -> layer 7 invalid response - protocol error
11030 L7STS -> layer 7 response error, for example HTTP 5xx
Krzysztof Piotr Oledzki09605412009-09-23 22:09:24 +020011031 37. check_code: layer5-7 code, if available
11032 38. check_duration: time in ms took to finish last health check
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010011033 39. hrsp_1xx: http responses with 1xx code
11034 40. hrsp_2xx: http responses with 2xx code
11035 41. hrsp_3xx: http responses with 3xx code
11036 42. hrsp_4xx: http responses with 4xx code
11037 43. hrsp_5xx: http responses with 5xx code
11038 44. hrsp_other: http responses with other codes (protocol error)
Willy Tarreaud63335a2010-02-26 12:56:52 +010011039 45. hanafail: failed health checks details
11040 46. req_rate: HTTP requests per second over last elapsed second
11041 47. req_rate_max: max number of HTTP requests per second observed
11042 48. req_tot: total number of HTTP requests received
Willy Tarreauae526782010-03-04 20:34:23 +010011043 49. cli_abrt: number of data transfers aborted by the client
11044 50. srv_abrt: number of data transfers aborted by the server (inc. in eresp)
Willy Tarreau55058a72012-11-21 08:27:21 +010011045 51. comp_in: number of HTTP response bytes fed to the compressor
11046 52. comp_out: number of HTTP response bytes emitted by the compressor
11047 53. comp_byp: number of bytes that bypassed the HTTP compressor (CPU/BW limit)
Willy Tarreau11d4ec82012-11-26 00:49:03 +010011048 54. comp_rsp: number of HTTP responses that were compressed
Willy Tarreau844e3c52008-01-11 16:28:18 +010011049
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010011050
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200110519.2. Unix Socket commands
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010011052-------------------------
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +010011053
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010011054The following commands are supported on the UNIX stats socket ; all of them
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020011055must be terminated by a line feed. The socket supports pipelining, so that it
11056is possible to chain multiple commands at once provided they are delimited by
11057a semi-colon or a line feed, although the former is more reliable as it has no
11058risk of being truncated over the network. The responses themselves will each be
11059followed by an empty line, so it will be easy for an external script to match a
11060given response with a given request. By default one command line is processed
11061then the connection closes, but there is an interactive allowing multiple lines
11062to be issued one at a time.
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010011063
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020011064It is important to understand that when multiple haproxy processes are started
11065on the same sockets, any process may pick up the request and will output its
11066own stats.
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010011067
Willy Tarreaud63335a2010-02-26 12:56:52 +010011068clear counters
11069 Clear the max values of the statistics counters in each proxy (frontend &
11070 backend) and in each server. The cumulated counters are not affected. This
11071 can be used to get clean counters after an incident, without having to
11072 restart nor to clear traffic counters. This command is restricted and can
11073 only be issued on sockets configured for levels "operator" or "admin".
11074
11075clear counters all
11076 Clear all statistics counters in each proxy (frontend & backend) and in each
11077 server. This has the same effect as restarting. This command is restricted
11078 and can only be issued on sockets configured for level "admin".
11079
Simon Hormanc88b8872011-06-15 15:18:49 +090011080clear table <table> [ data.<type> <operator> <value> ] | [ key <key> ]
11081 Remove entries from the stick-table <table>.
11082
11083 This is typically used to unblock some users complaining they have been
11084 abusively denied access to a service, but this can also be used to clear some
11085 stickiness entries matching a server that is going to be replaced (see "show
11086 table" below for details). Note that sometimes, removal of an entry will be
11087 refused because it is currently tracked by a session. Retrying a few seconds
11088 later after the session ends is usual enough.
11089
11090 In the case where no options arguments are given all entries will be removed.
11091
11092 When the "data." form is used entries matching a filter applied using the
11093 stored data (see "stick-table" in section 4.2) are removed. A stored data
11094 type must be specified in <type>, and this data type must be stored in the
11095 table otherwise an error is reported. The data is compared according to
11096 <operator> with the 64-bit integer <value>. Operators are the same as with
11097 the ACLs :
11098
11099 - eq : match entries whose data is equal to this value
11100 - ne : match entries whose data is not equal to this value
11101 - le : match entries whose data is less than or equal to this value
11102 - ge : match entries whose data is greater than or equal to this value
11103 - lt : match entries whose data is less than this value
11104 - gt : match entries whose data is greater than this value
11105
11106 When the key form is used the entry <key> is removed. The key must be of the
Simon Horman619e3cc2011-06-15 15:18:52 +090011107 same type as the table, which currently is limited to IPv4, IPv6, integer and
11108 string.
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020011109
11110 Example :
Willy Tarreau62a36c42010-08-17 15:53:10 +020011111 $ echo "show table http_proxy" | socat stdio /tmp/sock1
Emeric Brun7c6b82e2010-09-24 16:34:28 +020011112 >>> # table: http_proxy, type: ip, size:204800, used:2
Willy Tarreau62a36c42010-08-17 15:53:10 +020011113 >>> 0x80e6a4c: key=127.0.0.1 use=0 exp=3594729 gpc0=0 conn_rate(30000)=1 \
11114 bytes_out_rate(60000)=187
11115 >>> 0x80e6a80: key=127.0.0.2 use=0 exp=3594740 gpc0=1 conn_rate(30000)=10 \
11116 bytes_out_rate(60000)=191
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020011117
11118 $ echo "clear table http_proxy key 127.0.0.1" | socat stdio /tmp/sock1
11119
11120 $ echo "show table http_proxy" | socat stdio /tmp/sock1
Emeric Brun7c6b82e2010-09-24 16:34:28 +020011121 >>> # table: http_proxy, type: ip, size:204800, used:1
Willy Tarreau62a36c42010-08-17 15:53:10 +020011122 >>> 0x80e6a80: key=127.0.0.2 use=0 exp=3594740 gpc0=1 conn_rate(30000)=10 \
11123 bytes_out_rate(60000)=191
Simon Hormanc88b8872011-06-15 15:18:49 +090011124 $ echo "clear table http_proxy data.gpc0 eq 1" | socat stdio /tmp/sock1
11125 $ echo "show table http_proxy" | socat stdio /tmp/sock1
11126 >>> # table: http_proxy, type: ip, size:204800, used:1
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020011127
Willy Tarreau532a4502011-09-07 22:37:44 +020011128disable frontend <frontend>
11129 Mark the frontend as temporarily stopped. This corresponds to the mode which
11130 is used during a soft restart : the frontend releases the port but can be
11131 enabled again if needed. This should be used with care as some non-Linux OSes
11132 are unable to enable it back. This is intended to be used in environments
11133 where stopping a proxy is not even imaginable but a misconfigured proxy must
11134 be fixed. That way it's possible to release the port and bind it into another
11135 process to restore operations. The frontend will appear with status "STOP"
11136 on the stats page.
11137
11138 The frontend may be specified either by its name or by its numeric ID,
11139 prefixed with a sharp ('#').
11140
11141 This command is restricted and can only be issued on sockets configured for
11142 level "admin".
11143
Willy Tarreaud63335a2010-02-26 12:56:52 +010011144disable server <backend>/<server>
11145 Mark the server DOWN for maintenance. In this mode, no more checks will be
11146 performed on the server until it leaves maintenance.
11147 If the server is tracked by other servers, those servers will be set to DOWN
11148 during the maintenance.
11149
11150 In the statistics page, a server DOWN for maintenance will appear with a
11151 "MAINT" status, its tracking servers with the "MAINT(via)" one.
11152
11153 Both the backend and the server may be specified either by their name or by
Willy Tarreauf5f31922011-08-02 11:32:07 +020011154 their numeric ID, prefixed with a sharp ('#').
Willy Tarreaud63335a2010-02-26 12:56:52 +010011155
11156 This command is restricted and can only be issued on sockets configured for
11157 level "admin".
11158
Willy Tarreau532a4502011-09-07 22:37:44 +020011159enable frontend <frontend>
11160 Resume a frontend which was temporarily stopped. It is possible that some of
11161 the listening ports won't be able to bind anymore (eg: if another process
11162 took them since the 'disable frontend' operation). If this happens, an error
11163 is displayed. Some operating systems might not be able to resume a frontend
11164 which was disabled.
11165
11166 The frontend may be specified either by its name or by its numeric ID,
11167 prefixed with a sharp ('#').
11168
11169 This command is restricted and can only be issued on sockets configured for
11170 level "admin".
11171
Willy Tarreaud63335a2010-02-26 12:56:52 +010011172enable server <backend>/<server>
11173 If the server was previously marked as DOWN for maintenance, this marks the
11174 server UP and checks are re-enabled.
11175
11176 Both the backend and the server may be specified either by their name or by
Willy Tarreauf5f31922011-08-02 11:32:07 +020011177 their numeric ID, prefixed with a sharp ('#').
Willy Tarreaud63335a2010-02-26 12:56:52 +010011178
11179 This command is restricted and can only be issued on sockets configured for
11180 level "admin".
11181
11182get weight <backend>/<server>
11183 Report the current weight and the initial weight of server <server> in
11184 backend <backend> or an error if either doesn't exist. The initial weight is
11185 the one that appears in the configuration file. Both are normally equal
11186 unless the current weight has been changed. Both the backend and the server
11187 may be specified either by their name or by their numeric ID, prefixed with a
Willy Tarreauf5f31922011-08-02 11:32:07 +020011188 sharp ('#').
Willy Tarreaud63335a2010-02-26 12:56:52 +010011189
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020011190help
11191 Print the list of known keywords and their basic usage. The same help screen
11192 is also displayed for unknown commands.
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010011193
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020011194prompt
11195 Toggle the prompt at the beginning of the line and enter or leave interactive
11196 mode. In interactive mode, the connection is not closed after a command
11197 completes. Instead, the prompt will appear again, indicating the user that
11198 the interpreter is waiting for a new command. The prompt consists in a right
11199 angle bracket followed by a space "> ". This mode is particularly convenient
11200 when one wants to periodically check information such as stats or errors.
11201 It is also a good idea to enter interactive mode before issuing a "help"
11202 command.
11203
11204quit
11205 Close the connection when in interactive mode.
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +010011206
Willy Tarreau2a0f4d22011-08-02 11:49:05 +020011207set maxconn frontend <frontend> <value>
Willy Tarreau3c7a79d2012-09-26 21:07:15 +020011208 Dynamically change the specified frontend's maxconn setting. Any positive
11209 value is allowed including zero, but setting values larger than the global
11210 maxconn does not make much sense. If the limit is increased and connections
11211 were pending, they will immediately be accepted. If it is lowered to a value
11212 below the current number of connections, new connections acceptation will be
Willy Tarreau2a0f4d22011-08-02 11:49:05 +020011213 delayed until the threshold is reached. The frontend might be specified by
11214 either its name or its numeric ID prefixed with a sharp ('#').
11215
Willy Tarreau91886b62011-09-07 14:38:31 +020011216set maxconn global <maxconn>
11217 Dynamically change the global maxconn setting within the range defined by the
11218 initial global maxconn setting. If it is increased and connections were
11219 pending, they will immediately be accepted. If it is lowered to a value below
11220 the current number of connections, new connections acceptation will be
11221 delayed until the threshold is reached. A value of zero restores the initial
11222 setting.
11223
Willy Tarreauf5b22872011-09-07 16:13:44 +020011224set rate-limit connections global <value>
11225 Change the process-wide connection rate limit, which is set by the global
11226 'maxconnrate' setting. A value of zero disables the limitation. This limit
11227 applies to all frontends and the change has an immediate effect. The value
11228 is passed in number of connections per second.
11229
William Lallemandd85f9172012-11-09 17:05:39 +010011230set rate-limit http-compression global <value>
11231 Change the maximum input compression rate, which is set by the global
11232 'maxcomprate' setting. A value of zero disables the limitation. The value is
William Lallemand096f5542012-11-19 17:26:05 +010011233 passed in number of kilobytes per second. The value is available in the "show
11234 info" on the line "CompressBpsRateLim" in bytes.
William Lallemandd85f9172012-11-09 17:05:39 +010011235
Willy Tarreau654694e2012-06-07 01:03:16 +020011236set table <table> key <key> data.<data_type> <value>
11237 Create or update a stick-table entry in the table. If the key is not present,
11238 an entry is inserted. See stick-table in section 4.2 to find all possible
11239 values for <data_type>. The most likely use consists in dynamically entering
11240 entries for source IP addresses, with a flag in gpc0 to dynamically block an
11241 IP address or affect its quality of service.
11242
Willy Tarreaud63335a2010-02-26 12:56:52 +010011243set timeout cli <delay>
11244 Change the CLI interface timeout for current connection. This can be useful
11245 during long debugging sessions where the user needs to constantly inspect
11246 some indicators without being disconnected. The delay is passed in seconds.
11247
11248set weight <backend>/<server> <weight>[%]
11249 Change a server's weight to the value passed in argument. If the value ends
11250 with the '%' sign, then the new weight will be relative to the initially
11251 configured weight. Relative weights are only permitted between 0 and 100%,
11252 and absolute weights are permitted between 0 and 256. Servers which are part
11253 of a farm running a static load-balancing algorithm have stricter limitations
11254 because the weight cannot change once set. Thus for these servers, the only
11255 accepted values are 0 and 100% (or 0 and the initial weight). Changes take
11256 effect immediately, though certain LB algorithms require a certain amount of
11257 requests to consider changes. A typical usage of this command is to disable
11258 a server during an update by setting its weight to zero, then to enable it
11259 again after the update by setting it back to 100%. This command is restricted
11260 and can only be issued on sockets configured for level "admin". Both the
11261 backend and the server may be specified either by their name or by their
Willy Tarreauf5f31922011-08-02 11:32:07 +020011262 numeric ID, prefixed with a sharp ('#').
Willy Tarreaud63335a2010-02-26 12:56:52 +010011263
Willy Tarreaue0c8a1a2009-03-04 16:33:10 +010011264show errors [<iid>]
11265 Dump last known request and response errors collected by frontends and
11266 backends. If <iid> is specified, the limit the dump to errors concerning
Willy Tarreau6162db22009-10-10 17:13:00 +020011267 either frontend or backend whose ID is <iid>. This command is restricted
11268 and can only be issued on sockets configured for levels "operator" or
11269 "admin".
Willy Tarreaue0c8a1a2009-03-04 16:33:10 +010011270
11271 The errors which may be collected are the last request and response errors
11272 caused by protocol violations, often due to invalid characters in header
11273 names. The report precisely indicates what exact character violated the
11274 protocol. Other important information such as the exact date the error was
11275 detected, frontend and backend names, the server name (when known), the
11276 internal session ID and the source address which has initiated the session
11277 are reported too.
11278
11279 All characters are returned, and non-printable characters are encoded. The
11280 most common ones (\t = 9, \n = 10, \r = 13 and \e = 27) are encoded as one
11281 letter following a backslash. The backslash itself is encoded as '\\' to
11282 avoid confusion. Other non-printable characters are encoded '\xNN' where
11283 NN is the two-digits hexadecimal representation of the character's ASCII
11284 code.
11285
11286 Lines are prefixed with the position of their first character, starting at 0
11287 for the beginning of the buffer. At most one input line is printed per line,
11288 and large lines will be broken into multiple consecutive output lines so that
11289 the output never goes beyond 79 characters wide. It is easy to detect if a
11290 line was broken, because it will not end with '\n' and the next line's offset
11291 will be followed by a '+' sign, indicating it is a continuation of previous
11292 line.
11293
11294 Example :
Willy Tarreau62a36c42010-08-17 15:53:10 +020011295 $ echo "show errors" | socat stdio /tmp/sock1
11296 >>> [04/Mar/2009:15:46:56.081] backend http-in (#2) : invalid response
Willy Tarreaue0c8a1a2009-03-04 16:33:10 +010011297 src 127.0.0.1, session #54, frontend fe-eth0 (#1), server s2 (#1)
11298 response length 213 bytes, error at position 23:
11299
11300 00000 HTTP/1.0 200 OK\r\n
11301 00017 header/bizarre:blah\r\n
11302 00038 Location: blah\r\n
11303 00054 Long-line: this is a very long line which should b
11304 00104+ e broken into multiple lines on the output buffer,
11305 00154+ otherwise it would be too large to print in a ter
11306 00204+ minal\r\n
11307 00211 \r\n
11308
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011309 In the example above, we see that the backend "http-in" which has internal
Willy Tarreaue0c8a1a2009-03-04 16:33:10 +010011310 ID 2 has blocked an invalid response from its server s2 which has internal
11311 ID 1. The request was on session 54 initiated by source 127.0.0.1 and
11312 received by frontend fe-eth0 whose ID is 1. The total response length was
11313 213 bytes when the error was detected, and the error was at byte 23. This
11314 is the slash ('/') in header name "header/bizarre", which is not a valid
11315 HTTP character for a header name.
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +010011316
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020011317show info
11318 Dump info about haproxy status on current process.
11319
11320show sess
11321 Dump all known sessions. Avoid doing this on slow connections as this can
Willy Tarreau6162db22009-10-10 17:13:00 +020011322 be huge. This command is restricted and can only be issued on sockets
11323 configured for levels "operator" or "admin".
11324
Willy Tarreau66dc20a2010-03-05 17:53:32 +010011325show sess <id>
11326 Display a lot of internal information about the specified session identifier.
11327 This identifier is the first field at the beginning of the lines in the dumps
11328 of "show sess" (it corresponds to the session pointer). Those information are
11329 useless to most users but may be used by haproxy developers to troubleshoot a
11330 complex bug. The output format is intentionally not documented so that it can
Willy Tarreau76153662012-11-26 01:16:39 +010011331 freely evolve depending on demands. The special id "all" dumps the states of
11332 all sessions, which can be avoided as much as possible as it is highly CPU
11333 intensive and can take a lot of time.
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020011334
11335show stat [<iid> <type> <sid>]
11336 Dump statistics in the CSV format. By passing <id>, <type> and <sid>, it is
11337 possible to dump only selected items :
11338 - <iid> is a proxy ID, -1 to dump everything
11339 - <type> selects the type of dumpable objects : 1 for frontends, 2 for
11340 backends, 4 for servers, -1 for everything. These values can be ORed,
11341 for example:
11342 1 + 2 = 3 -> frontend + backend.
11343 1 + 2 + 4 = 7 -> frontend + backend + server.
11344 - <sid> is a server ID, -1 to dump everything from the selected proxy.
11345
11346 Example :
Willy Tarreau62a36c42010-08-17 15:53:10 +020011347 $ echo "show info;show stat" | socat stdio unix-connect:/tmp/sock1
11348 >>> Name: HAProxy
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020011349 Version: 1.4-dev2-49
11350 Release_date: 2009/09/23
11351 Nbproc: 1
11352 Process_num: 1
11353 (...)
11354
11355 # pxname,svname,qcur,qmax,scur,smax,slim,stot,bin,bout,dreq, (...)
11356 stats,FRONTEND,,,0,0,1000,0,0,0,0,0,0,,,,,OPEN,,,,,,,,,1,1,0, (...)
11357 stats,BACKEND,0,0,0,0,1000,0,0,0,0,0,,0,0,0,0,UP,0,0,0,,0,250,(...)
11358 (...)
11359 www1,BACKEND,0,0,0,0,1000,0,0,0,0,0,,0,0,0,0,UP,1,1,0,,0,250, (...)
11360
11361 $
11362
11363 Here, two commands have been issued at once. That way it's easy to find
11364 which process the stats apply to in multi-process mode. Notice the empty
11365 line after the information output which marks the end of the first block.
11366 A similar empty line appears at the end of the second block (stats) so that
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010011367 the reader knows the output has not been truncated.
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020011368
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020011369show table
11370 Dump general information on all known stick-tables. Their name is returned
11371 (the name of the proxy which holds them), their type (currently zero, always
11372 IP), their size in maximum possible number of entries, and the number of
11373 entries currently in use.
11374
11375 Example :
Willy Tarreau62a36c42010-08-17 15:53:10 +020011376 $ echo "show table" | socat stdio /tmp/sock1
Simon Horman64b28d02011-08-13 08:03:50 +090011377 >>> # table: front_pub, type: ip, size:204800, used:171454
11378 >>> # table: back_rdp, type: ip, size:204800, used:0
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020011379
Simon Horman17bce342011-06-15 15:18:47 +090011380show table <name> [ data.<type> <operator> <value> ] | [ key <key> ]
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020011381 Dump contents of stick-table <name>. In this mode, a first line of generic
11382 information about the table is reported as with "show table", then all
11383 entries are dumped. Since this can be quite heavy, it is possible to specify
Simon Horman17bce342011-06-15 15:18:47 +090011384 a filter in order to specify what entries to display.
11385
11386 When the "data." form is used the filter applies to the stored data (see
11387 "stick-table" in section 4.2). A stored data type must be specified
11388 in <type>, and this data type must be stored in the table otherwise an
11389 error is reported. The data is compared according to <operator> with the
11390 64-bit integer <value>. Operators are the same as with the ACLs :
11391
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020011392 - eq : match entries whose data is equal to this value
11393 - ne : match entries whose data is not equal to this value
11394 - le : match entries whose data is less than or equal to this value
11395 - ge : match entries whose data is greater than or equal to this value
11396 - lt : match entries whose data is less than this value
11397 - gt : match entries whose data is greater than this value
11398
Simon Hormanc88b8872011-06-15 15:18:49 +090011399
11400 When the key form is used the entry <key> is shown. The key must be of the
Simon Horman619e3cc2011-06-15 15:18:52 +090011401 same type as the table, which currently is limited to IPv4, IPv6, integer,
11402 and string.
Simon Horman17bce342011-06-15 15:18:47 +090011403
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020011404 Example :
Willy Tarreau62a36c42010-08-17 15:53:10 +020011405 $ echo "show table http_proxy" | socat stdio /tmp/sock1
Simon Horman64b28d02011-08-13 08:03:50 +090011406 >>> # table: http_proxy, type: ip, size:204800, used:2
Willy Tarreau62a36c42010-08-17 15:53:10 +020011407 >>> 0x80e6a4c: key=127.0.0.1 use=0 exp=3594729 gpc0=0 conn_rate(30000)=1 \
11408 bytes_out_rate(60000)=187
11409 >>> 0x80e6a80: key=127.0.0.2 use=0 exp=3594740 gpc0=1 conn_rate(30000)=10 \
11410 bytes_out_rate(60000)=191
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020011411
Willy Tarreau62a36c42010-08-17 15:53:10 +020011412 $ echo "show table http_proxy data.gpc0 gt 0" | socat stdio /tmp/sock1
Simon Horman64b28d02011-08-13 08:03:50 +090011413 >>> # table: http_proxy, type: ip, size:204800, used:2
Willy Tarreau62a36c42010-08-17 15:53:10 +020011414 >>> 0x80e6a80: key=127.0.0.2 use=0 exp=3594740 gpc0=1 conn_rate(30000)=10 \
11415 bytes_out_rate(60000)=191
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020011416
Willy Tarreau62a36c42010-08-17 15:53:10 +020011417 $ echo "show table http_proxy data.conn_rate gt 5" | \
11418 socat stdio /tmp/sock1
Simon Horman64b28d02011-08-13 08:03:50 +090011419 >>> # table: http_proxy, type: ip, size:204800, used:2
Willy Tarreau62a36c42010-08-17 15:53:10 +020011420 >>> 0x80e6a80: key=127.0.0.2 use=0 exp=3594740 gpc0=1 conn_rate(30000)=10 \
11421 bytes_out_rate(60000)=191
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020011422
Simon Horman17bce342011-06-15 15:18:47 +090011423 $ echo "show table http_proxy key 127.0.0.2" | \
11424 socat stdio /tmp/sock1
Simon Horman64b28d02011-08-13 08:03:50 +090011425 >>> # table: http_proxy, type: ip, size:204800, used:2
Simon Horman17bce342011-06-15 15:18:47 +090011426 >>> 0x80e6a80: key=127.0.0.2 use=0 exp=3594740 gpc0=1 conn_rate(30000)=10 \
11427 bytes_out_rate(60000)=191
11428
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020011429 When the data criterion applies to a dynamic value dependent on time such as
11430 a bytes rate, the value is dynamically computed during the evaluation of the
11431 entry in order to decide whether it has to be dumped or not. This means that
11432 such a filter could match for some time then not match anymore because as
11433 time goes, the average event rate drops.
11434
11435 It is possible to use this to extract lists of IP addresses abusing the
11436 service, in order to monitor them or even blacklist them in a firewall.
11437 Example :
Willy Tarreau62a36c42010-08-17 15:53:10 +020011438 $ echo "show table http_proxy data.gpc0 gt 0" \
11439 | socat stdio /tmp/sock1 \
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020011440 | fgrep 'key=' | cut -d' ' -f2 | cut -d= -f2 > abusers-ip.txt
11441 ( or | awk '/key/{ print a[split($2,a,"=")]; }' )
Krzysztof Piotr Oledzki719e7262009-10-04 15:02:46 +020011442
Willy Tarreau532a4502011-09-07 22:37:44 +020011443shutdown frontend <frontend>
11444 Completely delete the specified frontend. All the ports it was bound to will
11445 be released. It will not be possible to enable the frontend anymore after
11446 this operation. This is intended to be used in environments where stopping a
11447 proxy is not even imaginable but a misconfigured proxy must be fixed. That
11448 way it's possible to release the port and bind it into another process to
11449 restore operations. The frontend will not appear at all on the stats page
11450 once it is terminated.
11451
11452 The frontend may be specified either by its name or by its numeric ID,
11453 prefixed with a sharp ('#').
11454
11455 This command is restricted and can only be issued on sockets configured for
11456 level "admin".
11457
Willy Tarreaua295edc2011-09-07 23:21:03 +020011458shutdown session <id>
11459 Immediately terminate the session matching the specified session identifier.
11460 This identifier is the first field at the beginning of the lines in the dumps
11461 of "show sess" (it corresponds to the session pointer). This can be used to
11462 terminate a long-running session without waiting for a timeout or when an
11463 endless transfer is ongoing. Such terminated sessions are reported with a 'K'
11464 flag in the logs.
11465
Willy Tarreau52b2d222011-09-07 23:48:48 +020011466shutdown sessions <backend>/<server>
11467 Immediately terminate all the sessions attached to the specified server. This
11468 can be used to terminate long-running sessions after a server is put into
11469 maintenance mode, for instance. Such terminated sessions are reported with a
11470 'K' flag in the logs.
11471
Willy Tarreau0ba27502007-12-24 16:55:16 +010011472/*
11473 * Local variables:
11474 * fill-column: 79
11475 * End:
11476 */