blob: 655ede06cd9c8cff4f18d5764250b6d6a64c80dc [file] [log] [blame]
Willy Tarreau6a06a402007-07-15 20:15:28 +02001 ----------------------
Willy Tarreau8317b282014-04-23 01:49:41 +02002 HAProxy
Willy Tarreau6a06a402007-07-15 20:15:28 +02003 Configuration Manual
4 ----------------------
Willy Tarreau15480d72014-06-19 21:10:58 +02005 version 1.6
Willy Tarreau6a06a402007-07-15 20:15:28 +02006 willy tarreau
Willy Tarreau8747b6d2015-03-11 23:57:23 +01007 2015/03/11
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
William Lallemandf9873ba2015-05-05 17:37:14 +0200422.2. Quoting and escaping
William Lallemandb2f07452015-05-12 14:27:13 +0200432.3. Environment variables
442.4. Time format
452.5. Examples
Willy Tarreauc57f0e22009-05-10 13:12:33 +020046
473. Global parameters
483.1. Process management and security
493.2. Performance tuning
503.3. Debugging
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +0100513.4. Userlists
Cyril Bontédc4d9032012-04-08 21:57:39 +0200523.5. Peers
Willy Tarreauc57f0e22009-05-10 13:12:33 +020053
544. Proxies
554.1. Proxy keywords matrix
564.2. Alphabetically sorted keywords reference
57
Willy Tarreau086fbf52012-09-24 20:34:51 +0200585. Bind and Server options
595.1. Bind options
605.2. Server and default-server options
Willy Tarreauc57f0e22009-05-10 13:12:33 +020061
626. HTTP header manipulation
63
Willy Tarreau74ca5042013-06-11 23:12:07 +0200647. Using ACLs and fetching samples
657.1. ACL basics
667.1.1. Matching booleans
677.1.2. Matching integers
687.1.3. Matching strings
697.1.4. Matching regular expressions (regexes)
707.1.5. Matching arbitrary data blocks
717.1.6. Matching IPv4 and IPv6 addresses
727.2. Using ACLs to form conditions
737.3. Fetching samples
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200747.3.1. Converters
757.3.2. Fetching samples from internal states
767.3.3. Fetching samples at Layer 4
777.3.4. Fetching samples at Layer 5
787.3.5. Fetching samples from buffer contents (Layer 6)
797.3.6. Fetching HTTP samples (Layer 7)
Willy Tarreau74ca5042013-06-11 23:12:07 +0200807.4. Pre-defined ACLs
Willy Tarreauc57f0e22009-05-10 13:12:33 +020081
828. Logging
838.1. Log levels
848.2. Log formats
858.2.1. Default log format
868.2.2. TCP log format
878.2.3. HTTP log format
William Lallemand48940402012-01-30 16:47:22 +0100888.2.4. Custom log format
Willy Tarreau5f51e1a2012-12-03 18:40:10 +0100898.2.5. Error log format
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200908.3. Advanced logging options
918.3.1. Disabling logging of external tests
928.3.2. Logging before waiting for the session to terminate
938.3.3. Raising log level upon errors
948.3.4. Disabling logging of successful connections
958.4. Timing events
968.5. Session state at disconnection
978.6. Non-printable characters
988.7. Capturing HTTP cookies
998.8. Capturing HTTP headers
1008.9. Examples of logs
101
1029. Statistics and monitoring
1039.1. CSV format
1049.2. Unix Socket commands
105
106
1071. Quick reminder about HTTP
108----------------------------
109
110When haproxy is running in HTTP mode, both the request and the response are
111fully analyzed and indexed, thus it becomes possible to build matching criteria
112on almost anything found in the contents.
113
114However, it is important to understand how HTTP requests and responses are
115formed, and how HAProxy decomposes them. It will then become easier to write
116correct rules and to debug existing configurations.
117
118
1191.1. The HTTP transaction model
120-------------------------------
121
122The HTTP protocol is transaction-driven. This means that each request will lead
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +0100123to one and only one response. Traditionally, a TCP connection is established
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200124from the client to the server, a request is sent by the client on the
125connection, the server responds and the connection is closed. A new request
126will involve a new connection :
127
128 [CON1] [REQ1] ... [RESP1] [CLO1] [CON2] [REQ2] ... [RESP2] [CLO2] ...
129
130In this mode, called the "HTTP close" mode, there are as many connection
131establishments as there are HTTP transactions. Since the connection is closed
132by the server after the response, the client does not need to know the content
133length.
134
135Due to the transactional nature of the protocol, it was possible to improve it
136to avoid closing a connection between two subsequent transactions. In this mode
137however, it is mandatory that the server indicates the content length for each
138response so that the client does not wait indefinitely. For this, a special
139header is used: "Content-length". This mode is called the "keep-alive" mode :
140
141 [CON] [REQ1] ... [RESP1] [REQ2] ... [RESP2] [CLO] ...
142
143Its advantages are a reduced latency between transactions, and less processing
144power required on the server side. It is generally better than the close mode,
145but not always because the clients often limit their concurrent connections to
Patrick Mezard9ec2ec42010-06-12 17:02:45 +0200146a smaller value.
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200147
148A last improvement in the communications is the pipelining mode. It still uses
149keep-alive, but the client does not wait for the first response to send the
150second request. This is useful for fetching large number of images composing a
151page :
152
153 [CON] [REQ1] [REQ2] ... [RESP1] [RESP2] [CLO] ...
154
155This can obviously have a tremendous benefit on performance because the network
156latency is eliminated between subsequent requests. Many HTTP agents do not
157correctly support pipelining since there is no way to associate a response with
158the corresponding request in HTTP. For this reason, it is mandatory for the
Cyril Bonté78caf842010-03-10 22:41:43 +0100159server to reply in the exact same order as the requests were received.
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200160
Willy Tarreau70dffda2014-01-30 03:07:23 +0100161By default HAProxy operates in keep-alive mode with regards to persistent
162connections: for each connection it processes each request and response, and
163leaves the connection idle on both sides between the end of a response and the
164start of a new request.
Patrick Mezard9ec2ec42010-06-12 17:02:45 +0200165
Willy Tarreau70dffda2014-01-30 03:07:23 +0100166HAProxy supports 5 connection modes :
167 - keep alive : all requests and responses are processed (default)
168 - tunnel : only the first request and response are processed,
169 everything else is forwarded with no analysis.
170 - passive close : tunnel with "Connection: close" added in both directions.
171 - server close : the server-facing connection is closed after the response.
172 - forced close : the connection is actively closed after end of response.
173
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200174
1751.2. HTTP request
176-----------------
177
178First, let's consider this HTTP request :
179
180 Line Contents
Willy Tarreaud72758d2010-01-12 10:42:19 +0100181 number
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200182 1 GET /serv/login.php?lang=en&profile=2 HTTP/1.1
183 2 Host: www.mydomain.com
184 3 User-agent: my small browser
185 4 Accept: image/jpeg, image/gif
186 5 Accept: image/png
187
188
1891.2.1. The Request line
190-----------------------
191
192Line 1 is the "request line". It is always composed of 3 fields :
193
194 - a METHOD : GET
195 - a URI : /serv/login.php?lang=en&profile=2
196 - a version tag : HTTP/1.1
197
198All of them are delimited by what the standard calls LWS (linear white spaces),
199which are commonly spaces, but can also be tabs or line feeds/carriage returns
200followed by spaces/tabs. The method itself cannot contain any colon (':') and
201is limited to alphabetic letters. All those various combinations make it
202desirable that HAProxy performs the splitting itself rather than leaving it to
203the user to write a complex or inaccurate regular expression.
204
205The URI itself can have several forms :
206
207 - A "relative URI" :
208
209 /serv/login.php?lang=en&profile=2
210
211 It is a complete URL without the host part. This is generally what is
212 received by servers, reverse proxies and transparent proxies.
213
214 - An "absolute URI", also called a "URL" :
215
216 http://192.168.0.12:8080/serv/login.php?lang=en&profile=2
217
218 It is composed of a "scheme" (the protocol name followed by '://'), a host
219 name or address, optionally a colon (':') followed by a port number, then
220 a relative URI beginning at the first slash ('/') after the address part.
221 This is generally what proxies receive, but a server supporting HTTP/1.1
222 must accept this form too.
223
224 - a star ('*') : this form is only accepted in association with the OPTIONS
225 method and is not relayable. It is used to inquiry a next hop's
226 capabilities.
Willy Tarreaud72758d2010-01-12 10:42:19 +0100227
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200228 - an address:port combination : 192.168.0.12:80
229 This is used with the CONNECT method, which is used to establish TCP
230 tunnels through HTTP proxies, generally for HTTPS, but sometimes for
231 other protocols too.
232
233In a relative URI, two sub-parts are identified. The part before the question
234mark is called the "path". It is typically the relative path to static objects
235on the server. The part after the question mark is called the "query string".
236It is mostly used with GET requests sent to dynamic scripts and is very
237specific to the language, framework or application in use.
238
239
2401.2.2. The request headers
241--------------------------
242
243The headers start at the second line. They are composed of a name at the
244beginning of the line, immediately followed by a colon (':'). Traditionally,
245an LWS is added after the colon but that's not required. Then come the values.
246Multiple identical headers may be folded into one single line, delimiting the
247values with commas, provided that their order is respected. This is commonly
248encountered in the "Cookie:" field. A header may span over multiple lines if
249the subsequent lines begin with an LWS. In the example in 1.2, lines 4 and 5
250define a total of 3 values for the "Accept:" header.
251
252Contrary to a common mis-conception, header names are not case-sensitive, and
253their values are not either if they refer to other header names (such as the
254"Connection:" header).
255
256The end of the headers is indicated by the first empty line. People often say
257that it's a double line feed, which is not exact, even if a double line feed
258is one valid form of empty line.
259
260Fortunately, HAProxy takes care of all these complex combinations when indexing
261headers, checking values and counting them, so there is no reason to worry
262about the way they could be written, but it is important not to accuse an
263application of being buggy if it does unusual, valid things.
264
265Important note:
266 As suggested by RFC2616, HAProxy normalizes headers by replacing line breaks
267 in the middle of headers by LWS in order to join multi-line headers. This
268 is necessary for proper analysis and helps less capable HTTP parsers to work
269 correctly and not to be fooled by such complex constructs.
270
271
2721.3. HTTP response
273------------------
274
275An HTTP response looks very much like an HTTP request. Both are called HTTP
276messages. Let's consider this HTTP response :
277
278 Line Contents
Willy Tarreaud72758d2010-01-12 10:42:19 +0100279 number
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200280 1 HTTP/1.1 200 OK
281 2 Content-length: 350
282 3 Content-Type: text/html
283
Willy Tarreau816b9792009-09-15 21:25:21 +0200284As a special case, HTTP supports so called "Informational responses" as status
285codes 1xx. These messages are special in that they don't convey any part of the
286response, they're just used as sort of a signaling message to ask a client to
Willy Tarreau5843d1a2010-02-01 15:13:32 +0100287continue to post its request for instance. In the case of a status 100 response
288the requested information will be carried by the next non-100 response message
289following the informational one. This implies that multiple responses may be
290sent to a single request, and that this only works when keep-alive is enabled
291(1xx messages are HTTP/1.1 only). HAProxy handles these messages and is able to
292correctly forward and skip them, and only process the next non-100 response. As
293such, these messages are neither logged nor transformed, unless explicitly
294state otherwise. Status 101 messages indicate that the protocol is changing
295over the same connection and that haproxy must switch to tunnel mode, just as
296if a CONNECT had occurred. Then the Upgrade header would contain additional
297information about the type of protocol the connection is switching to.
Willy Tarreau816b9792009-09-15 21:25:21 +0200298
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200299
3001.3.1. The Response line
301------------------------
302
303Line 1 is the "response line". It is always composed of 3 fields :
304
305 - a version tag : HTTP/1.1
306 - a status code : 200
307 - a reason : OK
308
309The status code is always 3-digit. The first digit indicates a general status :
Willy Tarreau816b9792009-09-15 21:25:21 +0200310 - 1xx = informational message to be skipped (eg: 100, 101)
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200311 - 2xx = OK, content is following (eg: 200, 206)
312 - 3xx = OK, no content following (eg: 302, 304)
313 - 4xx = error caused by the client (eg: 401, 403, 404)
314 - 5xx = error caused by the server (eg: 500, 502, 503)
315
316Please refer to RFC2616 for the detailed meaning of all such codes. The
Willy Tarreaud72758d2010-01-12 10:42:19 +0100317"reason" field is just a hint, but is not parsed by clients. Anything can be
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200318found there, but it's a common practice to respect the well-established
319messages. It can be composed of one or multiple words, such as "OK", "Found",
320or "Authentication Required".
321
322Haproxy may emit the following status codes by itself :
323
324 Code When / reason
325 200 access to stats page, and when replying to monitoring requests
326 301 when performing a redirection, depending on the configured code
327 302 when performing a redirection, depending on the configured code
328 303 when performing a redirection, depending on the configured code
Willy Tarreaub67fdc42013-03-29 19:28:11 +0100329 307 when performing a redirection, depending on the configured code
330 308 when performing a redirection, depending on the configured code
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200331 400 for an invalid or too large request
332 401 when an authentication is required to perform the action (when
333 accessing the stats page)
334 403 when a request is forbidden by a "block" ACL or "reqdeny" filter
335 408 when the request timeout strikes before the request is complete
336 500 when haproxy encounters an unrecoverable internal error, such as a
337 memory allocation failure, which should never happen
338 502 when the server returns an empty, invalid or incomplete response, or
339 when an "rspdeny" filter blocks the response.
340 503 when no server was available to handle the request, or in response to
341 monitoring requests which match the "monitor fail" condition
342 504 when the response timeout strikes before the server responds
343
344The error 4xx and 5xx codes above may be customized (see "errorloc" in section
3454.2).
346
347
3481.3.2. The response headers
349---------------------------
350
351Response headers work exactly like request headers, and as such, HAProxy uses
352the same parsing function for both. Please refer to paragraph 1.2.2 for more
353details.
354
355
3562. Configuring HAProxy
357----------------------
358
3592.1. Configuration file format
360------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +0200361
362HAProxy's configuration process involves 3 major sources of parameters :
363
364 - the arguments from the command-line, which always take precedence
365 - the "global" section, which sets process-wide parameters
366 - the proxies sections which can take form of "defaults", "listen",
367 "frontend" and "backend".
368
Willy Tarreau0ba27502007-12-24 16:55:16 +0100369The configuration file syntax consists in lines beginning with a keyword
370referenced in this manual, optionally followed by one or several parameters
William Lallemandf9873ba2015-05-05 17:37:14 +0200371delimited by spaces.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100372
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200373
William Lallemandf9873ba2015-05-05 17:37:14 +02003742.2. Quoting and escaping
375-------------------------
376
377HAProxy's configuration introduces a quoting and escaping system similar to
378many programming languages. The configuration file supports 3 types: escaping
379with a backslash, weak quoting with double quotes, and strong quoting with
380single quotes.
381
382If spaces have to be entered in strings, then they must be escaped by preceding
383them by a backslash ('\') or by quoting them. Backslashes also have to be
384escaped by doubling or strong quoting them.
385
386Escaping is achieved by preceding a special character by a backslash ('\'):
387
388 \ to mark a space and differentiate it from a delimiter
389 \# to mark a hash and differentiate it from a comment
390 \\ to use a backslash
391 \' to use a single quote and differentiate it from strong quoting
392 \" to use a double quote and differentiate it from weak quoting
393
394Weak quoting is achieved by using double quotes (""). Weak quoting prevents
395the interpretation of:
396
397 space as a parameter separator
398 ' single quote as a strong quoting delimiter
399 # hash as a comment start
400
William Lallemandb2f07452015-05-12 14:27:13 +0200401Weak quoting permits the interpretation of variables, if you want to use a non
402-interpreted dollar within a double quoted string, you should escape it with a
403backslash ("\$"), it does not work outside weak quoting.
404
405Interpretation of escaping and special characters are not prevented by weak
William Lallemandf9873ba2015-05-05 17:37:14 +0200406quoting.
407
408Strong quoting is achieved by using single quotes (''). Inside single quotes,
409nothing is interpreted, it's the efficient way to quote regexes.
410
411Quoted and escaped strings are replaced in memory by their interpreted
412equivalent, it allows you to perform concatenation.
413
414 Example:
415 # those are equivalents:
416 log-format %{+Q}o\ %t\ %s\ %{-Q}r
417 log-format "%{+Q}o %t %s %{-Q}r"
418 log-format '%{+Q}o %t %s %{-Q}r'
419 log-format "%{+Q}o %t"' %s %{-Q}r'
420 log-format "%{+Q}o %t"' %s'\ %{-Q}r
421
422 # those are equivalents:
423 reqrep "^([^\ :]*)\ /static/(.*)" \1\ /\2
424 reqrep "^([^ :]*)\ /static/(.*)" '\1 /\2'
425 reqrep "^([^ :]*)\ /static/(.*)" "\1 /\2"
426 reqrep "^([^ :]*)\ /static/(.*)" "\1\ /\2"
427
428
William Lallemandb2f07452015-05-12 14:27:13 +02004292.3. Environment variables
430--------------------------
431
432HAProxy's configuration supports environment variables. Those variables are
433interpreted only within double quotes. Variables are expanded during the
434configuration parsing. Variable names must be preceded by a dollar ("$") and
435optionally enclosed with braces ("{}") similarly to what is done in Bourne
436shell. Variable names can contain alphanumerical characters or the character
437underscore ("_") but should not start with a digit.
438
439 Example:
440
441 bind "fd@${FD_APP1}"
442
443 log "${LOCAL_SYSLOG}:514" local0 notice # send to local server
444
445 user "$HAPROXY_USER"
446
447
4482.4. Time format
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200449----------------
450
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +0100451Some parameters involve values representing time, such as timeouts. These
Willy Tarreau0ba27502007-12-24 16:55:16 +0100452values are generally expressed in milliseconds (unless explicitly stated
453otherwise) but may be expressed in any other unit by suffixing the unit to the
454numeric value. It is important to consider this because it will not be repeated
455for every keyword. Supported units are :
456
457 - us : microseconds. 1 microsecond = 1/1000000 second
458 - ms : milliseconds. 1 millisecond = 1/1000 second. This is the default.
459 - s : seconds. 1s = 1000ms
460 - m : minutes. 1m = 60s = 60000ms
461 - h : hours. 1h = 60m = 3600s = 3600000ms
462 - d : days. 1d = 24h = 1440m = 86400s = 86400000ms
463
464
William Lallemandf9873ba2015-05-05 17:37:14 +02004652.4. Examples
Patrick Mezard35da19c2010-06-12 17:02:47 +0200466-------------
467
468 # Simple configuration for an HTTP proxy listening on port 80 on all
469 # interfaces and forwarding requests to a single backend "servers" with a
470 # single server "server1" listening on 127.0.0.1:8000
471 global
472 daemon
473 maxconn 256
474
475 defaults
476 mode http
477 timeout connect 5000ms
478 timeout client 50000ms
479 timeout server 50000ms
480
481 frontend http-in
482 bind *:80
483 default_backend servers
484
485 backend servers
486 server server1 127.0.0.1:8000 maxconn 32
487
488
489 # The same configuration defined with a single listen block. Shorter but
490 # less expressive, especially in HTTP mode.
491 global
492 daemon
493 maxconn 256
494
495 defaults
496 mode http
497 timeout connect 5000ms
498 timeout client 50000ms
499 timeout server 50000ms
500
501 listen http-in
502 bind *:80
503 server server1 127.0.0.1:8000 maxconn 32
504
505
506Assuming haproxy is in $PATH, test these configurations in a shell with:
507
Willy Tarreauccb289d2010-12-11 20:19:38 +0100508 $ sudo haproxy -f configuration.conf -c
Patrick Mezard35da19c2010-06-12 17:02:47 +0200509
510
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005113. Global parameters
Willy Tarreau6a06a402007-07-15 20:15:28 +0200512--------------------
513
514Parameters in the "global" section are process-wide and often OS-specific. They
515are generally set once for all and do not need being changed once correct. Some
516of them have command-line equivalents.
517
518The following keywords are supported in the "global" section :
519
520 * Process management and security
Emeric Brunc8e8d122012-10-02 18:42:10 +0200521 - ca-base
Willy Tarreau6a06a402007-07-15 20:15:28 +0200522 - chroot
Emeric Brunc8e8d122012-10-02 18:42:10 +0200523 - crt-base
Willy Tarreau6a06a402007-07-15 20:15:28 +0200524 - daemon
Simon Horman98637e52014-06-20 12:30:16 +0900525 - external-check
Willy Tarreau6a06a402007-07-15 20:15:28 +0200526 - gid
527 - group
528 - log
Joe Williamsdf5b38f2010-12-29 17:05:48 +0100529 - log-send-hostname
Willy Tarreau6a06a402007-07-15 20:15:28 +0200530 - nbproc
531 - pidfile
532 - uid
533 - ulimit-n
534 - user
Willy Tarreaufbee7132007-10-18 13:53:22 +0200535 - stats
Emeric Brun850efd52014-01-29 12:24:34 +0100536 - ssl-server-verify
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +0200537 - node
538 - description
Willy Tarreauceb24bc2010-11-09 12:46:41 +0100539 - unix-bind
Willy Tarreaud72758d2010-01-12 10:42:19 +0100540
Willy Tarreau6a06a402007-07-15 20:15:28 +0200541 * Performance tuning
Willy Tarreau1746eec2014-04-25 10:46:47 +0200542 - max-spread-checks
Willy Tarreau6a06a402007-07-15 20:15:28 +0200543 - maxconn
Willy Tarreau81c25d02011-09-07 15:17:21 +0200544 - maxconnrate
William Lallemandd85f9172012-11-09 17:05:39 +0100545 - maxcomprate
William Lallemand072a2bf2012-11-20 17:01:01 +0100546 - maxcompcpuusage
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100547 - maxpipes
Willy Tarreau93e7c002013-10-07 18:51:07 +0200548 - maxsessrate
Willy Tarreau403edff2012-09-06 11:58:37 +0200549 - maxsslconn
Willy Tarreaue43d5322013-10-07 20:01:52 +0200550 - maxsslrate
Willy Tarreau6a06a402007-07-15 20:15:28 +0200551 - noepoll
552 - nokqueue
553 - nopoll
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100554 - nosplice
Jarno Huuskonen0e82b922014-04-12 18:22:19 +0300555 - nogetaddrinfo
Willy Tarreaufe255b72007-10-14 23:09:26 +0200556 - spread-checks
Willy Tarreau27a674e2009-08-17 07:23:33 +0200557 - tune.bufsize
Willy Tarreau43961d52010-10-04 20:39:20 +0200558 - tune.chksize
William Lallemandf3747832012-11-09 12:33:10 +0100559 - tune.comp.maxlevel
Willy Tarreau193b8c62012-11-22 00:17:38 +0100560 - tune.http.cookielen
Willy Tarreauac1932d2011-10-24 19:14:41 +0200561 - tune.http.maxhdr
Willy Tarreau7e312732014-02-12 16:35:14 +0100562 - tune.idletimer
Thierry FOURNIER90da1912015-03-05 11:17:06 +0100563 - tune.lua.forced-yield
Willy Tarreau32f61e22015-03-18 17:54:59 +0100564 - tune.lua.maxmem
Thierry FOURNIER90da1912015-03-05 11:17:06 +0100565 - tune.lua.session-timeout
566 - tune.lua.task-timeout
Willy Tarreaua0250ba2008-01-06 11:22:57 +0100567 - tune.maxaccept
568 - tune.maxpollevents
Willy Tarreau27a674e2009-08-17 07:23:33 +0200569 - tune.maxrewrite
Willy Tarreauf3045d22015-04-29 16:24:50 +0200570 - tune.pattern.cache-size
Willy Tarreaubd9a0a72011-10-23 21:14:29 +0200571 - tune.pipesize
Willy Tarreaue803de22010-01-21 17:43:04 +0100572 - tune.rcvbuf.client
573 - tune.rcvbuf.server
574 - tune.sndbuf.client
575 - tune.sndbuf.server
Willy Tarreau6ec58db2012-11-16 16:32:15 +0100576 - tune.ssl.cachesize
Willy Tarreaubfd59462013-02-21 07:46:09 +0100577 - tune.ssl.lifetime
Emeric Brun8dc60392014-05-09 13:52:00 +0200578 - tune.ssl.force-private-cache
Willy Tarreaubfd59462013-02-21 07:46:09 +0100579 - tune.ssl.maxrecord
Remi Gacognef46cd6e2014-06-12 14:58:40 +0200580 - tune.ssl.default-dh-param
William Lallemanda509e4c2012-11-07 16:54:34 +0100581 - tune.zlib.memlevel
582 - tune.zlib.windowsize
Willy Tarreaud72758d2010-01-12 10:42:19 +0100583
Willy Tarreau6a06a402007-07-15 20:15:28 +0200584 * Debugging
585 - debug
586 - quiet
Willy Tarreau6a06a402007-07-15 20:15:28 +0200587
588
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005893.1. Process management and security
Willy Tarreau6a06a402007-07-15 20:15:28 +0200590------------------------------------
591
Emeric Brunc8e8d122012-10-02 18:42:10 +0200592ca-base <dir>
593 Assigns a default directory to fetch SSL CA certificates and CRLs from when a
Emeric Brunfd33a262012-10-11 16:28:27 +0200594 relative path is used with "ca-file" or "crl-file" directives. Absolute
595 locations specified in "ca-file" and "crl-file" prevail and ignore "ca-base".
Emeric Brunc8e8d122012-10-02 18:42:10 +0200596
Willy Tarreau6a06a402007-07-15 20:15:28 +0200597chroot <jail dir>
598 Changes current directory to <jail dir> and performs a chroot() there before
599 dropping privileges. This increases the security level in case an unknown
600 vulnerability would be exploited, since it would make it very hard for the
601 attacker to exploit the system. This only works when the process is started
602 with superuser privileges. It is important to ensure that <jail_dir> is both
603 empty and unwritable to anyone.
Willy Tarreaud72758d2010-01-12 10:42:19 +0100604
Willy Tarreaufc6c0322012-11-16 16:12:27 +0100605cpu-map <"all"|"odd"|"even"|process_num> <cpu-set>...
606 On Linux 2.6 and above, it is possible to bind a process to a specific CPU
607 set. This means that the process will never run on other CPUs. The "cpu-map"
608 directive specifies CPU sets for process sets. The first argument is the
Willy Tarreaua9db57e2013-01-18 11:29:29 +0100609 process number to bind. This process must have a number between 1 and 32 or
610 64, depending on the machine's word size, and any process IDs above nbproc
611 are ignored. It is possible to specify all processes at once using "all",
612 only odd numbers using "odd" or even numbers using "even", just like with the
613 "bind-process" directive. The second and forthcoming arguments are CPU sets.
614 Each CPU set is either a unique number between 0 and 31 or 63 or a range with
615 two such numbers delimited by a dash ('-'). Multiple CPU numbers or ranges
616 may be specified, and the processes will be allowed to bind to all of them.
617 Obviously, multiple "cpu-map" directives may be specified. Each "cpu-map"
618 directive will replace the previous ones when they overlap.
Willy Tarreaufc6c0322012-11-16 16:12:27 +0100619
Emeric Brunc8e8d122012-10-02 18:42:10 +0200620crt-base <dir>
621 Assigns a default directory to fetch SSL certificates from when a relative
622 path is used with "crtfile" directives. Absolute locations specified after
623 "crtfile" prevail and ignore "crt-base".
624
Willy Tarreau6a06a402007-07-15 20:15:28 +0200625daemon
626 Makes the process fork into background. This is the recommended mode of
627 operation. It is equivalent to the command line "-D" argument. It can be
628 disabled by the command line "-db" argument.
629
Simon Horman98637e52014-06-20 12:30:16 +0900630external-check
631 Allows the use of an external agent to perform health checks.
632 This is disabled by default as a security precaution.
633 See "option external-check".
634
Willy Tarreau6a06a402007-07-15 20:15:28 +0200635gid <number>
636 Changes the process' group ID to <number>. It is recommended that the group
637 ID is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
638 be started with a user belonging to this group, or with superuser privileges.
Michael Schererab012dd2013-01-12 18:35:19 +0100639 Note that if haproxy is started from a user having supplementary groups, it
640 will only be able to drop these groups if started with superuser privileges.
Willy Tarreau6a06a402007-07-15 20:15:28 +0200641 See also "group" and "uid".
Willy Tarreaud72758d2010-01-12 10:42:19 +0100642
Willy Tarreau6a06a402007-07-15 20:15:28 +0200643group <group name>
644 Similar to "gid" but uses the GID of group name <group name> from /etc/group.
645 See also "gid" and "user".
Willy Tarreaud72758d2010-01-12 10:42:19 +0100646
Willy Tarreau18324f52014-06-27 18:10:07 +0200647log <address> [len <length>] <facility> [max level [min level]]
Willy Tarreau6a06a402007-07-15 20:15:28 +0200648 Adds a global syslog server. Up to two global servers can be defined. They
649 will receive logs for startups and exits, as well as all logs from proxies
Robert Tsai81ae1952007-12-05 10:47:29 +0100650 configured with "log global".
651
652 <address> can be one of:
653
Willy Tarreau2769aa02007-12-27 18:26:09 +0100654 - An IPv4 address optionally followed by a colon and a UDP port. If
Robert Tsai81ae1952007-12-05 10:47:29 +0100655 no port is specified, 514 is used by default (the standard syslog
656 port).
657
David du Colombier24bb5f52011-03-17 10:40:23 +0100658 - An IPv6 address followed by a colon and optionally a UDP port. If
659 no port is specified, 514 is used by default (the standard syslog
660 port).
661
Robert Tsai81ae1952007-12-05 10:47:29 +0100662 - A filesystem path to a UNIX domain socket, keeping in mind
663 considerations for chroot (be sure the path is accessible inside
664 the chroot) and uid/gid (be sure the path is appropriately
665 writeable).
666
William Lallemandb2f07452015-05-12 14:27:13 +0200667 You may want to reference some environment variables in the address
668 parameter, see section 2.3 about environment variables.
Willy Tarreaudad36a32013-03-11 01:20:04 +0100669
Willy Tarreau18324f52014-06-27 18:10:07 +0200670 <length> is an optional maximum line length. Log lines larger than this value
671 will be truncated before being sent. The reason is that syslog
672 servers act differently on log line length. All servers support the
673 default value of 1024, but some servers simply drop larger lines
674 while others do log them. If a server supports long lines, it may
675 make sense to set this value here in order to avoid truncating long
676 lines. Similarly, if a server drops long lines, it is preferable to
677 truncate them before sending them. Accepted values are 80 to 65535
678 inclusive. The default value of 1024 is generally fine for all
679 standard usages. Some specific cases of long captures or
680 JSON-formated logs may require larger values.
681
Robert Tsai81ae1952007-12-05 10:47:29 +0100682 <facility> must be one of the 24 standard syslog facilities :
Willy Tarreau6a06a402007-07-15 20:15:28 +0200683
684 kern user mail daemon auth syslog lpr news
685 uucp cron auth2 ftp ntp audit alert cron2
686 local0 local1 local2 local3 local4 local5 local6 local7
687
688 An optional level can be specified to filter outgoing messages. By default,
Willy Tarreauf7edefa2009-05-10 17:20:05 +0200689 all messages are sent. If a maximum level is specified, only messages with a
690 severity at least as important as this level will be sent. An optional minimum
691 level can be specified. If it is set, logs emitted with a more severe level
692 than this one will be capped to this level. This is used to avoid sending
693 "emerg" messages on all terminals on some default syslog configurations.
694 Eight levels are known :
Willy Tarreau6a06a402007-07-15 20:15:28 +0200695
Cyril Bontédc4d9032012-04-08 21:57:39 +0200696 emerg alert crit err warning notice info debug
Willy Tarreau6a06a402007-07-15 20:15:28 +0200697
Joe Williamsdf5b38f2010-12-29 17:05:48 +0100698log-send-hostname [<string>]
699 Sets the hostname field in the syslog header. If optional "string" parameter
700 is set the header is set to the string contents, otherwise uses the hostname
701 of the system. Generally used if one is not relaying logs through an
702 intermediate syslog server or for simply customizing the hostname printed in
703 the logs.
704
Kevinm48936af2010-12-22 16:08:21 +0000705log-tag <string>
706 Sets the tag field in the syslog header to this string. It defaults to the
707 program name as launched from the command line, which usually is "haproxy".
708 Sometimes it can be useful to differentiate between multiple processes
Willy Tarreau094af4e2015-01-07 15:03:42 +0100709 running on the same host. See also the per-proxy "log-tag" directive.
Kevinm48936af2010-12-22 16:08:21 +0000710
Thierry FOURNIER90da1912015-03-05 11:17:06 +0100711lua-load <file>
712 This global directive loads and executes a Lua file. This directive can be
713 used multiple times.
714
Willy Tarreau6a06a402007-07-15 20:15:28 +0200715nbproc <number>
716 Creates <number> processes when going daemon. This requires the "daemon"
717 mode. By default, only one process is created, which is the recommended mode
718 of operation. For systems limited to small sets of file descriptors per
719 process, it may be needed to fork multiple daemons. USING MULTIPLE PROCESSES
720 IS HARDER TO DEBUG AND IS REALLY DISCOURAGED. See also "daemon".
721
722pidfile <pidfile>
723 Writes pids of all daemons into file <pidfile>. This option is equivalent to
724 the "-p" command line argument. The file must be accessible to the user
725 starting the process. See also "daemon".
726
Willy Tarreaua9db57e2013-01-18 11:29:29 +0100727stats bind-process [ all | odd | even | <number 1-64>[-<number 1-64>] ] ...
Willy Tarreau35b7b162012-10-22 23:17:18 +0200728 Limits the stats socket to a certain set of processes numbers. By default the
729 stats socket is bound to all processes, causing a warning to be emitted when
730 nbproc is greater than 1 because there is no way to select the target process
731 when connecting. However, by using this setting, it becomes possible to pin
732 the stats socket to a specific set of processes, typically the first one. The
733 warning will automatically be disabled when this setting is used, whatever
Willy Tarreaua9db57e2013-01-18 11:29:29 +0100734 the number of processes used. The maximum process ID depends on the machine's
Willy Tarreauae302532014-05-07 19:22:24 +0200735 word size (32 or 64). A better option consists in using the "process" setting
736 of the "stats socket" line to force the process on each line.
Willy Tarreau35b7b162012-10-22 23:17:18 +0200737
Willy Tarreau610f04b2014-02-13 11:36:41 +0100738ssl-default-bind-ciphers <ciphers>
739 This setting is only available when support for OpenSSL was built in. It sets
740 the default string describing the list of cipher algorithms ("cipher suite")
Jarno Huuskonen0e82b922014-04-12 18:22:19 +0300741 that are negotiated during the SSL/TLS handshake for all "bind" lines which
Willy Tarreau610f04b2014-02-13 11:36:41 +0100742 do not explicitly define theirs. The format of the string is defined in
743 "man 1 ciphers" from OpenSSL man pages, and can be for instance a string such
744 as "AES:ALL:!aNULL:!eNULL:+RC4:@STRENGTH" (without quotes). Please check the
745 "bind" keyword for more information.
746
Emeric Brun2c86cbf2014-10-30 15:56:50 +0100747ssl-default-bind-options [<option>]...
748 This setting is only available when support for OpenSSL was built in. It sets
749 default ssl-options to force on all "bind" lines. Please check the "bind"
750 keyword to see available options.
751
752 Example:
753 global
754 ssl-default-bind-options no-sslv3 no-tls-tickets
755
Willy Tarreau610f04b2014-02-13 11:36:41 +0100756ssl-default-server-ciphers <ciphers>
757 This setting is only available when support for OpenSSL was built in. It
758 sets the default string describing the list of cipher algorithms that are
Jarno Huuskonen0e82b922014-04-12 18:22:19 +0300759 negotiated during the SSL/TLS handshake with the server, for all "server"
Willy Tarreau610f04b2014-02-13 11:36:41 +0100760 lines which do not explicitly define theirs. The format of the string is
761 defined in "man 1 ciphers". Please check the "server" keyword for more
762 information.
763
Emeric Brun2c86cbf2014-10-30 15:56:50 +0100764ssl-default-server-options [<option>]...
765 This setting is only available when support for OpenSSL was built in. It sets
766 default ssl-options to force on all "server" lines. Please check the "server"
767 keyword to see available options.
768
Remi Gacogne47783ef2015-05-29 15:53:22 +0200769ssl-dh-param-file <file>
770 This setting is only available when support for OpenSSL was built in. It sets
771 the default DH parameters that are used during the SSL/TLS handshake when
772 ephemeral Diffie-Hellman (DHE) key exchange is used, for all "bind" lines
773 which do not explicitely define theirs. It will be overridden by custom DH
774 parameters found in a bind certificate file if any. If custom DH parameters
775 are not specified either by using ssl-dh-param-file or by setting them directly
776 in the certificate file, pre-generated DH parameters of the size specified
777 by tune.ssl.default-dh-param will be used. Custom parameters are known to be
778 more secure and therefore their use is recommended.
779 Custom DH parameters may be generated by using the OpenSSL command
780 "openssl dhparam <size>", where size should be at least 2048, as 1024-bit DH
781 parameters should not be considered secure anymore.
782
Emeric Brun850efd52014-01-29 12:24:34 +0100783ssl-server-verify [none|required]
784 The default behavior for SSL verify on servers side. If specified to 'none',
785 servers certificates are not verified. The default is 'required' except if
786 forced using cmdline option '-dV'.
787
Willy Tarreauabb175f2012-09-24 12:43:26 +0200788stats socket [<address:port>|<path>] [param*]
789 Binds a UNIX socket to <path> or a TCPv4/v6 address to <address:port>.
790 Connections to this socket will return various statistics outputs and even
791 allow some commands to be issued to change some runtime settings. Please
792 consult section 9.2 "Unix Socket commands" for more details.
Willy Tarreau6162db22009-10-10 17:13:00 +0200793
Willy Tarreauabb175f2012-09-24 12:43:26 +0200794 All parameters supported by "bind" lines are supported, for instance to
795 restrict access to some users or their access rights. Please consult
796 section 5.1 for more information.
Willy Tarreaufbee7132007-10-18 13:53:22 +0200797
798stats timeout <timeout, in milliseconds>
799 The default timeout on the stats socket is set to 10 seconds. It is possible
800 to change this value with "stats timeout". The value must be passed in
Willy Tarreaubefdff12007-12-02 22:27:38 +0100801 milliseconds, or be suffixed by a time unit among { us, ms, s, m, h, d }.
Willy Tarreaufbee7132007-10-18 13:53:22 +0200802
803stats maxconn <connections>
804 By default, the stats socket is limited to 10 concurrent connections. It is
805 possible to change this value with "stats maxconn".
806
Willy Tarreau6a06a402007-07-15 20:15:28 +0200807uid <number>
808 Changes the process' user ID to <number>. It is recommended that the user ID
809 is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
810 be started with superuser privileges in order to be able to switch to another
811 one. See also "gid" and "user".
812
813ulimit-n <number>
814 Sets the maximum number of per-process file-descriptors to <number>. By
815 default, it is automatically computed, so it is recommended not to use this
816 option.
817
Willy Tarreauceb24bc2010-11-09 12:46:41 +0100818unix-bind [ prefix <prefix> ] [ mode <mode> ] [ user <user> ] [ uid <uid> ]
819 [ group <group> ] [ gid <gid> ]
820
821 Fixes common settings to UNIX listening sockets declared in "bind" statements.
822 This is mainly used to simplify declaration of those UNIX sockets and reduce
823 the risk of errors, since those settings are most commonly required but are
824 also process-specific. The <prefix> setting can be used to force all socket
825 path to be relative to that directory. This might be needed to access another
826 component's chroot. Note that those paths are resolved before haproxy chroots
827 itself, so they are absolute. The <mode>, <user>, <uid>, <group> and <gid>
828 all have the same meaning as their homonyms used by the "bind" statement. If
829 both are specified, the "bind" statement has priority, meaning that the
830 "unix-bind" settings may be seen as process-wide default settings.
831
Willy Tarreau6a06a402007-07-15 20:15:28 +0200832user <user name>
833 Similar to "uid" but uses the UID of user name <user name> from /etc/passwd.
834 See also "uid" and "group".
835
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +0200836node <name>
837 Only letters, digits, hyphen and underscore are allowed, like in DNS names.
838
839 This statement is useful in HA configurations where two or more processes or
840 servers share the same IP address. By setting a different node-name on all
841 nodes, it becomes easy to immediately spot what server is handling the
842 traffic.
843
844description <text>
845 Add a text that describes the instance.
846
847 Please note that it is required to escape certain characters (# for example)
848 and this text is inserted into a html page so you should avoid using
849 "<" and ">" characters.
850
Willy Tarreau6a06a402007-07-15 20:15:28 +0200851
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008523.2. Performance tuning
Willy Tarreau6a06a402007-07-15 20:15:28 +0200853-----------------------
854
Willy Tarreau1746eec2014-04-25 10:46:47 +0200855max-spread-checks <delay in milliseconds>
856 By default, haproxy tries to spread the start of health checks across the
857 smallest health check interval of all the servers in a farm. The principle is
858 to avoid hammering services running on the same server. But when using large
859 check intervals (10 seconds or more), the last servers in the farm take some
860 time before starting to be tested, which can be a problem. This parameter is
861 used to enforce an upper bound on delay between the first and the last check,
862 even if the servers' check intervals are larger. When servers run with
863 shorter intervals, their intervals will be respected though.
864
Willy Tarreau6a06a402007-07-15 20:15:28 +0200865maxconn <number>
866 Sets the maximum per-process number of concurrent connections to <number>. It
867 is equivalent to the command-line argument "-n". Proxies will stop accepting
868 connections when this limit is reached. The "ulimit-n" parameter is
Willy Tarreau8274e102014-06-19 15:31:25 +0200869 automatically adjusted according to this value. See also "ulimit-n". Note:
870 the "select" poller cannot reliably use more than 1024 file descriptors on
871 some platforms. If your platform only supports select and reports "select
872 FAILED" on startup, you need to reduce maxconn until it works (slightly
Willy Tarreaud0256482015-01-15 21:45:22 +0100873 below 500 in general). If this value is not set, it will default to the value
874 set in DEFAULT_MAXCONN at build time (reported in haproxy -vv) if no memory
875 limit is enforced, or will be computed based on the memory limit, the buffer
876 size, memory allocated to compression, SSL cache size, and use or not of SSL
877 and the associated maxsslconn (which can also be automatic).
Willy Tarreau6a06a402007-07-15 20:15:28 +0200878
Willy Tarreau81c25d02011-09-07 15:17:21 +0200879maxconnrate <number>
880 Sets the maximum per-process number of connections per second to <number>.
881 Proxies will stop accepting connections when this limit is reached. It can be
882 used to limit the global capacity regardless of each frontend capacity. It is
883 important to note that this can only be used as a service protection measure,
884 as there will not necessarily be a fair share between frontends when the
885 limit is reached, so it's a good idea to also limit each frontend to some
886 value close to its expected share. Also, lowering tune.maxaccept can improve
887 fairness.
888
William Lallemandd85f9172012-11-09 17:05:39 +0100889maxcomprate <number>
890 Sets the maximum per-process input compression rate to <number> kilobytes
Jarno Huuskonen0e82b922014-04-12 18:22:19 +0300891 per second. For each session, if the maximum is reached, the compression
William Lallemandd85f9172012-11-09 17:05:39 +0100892 level will be decreased during the session. If the maximum is reached at the
893 beginning of a session, the session will not compress at all. If the maximum
894 is not reached, the compression level will be increased up to
895 tune.comp.maxlevel. A value of zero means there is no limit, this is the
896 default value.
897
William Lallemand072a2bf2012-11-20 17:01:01 +0100898maxcompcpuusage <number>
899 Sets the maximum CPU usage HAProxy can reach before stopping the compression
900 for new requests or decreasing the compression level of current requests.
901 It works like 'maxcomprate' but measures CPU usage instead of incoming data
902 bandwidth. The value is expressed in percent of the CPU used by haproxy. In
903 case of multiple processes (nbproc > 1), each process manages its individual
904 usage. A value of 100 disable the limit. The default value is 100. Setting
905 a lower value will prevent the compression work from slowing the whole
906 process down and from introducing high latencies.
907
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100908maxpipes <number>
909 Sets the maximum per-process number of pipes to <number>. Currently, pipes
910 are only used by kernel-based tcp splicing. Since a pipe contains two file
911 descriptors, the "ulimit-n" value will be increased accordingly. The default
912 value is maxconn/4, which seems to be more than enough for most heavy usages.
913 The splice code dynamically allocates and releases pipes, and can fall back
914 to standard copy, so setting this value too low may only impact performance.
915
Willy Tarreau93e7c002013-10-07 18:51:07 +0200916maxsessrate <number>
917 Sets the maximum per-process number of sessions per second to <number>.
918 Proxies will stop accepting connections when this limit is reached. It can be
919 used to limit the global capacity regardless of each frontend capacity. It is
920 important to note that this can only be used as a service protection measure,
921 as there will not necessarily be a fair share between frontends when the
922 limit is reached, so it's a good idea to also limit each frontend to some
923 value close to its expected share. Also, lowering tune.maxaccept can improve
924 fairness.
925
Willy Tarreau403edff2012-09-06 11:58:37 +0200926maxsslconn <number>
927 Sets the maximum per-process number of concurrent SSL connections to
928 <number>. By default there is no SSL-specific limit, which means that the
929 global maxconn setting will apply to all connections. Setting this limit
930 avoids having openssl use too much memory and crash when malloc returns NULL
931 (since it unfortunately does not reliably check for such conditions). Note
932 that the limit applies both to incoming and outgoing connections, so one
933 connection which is deciphered then ciphered accounts for 2 SSL connections.
Willy Tarreaud0256482015-01-15 21:45:22 +0100934 If this value is not set, but a memory limit is enforced, this value will be
935 automatically computed based on the memory limit, maxconn, the buffer size,
936 memory allocated to compression, SSL cache size, and use of SSL in either
937 frontends, backends or both. If neither maxconn nor maxsslconn are specified
938 when there is a memory limit, haproxy will automatically adjust these values
939 so that 100% of the connections can be made over SSL with no risk, and will
940 consider the sides where it is enabled (frontend, backend, both).
Willy Tarreau403edff2012-09-06 11:58:37 +0200941
Willy Tarreaue43d5322013-10-07 20:01:52 +0200942maxsslrate <number>
943 Sets the maximum per-process number of SSL sessions per second to <number>.
944 SSL listeners will stop accepting connections when this limit is reached. It
945 can be used to limit the global SSL CPU usage regardless of each frontend
946 capacity. It is important to note that this can only be used as a service
947 protection measure, as there will not necessarily be a fair share between
948 frontends when the limit is reached, so it's a good idea to also limit each
949 frontend to some value close to its expected share. It is also important to
950 note that the sessions are accounted before they enter the SSL stack and not
951 after, which also protects the stack against bad handshakes. Also, lowering
952 tune.maxaccept can improve fairness.
953
William Lallemand9d5f5482012-11-07 16:12:57 +0100954maxzlibmem <number>
955 Sets the maximum amount of RAM in megabytes per process usable by the zlib.
956 When the maximum amount is reached, future sessions will not compress as long
957 as RAM is unavailable. When sets to 0, there is no limit.
William Lallemande3a7d992012-11-20 11:25:20 +0100958 The default value is 0. The value is available in bytes on the UNIX socket
959 with "show info" on the line "MaxZlibMemUsage", the memory used by zlib is
960 "ZlibMemUsage" in bytes.
961
Willy Tarreau6a06a402007-07-15 20:15:28 +0200962noepoll
963 Disables the use of the "epoll" event polling system on Linux. It is
964 equivalent to the command-line argument "-de". The next polling system
Willy Tarreaue9f49e72012-11-11 17:42:00 +0100965 used will generally be "poll". See also "nopoll".
Willy Tarreau6a06a402007-07-15 20:15:28 +0200966
967nokqueue
968 Disables the use of the "kqueue" event polling system on BSD. It is
969 equivalent to the command-line argument "-dk". The next polling system
970 used will generally be "poll". See also "nopoll".
971
972nopoll
973 Disables the use of the "poll" event polling system. It is equivalent to the
974 command-line argument "-dp". The next polling system used will be "select".
Willy Tarreau0ba27502007-12-24 16:55:16 +0100975 It should never be needed to disable "poll" since it's available on all
Willy Tarreaue9f49e72012-11-11 17:42:00 +0100976 platforms supported by HAProxy. See also "nokqueue" and "noepoll".
Willy Tarreau6a06a402007-07-15 20:15:28 +0200977
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100978nosplice
979 Disables the use of kernel tcp splicing between sockets on Linux. It is
980 equivalent to the command line argument "-dS". Data will then be copied
981 using conventional and more portable recv/send calls. Kernel tcp splicing is
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +0100982 limited to some very recent instances of kernel 2.6. Most versions between
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100983 2.6.25 and 2.6.28 are buggy and will forward corrupted data, so they must not
984 be used. This option makes it easier to globally disable kernel splicing in
985 case of doubt. See also "option splice-auto", "option splice-request" and
986 "option splice-response".
987
Jarno Huuskonen0e82b922014-04-12 18:22:19 +0300988nogetaddrinfo
989 Disables the use of getaddrinfo(3) for name resolving. It is equivalent to
990 the command line argument "-dG". Deprecated gethostbyname(3) will be used.
991
Willy Tarreaufe255b72007-10-14 23:09:26 +0200992spread-checks <0..50, in percent>
Simon Hormand60d6912013-11-25 10:46:36 +0900993 Sometimes it is desirable to avoid sending agent and health checks to
994 servers at exact intervals, for instance when many logical servers are
995 located on the same physical server. With the help of this parameter, it
996 becomes possible to add some randomness in the check interval between 0
997 and +/- 50%. A value between 2 and 5 seems to show good results. The
998 default value remains at 0.
Willy Tarreaufe255b72007-10-14 23:09:26 +0200999
Willy Tarreau33cb0652014-12-23 22:52:37 +01001000tune.buffers.limit <number>
1001 Sets a hard limit on the number of buffers which may be allocated per process.
1002 The default value is zero which means unlimited. The minimum non-zero value
1003 will always be greater than "tune.buffers.reserve" and should ideally always
1004 be about twice as large. Forcing this value can be particularly useful to
1005 limit the amount of memory a process may take, while retaining a sane
1006 behaviour. When this limit is reached, sessions which need a buffer wait for
1007 another one to be released by another session. Since buffers are dynamically
1008 allocated and released, the waiting time is very short and not perceptible
1009 provided that limits remain reasonable. In fact sometimes reducing the limit
1010 may even increase performance by increasing the CPU cache's efficiency. Tests
1011 have shown good results on average HTTP traffic with a limit to 1/10 of the
1012 expected global maxconn setting, which also significantly reduces memory
1013 usage. The memory savings come from the fact that a number of connections
1014 will not allocate 2*tune.bufsize. It is best not to touch this value unless
1015 advised to do so by an haproxy core developer.
1016
Willy Tarreau1058ae72014-12-23 22:40:40 +01001017tune.buffers.reserve <number>
1018 Sets the number of buffers which are pre-allocated and reserved for use only
1019 during memory shortage conditions resulting in failed memory allocations. The
1020 minimum value is 2 and is also the default. There is no reason a user would
1021 want to change this value, it's mostly aimed at haproxy core developers.
1022
Willy Tarreau27a674e2009-08-17 07:23:33 +02001023tune.bufsize <number>
1024 Sets the buffer size to this size (in bytes). Lower values allow more
1025 sessions to coexist in the same amount of RAM, and higher values allow some
1026 applications with very large cookies to work. The default value is 16384 and
1027 can be changed at build time. It is strongly recommended not to change this
1028 from the default value, as very low values will break some services such as
1029 statistics, and values larger than default size will increase memory usage,
1030 possibly causing the system to run out of memory. At least the global maxconn
1031 parameter should be decreased by the same factor as this one is increased.
Dmitry Sivachenkof6f4f7b2012-10-21 18:10:25 +04001032 If HTTP request is larger than (tune.bufsize - tune.maxrewrite), haproxy will
1033 return HTTP 400 (Bad Request) error. Similarly if an HTTP response is larger
1034 than this size, haproxy will return HTTP 502 (Bad Gateway).
Willy Tarreau27a674e2009-08-17 07:23:33 +02001035
Willy Tarreau43961d52010-10-04 20:39:20 +02001036tune.chksize <number>
1037 Sets the check buffer size to this size (in bytes). Higher values may help
1038 find string or regex patterns in very large pages, though doing so may imply
1039 more memory and CPU usage. The default value is 16384 and can be changed at
1040 build time. It is not recommended to change this value, but to use better
1041 checks whenever possible.
1042
William Lallemandf3747832012-11-09 12:33:10 +01001043tune.comp.maxlevel <number>
1044 Sets the maximum compression level. The compression level affects CPU
1045 usage during compression. This value affects CPU usage during compression.
1046 Each session using compression initializes the compression algorithm with
1047 this value. The default value is 1.
1048
Willy Tarreau193b8c62012-11-22 00:17:38 +01001049tune.http.cookielen <number>
1050 Sets the maximum length of captured cookies. This is the maximum value that
1051 the "capture cookie xxx len yyy" will be allowed to take, and any upper value
1052 will automatically be truncated to this one. It is important not to set too
1053 high a value because all cookie captures still allocate this size whatever
1054 their configured value (they share a same pool). This value is per request
1055 per response, so the memory allocated is twice this value per connection.
1056 When not specified, the limit is set to 63 characters. It is recommended not
1057 to change this value.
1058
Willy Tarreauac1932d2011-10-24 19:14:41 +02001059tune.http.maxhdr <number>
1060 Sets the maximum number of headers in a request. When a request comes with a
1061 number of headers greater than this value (including the first line), it is
1062 rejected with a "400 Bad Request" status code. Similarly, too large responses
1063 are blocked with "502 Bad Gateway". The default value is 101, which is enough
1064 for all usages, considering that the widely deployed Apache server uses the
1065 same limit. It can be useful to push this limit further to temporarily allow
1066 a buggy application to work by the time it gets fixed. Keep in mind that each
1067 new header consumes 32bits of memory for each session, so don't push this
1068 limit too high.
1069
Willy Tarreau7e312732014-02-12 16:35:14 +01001070tune.idletimer <timeout>
1071 Sets the duration after which haproxy will consider that an empty buffer is
1072 probably associated with an idle stream. This is used to optimally adjust
1073 some packet sizes while forwarding large and small data alternatively. The
1074 decision to use splice() or to send large buffers in SSL is modulated by this
1075 parameter. The value is in milliseconds between 0 and 65535. A value of zero
1076 means that haproxy will not try to detect idle streams. The default is 1000,
1077 which seems to correctly detect end user pauses (eg: read a page before
1078 clicking). There should be not reason for changing this value. Please check
1079 tune.ssl.maxrecord below.
1080
Thierry FOURNIER90da1912015-03-05 11:17:06 +01001081tune.lua.forced-yield <number>
1082 This directive forces the Lua engine to execute a yield each <number> of
1083 instructions executed. This permits interruptng a long script and allows the
1084 HAProxy scheduler to process other tasks like accepting connections or
1085 forwarding traffic. The default value is 10000 instructions. If HAProxy often
1086 executes some Lua code but more reactivity is required, this value can be
1087 lowered. If the Lua code is quite long and its result is absolutely required
1088 to process the data, the <number> can be increased.
1089
Willy Tarreau32f61e22015-03-18 17:54:59 +01001090tune.lua.maxmem
1091 Sets the maximum amount of RAM in megabytes per process usable by Lua. By
1092 default it is zero which means unlimited. It is important to set a limit to
1093 ensure that a bug in a script will not result in the system running out of
1094 memory.
1095
Thierry FOURNIER90da1912015-03-05 11:17:06 +01001096tune.lua.session-timeout <timeout>
1097 This is the execution timeout for the Lua sessions. This is useful for
1098 preventing infinite loops or spending too much time in Lua. This timeout has a
1099 priority over other timeouts. For example, if this timeout is set to 4s and
1100 you run a 5s sleep, the code will be interrupted with an error after waiting
1101 4s.
1102
1103tune.lua.task-timeout <timeout>
1104 Purpose is the same as "tune.lua.session-timeout", but this timeout is
1105 dedicated to the tasks. By default, this timeout isn't set because a task may
1106 remain alive during of the lifetime of HAProxy. For example, a task used to
1107 check servers.
1108
Willy Tarreaua0250ba2008-01-06 11:22:57 +01001109tune.maxaccept <number>
Willy Tarreau16a21472012-11-19 12:39:59 +01001110 Sets the maximum number of consecutive connections a process may accept in a
1111 row before switching to other work. In single process mode, higher numbers
1112 give better performance at high connection rates. However in multi-process
1113 modes, keeping a bit of fairness between processes generally is better to
1114 increase performance. This value applies individually to each listener, so
1115 that the number of processes a listener is bound to is taken into account.
1116 This value defaults to 64. In multi-process mode, it is divided by twice
1117 the number of processes the listener is bound to. Setting this value to -1
1118 completely disables the limitation. It should normally not be needed to tweak
1119 this value.
Willy Tarreaua0250ba2008-01-06 11:22:57 +01001120
1121tune.maxpollevents <number>
1122 Sets the maximum amount of events that can be processed at once in a call to
1123 the polling system. The default value is adapted to the operating system. It
1124 has been noticed that reducing it below 200 tends to slightly decrease
1125 latency at the expense of network bandwidth, and increasing it above 200
1126 tends to trade latency for slightly increased bandwidth.
1127
Willy Tarreau27a674e2009-08-17 07:23:33 +02001128tune.maxrewrite <number>
1129 Sets the reserved buffer space to this size in bytes. The reserved space is
1130 used for header rewriting or appending. The first reads on sockets will never
1131 fill more than bufsize-maxrewrite. Historically it has defaulted to half of
1132 bufsize, though that does not make much sense since there are rarely large
1133 numbers of headers to add. Setting it too high prevents processing of large
1134 requests or responses. Setting it too low prevents addition of new headers
1135 to already large requests or to POST requests. It is generally wise to set it
1136 to about 1024. It is automatically readjusted to half of bufsize if it is
1137 larger than that. This means you don't have to worry about it when changing
1138 bufsize.
1139
Willy Tarreauf3045d22015-04-29 16:24:50 +02001140tune.pattern.cache-size <number>
1141 Sets the size of the pattern lookup cache to <number> entries. This is an LRU
1142 cache which reminds previous lookups and their results. It is used by ACLs
1143 and maps on slow pattern lookups, namely the ones using the "sub", "reg",
1144 "dir", "dom", "end", "bin" match methods as well as the case-insensitive
1145 strings. It applies to pattern expressions which means that it will be able
1146 to memorize the result of a lookup among all the patterns specified on a
1147 configuration line (including all those loaded from files). It automatically
1148 invalidates entries which are updated using HTTP actions or on the CLI. The
1149 default cache size is set to 10000 entries, which limits its footprint to
1150 about 5 MB on 32-bit systems and 8 MB on 64-bit systems. There is a very low
1151 risk of collision in this cache, which is in the order of the size of the
1152 cache divided by 2^64. Typically, at 10000 requests per second with the
1153 default cache size of 10000 entries, there's 1% chance that a brute force
1154 attack could cause a single collision after 60 years, or 0.1% after 6 years.
1155 This is considered much lower than the risk of a memory corruption caused by
1156 aging components. If this is not acceptable, the cache can be disabled by
1157 setting this parameter to 0.
1158
Willy Tarreaubd9a0a72011-10-23 21:14:29 +02001159tune.pipesize <number>
1160 Sets the kernel pipe buffer size to this size (in bytes). By default, pipes
1161 are the default size for the system. But sometimes when using TCP splicing,
1162 it can improve performance to increase pipe sizes, especially if it is
1163 suspected that pipes are not filled and that many calls to splice() are
1164 performed. This has an impact on the kernel's memory footprint, so this must
1165 not be changed if impacts are not understood.
1166
Willy Tarreaue803de22010-01-21 17:43:04 +01001167tune.rcvbuf.client <number>
1168tune.rcvbuf.server <number>
1169 Forces the kernel socket receive buffer size on the client or the server side
1170 to the specified value in bytes. This value applies to all TCP/HTTP frontends
1171 and backends. It should normally never be set, and the default size (0) lets
1172 the kernel autotune this value depending on the amount of available memory.
1173 However it can sometimes help to set it to very low values (eg: 4096) in
1174 order to save kernel memory by preventing it from buffering too large amounts
1175 of received data. Lower values will significantly increase CPU usage though.
1176
1177tune.sndbuf.client <number>
1178tune.sndbuf.server <number>
1179 Forces the kernel socket send buffer size on the client or the server side to
1180 the specified value in bytes. This value applies to all TCP/HTTP frontends
1181 and backends. It should normally never be set, and the default size (0) lets
1182 the kernel autotune this value depending on the amount of available memory.
1183 However it can sometimes help to set it to very low values (eg: 4096) in
1184 order to save kernel memory by preventing it from buffering too large amounts
1185 of received data. Lower values will significantly increase CPU usage though.
1186 Another use case is to prevent write timeouts with extremely slow clients due
1187 to the kernel waiting for a large part of the buffer to be read before
1188 notifying haproxy again.
1189
Willy Tarreau6ec58db2012-11-16 16:32:15 +01001190tune.ssl.cachesize <number>
Emeric Brunaf9619d2012-11-28 18:47:52 +01001191 Sets the size of the global SSL session cache, in a number of blocks. A block
1192 is large enough to contain an encoded session without peer certificate.
1193 An encoded session with peer certificate is stored in multiple blocks
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001194 depending on the size of the peer certificate. A block uses approximately
Emeric Brunaf9619d2012-11-28 18:47:52 +01001195 200 bytes of memory. The default value may be forced at build time, otherwise
1196 defaults to 20000. When the cache is full, the most idle entries are purged
1197 and reassigned. Higher values reduce the occurrence of such a purge, hence
1198 the number of CPU-intensive SSL handshakes by ensuring that all users keep
1199 their session as long as possible. All entries are pre-allocated upon startup
Emeric Brun22890a12012-12-28 14:41:32 +01001200 and are shared between all processes if "nbproc" is greater than 1. Setting
1201 this value to 0 disables the SSL session cache.
Willy Tarreau6ec58db2012-11-16 16:32:15 +01001202
Emeric Brun8dc60392014-05-09 13:52:00 +02001203tune.ssl.force-private-cache
1204 This boolean disables SSL session cache sharing between all processes. It
1205 should normally not be used since it will force many renegotiations due to
1206 clients hitting a random process. But it may be required on some operating
1207 systems where none of the SSL cache synchronization method may be used. In
1208 this case, adding a first layer of hash-based load balancing before the SSL
1209 layer might limit the impact of the lack of session sharing.
1210
Emeric Brun4f65bff2012-11-16 15:11:00 +01001211tune.ssl.lifetime <timeout>
1212 Sets how long a cached SSL session may remain valid. This time is expressed
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001213 in seconds and defaults to 300 (5 min). It is important to understand that it
Emeric Brun4f65bff2012-11-16 15:11:00 +01001214 does not guarantee that sessions will last that long, because if the cache is
1215 full, the longest idle sessions will be purged despite their configured
1216 lifetime. The real usefulness of this setting is to prevent sessions from
1217 being used for too long.
1218
Willy Tarreaubfd59462013-02-21 07:46:09 +01001219tune.ssl.maxrecord <number>
1220 Sets the maximum amount of bytes passed to SSL_write() at a time. Default
1221 value 0 means there is no limit. Over SSL/TLS, the client can decipher the
1222 data only once it has received a full record. With large records, it means
1223 that clients might have to download up to 16kB of data before starting to
1224 process them. Limiting the value can improve page load times on browsers
1225 located over high latency or low bandwidth networks. It is suggested to find
1226 optimal values which fit into 1 or 2 TCP segments (generally 1448 bytes over
1227 Ethernet with TCP timestamps enabled, or 1460 when timestamps are disabled),
1228 keeping in mind that SSL/TLS add some overhead. Typical values of 1419 and
1229 2859 gave good results during tests. Use "strace -e trace=write" to find the
Willy Tarreau7e312732014-02-12 16:35:14 +01001230 best value. Haproxy will automatically switch to this setting after an idle
1231 stream has been detected (see tune.idletimer above).
Willy Tarreaubfd59462013-02-21 07:46:09 +01001232
Remi Gacognef46cd6e2014-06-12 14:58:40 +02001233tune.ssl.default-dh-param <number>
1234 Sets the maximum size of the Diffie-Hellman parameters used for generating
1235 the ephemeral/temporary Diffie-Hellman key in case of DHE key exchange. The
1236 final size will try to match the size of the server's RSA (or DSA) key (e.g,
1237 a 2048 bits temporary DH key for a 2048 bits RSA key), but will not exceed
1238 this maximum value. Default value if 1024. Only 1024 or higher values are
1239 allowed. Higher values will increase the CPU load, and values greater than
1240 1024 bits are not supported by Java 7 and earlier clients. This value is not
Remi Gacogne47783ef2015-05-29 15:53:22 +02001241 used if static Diffie-Hellman parameters are supplied either directly
1242 in the certificate file or by using the ssl-dh-param-file parameter.
Remi Gacognef46cd6e2014-06-12 14:58:40 +02001243
William Lallemanda509e4c2012-11-07 16:54:34 +01001244tune.zlib.memlevel <number>
1245 Sets the memLevel parameter in zlib initialization for each session. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001246 defines how much memory should be allocated for the internal compression
William Lallemanda509e4c2012-11-07 16:54:34 +01001247 state. A value of 1 uses minimum memory but is slow and reduces compression
1248 ratio, a value of 9 uses maximum memory for optimal speed. Can be a value
1249 between 1 and 9. The default value is 8.
1250
1251tune.zlib.windowsize <number>
1252 Sets the window size (the size of the history buffer) as a parameter of the
1253 zlib initialization for each session. Larger values of this parameter result
1254 in better compression at the expense of memory usage. Can be a value between
1255 8 and 15. The default value is 15.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001256
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012573.3. Debugging
1258--------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02001259
1260debug
1261 Enables debug mode which dumps to stdout all exchanges, and disables forking
1262 into background. It is the equivalent of the command-line argument "-d". It
1263 should never be used in a production configuration since it may prevent full
1264 system startup.
1265
1266quiet
1267 Do not display any message during startup. It is equivalent to the command-
1268 line argument "-q".
1269
Emeric Brunf099e792010-09-27 12:05:28 +02001270
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +010012713.4. Userlists
1272--------------
1273It is possible to control access to frontend/backend/listen sections or to
1274http stats by allowing only authenticated and authorized users. To do this,
1275it is required to create at least one userlist and to define users.
1276
1277userlist <listname>
Cyril Bonté78caf842010-03-10 22:41:43 +01001278 Creates new userlist with name <listname>. Many independent userlists can be
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001279 used to store authentication & authorization data for independent customers.
1280
1281group <groupname> [users <user>,<user>,(...)]
Cyril Bonté78caf842010-03-10 22:41:43 +01001282 Adds group <groupname> to the current userlist. It is also possible to
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001283 attach users to this group by using a comma separated list of names
1284 proceeded by "users" keyword.
1285
Cyril Bontéf0c60612010-02-06 14:44:47 +01001286user <username> [password|insecure-password <password>]
1287 [groups <group>,<group>,(...)]
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001288 Adds user <username> to the current userlist. Both secure (encrypted) and
1289 insecure (unencrypted) passwords can be used. Encrypted passwords are
Cyril Bonté78caf842010-03-10 22:41:43 +01001290 evaluated using the crypt(3) function so depending of the system's
1291 capabilities, different algorithms are supported. For example modern Glibc
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001292 based Linux system supports MD5, SHA-256, SHA-512 and of course classic,
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001293 DES-based method of encrypting passwords.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001294
1295
1296 Example:
Cyril Bontéf0c60612010-02-06 14:44:47 +01001297 userlist L1
1298 group G1 users tiger,scott
1299 group G2 users xdb,scott
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001300
Cyril Bontéf0c60612010-02-06 14:44:47 +01001301 user tiger password $6$k6y3o.eP$JlKBx9za9667qe4(...)xHSwRv6J.C0/D7cV91
1302 user scott insecure-password elgato
1303 user xdb insecure-password hello
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001304
Cyril Bontéf0c60612010-02-06 14:44:47 +01001305 userlist L2
1306 group G1
1307 group G2
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001308
Cyril Bontéf0c60612010-02-06 14:44:47 +01001309 user tiger password $6$k6y3o.eP$JlKBx(...)xHSwRv6J.C0/D7cV91 groups G1
1310 user scott insecure-password elgato groups G1,G2
1311 user xdb insecure-password hello groups G2
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001312
1313 Please note that both lists are functionally identical.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001314
Emeric Brunf099e792010-09-27 12:05:28 +02001315
13163.5. Peers
Cyril Bontédc4d9032012-04-08 21:57:39 +02001317----------
Emeric Brunf099e792010-09-27 12:05:28 +02001318It is possible to synchronize server entries in stick tables between several
1319haproxy instances over TCP connections in a multi-master fashion. Each instance
1320pushes its local updates and insertions to remote peers. Server IDs are used to
1321identify servers remotely, so it is important that configurations look similar
1322or at least that the same IDs are forced on each server on all participants.
1323Interrupted exchanges are automatically detected and recovered from the last
1324known point. In addition, during a soft restart, the old process connects to
1325the new one using such a TCP connection to push all its entries before the new
1326process tries to connect to other peers. That ensures very fast replication
1327during a reload, it typically takes a fraction of a second even for large
1328tables.
1329
1330peers <peersect>
Jamie Gloudon801a0a32012-08-25 00:18:33 -04001331 Creates a new peer list with name <peersect>. It is an independent section,
Emeric Brunf099e792010-09-27 12:05:28 +02001332 which is referenced by one or more stick-tables.
1333
Willy Tarreau77e4bd12015-05-01 20:02:17 +02001334disabled
1335 Disables a peers section. It disables both listening and any synchronization
1336 related to this section. This is provided to disable synchronization of stick
1337 tables without having to comment out all "peers" references.
1338
1339enable
1340 This re-enables a disabled peers section which was previously disabled.
1341
Emeric Brunf099e792010-09-27 12:05:28 +02001342peer <peername> <ip>:<port>
1343 Defines a peer inside a peers section.
1344 If <peername> is set to the local peer name (by default hostname, or forced
1345 using "-L" command line option), haproxy will listen for incoming remote peer
1346 connection on <ip>:<port>. Otherwise, <ip>:<port> defines where to connect to
1347 to join the remote peer, and <peername> is used at the protocol level to
1348 identify and validate the remote peer on the server side.
1349
1350 During a soft restart, local peer <ip>:<port> is used by the old instance to
1351 connect the new one and initiate a complete replication (teaching process).
1352
1353 It is strongly recommended to have the exact same peers declaration on all
1354 peers and to only rely on the "-L" command line argument to change the local
1355 peer name. This makes it easier to maintain coherent configuration files
1356 across all peers.
1357
William Lallemandb2f07452015-05-12 14:27:13 +02001358 You may want to reference some environment variables in the address
1359 parameter, see section 2.3 about environment variables.
Willy Tarreaudad36a32013-03-11 01:20:04 +01001360
Cyril Bontédc4d9032012-04-08 21:57:39 +02001361 Example:
Emeric Brunf099e792010-09-27 12:05:28 +02001362 peers mypeers
Willy Tarreauf7b30a92010-12-06 22:59:17 +01001363 peer haproxy1 192.168.0.1:1024
1364 peer haproxy2 192.168.0.2:1024
1365 peer haproxy3 10.2.0.1:1024
Emeric Brunf099e792010-09-27 12:05:28 +02001366
1367 backend mybackend
1368 mode tcp
1369 balance roundrobin
1370 stick-table type ip size 20k peers mypeers
1371 stick on src
1372
Willy Tarreauf7b30a92010-12-06 22:59:17 +01001373 server srv1 192.168.0.30:80
1374 server srv2 192.168.0.31:80
Emeric Brunf099e792010-09-27 12:05:28 +02001375
1376
Simon Horman51a1cf62015-02-03 13:00:44 +090013773.6. Mailers
1378------------
1379It is possible to send email alerts when the state of servers changes.
1380If configured email alerts are sent to each mailer that is configured
1381in a mailers section. Email is sent to mailers using SMTP.
1382
1383mailer <mailersect>
1384 Creates a new mailer list with the name <mailersect>. It is an
1385 independent section which is referenced by one or more proxies.
1386
1387mailer <mailername> <ip>:<port>
1388 Defines a mailer inside a mailers section.
1389
1390 Example:
1391 mailers mymailers
1392 mailer smtp1 192.168.0.1:587
1393 mailer smtp2 192.168.0.2:587
1394
1395 backend mybackend
1396 mode tcp
1397 balance roundrobin
1398
1399 email-alert mailers mymailers
1400 email-alert from test1@horms.org
1401 email-alert to test2@horms.org
1402
1403 server srv1 192.168.0.30:80
1404 server srv2 192.168.0.31:80
1405
1406
Willy Tarreauc57f0e22009-05-10 13:12:33 +020014074. Proxies
Willy Tarreau6a06a402007-07-15 20:15:28 +02001408----------
Willy Tarreau0ba27502007-12-24 16:55:16 +01001409
Willy Tarreau6a06a402007-07-15 20:15:28 +02001410Proxy configuration can be located in a set of sections :
William Lallemand6e62fb62015-04-28 16:55:23 +02001411 - defaults [<name>]
Willy Tarreau6a06a402007-07-15 20:15:28 +02001412 - frontend <name>
1413 - backend <name>
1414 - listen <name>
1415
1416A "defaults" section sets default parameters for all other sections following
1417its declaration. Those default parameters are reset by the next "defaults"
1418section. See below for the list of parameters which can be set in a "defaults"
Willy Tarreau0ba27502007-12-24 16:55:16 +01001419section. The name is optional but its use is encouraged for better readability.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001420
1421A "frontend" section describes a set of listening sockets accepting client
1422connections.
1423
1424A "backend" section describes a set of servers to which the proxy will connect
1425to forward incoming connections.
1426
1427A "listen" section defines a complete proxy with its frontend and backend
1428parts combined in one section. It is generally useful for TCP-only traffic.
1429
Willy Tarreau0ba27502007-12-24 16:55:16 +01001430All proxy names must be formed from upper and lower case letters, digits,
1431'-' (dash), '_' (underscore) , '.' (dot) and ':' (colon). ACL names are
1432case-sensitive, which means that "www" and "WWW" are two different proxies.
1433
1434Historically, all proxy names could overlap, it just caused troubles in the
1435logs. Since the introduction of content switching, it is mandatory that two
1436proxies with overlapping capabilities (frontend/backend) have different names.
1437However, it is still permitted that a frontend and a backend share the same
1438name, as this configuration seems to be commonly encountered.
1439
1440Right now, two major proxy modes are supported : "tcp", also known as layer 4,
1441and "http", also known as layer 7. In layer 4 mode, HAProxy simply forwards
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001442bidirectional traffic between two sides. In layer 7 mode, HAProxy analyzes the
Willy Tarreau0ba27502007-12-24 16:55:16 +01001443protocol, and can interact with it by allowing, blocking, switching, adding,
1444modifying, or removing arbitrary contents in requests or responses, based on
1445arbitrary criteria.
1446
Willy Tarreau70dffda2014-01-30 03:07:23 +01001447In HTTP mode, the processing applied to requests and responses flowing over
1448a connection depends in the combination of the frontend's HTTP options and
1449the backend's. HAProxy supports 5 connection modes :
1450
1451 - KAL : keep alive ("option http-keep-alive") which is the default mode : all
1452 requests and responses are processed, and connections remain open but idle
1453 between responses and new requests.
1454
1455 - TUN: tunnel ("option http-tunnel") : this was the default mode for versions
1456 1.0 to 1.5-dev21 : only the first request and response are processed, and
1457 everything else is forwarded with no analysis at all. This mode should not
1458 be used as it creates lots of trouble with logging and HTTP processing.
1459
1460 - PCL: passive close ("option httpclose") : exactly the same as tunnel mode,
1461 but with "Connection: close" appended in both directions to try to make
1462 both ends close after the first request/response exchange.
1463
1464 - SCL: server close ("option http-server-close") : the server-facing
1465 connection is closed after the end of the response is received, but the
1466 client-facing connection remains open.
1467
1468 - FCL: forced close ("option forceclose") : the connection is actively closed
1469 after the end of the response.
1470
1471The effective mode that will be applied to a connection passing through a
1472frontend and a backend can be determined by both proxy modes according to the
1473following matrix, but in short, the modes are symmetric, keep-alive is the
1474weakest option and force close is the strongest.
1475
1476 Backend mode
1477
1478 | KAL | TUN | PCL | SCL | FCL
1479 ----+-----+-----+-----+-----+----
1480 KAL | KAL | TUN | PCL | SCL | FCL
1481 ----+-----+-----+-----+-----+----
1482 TUN | TUN | TUN | PCL | SCL | FCL
1483 Frontend ----+-----+-----+-----+-----+----
1484 mode PCL | PCL | PCL | PCL | FCL | FCL
1485 ----+-----+-----+-----+-----+----
1486 SCL | SCL | SCL | FCL | SCL | FCL
1487 ----+-----+-----+-----+-----+----
1488 FCL | FCL | FCL | FCL | FCL | FCL
1489
Willy Tarreau0ba27502007-12-24 16:55:16 +01001490
Willy Tarreau70dffda2014-01-30 03:07:23 +01001491
Willy Tarreauc57f0e22009-05-10 13:12:33 +020014924.1. Proxy keywords matrix
1493--------------------------
Willy Tarreau0ba27502007-12-24 16:55:16 +01001494
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001495The following list of keywords is supported. Most of them may only be used in a
1496limited set of section types. Some of them are marked as "deprecated" because
1497they are inherited from an old syntax which may be confusing or functionally
1498limited, and there are new recommended keywords to replace them. Keywords
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001499marked with "(*)" can be optionally inverted using the "no" prefix, eg. "no
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001500option contstats". This makes sense when the option has been enabled by default
Willy Tarreau3842f002009-06-14 11:39:52 +02001501and must be disabled for a specific instance. Such options may also be prefixed
1502with "default" in order to restore default settings regardless of what has been
1503specified in a previous "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001504
Willy Tarreau6a06a402007-07-15 20:15:28 +02001505
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001506 keyword defaults frontend listen backend
1507------------------------------------+----------+----------+---------+---------
1508acl - X X X
1509appsession - - X X
1510backlog X X X -
1511balance X - X X
1512bind - X X -
1513bind-process X X X X
1514block - X X X
1515capture cookie - X X -
1516capture request header - X X -
1517capture response header - X X -
1518clitimeout (deprecated) X X X -
William Lallemand82fe75c2012-10-23 10:25:10 +02001519compression X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001520contimeout (deprecated) X - X X
1521cookie X - X X
Thierry FOURNIERa0a1b752015-05-26 17:44:32 +02001522declare capture - X X -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001523default-server X - X X
1524default_backend X X X -
1525description - X X X
1526disabled X X X X
1527dispatch - - X X
Simon Horman51a1cf62015-02-03 13:00:44 +09001528email-alert from X X X X
Simon Horman64e34162015-02-06 11:11:57 +09001529email-alert level X X X X
Simon Horman51a1cf62015-02-03 13:00:44 +09001530email-alert mailers X X X X
1531email-alert myhostname X X X X
1532email-alert to X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001533enabled X X X X
1534errorfile X X X X
1535errorloc X X X X
1536errorloc302 X X X X
1537-- keyword -------------------------- defaults - frontend - listen -- backend -
1538errorloc303 X X X X
Cyril Bonté0d4bf012010-04-25 23:21:46 +02001539force-persist - X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001540fullconn X - X X
1541grace X X X X
1542hash-type X - X X
1543http-check disable-on-404 X - X X
Willy Tarreaubd741542010-03-16 18:46:54 +01001544http-check expect - - X X
Willy Tarreau7ab6aff2010-10-12 06:30:16 +02001545http-check send-state X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001546http-request - X X X
Willy Tarreaue365c0b2013-06-11 16:06:12 +02001547http-response - X X X
Baptiste Assmann2c42ef52013-10-09 21:57:02 +02001548http-send-name-header - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001549id - X X X
Cyril Bonté0d4bf012010-04-25 23:21:46 +02001550ignore-persist - X X X
William Lallemand0f99e342011-10-12 17:50:54 +02001551log (*) X X X X
Willy Tarreaufb4e7ea2015-01-07 14:55:17 +01001552log-format X X X -
Willy Tarreau094af4e2015-01-07 15:03:42 +01001553log-tag X X X X
Willy Tarreauc35362a2014-04-25 13:58:37 +02001554max-keep-alive-queue X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001555maxconn X X X -
1556mode X X X X
1557monitor fail - X X -
1558monitor-net X X X -
1559monitor-uri X X X -
1560option abortonclose (*) X - X X
1561option accept-invalid-http-request (*) X X X -
1562option accept-invalid-http-response (*) X - X X
1563option allbackups (*) X - X X
1564option checkcache (*) X - X X
1565option clitcpka (*) X X X -
1566option contstats (*) X X X -
1567option dontlog-normal (*) X X X -
1568option dontlognull (*) X X X -
1569option forceclose (*) X X X X
1570-- keyword -------------------------- defaults - frontend - listen -- backend -
1571option forwardfor X X X X
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02001572option http-buffer-request (*) X X X X
Willy Tarreau82649f92015-05-01 22:40:51 +02001573option http-ignore-probes (*) X X X -
Willy Tarreau16bfb022010-01-16 19:48:41 +01001574option http-keep-alive (*) X X X X
Willy Tarreau96e31212011-05-30 18:10:30 +02001575option http-no-delay (*) X X X X
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02001576option http-pretend-keepalive (*) X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001577option http-server-close (*) X X X X
Willy Tarreau02bce8b2014-01-30 00:15:28 +01001578option http-tunnel (*) X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001579option http-use-proxy-header (*) X X X -
1580option httpchk X - X X
1581option httpclose (*) X X X X
1582option httplog X X X X
1583option http_proxy (*) X X X X
Jamie Gloudon801a0a32012-08-25 00:18:33 -04001584option independent-streams (*) X X X X
Gabor Lekenyb4c81e42010-09-29 18:17:05 +02001585option ldap-check X - X X
Simon Horman98637e52014-06-20 12:30:16 +09001586option external-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001587option log-health-checks (*) X - X X
1588option log-separate-errors (*) X X X -
1589option logasap (*) X X X -
1590option mysql-check X - X X
Rauf Kuliyev38b41562011-01-04 15:14:13 +01001591option pgsql-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001592option nolinger (*) X X X X
1593option originalto X X X X
1594option persist (*) X - X X
1595option redispatch (*) X - X X
Hervé COMMOWICKec032d62011-08-05 16:23:48 +02001596option redis-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001597option smtpchk X - X X
1598option socket-stats (*) X X X -
1599option splice-auto (*) X X X X
1600option splice-request (*) X X X X
1601option splice-response (*) X X X X
1602option srvtcpka (*) X - X X
1603option ssl-hello-chk X - X X
1604-- keyword -------------------------- defaults - frontend - listen -- backend -
Willy Tarreaued179852013-12-16 01:07:00 +01001605option tcp-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001606option tcp-smart-accept (*) X X X -
1607option tcp-smart-connect (*) X - X X
1608option tcpka X X X X
1609option tcplog X X X X
1610option transparent (*) X - X X
Simon Horman98637e52014-06-20 12:30:16 +09001611external-check command X - X X
1612external-check path X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001613persist rdp-cookie X - X X
1614rate-limit sessions X X X -
1615redirect - X X X
1616redisp (deprecated) X - X X
1617redispatch (deprecated) X - X X
1618reqadd - X X X
1619reqallow - X X X
1620reqdel - X X X
1621reqdeny - X X X
1622reqiallow - X X X
1623reqidel - X X X
1624reqideny - X X X
1625reqipass - X X X
1626reqirep - X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001627reqitarpit - X X X
1628reqpass - X X X
1629reqrep - X X X
1630-- keyword -------------------------- defaults - frontend - listen -- backend -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001631reqtarpit - X X X
1632retries X - X X
1633rspadd - X X X
1634rspdel - X X X
1635rspdeny - X X X
1636rspidel - X X X
1637rspideny - X X X
1638rspirep - X X X
1639rsprep - X X X
1640server - - X X
1641source X - X X
1642srvtimeout (deprecated) X - X X
Cyril Bonté66c327d2010-10-12 00:14:37 +02001643stats admin - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001644stats auth X - X X
1645stats enable X - X X
1646stats hide-version X - X X
Cyril Bonté2be1b3f2010-09-30 23:46:30 +02001647stats http-request - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001648stats realm X - X X
1649stats refresh X - X X
1650stats scope X - X X
1651stats show-desc X - X X
1652stats show-legends X - X X
1653stats show-node X - X X
1654stats uri X - X X
1655-- keyword -------------------------- defaults - frontend - listen -- backend -
1656stick match - - X X
1657stick on - - X X
1658stick store-request - - X X
Willy Tarreaud8dc99f2011-07-01 11:33:25 +02001659stick store-response - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001660stick-table - - X X
Willy Tarreau938c7fe2014-04-25 14:21:39 +02001661tcp-check connect - - X X
1662tcp-check expect - - X X
1663tcp-check send - - X X
1664tcp-check send-binary - - X X
Willy Tarreaue9656522010-08-17 15:40:09 +02001665tcp-request connection - X X -
1666tcp-request content - X X X
Willy Tarreaua56235c2010-09-14 11:31:36 +02001667tcp-request inspect-delay - X X X
Emeric Brun0a3b67f2010-09-24 15:34:53 +02001668tcp-response content - - X X
1669tcp-response inspect-delay - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001670timeout check X - X X
1671timeout client X X X -
Willy Tarreau05cdd962014-05-10 14:30:07 +02001672timeout client-fin X X X -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001673timeout clitimeout (deprecated) X X X -
1674timeout connect X - X X
1675timeout contimeout (deprecated) X - X X
1676timeout http-keep-alive X X X X
1677timeout http-request X X X X
1678timeout queue X - X X
1679timeout server X - X X
Willy Tarreau05cdd962014-05-10 14:30:07 +02001680timeout server-fin X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001681timeout srvtimeout (deprecated) X - X X
1682timeout tarpit X X X X
Willy Tarreauce887fd2012-05-12 12:50:00 +02001683timeout tunnel X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001684transparent (deprecated) X - X X
William Lallemanda73203e2012-03-12 12:48:57 +01001685unique-id-format X X X -
1686unique-id-header X X X -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001687use_backend - X X -
Willy Tarreau4a5cade2012-04-05 21:09:48 +02001688use-server - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001689------------------------------------+----------+----------+---------+---------
1690 keyword defaults frontend listen backend
Willy Tarreau6a06a402007-07-15 20:15:28 +02001691
Willy Tarreau0ba27502007-12-24 16:55:16 +01001692
Willy Tarreauc57f0e22009-05-10 13:12:33 +020016934.2. Alphabetically sorted keywords reference
1694---------------------------------------------
Willy Tarreau0ba27502007-12-24 16:55:16 +01001695
1696This section provides a description of each keyword and its usage.
1697
1698
1699acl <aclname> <criterion> [flags] [operator] <value> ...
1700 Declare or complete an access list.
1701 May be used in sections : defaults | frontend | listen | backend
1702 no | yes | yes | yes
1703 Example:
1704 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
1705 acl invalid_src src_port 0:1023
1706 acl local_dst hdr(host) -i localhost
1707
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001708 See section 7 about ACL usage.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001709
1710
Cyril Bontéb21570a2009-11-29 20:04:48 +01001711appsession <cookie> len <length> timeout <holdtime>
1712 [request-learn] [prefix] [mode <path-parameters|query-string>]
Willy Tarreau0ba27502007-12-24 16:55:16 +01001713 Define session stickiness on an existing application cookie.
1714 May be used in sections : defaults | frontend | listen | backend
1715 no | no | yes | yes
1716 Arguments :
1717 <cookie> this is the name of the cookie used by the application and which
1718 HAProxy will have to learn for each new session.
1719
Cyril Bontéb21570a2009-11-29 20:04:48 +01001720 <length> this is the max number of characters that will be memorized and
Willy Tarreau0ba27502007-12-24 16:55:16 +01001721 checked in each cookie value.
1722
1723 <holdtime> this is the time after which the cookie will be removed from
1724 memory if unused. If no unit is specified, this time is in
1725 milliseconds.
1726
Cyril Bontébf47aeb2009-10-15 00:15:40 +02001727 request-learn
1728 If this option is specified, then haproxy will be able to learn
1729 the cookie found in the request in case the server does not
1730 specify any in response. This is typically what happens with
1731 PHPSESSID cookies, or when haproxy's session expires before
1732 the application's session and the correct server is selected.
1733 It is recommended to specify this option to improve reliability.
1734
Cyril Bontéb21570a2009-11-29 20:04:48 +01001735 prefix When this option is specified, haproxy will match on the cookie
1736 prefix (or URL parameter prefix). The appsession value is the
1737 data following this prefix.
1738
1739 Example :
1740 appsession ASPSESSIONID len 64 timeout 3h prefix
1741
1742 This will match the cookie ASPSESSIONIDXXXX=XXXXX,
1743 the appsession value will be XXXX=XXXXX.
1744
1745 mode This option allows to change the URL parser mode.
1746 2 modes are currently supported :
1747 - path-parameters :
1748 The parser looks for the appsession in the path parameters
1749 part (each parameter is separated by a semi-colon), which is
1750 convenient for JSESSIONID for example.
1751 This is the default mode if the option is not set.
1752 - query-string :
1753 In this mode, the parser will look for the appsession in the
1754 query string.
1755
Willy Tarreau0ba27502007-12-24 16:55:16 +01001756 When an application cookie is defined in a backend, HAProxy will check when
1757 the server sets such a cookie, and will store its value in a table, and
1758 associate it with the server's identifier. Up to <length> characters from
1759 the value will be retained. On each connection, haproxy will look for this
Cyril Bontéb21570a2009-11-29 20:04:48 +01001760 cookie both in the "Cookie:" headers, and as a URL parameter (depending on
1761 the mode used). If a known value is found, the client will be directed to the
1762 server associated with this value. Otherwise, the load balancing algorithm is
Willy Tarreau0ba27502007-12-24 16:55:16 +01001763 applied. Cookies are automatically removed from memory when they have been
1764 unused for a duration longer than <holdtime>.
1765
1766 The definition of an application cookie is limited to one per backend.
1767
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01001768 Note : Consider not using this feature in multi-process mode (nbproc > 1)
1769 unless you know what you do : memory is not shared between the
1770 processes, which can result in random behaviours.
1771
Willy Tarreau0ba27502007-12-24 16:55:16 +01001772 Example :
1773 appsession JSESSIONID len 52 timeout 3h
1774
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01001775 See also : "cookie", "capture cookie", "balance", "stick", "stick-table",
1776 "ignore-persist", "nbproc" and "bind-process".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001777
1778
Willy Tarreauc73ce2b2008-01-06 10:55:10 +01001779backlog <conns>
1780 Give hints to the system about the approximate listen backlog desired size
1781 May be used in sections : defaults | frontend | listen | backend
1782 yes | yes | yes | no
1783 Arguments :
1784 <conns> is the number of pending connections. Depending on the operating
1785 system, it may represent the number of already acknowledged
Cyril Bontédc4d9032012-04-08 21:57:39 +02001786 connections, of non-acknowledged ones, or both.
Willy Tarreauc73ce2b2008-01-06 10:55:10 +01001787
1788 In order to protect against SYN flood attacks, one solution is to increase
1789 the system's SYN backlog size. Depending on the system, sometimes it is just
1790 tunable via a system parameter, sometimes it is not adjustable at all, and
1791 sometimes the system relies on hints given by the application at the time of
1792 the listen() syscall. By default, HAProxy passes the frontend's maxconn value
1793 to the listen() syscall. On systems which can make use of this value, it can
1794 sometimes be useful to be able to specify a different value, hence this
1795 backlog parameter.
1796
1797 On Linux 2.4, the parameter is ignored by the system. On Linux 2.6, it is
1798 used as a hint and the system accepts up to the smallest greater power of
1799 two, and never more than some limits (usually 32768).
1800
1801 See also : "maxconn" and the target operating system's tuning guide.
1802
1803
Willy Tarreau0ba27502007-12-24 16:55:16 +01001804balance <algorithm> [ <arguments> ]
Willy Tarreau226071e2014-04-10 11:55:45 +02001805balance url_param <param> [check_post]
Willy Tarreau0ba27502007-12-24 16:55:16 +01001806 Define the load balancing algorithm to be used in a backend.
1807 May be used in sections : defaults | frontend | listen | backend
1808 yes | no | yes | yes
1809 Arguments :
1810 <algorithm> is the algorithm used to select a server when doing load
1811 balancing. This only applies when no persistence information
1812 is available, or when a connection is redispatched to another
1813 server. <algorithm> may be one of the following :
1814
1815 roundrobin Each server is used in turns, according to their weights.
1816 This is the smoothest and fairest algorithm when the server's
1817 processing time remains equally distributed. This algorithm
1818 is dynamic, which means that server weights may be adjusted
Willy Tarreau9757a382009-10-03 12:56:50 +02001819 on the fly for slow starts for instance. It is limited by
Godbacha34bdc02013-07-22 07:44:53 +08001820 design to 4095 active servers per backend. Note that in some
Willy Tarreau9757a382009-10-03 12:56:50 +02001821 large farms, when a server becomes up after having been down
1822 for a very short time, it may sometimes take a few hundreds
1823 requests for it to be re-integrated into the farm and start
1824 receiving traffic. This is normal, though very rare. It is
1825 indicated here in case you would have the chance to observe
1826 it, so that you don't worry.
1827
1828 static-rr Each server is used in turns, according to their weights.
1829 This algorithm is as similar to roundrobin except that it is
1830 static, which means that changing a server's weight on the
1831 fly will have no effect. On the other hand, it has no design
1832 limitation on the number of servers, and when a server goes
1833 up, it is always immediately reintroduced into the farm, once
1834 the full map is recomputed. It also uses slightly less CPU to
1835 run (around -1%).
Willy Tarreau0ba27502007-12-24 16:55:16 +01001836
Willy Tarreau2d2a7f82008-03-17 12:07:56 +01001837 leastconn The server with the lowest number of connections receives the
1838 connection. Round-robin is performed within groups of servers
1839 of the same load to ensure that all servers will be used. Use
1840 of this algorithm is recommended where very long sessions are
1841 expected, such as LDAP, SQL, TSE, etc... but is not very well
1842 suited for protocols using short sessions such as HTTP. This
1843 algorithm is dynamic, which means that server weights may be
1844 adjusted on the fly for slow starts for instance.
1845
Willy Tarreauf09c6602012-02-13 17:12:08 +01001846 first The first server with available connection slots receives the
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001847 connection. The servers are chosen from the lowest numeric
Willy Tarreauf09c6602012-02-13 17:12:08 +01001848 identifier to the highest (see server parameter "id"), which
1849 defaults to the server's position in the farm. Once a server
Willy Tarreau64559c52012-04-07 09:08:45 +02001850 reaches its maxconn value, the next server is used. It does
Willy Tarreauf09c6602012-02-13 17:12:08 +01001851 not make sense to use this algorithm without setting maxconn.
1852 The purpose of this algorithm is to always use the smallest
1853 number of servers so that extra servers can be powered off
1854 during non-intensive hours. This algorithm ignores the server
1855 weight, and brings more benefit to long session such as RDP
Willy Tarreau64559c52012-04-07 09:08:45 +02001856 or IMAP than HTTP, though it can be useful there too. In
1857 order to use this algorithm efficiently, it is recommended
1858 that a cloud controller regularly checks server usage to turn
1859 them off when unused, and regularly checks backend queue to
1860 turn new servers on when the queue inflates. Alternatively,
1861 using "http-check send-state" may inform servers on the load.
Willy Tarreauf09c6602012-02-13 17:12:08 +01001862
Willy Tarreau0ba27502007-12-24 16:55:16 +01001863 source The source IP address is hashed and divided by the total
1864 weight of the running servers to designate which server will
1865 receive the request. This ensures that the same client IP
1866 address will always reach the same server as long as no
1867 server goes down or up. If the hash result changes due to the
1868 number of running servers changing, many clients will be
1869 directed to a different server. This algorithm is generally
1870 used in TCP mode where no cookie may be inserted. It may also
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001871 be used on the Internet to provide a best-effort stickiness
Willy Tarreau0ba27502007-12-24 16:55:16 +01001872 to clients which refuse session cookies. This algorithm is
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02001873 static by default, which means that changing a server's
1874 weight on the fly will have no effect, but this can be
1875 changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001876
Oskar Stolc8dc41842012-05-19 10:19:54 +01001877 uri This algorithm hashes either the left part of the URI (before
1878 the question mark) or the whole URI (if the "whole" parameter
1879 is present) and divides the hash value by the total weight of
1880 the running servers. The result designates which server will
1881 receive the request. This ensures that the same URI will
1882 always be directed to the same server as long as no server
1883 goes up or down. This is used with proxy caches and
1884 anti-virus proxies in order to maximize the cache hit rate.
1885 Note that this algorithm may only be used in an HTTP backend.
1886 This algorithm is static by default, which means that
1887 changing a server's weight on the fly will have no effect,
1888 but this can be changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001889
Oskar Stolc8dc41842012-05-19 10:19:54 +01001890 This algorithm supports two optional parameters "len" and
Marek Majkowski9c30fc12008-04-27 23:25:55 +02001891 "depth", both followed by a positive integer number. These
1892 options may be helpful when it is needed to balance servers
1893 based on the beginning of the URI only. The "len" parameter
1894 indicates that the algorithm should only consider that many
1895 characters at the beginning of the URI to compute the hash.
1896 Note that having "len" set to 1 rarely makes sense since most
1897 URIs start with a leading "/".
1898
1899 The "depth" parameter indicates the maximum directory depth
1900 to be used to compute the hash. One level is counted for each
1901 slash in the request. If both parameters are specified, the
1902 evaluation stops when either is reached.
1903
Willy Tarreau0ba27502007-12-24 16:55:16 +01001904 url_param The URL parameter specified in argument will be looked up in
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001905 the query string of each HTTP GET request.
1906
1907 If the modifier "check_post" is used, then an HTTP POST
Cyril Bontédc4d9032012-04-08 21:57:39 +02001908 request entity will be searched for the parameter argument,
1909 when it is not found in a query string after a question mark
Willy Tarreau226071e2014-04-10 11:55:45 +02001910 ('?') in the URL. The message body will only start to be
1911 analyzed once either the advertised amount of data has been
1912 received or the request buffer is full. In the unlikely event
1913 that chunked encoding is used, only the first chunk is
Cyril Bontédc4d9032012-04-08 21:57:39 +02001914 scanned. Parameter values separated by a chunk boundary, may
Willy Tarreau226071e2014-04-10 11:55:45 +02001915 be randomly balanced if at all. This keyword used to support
1916 an optional <max_wait> parameter which is now ignored.
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001917
1918 If the parameter is found followed by an equal sign ('=') and
1919 a value, then the value is hashed and divided by the total
1920 weight of the running servers. The result designates which
1921 server will receive the request.
1922
1923 This is used to track user identifiers in requests and ensure
1924 that a same user ID will always be sent to the same server as
1925 long as no server goes up or down. If no value is found or if
1926 the parameter is not found, then a round robin algorithm is
1927 applied. Note that this algorithm may only be used in an HTTP
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02001928 backend. This algorithm is static by default, which means
1929 that changing a server's weight on the fly will have no
1930 effect, but this can be changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001931
Cyril Bontédc4d9032012-04-08 21:57:39 +02001932 hdr(<name>) The HTTP header <name> will be looked up in each HTTP
1933 request. Just as with the equivalent ACL 'hdr()' function,
1934 the header name in parenthesis is not case sensitive. If the
1935 header is absent or if it does not contain any value, the
1936 roundrobin algorithm is applied instead.
Benoitaffb4812009-03-25 13:02:10 +01001937
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001938 An optional 'use_domain_only' parameter is available, for
Benoitaffb4812009-03-25 13:02:10 +01001939 reducing the hash algorithm to the main domain part with some
1940 specific headers such as 'Host'. For instance, in the Host
1941 value "haproxy.1wt.eu", only "1wt" will be considered.
1942
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02001943 This algorithm is static by default, which means that
1944 changing a server's weight on the fly will have no effect,
1945 but this can be changed using "hash-type".
1946
Emeric Brun736aa232009-06-30 17:56:00 +02001947 rdp-cookie
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02001948 rdp-cookie(<name>)
Emeric Brun736aa232009-06-30 17:56:00 +02001949 The RDP cookie <name> (or "mstshash" if omitted) will be
1950 looked up and hashed for each incoming TCP request. Just as
1951 with the equivalent ACL 'req_rdp_cookie()' function, the name
1952 is not case-sensitive. This mechanism is useful as a degraded
1953 persistence mode, as it makes it possible to always send the
1954 same user (or the same session ID) to the same server. If the
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001955 cookie is not found, the normal roundrobin algorithm is
Emeric Brun736aa232009-06-30 17:56:00 +02001956 used instead.
1957
1958 Note that for this to work, the frontend must ensure that an
1959 RDP cookie is already present in the request buffer. For this
1960 you must use 'tcp-request content accept' rule combined with
1961 a 'req_rdp_cookie_cnt' ACL.
1962
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02001963 This algorithm is static by default, which means that
1964 changing a server's weight on the fly will have no effect,
1965 but this can be changed using "hash-type".
1966
Cyril Bontédc4d9032012-04-08 21:57:39 +02001967 See also the rdp_cookie pattern fetch function.
Simon Hormanab814e02011-06-24 14:50:20 +09001968
Willy Tarreau0ba27502007-12-24 16:55:16 +01001969 <arguments> is an optional list of arguments which may be needed by some
Marek Majkowski9c30fc12008-04-27 23:25:55 +02001970 algorithms. Right now, only "url_param" and "uri" support an
1971 optional argument.
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001972
Willy Tarreau3cd9af22009-03-15 14:06:41 +01001973 The load balancing algorithm of a backend is set to roundrobin when no other
1974 algorithm, mode nor option have been set. The algorithm may only be set once
1975 for each backend.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001976
1977 Examples :
1978 balance roundrobin
1979 balance url_param userid
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001980 balance url_param session_id check_post 64
Benoitaffb4812009-03-25 13:02:10 +01001981 balance hdr(User-Agent)
1982 balance hdr(host)
1983 balance hdr(Host) use_domain_only
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001984
1985 Note: the following caveats and limitations on using the "check_post"
1986 extension with "url_param" must be considered :
1987
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001988 - all POST requests are eligible for consideration, because there is no way
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02001989 to determine if the parameters will be found in the body or entity which
1990 may contain binary data. Therefore another method may be required to
1991 restrict consideration of POST requests that have no URL parameters in
1992 the body. (see acl reqideny http_end)
1993
1994 - using a <max_wait> value larger than the request buffer size does not
1995 make sense and is useless. The buffer size is set at build time, and
1996 defaults to 16 kB.
1997
1998 - Content-Encoding is not supported, the parameter search will probably
1999 fail; and load balancing will fall back to Round Robin.
2000
2001 - Expect: 100-continue is not supported, load balancing will fall back to
2002 Round Robin.
2003
2004 - Transfer-Encoding (RFC2616 3.6.1) is only supported in the first chunk.
2005 If the entire parameter value is not present in the first chunk, the
2006 selection of server is undefined (actually, defined by how little
2007 actually appeared in the first chunk).
2008
2009 - This feature does not support generation of a 100, 411 or 501 response.
2010
2011 - In some cases, requesting "check_post" MAY attempt to scan the entire
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002012 contents of a message body. Scanning normally terminates when linear
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002013 white space or control characters are found, indicating the end of what
2014 might be a URL parameter list. This is probably not a concern with SGML
2015 type message bodies.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002016
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002017 See also : "dispatch", "cookie", "appsession", "transparent", "hash-type" and
2018 "http_proxy".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002019
2020
Willy Tarreaub6205fd2012-09-24 12:27:33 +02002021bind [<address>]:<port_range> [, ...] [param*]
2022bind /<path> [, ...] [param*]
Willy Tarreau0ba27502007-12-24 16:55:16 +01002023 Define one or several listening addresses and/or ports in a frontend.
2024 May be used in sections : defaults | frontend | listen | backend
2025 no | yes | yes | no
2026 Arguments :
Willy Tarreaub1e52e82008-01-13 14:49:51 +01002027 <address> is optional and can be a host name, an IPv4 address, an IPv6
2028 address, or '*'. It designates the address the frontend will
2029 listen on. If unset, all IPv4 addresses of the system will be
2030 listened on. The same will apply for '*' or the system's
David du Colombier9c938da2011-03-17 10:40:27 +01002031 special address "0.0.0.0". The IPv6 equivalent is '::'.
Willy Tarreau24709282013-03-10 21:32:12 +01002032 Optionally, an address family prefix may be used before the
2033 address to force the family regardless of the address format,
2034 which can be useful to specify a path to a unix socket with
2035 no slash ('/'). Currently supported prefixes are :
2036 - 'ipv4@' -> address is always IPv4
2037 - 'ipv6@' -> address is always IPv6
2038 - 'unix@' -> address is a path to a local unix socket
Willy Tarreau70f72e02014-07-08 00:37:50 +02002039 - 'abns@' -> address is in abstract namespace (Linux only).
2040 Note: since abstract sockets are not "rebindable", they
2041 do not cope well with multi-process mode during
2042 soft-restart, so it is better to avoid them if
2043 nbproc is greater than 1. The effect is that if the
2044 new process fails to start, only one of the old ones
2045 will be able to rebind to the socket.
Willy Tarreau40aa0702013-03-10 23:51:38 +01002046 - 'fd@<n>' -> use file descriptor <n> inherited from the
2047 parent. The fd must be bound and may or may not already
2048 be listening.
William Lallemandb2f07452015-05-12 14:27:13 +02002049 You may want to reference some environment variables in the
2050 address parameter, see section 2.3 about environment
2051 variables.
Willy Tarreaub1e52e82008-01-13 14:49:51 +01002052
Willy Tarreauc5011ca2010-03-22 11:53:56 +01002053 <port_range> is either a unique TCP port, or a port range for which the
2054 proxy will accept connections for the IP address specified
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002055 above. The port is mandatory for TCP listeners. Note that in
2056 the case of an IPv6 address, the port is always the number
2057 after the last colon (':'). A range can either be :
Willy Tarreauc5011ca2010-03-22 11:53:56 +01002058 - a numerical port (ex: '80')
2059 - a dash-delimited ports range explicitly stating the lower
2060 and upper bounds (ex: '2000-2100') which are included in
2061 the range.
2062
2063 Particular care must be taken against port ranges, because
2064 every <address:port> couple consumes one socket (= a file
2065 descriptor), so it's easy to consume lots of descriptors
2066 with a simple range, and to run out of sockets. Also, each
2067 <address:port> couple must be used only once among all
2068 instances running on a same system. Please note that binding
2069 to ports lower than 1024 generally require particular
Jamie Gloudon801a0a32012-08-25 00:18:33 -04002070 privileges to start the program, which are independent of
Willy Tarreauc5011ca2010-03-22 11:53:56 +01002071 the 'uid' parameter.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002072
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002073 <path> is a UNIX socket path beginning with a slash ('/'). This is
2074 alternative to the TCP listening port. Haproxy will then
2075 receive UNIX connections on the socket located at this place.
2076 The path must begin with a slash and by default is absolute.
2077 It can be relative to the prefix defined by "unix-bind" in
2078 the global section. Note that the total length of the prefix
2079 followed by the socket path cannot exceed some system limits
2080 for UNIX sockets, which commonly are set to 107 characters.
2081
Willy Tarreaub6205fd2012-09-24 12:27:33 +02002082 <param*> is a list of parameters common to all sockets declared on the
2083 same line. These numerous parameters depend on OS and build
2084 options and have a complete section dedicated to them. Please
2085 refer to section 5 to for more details.
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02002086
Willy Tarreau0ba27502007-12-24 16:55:16 +01002087 It is possible to specify a list of address:port combinations delimited by
2088 commas. The frontend will then listen on all of these addresses. There is no
2089 fixed limit to the number of addresses and ports which can be listened on in
2090 a frontend, as well as there is no limit to the number of "bind" statements
2091 in a frontend.
2092
2093 Example :
2094 listen http_proxy
2095 bind :80,:443
2096 bind 10.0.0.1:10080,10.0.0.1:10443
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002097 bind /var/run/ssl-frontend.sock user root mode 600 accept-proxy
Willy Tarreau0ba27502007-12-24 16:55:16 +01002098
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02002099 listen http_https_proxy
2100 bind :80
Cyril Bonté0d44fc62012-10-09 22:45:33 +02002101 bind :443 ssl crt /etc/haproxy/site.pem
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02002102
Willy Tarreau24709282013-03-10 21:32:12 +01002103 listen http_https_proxy_explicit
2104 bind ipv6@:80
2105 bind ipv4@public_ssl:443 ssl crt /etc/haproxy/site.pem
2106 bind unix@ssl-frontend.sock user root mode 600 accept-proxy
2107
Willy Tarreaudad36a32013-03-11 01:20:04 +01002108 listen external_bind_app1
William Lallemandb2f07452015-05-12 14:27:13 +02002109 bind "fd@${FD_APP1}"
Willy Tarreaudad36a32013-03-11 01:20:04 +01002110
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002111 See also : "source", "option forwardfor", "unix-bind" and the PROXY protocol
Willy Tarreaub6205fd2012-09-24 12:27:33 +02002112 documentation, and section 5 about bind options.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002113
2114
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002115bind-process [ all | odd | even | <number 1-64>[-<number 1-64>] ] ...
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002116 Limit visibility of an instance to a certain set of processes numbers.
2117 May be used in sections : defaults | frontend | listen | backend
2118 yes | yes | yes | yes
2119 Arguments :
2120 all All process will see this instance. This is the default. It
2121 may be used to override a default value.
2122
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002123 odd This instance will be enabled on processes 1,3,5,...63. This
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002124 option may be combined with other numbers.
2125
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002126 even This instance will be enabled on processes 2,4,6,...64. This
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002127 option may be combined with other numbers. Do not use it
2128 with less than 2 processes otherwise some instances might be
2129 missing from all processes.
2130
Willy Tarreau110ecc12012-11-15 17:50:01 +01002131 number The instance will be enabled on this process number or range,
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002132 whose values must all be between 1 and 32 or 64 depending on
Willy Tarreau102df612014-05-07 23:56:38 +02002133 the machine's word size. If a proxy is bound to process
2134 numbers greater than the configured global.nbproc, it will
2135 either be forced to process #1 if a single process was
2136 specified, or to all processes otherwise.
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002137
2138 This keyword limits binding of certain instances to certain processes. This
2139 is useful in order not to have too many processes listening to the same
2140 ports. For instance, on a dual-core machine, it might make sense to set
2141 'nbproc 2' in the global section, then distributes the listeners among 'odd'
2142 and 'even' instances.
2143
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002144 At the moment, it is not possible to reference more than 32 or 64 processes
2145 using this keyword, but this should be more than enough for most setups.
2146 Please note that 'all' really means all processes regardless of the machine's
2147 word size, and is not limited to the first 32 or 64.
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002148
Willy Tarreau6ae1ba62014-05-07 19:01:58 +02002149 Each "bind" line may further be limited to a subset of the proxy's processes,
2150 please consult the "process" bind keyword in section 5.1.
2151
Willy Tarreaub369a042014-09-16 13:21:03 +02002152 When a frontend has no explicit "bind-process" line, it tries to bind to all
2153 the processes referenced by its "bind" lines. That means that frontends can
2154 easily adapt to their listeners' processes.
2155
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002156 If some backends are referenced by frontends bound to other processes, the
2157 backend automatically inherits the frontend's processes.
2158
2159 Example :
2160 listen app_ip1
2161 bind 10.0.0.1:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02002162 bind-process odd
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002163
2164 listen app_ip2
2165 bind 10.0.0.2:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02002166 bind-process even
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002167
2168 listen management
2169 bind 10.0.0.3:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02002170 bind-process 1 2 3 4
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002171
Willy Tarreau110ecc12012-11-15 17:50:01 +01002172 listen management
2173 bind 10.0.0.4:80
2174 bind-process 1-4
2175
Willy Tarreau6ae1ba62014-05-07 19:01:58 +02002176 See also : "nbproc" in global section, and "process" in section 5.1.
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002177
2178
Willy Tarreau0ba27502007-12-24 16:55:16 +01002179block { if | unless } <condition>
2180 Block a layer 7 request if/unless a condition is matched
2181 May be used in sections : defaults | frontend | listen | backend
2182 no | yes | yes | yes
2183
2184 The HTTP request will be blocked very early in the layer 7 processing
2185 if/unless <condition> is matched. A 403 error will be returned if the request
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002186 is blocked. The condition has to reference ACLs (see section 7). This is
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02002187 typically used to deny access to certain sensitive resources if some
Willy Tarreau0ba27502007-12-24 16:55:16 +01002188 conditions are met or not met. There is no fixed limit to the number of
2189 "block" statements per instance.
2190
2191 Example:
2192 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
2193 acl invalid_src src_port 0:1023
2194 acl local_dst hdr(host) -i localhost
2195 block if invalid_src || local_dst
2196
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002197 See section 7 about ACL usage.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002198
2199
2200capture cookie <name> len <length>
2201 Capture and log a cookie in the request and in the response.
2202 May be used in sections : defaults | frontend | listen | backend
2203 no | yes | yes | no
2204 Arguments :
2205 <name> is the beginning of the name of the cookie to capture. In order
2206 to match the exact name, simply suffix the name with an equal
2207 sign ('='). The full name will appear in the logs, which is
2208 useful with application servers which adjust both the cookie name
2209 and value (eg: ASPSESSIONXXXXX).
2210
2211 <length> is the maximum number of characters to report in the logs, which
2212 include the cookie name, the equal sign and the value, all in the
2213 standard "name=value" form. The string will be truncated on the
2214 right if it exceeds <length>.
2215
2216 Only the first cookie is captured. Both the "cookie" request headers and the
2217 "set-cookie" response headers are monitored. This is particularly useful to
2218 check for application bugs causing session crossing or stealing between
2219 users, because generally the user's cookies can only change on a login page.
2220
2221 When the cookie was not presented by the client, the associated log column
2222 will report "-". When a request does not cause a cookie to be assigned by the
2223 server, a "-" is reported in the response column.
2224
2225 The capture is performed in the frontend only because it is necessary that
2226 the log format does not change for a given frontend depending on the
2227 backends. This may change in the future. Note that there can be only one
Willy Tarreau193b8c62012-11-22 00:17:38 +01002228 "capture cookie" statement in a frontend. The maximum capture length is set
2229 by the global "tune.http.cookielen" setting and defaults to 63 characters. It
2230 is not possible to specify a capture in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002231
2232 Example:
2233 capture cookie ASPSESSION len 32
2234
2235 See also : "capture request header", "capture response header" as well as
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002236 section 8 about logging.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002237
2238
2239capture request header <name> len <length>
Willy Tarreau4460d032012-11-21 23:37:37 +01002240 Capture and log the last occurrence of the specified request header.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002241 May be used in sections : defaults | frontend | listen | backend
2242 no | yes | yes | no
2243 Arguments :
2244 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002245 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +01002246 appear in the requests, with the first letter of each word in
2247 upper case. The header name will not appear in the logs, only the
2248 value is reported, but the position in the logs is respected.
2249
2250 <length> is the maximum number of characters to extract from the value and
2251 report in the logs. The string will be truncated on the right if
2252 it exceeds <length>.
2253
Willy Tarreau4460d032012-11-21 23:37:37 +01002254 The complete value of the last occurrence of the header is captured. The
Willy Tarreau0ba27502007-12-24 16:55:16 +01002255 value will be added to the logs between braces ('{}'). If multiple headers
2256 are captured, they will be delimited by a vertical bar ('|') and will appear
Willy Tarreaucc6c8912009-02-22 10:53:55 +01002257 in the same order they were declared in the configuration. Non-existent
2258 headers will be logged just as an empty string. Common uses for request
2259 header captures include the "Host" field in virtual hosting environments, the
2260 "Content-length" when uploads are supported, "User-agent" to quickly
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002261 differentiate between real users and robots, and "X-Forwarded-For" in proxied
Willy Tarreaucc6c8912009-02-22 10:53:55 +01002262 environments to find where the request came from.
2263
2264 Note that when capturing headers such as "User-agent", some spaces may be
2265 logged, making the log analysis more difficult. Thus be careful about what
2266 you log if you know your log parser is not smart enough to rely on the
2267 braces.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002268
Willy Tarreau0900abb2012-11-22 00:21:46 +01002269 There is no limit to the number of captured request headers nor to their
2270 length, though it is wise to keep them low to limit memory usage per session.
2271 In order to keep log format consistent for a same frontend, header captures
2272 can only be declared in a frontend. It is not possible to specify a capture
2273 in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002274
2275 Example:
2276 capture request header Host len 15
2277 capture request header X-Forwarded-For len 15
2278 capture request header Referrer len 15
2279
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002280 See also : "capture cookie", "capture response header" as well as section 8
Willy Tarreau0ba27502007-12-24 16:55:16 +01002281 about logging.
2282
2283
2284capture response header <name> len <length>
Willy Tarreau4460d032012-11-21 23:37:37 +01002285 Capture and log the last occurrence of the specified response header.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002286 May be used in sections : defaults | frontend | listen | backend
2287 no | yes | yes | no
2288 Arguments :
2289 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002290 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +01002291 appear in the response, with the first letter of each word in
2292 upper case. The header name will not appear in the logs, only the
2293 value is reported, but the position in the logs is respected.
2294
2295 <length> is the maximum number of characters to extract from the value and
2296 report in the logs. The string will be truncated on the right if
2297 it exceeds <length>.
2298
Willy Tarreau4460d032012-11-21 23:37:37 +01002299 The complete value of the last occurrence of the header is captured. The
Willy Tarreau0ba27502007-12-24 16:55:16 +01002300 result will be added to the logs between braces ('{}') after the captured
2301 request headers. If multiple headers are captured, they will be delimited by
2302 a vertical bar ('|') and will appear in the same order they were declared in
Willy Tarreaucc6c8912009-02-22 10:53:55 +01002303 the configuration. Non-existent headers will be logged just as an empty
2304 string. Common uses for response header captures include the "Content-length"
2305 header which indicates how many bytes are expected to be returned, the
2306 "Location" header to track redirections.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002307
Willy Tarreau0900abb2012-11-22 00:21:46 +01002308 There is no limit to the number of captured response headers nor to their
2309 length, though it is wise to keep them low to limit memory usage per session.
2310 In order to keep log format consistent for a same frontend, header captures
2311 can only be declared in a frontend. It is not possible to specify a capture
2312 in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002313
2314 Example:
2315 capture response header Content-length len 9
2316 capture response header Location len 15
2317
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002318 See also : "capture cookie", "capture request header" as well as section 8
Willy Tarreau0ba27502007-12-24 16:55:16 +01002319 about logging.
2320
2321
Cyril Bontéf0c60612010-02-06 14:44:47 +01002322clitimeout <timeout> (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +01002323 Set the maximum inactivity time on the client side.
2324 May be used in sections : defaults | frontend | listen | backend
2325 yes | yes | yes | no
2326 Arguments :
2327 <timeout> is the timeout value is specified in milliseconds by default, but
2328 can be in any other unit if the number is suffixed by the unit,
2329 as explained at the top of this document.
2330
2331 The inactivity timeout applies when the client is expected to acknowledge or
2332 send data. In HTTP mode, this timeout is particularly important to consider
2333 during the first phase, when the client sends the request, and during the
2334 response while it is reading data sent by the server. The value is specified
2335 in milliseconds by default, but can be in any other unit if the number is
2336 suffixed by the unit, as specified at the top of this document. In TCP mode
2337 (and to a lesser extent, in HTTP mode), it is highly recommended that the
2338 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002339 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01002340 losses by specifying timeouts that are slightly above multiples of 3 seconds
2341 (eg: 4 or 5 seconds).
2342
2343 This parameter is specific to frontends, but can be specified once for all in
2344 "defaults" sections. This is in fact one of the easiest solutions not to
2345 forget about it. An unspecified timeout results in an infinite timeout, which
2346 is not recommended. Such a usage is accepted and works but reports a warning
2347 during startup because it may results in accumulation of expired sessions in
2348 the system if the system's timeouts are not configured either.
2349
2350 This parameter is provided for compatibility but is currently deprecated.
2351 Please use "timeout client" instead.
2352
Willy Tarreau036fae02008-01-06 13:24:40 +01002353 See also : "timeout client", "timeout http-request", "timeout server", and
2354 "srvtimeout".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002355
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002356compression algo <algorithm> ...
2357compression type <mime type> ...
Willy Tarreau70737d12012-10-27 00:34:28 +02002358compression offload
William Lallemand82fe75c2012-10-23 10:25:10 +02002359 Enable HTTP compression.
2360 May be used in sections : defaults | frontend | listen | backend
2361 yes | yes | yes | yes
2362 Arguments :
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002363 algo is followed by the list of supported compression algorithms.
2364 type is followed by the list of MIME types that will be compressed.
2365 offload makes haproxy work as a compression offloader only (see notes).
2366
2367 The currently supported algorithms are :
Willy Tarreauc91840a2015-03-28 17:00:39 +01002368 identity this is mostly for debugging, and it was useful for developing
2369 the compression feature. Identity does not apply any change on
2370 data.
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002371
Willy Tarreauc91840a2015-03-28 17:00:39 +01002372 gzip applies gzip compression. This setting is only available when
2373 support for zlib was built in.
2374
2375 deflate same as "gzip", but with deflate algorithm and zlib format.
2376 Note that this algorithm has ambiguous support on many
2377 browsers and no support at all from recent ones. It is
2378 strongly recommended not to use it for anything else than
2379 experimentation. This setting is only available when support
2380 for zlib was built in.
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002381
Willy Tarreauc91840a2015-03-28 17:00:39 +01002382 raw-deflate same as "deflate" without the zlib wrapper, and used as an
2383 alternative when the browser wants "deflate". All major
2384 browsers understand it and despite violating the standards,
2385 it is known to work better than "deflate", at least on MSIE
2386 and some versions of Safari. Do not use it in conjunction
2387 with "deflate", use either one or the other since both react
2388 to the same Accept-Encoding token. This setting is only
2389 available when support for zlib was built in.
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002390
Dmitry Sivachenko87c208b2012-11-22 20:03:26 +04002391 Compression will be activated depending on the Accept-Encoding request
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002392 header. With identity, it does not take care of that header.
Dmitry Sivachenkoc9f3b452012-11-28 17:47:11 +04002393 If backend servers support HTTP compression, these directives
2394 will be no-op: haproxy will see the compressed response and will not
2395 compress again. If backend servers do not support HTTP compression and
2396 there is Accept-Encoding header in request, haproxy will compress the
2397 matching response.
Willy Tarreau70737d12012-10-27 00:34:28 +02002398
2399 The "offload" setting makes haproxy remove the Accept-Encoding header to
2400 prevent backend servers from compressing responses. It is strongly
2401 recommended not to do this because this means that all the compression work
2402 will be done on the single point where haproxy is located. However in some
2403 deployment scenarios, haproxy may be installed in front of a buggy gateway
Dmitry Sivachenkoc9f3b452012-11-28 17:47:11 +04002404 with broken HTTP compression implementation which can't be turned off.
2405 In that case haproxy can be used to prevent that gateway from emitting
2406 invalid payloads. In this case, simply removing the header in the
2407 configuration does not work because it applies before the header is parsed,
2408 so that prevents haproxy from compressing. The "offload" setting should
Willy Tarreauffea9fd2014-07-12 16:37:02 +02002409 then be used for such scenarios. Note: for now, the "offload" setting is
2410 ignored when set in a defaults section.
William Lallemand82fe75c2012-10-23 10:25:10 +02002411
William Lallemand05097442012-11-20 12:14:28 +01002412 Compression is disabled when:
Baptiste Assmann650d53d2013-01-05 15:44:44 +01002413 * the request does not advertise a supported compression algorithm in the
2414 "Accept-Encoding" header
2415 * the response message is not HTTP/1.1
William Lallemandd3002612012-11-26 14:34:47 +01002416 * HTTP status code is not 200
William Lallemand8bb4e342013-12-10 17:28:48 +01002417 * response header "Transfer-Encoding" contains "chunked" (Temporary
2418 Workaround)
Baptiste Assmann650d53d2013-01-05 15:44:44 +01002419 * response contain neither a "Content-Length" header nor a
2420 "Transfer-Encoding" whose last value is "chunked"
2421 * response contains a "Content-Type" header whose first value starts with
2422 "multipart"
2423 * the response contains the "no-transform" value in the "Cache-control"
2424 header
2425 * User-Agent matches "Mozilla/4" unless it is MSIE 6 with XP SP2, or MSIE 7
2426 and later
2427 * The response contains a "Content-Encoding" header, indicating that the
2428 response is already compressed (see compression offload)
William Lallemand05097442012-11-20 12:14:28 +01002429
Baptiste Assmann650d53d2013-01-05 15:44:44 +01002430 Note: The compression does not rewrite Etag headers, and does not emit the
2431 Warning header.
William Lallemand05097442012-11-20 12:14:28 +01002432
William Lallemand82fe75c2012-10-23 10:25:10 +02002433 Examples :
2434 compression algo gzip
2435 compression type text/html text/plain
Willy Tarreau0ba27502007-12-24 16:55:16 +01002436
Cyril Bontéf0c60612010-02-06 14:44:47 +01002437contimeout <timeout> (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +01002438 Set the maximum time to wait for a connection attempt to a server to succeed.
2439 May be used in sections : defaults | frontend | listen | backend
2440 yes | no | yes | yes
2441 Arguments :
2442 <timeout> is the timeout value is specified in milliseconds by default, but
2443 can be in any other unit if the number is suffixed by the unit,
2444 as explained at the top of this document.
2445
2446 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002447 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreaud72758d2010-01-12 10:42:19 +01002448 cover one or several TCP packet losses by specifying timeouts that are
Willy Tarreau0ba27502007-12-24 16:55:16 +01002449 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
2450 connect timeout also presets the queue timeout to the same value if this one
2451 has not been specified. Historically, the contimeout was also used to set the
2452 tarpit timeout in a listen section, which is not possible in a pure frontend.
2453
2454 This parameter is specific to backends, but can be specified once for all in
2455 "defaults" sections. This is in fact one of the easiest solutions not to
2456 forget about it. An unspecified timeout results in an infinite timeout, which
2457 is not recommended. Such a usage is accepted and works but reports a warning
2458 during startup because it may results in accumulation of failed sessions in
2459 the system if the system's timeouts are not configured either.
2460
2461 This parameter is provided for backwards compatibility but is currently
2462 deprecated. Please use "timeout connect", "timeout queue" or "timeout tarpit"
2463 instead.
2464
2465 See also : "timeout connect", "timeout queue", "timeout tarpit",
2466 "timeout server", "contimeout".
2467
2468
Willy Tarreau55165fe2009-05-10 12:02:55 +02002469cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ]
Willy Tarreau4992dd22012-05-31 21:02:17 +02002470 [ postonly ] [ preserve ] [ httponly ] [ secure ]
2471 [ domain <domain> ]* [ maxidle <idle> ] [ maxlife <life> ]
Willy Tarreau0ba27502007-12-24 16:55:16 +01002472 Enable cookie-based persistence in a backend.
2473 May be used in sections : defaults | frontend | listen | backend
2474 yes | no | yes | yes
2475 Arguments :
2476 <name> is the name of the cookie which will be monitored, modified or
2477 inserted in order to bring persistence. This cookie is sent to
2478 the client via a "Set-Cookie" header in the response, and is
2479 brought back by the client in a "Cookie" header in all requests.
2480 Special care should be taken to choose a name which does not
2481 conflict with any likely application cookie. Also, if the same
2482 backends are subject to be used by the same clients (eg:
2483 HTTP/HTTPS), care should be taken to use different cookie names
2484 between all backends if persistence between them is not desired.
2485
2486 rewrite This keyword indicates that the cookie will be provided by the
2487 server and that haproxy will have to modify its value to set the
2488 server's identifier in it. This mode is handy when the management
2489 of complex combinations of "Set-cookie" and "Cache-control"
2490 headers is left to the application. The application can then
2491 decide whether or not it is appropriate to emit a persistence
2492 cookie. Since all responses should be monitored, this mode only
2493 works in HTTP close mode. Unless the application behaviour is
2494 very complex and/or broken, it is advised not to start with this
2495 mode for new deployments. This keyword is incompatible with
2496 "insert" and "prefix".
2497
2498 insert This keyword indicates that the persistence cookie will have to
Willy Tarreaua79094d2010-08-31 22:54:15 +02002499 be inserted by haproxy in server responses if the client did not
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002500
Willy Tarreaua79094d2010-08-31 22:54:15 +02002501 already have a cookie that would have permitted it to access this
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002502 server. When used without the "preserve" option, if the server
2503 emits a cookie with the same name, it will be remove before
2504 processing. For this reason, this mode can be used to upgrade
2505 existing configurations running in the "rewrite" mode. The cookie
2506 will only be a session cookie and will not be stored on the
2507 client's disk. By default, unless the "indirect" option is added,
2508 the server will see the cookies emitted by the client. Due to
2509 caching effects, it is generally wise to add the "nocache" or
2510 "postonly" keywords (see below). The "insert" keyword is not
2511 compatible with "rewrite" and "prefix".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002512
2513 prefix This keyword indicates that instead of relying on a dedicated
2514 cookie for the persistence, an existing one will be completed.
2515 This may be needed in some specific environments where the client
2516 does not support more than one single cookie and the application
2517 already needs it. In this case, whenever the server sets a cookie
2518 named <name>, it will be prefixed with the server's identifier
2519 and a delimiter. The prefix will be removed from all client
2520 requests so that the server still finds the cookie it emitted.
2521 Since all requests and responses are subject to being modified,
2522 this mode requires the HTTP close mode. The "prefix" keyword is
Willy Tarreau37229df2011-10-17 12:24:55 +02002523 not compatible with "rewrite" and "insert". Note: it is highly
2524 recommended not to use "indirect" with "prefix", otherwise server
2525 cookie updates would not be sent to clients.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002526
Willy Tarreaua79094d2010-08-31 22:54:15 +02002527 indirect When this option is specified, no cookie will be emitted to a
2528 client which already has a valid one for the server which has
2529 processed the request. If the server sets such a cookie itself,
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002530 it will be removed, unless the "preserve" option is also set. In
2531 "insert" mode, this will additionally remove cookies from the
2532 requests transmitted to the server, making the persistence
2533 mechanism totally transparent from an application point of view.
Willy Tarreau37229df2011-10-17 12:24:55 +02002534 Note: it is highly recommended not to use "indirect" with
2535 "prefix", otherwise server cookie updates would not be sent to
2536 clients.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002537
2538 nocache This option is recommended in conjunction with the insert mode
2539 when there is a cache between the client and HAProxy, as it
2540 ensures that a cacheable response will be tagged non-cacheable if
2541 a cookie needs to be inserted. This is important because if all
2542 persistence cookies are added on a cacheable home page for
2543 instance, then all customers will then fetch the page from an
2544 outer cache and will all share the same persistence cookie,
2545 leading to one server receiving much more traffic than others.
2546 See also the "insert" and "postonly" options.
2547
2548 postonly This option ensures that cookie insertion will only be performed
2549 on responses to POST requests. It is an alternative to the
2550 "nocache" option, because POST responses are not cacheable, so
2551 this ensures that the persistence cookie will never get cached.
2552 Since most sites do not need any sort of persistence before the
2553 first POST which generally is a login request, this is a very
2554 efficient method to optimize caching without risking to find a
2555 persistence cookie in the cache.
2556 See also the "insert" and "nocache" options.
2557
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002558 preserve This option may only be used with "insert" and/or "indirect". It
2559 allows the server to emit the persistence cookie itself. In this
2560 case, if a cookie is found in the response, haproxy will leave it
2561 untouched. This is useful in order to end persistence after a
2562 logout request for instance. For this, the server just has to
2563 emit a cookie with an invalid value (eg: empty) or with a date in
2564 the past. By combining this mechanism with the "disable-on-404"
2565 check option, it is possible to perform a completely graceful
2566 shutdown because users will definitely leave the server after
2567 they logout.
2568
Willy Tarreau4992dd22012-05-31 21:02:17 +02002569 httponly This option tells haproxy to add an "HttpOnly" cookie attribute
2570 when a cookie is inserted. This attribute is used so that a
2571 user agent doesn't share the cookie with non-HTTP components.
2572 Please check RFC6265 for more information on this attribute.
2573
2574 secure This option tells haproxy to add a "Secure" cookie attribute when
2575 a cookie is inserted. This attribute is used so that a user agent
2576 never emits this cookie over non-secure channels, which means
2577 that a cookie learned with this flag will be presented only over
2578 SSL/TLS connections. Please check RFC6265 for more information on
2579 this attribute.
2580
Krzysztof Piotr Oledzkiefe3b6f2008-05-23 23:49:32 +02002581 domain This option allows to specify the domain at which a cookie is
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002582 inserted. It requires exactly one parameter: a valid domain
Willy Tarreau68a897b2009-12-03 23:28:34 +01002583 name. If the domain begins with a dot, the browser is allowed to
2584 use it for any host ending with that name. It is also possible to
2585 specify several domain names by invoking this option multiple
2586 times. Some browsers might have small limits on the number of
2587 domains, so be careful when doing that. For the record, sending
2588 10 domains to MSIE 6 or Firefox 2 works as expected.
Krzysztof Piotr Oledzkiefe3b6f2008-05-23 23:49:32 +02002589
Willy Tarreau996a92c2010-10-13 19:30:47 +02002590 maxidle This option allows inserted cookies to be ignored after some idle
2591 time. It only works with insert-mode cookies. When a cookie is
2592 sent to the client, the date this cookie was emitted is sent too.
2593 Upon further presentations of this cookie, if the date is older
2594 than the delay indicated by the parameter (in seconds), it will
2595 be ignored. Otherwise, it will be refreshed if needed when the
2596 response is sent to the client. This is particularly useful to
2597 prevent users who never close their browsers from remaining for
2598 too long on the same server (eg: after a farm size change). When
2599 this option is set and a cookie has no date, it is always
2600 accepted, but gets refreshed in the response. This maintains the
2601 ability for admins to access their sites. Cookies that have a
2602 date in the future further than 24 hours are ignored. Doing so
2603 lets admins fix timezone issues without risking kicking users off
2604 the site.
2605
2606 maxlife This option allows inserted cookies to be ignored after some life
2607 time, whether they're in use or not. It only works with insert
2608 mode cookies. When a cookie is first sent to the client, the date
2609 this cookie was emitted is sent too. Upon further presentations
2610 of this cookie, if the date is older than the delay indicated by
2611 the parameter (in seconds), it will be ignored. If the cookie in
2612 the request has no date, it is accepted and a date will be set.
2613 Cookies that have a date in the future further than 24 hours are
2614 ignored. Doing so lets admins fix timezone issues without risking
2615 kicking users off the site. Contrary to maxidle, this value is
2616 not refreshed, only the first visit date counts. Both maxidle and
2617 maxlife may be used at the time. This is particularly useful to
2618 prevent users who never close their browsers from remaining for
2619 too long on the same server (eg: after a farm size change). This
2620 is stronger than the maxidle method in that it forces a
2621 redispatch after some absolute delay.
2622
Willy Tarreau0ba27502007-12-24 16:55:16 +01002623 There can be only one persistence cookie per HTTP backend, and it can be
2624 declared in a defaults section. The value of the cookie will be the value
2625 indicated after the "cookie" keyword in a "server" statement. If no cookie
2626 is declared for a given server, the cookie is not set.
Willy Tarreau6a06a402007-07-15 20:15:28 +02002627
Willy Tarreau0ba27502007-12-24 16:55:16 +01002628 Examples :
2629 cookie JSESSIONID prefix
2630 cookie SRV insert indirect nocache
2631 cookie SRV insert postonly indirect
Willy Tarreau996a92c2010-10-13 19:30:47 +02002632 cookie SRV insert indirect nocache maxidle 30m maxlife 8h
Willy Tarreau0ba27502007-12-24 16:55:16 +01002633
Cyril Bontéa8e7bbc2010-04-25 22:29:29 +02002634 See also : "appsession", "balance source", "capture cookie", "server"
Cyril Bonté0d4bf012010-04-25 23:21:46 +02002635 and "ignore-persist".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002636
Willy Tarreau983e01e2010-01-11 18:42:06 +01002637
Thierry FOURNIERa0a1b752015-05-26 17:44:32 +02002638declare capture [ request | response ] len <length>
2639 Declares a capture slot.
2640 May be used in sections : defaults | frontend | listen | backend
2641 no | yes | yes | no
2642 Arguments:
2643 <length> is the length allowed for the capture.
2644
2645 This declaration is only available in the frontend or listen section, but the
2646 reserved slot can be used in the backends. The "request" keyword allocates a
2647 capture slot for use in the request, and "response" allocates a capture slot
2648 for use in the response.
2649
2650 See also: "capture-req", "capture-res" (sample converters),
2651 "http-request capture" and "http-response capture".
2652
2653
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01002654default-server [param*]
2655 Change default options for a server in a backend
2656 May be used in sections : defaults | frontend | listen | backend
2657 yes | no | yes | yes
2658 Arguments:
Willy Tarreau983e01e2010-01-11 18:42:06 +01002659 <param*> is a list of parameters for this server. The "default-server"
2660 keyword accepts an important number of options and has a complete
2661 section dedicated to it. Please refer to section 5 for more
2662 details.
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01002663
Willy Tarreau983e01e2010-01-11 18:42:06 +01002664 Example :
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01002665 default-server inter 1000 weight 13
2666
2667 See also: "server" and section 5 about server options
Willy Tarreau0ba27502007-12-24 16:55:16 +01002668
Willy Tarreau983e01e2010-01-11 18:42:06 +01002669
Willy Tarreau0ba27502007-12-24 16:55:16 +01002670default_backend <backend>
2671 Specify the backend to use when no "use_backend" rule has been matched.
2672 May be used in sections : defaults | frontend | listen | backend
2673 yes | yes | yes | no
2674 Arguments :
2675 <backend> is the name of the backend to use.
2676
2677 When doing content-switching between frontend and backends using the
2678 "use_backend" keyword, it is often useful to indicate which backend will be
2679 used when no rule has matched. It generally is the dynamic backend which
2680 will catch all undetermined requests.
2681
Willy Tarreau0ba27502007-12-24 16:55:16 +01002682 Example :
2683
2684 use_backend dynamic if url_dyn
2685 use_backend static if url_css url_img extension_img
2686 default_backend dynamic
2687
Willy Tarreau98d04852015-05-26 12:18:29 +02002688 See also : "use_backend"
Willy Tarreau2769aa02007-12-27 18:26:09 +01002689
Willy Tarreau0ba27502007-12-24 16:55:16 +01002690
Baptiste Assmann27f51342013-10-09 06:51:49 +02002691description <string>
2692 Describe a listen, frontend or backend.
2693 May be used in sections : defaults | frontend | listen | backend
2694 no | yes | yes | yes
2695 Arguments : string
2696
2697 Allows to add a sentence to describe the related object in the HAProxy HTML
2698 stats page. The description will be printed on the right of the object name
2699 it describes.
2700 No need to backslash spaces in the <string> arguments.
2701
2702
Willy Tarreau0ba27502007-12-24 16:55:16 +01002703disabled
2704 Disable a proxy, frontend or backend.
2705 May be used in sections : defaults | frontend | listen | backend
2706 yes | yes | yes | yes
2707 Arguments : none
2708
2709 The "disabled" keyword is used to disable an instance, mainly in order to
2710 liberate a listening port or to temporarily disable a service. The instance
2711 will still be created and its configuration will be checked, but it will be
2712 created in the "stopped" state and will appear as such in the statistics. It
2713 will not receive any traffic nor will it send any health-checks or logs. It
2714 is possible to disable many instances at once by adding the "disabled"
2715 keyword in a "defaults" section.
2716
2717 See also : "enabled"
2718
2719
Willy Tarreau5ce94572010-06-07 14:35:41 +02002720dispatch <address>:<port>
2721 Set a default server address
2722 May be used in sections : defaults | frontend | listen | backend
2723 no | no | yes | yes
Cyril Bonté108cf6e2012-04-21 23:30:29 +02002724 Arguments :
Willy Tarreau5ce94572010-06-07 14:35:41 +02002725
2726 <address> is the IPv4 address of the default server. Alternatively, a
2727 resolvable hostname is supported, but this name will be resolved
2728 during start-up.
2729
2730 <ports> is a mandatory port specification. All connections will be sent
2731 to this port, and it is not permitted to use port offsets as is
2732 possible with normal servers.
2733
Willy Tarreau787aed52011-04-15 06:45:37 +02002734 The "dispatch" keyword designates a default server for use when no other
Willy Tarreau5ce94572010-06-07 14:35:41 +02002735 server can take the connection. In the past it was used to forward non
2736 persistent connections to an auxiliary load balancer. Due to its simple
2737 syntax, it has also been used for simple TCP relays. It is recommended not to
2738 use it for more clarity, and to use the "server" directive instead.
2739
2740 See also : "server"
2741
2742
Willy Tarreau0ba27502007-12-24 16:55:16 +01002743enabled
2744 Enable a proxy, frontend or backend.
2745 May be used in sections : defaults | frontend | listen | backend
2746 yes | yes | yes | yes
2747 Arguments : none
2748
2749 The "enabled" keyword is used to explicitly enable an instance, when the
2750 defaults has been set to "disabled". This is very rarely used.
2751
2752 See also : "disabled"
2753
2754
2755errorfile <code> <file>
2756 Return a file contents instead of errors generated by HAProxy
2757 May be used in sections : defaults | frontend | listen | backend
2758 yes | yes | yes | yes
2759 Arguments :
2760 <code> is the HTTP status code. Currently, HAProxy is capable of
CJ Ess108b1dd2015-04-07 12:03:37 -04002761 generating codes 200, 400, 403, 405, 408, 429, 500, 502, 503, and
2762 504.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002763
2764 <file> designates a file containing the full HTTP response. It is
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002765 recommended to follow the common practice of appending ".http" to
Willy Tarreau0ba27502007-12-24 16:55:16 +01002766 the filename so that people do not confuse the response with HTML
Willy Tarreau59140a22009-02-22 12:02:30 +01002767 error pages, and to use absolute paths, since files are read
2768 before any chroot is performed.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002769
2770 It is important to understand that this keyword is not meant to rewrite
2771 errors returned by the server, but errors detected and returned by HAProxy.
2772 This is why the list of supported errors is limited to a small set.
2773
Willy Tarreauae94d4d2011-05-11 16:28:49 +02002774 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
2775
Willy Tarreau0ba27502007-12-24 16:55:16 +01002776 The files are returned verbatim on the TCP socket. This allows any trick such
2777 as redirections to another URL or site, as well as tricks to clean cookies,
2778 force enable or disable caching, etc... The package provides default error
2779 files returning the same contents as default errors.
2780
Willy Tarreau59140a22009-02-22 12:02:30 +01002781 The files should not exceed the configured buffer size (BUFSIZE), which
2782 generally is 8 or 16 kB, otherwise they will be truncated. It is also wise
2783 not to put any reference to local contents (eg: images) in order to avoid
2784 loops between the client and HAProxy when all servers are down, causing an
2785 error to be returned instead of an image. For better HTTP compliance, it is
2786 recommended that all header lines end with CR-LF and not LF alone.
2787
Willy Tarreau0ba27502007-12-24 16:55:16 +01002788 The files are read at the same time as the configuration and kept in memory.
2789 For this reason, the errors continue to be returned even when the process is
2790 chrooted, and no file change is considered while the process is running. A
Willy Tarreauc27debf2008-01-06 08:57:02 +01002791 simple method for developing those files consists in associating them to the
Willy Tarreau0ba27502007-12-24 16:55:16 +01002792 403 status code and interrogating a blocked URL.
2793
2794 See also : "errorloc", "errorloc302", "errorloc303"
2795
Willy Tarreau59140a22009-02-22 12:02:30 +01002796 Example :
2797 errorfile 400 /etc/haproxy/errorfiles/400badreq.http
Willy Tarreau2705a612014-05-23 17:38:34 +02002798 errorfile 408 /dev/null # workaround Chrome pre-connect bug
Willy Tarreau59140a22009-02-22 12:02:30 +01002799 errorfile 403 /etc/haproxy/errorfiles/403forbid.http
2800 errorfile 503 /etc/haproxy/errorfiles/503sorry.http
2801
Willy Tarreau2769aa02007-12-27 18:26:09 +01002802
2803errorloc <code> <url>
2804errorloc302 <code> <url>
2805 Return an HTTP redirection to a URL instead of errors generated by HAProxy
2806 May be used in sections : defaults | frontend | listen | backend
2807 yes | yes | yes | yes
2808 Arguments :
2809 <code> is the HTTP status code. Currently, HAProxy is capable of
Willy Tarreauae94d4d2011-05-11 16:28:49 +02002810 generating codes 200, 400, 403, 408, 500, 502, 503, and 504.
Willy Tarreau2769aa02007-12-27 18:26:09 +01002811
2812 <url> it is the exact contents of the "Location" header. It may contain
2813 either a relative URI to an error page hosted on the same site,
2814 or an absolute URI designating an error page on another site.
2815 Special care should be given to relative URIs to avoid redirect
2816 loops if the URI itself may generate the same error (eg: 500).
2817
2818 It is important to understand that this keyword is not meant to rewrite
2819 errors returned by the server, but errors detected and returned by HAProxy.
2820 This is why the list of supported errors is limited to a small set.
2821
Willy Tarreauae94d4d2011-05-11 16:28:49 +02002822 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
2823
Willy Tarreau2769aa02007-12-27 18:26:09 +01002824 Note that both keyword return the HTTP 302 status code, which tells the
2825 client to fetch the designated URL using the same HTTP method. This can be
2826 quite problematic in case of non-GET methods such as POST, because the URL
2827 sent to the client might not be allowed for something other than GET. To
2828 workaround this problem, please use "errorloc303" which send the HTTP 303
2829 status code, indicating to the client that the URL must be fetched with a GET
2830 request.
2831
2832 See also : "errorfile", "errorloc303"
2833
2834
2835errorloc303 <code> <url>
2836 Return an HTTP redirection to a URL instead of errors generated by HAProxy
2837 May be used in sections : defaults | frontend | listen | backend
2838 yes | yes | yes | yes
2839 Arguments :
2840 <code> is the HTTP status code. Currently, HAProxy is capable of
2841 generating codes 400, 403, 408, 500, 502, 503, and 504.
2842
2843 <url> it is the exact contents of the "Location" header. It may contain
2844 either a relative URI to an error page hosted on the same site,
2845 or an absolute URI designating an error page on another site.
2846 Special care should be given to relative URIs to avoid redirect
2847 loops if the URI itself may generate the same error (eg: 500).
2848
2849 It is important to understand that this keyword is not meant to rewrite
2850 errors returned by the server, but errors detected and returned by HAProxy.
2851 This is why the list of supported errors is limited to a small set.
2852
Willy Tarreauae94d4d2011-05-11 16:28:49 +02002853 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
2854
Willy Tarreau2769aa02007-12-27 18:26:09 +01002855 Note that both keyword return the HTTP 303 status code, which tells the
2856 client to fetch the designated URL using the same HTTP GET method. This
2857 solves the usual problems associated with "errorloc" and the 302 code. It is
2858 possible that some very old browsers designed before HTTP/1.1 do not support
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002859 it, but no such problem has been reported till now.
Willy Tarreau2769aa02007-12-27 18:26:09 +01002860
2861 See also : "errorfile", "errorloc", "errorloc302"
2862
2863
Simon Horman51a1cf62015-02-03 13:00:44 +09002864email-alert from <emailaddr>
2865 Declare the from email address to be used in both the envelope and header
2866 of email alerts. This is the address that email alerts are sent from.
2867 May be used in sections: defaults | frontend | listen | backend
2868 yes | yes | yes | yes
2869
2870 Arguments :
2871
2872 <emailaddr> is the from email address to use when sending email alerts
2873
2874 Also requires "email-alert mailers" and "email-alert to" to be set
2875 and if so sending email alerts is enabled for the proxy.
2876
Simon Horman64e34162015-02-06 11:11:57 +09002877 See also : "email-alert level", "email-alert mailers",
2878 "email-alert myhostname", "email-alert to", section 3.6 about mailers.
2879
2880
2881email-alert level <level>
2882 Declare the maximum log level of messages for which email alerts will be
2883 sent. This acts as a filter on the sending of email alerts.
2884 May be used in sections: defaults | frontend | listen | backend
2885 yes | yes | yes | yes
2886
2887 Arguments :
2888
2889 <level> One of the 8 syslog levels:
2890 emerg alert crit err warning notice info debug
2891 The above syslog levels are ordered from lowest to highest.
2892
2893 By default level is alert
2894
2895 Also requires "email-alert from", "email-alert mailers" and
2896 "email-alert to" to be set and if so sending email alerts is enabled
2897 for the proxy.
2898
Simon Horman1421e212015-04-30 13:10:35 +09002899 Alerts are sent when :
2900
2901 * An un-paused server is marked as down and <level> is alert or lower
2902 * A paused server is marked as down and <level> is notice or lower
2903 * A server is marked as up or enters the drain state and <level>
2904 is notice or lower
2905 * "option log-health-checks" is enabled, <level> is info or lower,
2906 and a health check status update occurs
2907
Simon Horman64e34162015-02-06 11:11:57 +09002908 See also : "email-alert from", "email-alert mailers",
2909 "email-alert myhostname", "email-alert to",
Simon Horman51a1cf62015-02-03 13:00:44 +09002910 section 3.6 about mailers.
2911
2912
2913email-alert mailers <mailersect>
2914 Declare the mailers to be used when sending email alerts
2915 May be used in sections: defaults | frontend | listen | backend
2916 yes | yes | yes | yes
2917
2918 Arguments :
2919
2920 <mailersect> is the name of the mailers section to send email alerts.
2921
2922 Also requires "email-alert from" and "email-alert to" to be set
2923 and if so sending email alerts is enabled for the proxy.
2924
Simon Horman64e34162015-02-06 11:11:57 +09002925 See also : "email-alert from", "email-alert level", "email-alert myhostname",
2926 "email-alert to", section 3.6 about mailers.
Simon Horman51a1cf62015-02-03 13:00:44 +09002927
2928
2929email-alert myhostname <hostname>
2930 Declare the to hostname address to be used when communicating with
2931 mailers.
2932 May be used in sections: defaults | frontend | listen | backend
2933 yes | yes | yes | yes
2934
2935 Arguments :
2936
2937 <emailaddr> is the to email address to use when sending email alerts
2938
2939 By default the systems hostname is used.
2940
2941 Also requires "email-alert from", "email-alert mailers" and
2942 "email-alert to" to be set and if so sending email alerts is enabled
2943 for the proxy.
2944
Simon Horman64e34162015-02-06 11:11:57 +09002945 See also : "email-alert from", "email-alert level", "email-alert mailers",
2946 "email-alert to", section 3.6 about mailers.
Simon Horman51a1cf62015-02-03 13:00:44 +09002947
2948
2949email-alert to <emailaddr>
2950 Declare both the recipent address in the envelope and to address in the
2951 header of email alerts. This is the address that email alerts are sent to.
2952 May be used in sections: defaults | frontend | listen | backend
2953 yes | yes | yes | yes
2954
2955 Arguments :
2956
2957 <emailaddr> is the to email address to use when sending email alerts
2958
2959 Also requires "email-alert mailers" and "email-alert to" to be set
2960 and if so sending email alerts is enabled for the proxy.
2961
Simon Horman64e34162015-02-06 11:11:57 +09002962 See also : "email-alert from", "email-alert level", "email-alert mailers",
Simon Horman51a1cf62015-02-03 13:00:44 +09002963 "email-alert myhostname", section 3.6 about mailers.
2964
2965
Willy Tarreau4de91492010-01-22 19:10:05 +01002966force-persist { if | unless } <condition>
2967 Declare a condition to force persistence on down servers
2968 May be used in sections: defaults | frontend | listen | backend
2969 no | yes | yes | yes
2970
2971 By default, requests are not dispatched to down servers. It is possible to
2972 force this using "option persist", but it is unconditional and redispatches
2973 to a valid server if "option redispatch" is set. That leaves with very little
2974 possibilities to force some requests to reach a server which is artificially
2975 marked down for maintenance operations.
2976
2977 The "force-persist" statement allows one to declare various ACL-based
2978 conditions which, when met, will cause a request to ignore the down status of
2979 a server and still try to connect to it. That makes it possible to start a
2980 server, still replying an error to the health checks, and run a specially
2981 configured browser to test the service. Among the handy methods, one could
2982 use a specific source IP address, or a specific cookie. The cookie also has
2983 the advantage that it can easily be added/removed on the browser from a test
2984 page. Once the service is validated, it is then possible to open the service
2985 to the world by returning a valid response to health checks.
2986
2987 The forced persistence is enabled when an "if" condition is met, or unless an
2988 "unless" condition is met. The final redispatch is always disabled when this
2989 is used.
2990
Cyril Bonté0d4bf012010-04-25 23:21:46 +02002991 See also : "option redispatch", "ignore-persist", "persist",
Cyril Bontéa8e7bbc2010-04-25 22:29:29 +02002992 and section 7 about ACL usage.
Willy Tarreau4de91492010-01-22 19:10:05 +01002993
2994
Willy Tarreau2769aa02007-12-27 18:26:09 +01002995fullconn <conns>
2996 Specify at what backend load the servers will reach their maxconn
2997 May be used in sections : defaults | frontend | listen | backend
2998 yes | no | yes | yes
2999 Arguments :
3000 <conns> is the number of connections on the backend which will make the
3001 servers use the maximal number of connections.
3002
Willy Tarreau198a7442008-01-17 12:05:32 +01003003 When a server has a "maxconn" parameter specified, it means that its number
Willy Tarreau2769aa02007-12-27 18:26:09 +01003004 of concurrent connections will never go higher. Additionally, if it has a
Willy Tarreau198a7442008-01-17 12:05:32 +01003005 "minconn" parameter, it indicates a dynamic limit following the backend's
Willy Tarreau2769aa02007-12-27 18:26:09 +01003006 load. The server will then always accept at least <minconn> connections,
3007 never more than <maxconn>, and the limit will be on the ramp between both
3008 values when the backend has less than <conns> concurrent connections. This
3009 makes it possible to limit the load on the servers during normal loads, but
3010 push it further for important loads without overloading the servers during
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003011 exceptional loads.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003012
Willy Tarreaufbb78422011-06-05 15:38:35 +02003013 Since it's hard to get this value right, haproxy automatically sets it to
3014 10% of the sum of the maxconns of all frontends that may branch to this
Bertrand Jacquin702d44f2013-11-19 11:43:06 +01003015 backend (based on "use_backend" and "default_backend" rules). That way it's
3016 safe to leave it unset. However, "use_backend" involving dynamic names are
3017 not counted since there is no way to know if they could match or not.
Willy Tarreaufbb78422011-06-05 15:38:35 +02003018
Willy Tarreau2769aa02007-12-27 18:26:09 +01003019 Example :
3020 # The servers will accept between 100 and 1000 concurrent connections each
3021 # and the maximum of 1000 will be reached when the backend reaches 10000
3022 # connections.
3023 backend dynamic
3024 fullconn 10000
3025 server srv1 dyn1:80 minconn 100 maxconn 1000
3026 server srv2 dyn2:80 minconn 100 maxconn 1000
3027
3028 See also : "maxconn", "server"
3029
3030
3031grace <time>
3032 Maintain a proxy operational for some time after a soft stop
3033 May be used in sections : defaults | frontend | listen | backend
Cyril Bonté99ed3272010-01-24 23:29:44 +01003034 yes | yes | yes | yes
Willy Tarreau2769aa02007-12-27 18:26:09 +01003035 Arguments :
3036 <time> is the time (by default in milliseconds) for which the instance
3037 will remain operational with the frontend sockets still listening
3038 when a soft-stop is received via the SIGUSR1 signal.
3039
3040 This may be used to ensure that the services disappear in a certain order.
3041 This was designed so that frontends which are dedicated to monitoring by an
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003042 external equipment fail immediately while other ones remain up for the time
Willy Tarreau2769aa02007-12-27 18:26:09 +01003043 needed by the equipment to detect the failure.
3044
3045 Note that currently, there is very little benefit in using this parameter,
3046 and it may in fact complicate the soft-reconfiguration process more than
3047 simplify it.
3048
Willy Tarreau0ba27502007-12-24 16:55:16 +01003049
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003050hash-type <method> <function> <modifier>
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003051 Specify a method to use for mapping hashes to servers
3052 May be used in sections : defaults | frontend | listen | backend
3053 yes | no | yes | yes
3054 Arguments :
Bhaskar98634f02013-10-29 23:30:51 -04003055 <method> is the method used to select a server from the hash computed by
3056 the <function> :
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003057
Bhaskar98634f02013-10-29 23:30:51 -04003058 map-based the hash table is a static array containing all alive servers.
3059 The hashes will be very smooth, will consider weights, but
3060 will be static in that weight changes while a server is up
3061 will be ignored. This means that there will be no slow start.
3062 Also, since a server is selected by its position in the array,
3063 most mappings are changed when the server count changes. This
3064 means that when a server goes up or down, or when a server is
3065 added to a farm, most connections will be redistributed to
3066 different servers. This can be inconvenient with caches for
3067 instance.
Willy Tarreau798a39c2010-11-24 15:04:29 +01003068
Bhaskar98634f02013-10-29 23:30:51 -04003069 consistent the hash table is a tree filled with many occurrences of each
3070 server. The hash key is looked up in the tree and the closest
3071 server is chosen. This hash is dynamic, it supports changing
3072 weights while the servers are up, so it is compatible with the
3073 slow start feature. It has the advantage that when a server
3074 goes up or down, only its associations are moved. When a
3075 server is added to the farm, only a few part of the mappings
3076 are redistributed, making it an ideal method for caches.
3077 However, due to its principle, the distribution will never be
3078 very smooth and it may sometimes be necessary to adjust a
3079 server's weight or its ID to get a more balanced distribution.
3080 In order to get the same distribution on multiple load
3081 balancers, it is important that all servers have the exact
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003082 same IDs. Note: consistent hash uses sdbm and avalanche if no
3083 hash function is specified.
Bhaskar98634f02013-10-29 23:30:51 -04003084
3085 <function> is the hash function to be used :
3086
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03003087 sdbm this function was created initially for sdbm (a public-domain
Bhaskar98634f02013-10-29 23:30:51 -04003088 reimplementation of ndbm) database library. It was found to do
3089 well in scrambling bits, causing better distribution of the keys
3090 and fewer splits. It also happens to be a good general hashing
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003091 function with good distribution, unless the total server weight
3092 is a multiple of 64, in which case applying the avalanche
3093 modifier may help.
Bhaskar98634f02013-10-29 23:30:51 -04003094
3095 djb2 this function was first proposed by Dan Bernstein many years ago
3096 on comp.lang.c. Studies have shown that for certain workload this
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003097 function provides a better distribution than sdbm. It generally
3098 works well with text-based inputs though it can perform extremely
3099 poorly with numeric-only input or when the total server weight is
3100 a multiple of 33, unless the avalanche modifier is also used.
3101
Willy Tarreaua0f42712013-11-14 14:30:35 +01003102 wt6 this function was designed for haproxy while testing other
3103 functions in the past. It is not as smooth as the other ones, but
3104 is much less sensible to the input data set or to the number of
3105 servers. It can make sense as an alternative to sdbm+avalanche or
3106 djb2+avalanche for consistent hashing or when hashing on numeric
3107 data such as a source IP address or a visitor identifier in a URL
3108 parameter.
3109
Willy Tarreau324f07f2015-01-20 19:44:50 +01003110 crc32 this is the most common CRC32 implementation as used in Ethernet,
3111 gzip, PNG, etc. It is slower than the other ones but may provide
3112 a better distribution or less predictable results especially when
3113 used on strings.
3114
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003115 <modifier> indicates an optional method applied after hashing the key :
3116
3117 avalanche This directive indicates that the result from the hash
3118 function above should not be used in its raw form but that
3119 a 4-byte full avalanche hash must be applied first. The
3120 purpose of this step is to mix the resulting bits from the
3121 previous hash in order to avoid any undesired effect when
3122 the input contains some limited values or when the number of
3123 servers is a multiple of one of the hash's components (64
3124 for SDBM, 33 for DJB2). Enabling avalanche tends to make the
3125 result less predictable, but it's also not as smooth as when
3126 using the original function. Some testing might be needed
3127 with some workloads. This hash is one of the many proposed
3128 by Bob Jenkins.
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003129
Bhaskar98634f02013-10-29 23:30:51 -04003130 The default hash type is "map-based" and is recommended for most usages. The
3131 default function is "sdbm", the selection of a function should be based on
3132 the range of the values being hashed.
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003133
3134 See also : "balance", "server"
3135
3136
Willy Tarreau0ba27502007-12-24 16:55:16 +01003137http-check disable-on-404
3138 Enable a maintenance mode upon HTTP/404 response to health-checks
3139 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau2769aa02007-12-27 18:26:09 +01003140 yes | no | yes | yes
Willy Tarreau0ba27502007-12-24 16:55:16 +01003141 Arguments : none
3142
3143 When this option is set, a server which returns an HTTP code 404 will be
3144 excluded from further load-balancing, but will still receive persistent
3145 connections. This provides a very convenient method for Web administrators
3146 to perform a graceful shutdown of their servers. It is also important to note
3147 that a server which is detected as failed while it was in this mode will not
3148 generate an alert, just a notice. If the server responds 2xx or 3xx again, it
3149 will immediately be reinserted into the farm. The status on the stats page
3150 reports "NOLB" for a server in this mode. It is important to note that this
Willy Tarreaubd741542010-03-16 18:46:54 +01003151 option only works in conjunction with the "httpchk" option. If this option
3152 is used with "http-check expect", then it has precedence over it so that 404
3153 responses will still be considered as soft-stop.
3154
3155 See also : "option httpchk", "http-check expect"
3156
3157
3158http-check expect [!] <match> <pattern>
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003159 Make HTTP health checks consider response contents or specific status codes
Willy Tarreaubd741542010-03-16 18:46:54 +01003160 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau1ee51a62011-08-19 20:04:17 +02003161 yes | no | yes | yes
Willy Tarreaubd741542010-03-16 18:46:54 +01003162 Arguments :
3163 <match> is a keyword indicating how to look for a specific pattern in the
3164 response. The keyword may be one of "status", "rstatus",
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003165 "string", or "rstring". The keyword may be preceded by an
Willy Tarreaubd741542010-03-16 18:46:54 +01003166 exclamation mark ("!") to negate the match. Spaces are allowed
3167 between the exclamation mark and the keyword. See below for more
3168 details on the supported keywords.
3169
3170 <pattern> is the pattern to look for. It may be a string or a regular
3171 expression. If the pattern contains spaces, they must be escaped
3172 with the usual backslash ('\').
3173
3174 By default, "option httpchk" considers that response statuses 2xx and 3xx
3175 are valid, and that others are invalid. When "http-check expect" is used,
3176 it defines what is considered valid or invalid. Only one "http-check"
3177 statement is supported in a backend. If a server fails to respond or times
3178 out, the check obviously fails. The available matches are :
3179
3180 status <string> : test the exact string match for the HTTP status code.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003181 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003182 response's status code is exactly this string. If the
3183 "status" keyword is prefixed with "!", then the response
3184 will be considered invalid if the status code matches.
3185
3186 rstatus <regex> : test a regular expression for the HTTP status code.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003187 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003188 response's status code matches the expression. If the
3189 "rstatus" keyword is prefixed with "!", then the response
3190 will be considered invalid if the status code matches.
3191 This is mostly used to check for multiple codes.
3192
3193 string <string> : test the exact string match in the HTTP response body.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003194 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003195 response's body contains this exact string. If the
3196 "string" keyword is prefixed with "!", then the response
3197 will be considered invalid if the body contains this
3198 string. This can be used to look for a mandatory word at
3199 the end of a dynamic page, or to detect a failure when a
3200 specific error appears on the check page (eg: a stack
3201 trace).
3202
3203 rstring <regex> : test a regular expression on the HTTP response body.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003204 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003205 response's body matches this expression. If the "rstring"
3206 keyword is prefixed with "!", then the response will be
3207 considered invalid if the body matches the expression.
3208 This can be used to look for a mandatory word at the end
3209 of a dynamic page, or to detect a failure when a specific
3210 error appears on the check page (eg: a stack trace).
3211
3212 It is important to note that the responses will be limited to a certain size
3213 defined by the global "tune.chksize" option, which defaults to 16384 bytes.
3214 Thus, too large responses may not contain the mandatory pattern when using
3215 "string" or "rstring". If a large response is absolutely required, it is
3216 possible to change the default max size by setting the global variable.
3217 However, it is worth keeping in mind that parsing very large responses can
3218 waste some CPU cycles, especially when regular expressions are used, and that
3219 it is always better to focus the checks on smaller resources.
3220
Cyril Bonté32602d22015-01-30 00:07:07 +01003221 Also "http-check expect" doesn't support HTTP keep-alive. Keep in mind that it
3222 will automatically append a "Connection: close" header, meaning that this
3223 header should not be present in the request provided by "option httpchk".
3224
Willy Tarreaubd741542010-03-16 18:46:54 +01003225 Last, if "http-check expect" is combined with "http-check disable-on-404",
3226 then this last one has precedence when the server responds with 404.
3227
3228 Examples :
3229 # only accept status 200 as valid
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01003230 http-check expect status 200
Willy Tarreaubd741542010-03-16 18:46:54 +01003231
3232 # consider SQL errors as errors
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01003233 http-check expect ! string SQL\ Error
Willy Tarreaubd741542010-03-16 18:46:54 +01003234
3235 # consider status 5xx only as errors
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01003236 http-check expect ! rstatus ^5
Willy Tarreaubd741542010-03-16 18:46:54 +01003237
3238 # check that we have a correct hexadecimal tag before /html
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01003239 http-check expect rstring <!--tag:[0-9a-f]*</html>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003240
Willy Tarreaubd741542010-03-16 18:46:54 +01003241 See also : "option httpchk", "http-check disable-on-404"
Willy Tarreau2769aa02007-12-27 18:26:09 +01003242
3243
Willy Tarreauef781042010-01-27 11:53:01 +01003244http-check send-state
3245 Enable emission of a state header with HTTP health checks
3246 May be used in sections : defaults | frontend | listen | backend
3247 yes | no | yes | yes
3248 Arguments : none
3249
3250 When this option is set, haproxy will systematically send a special header
3251 "X-Haproxy-Server-State" with a list of parameters indicating to each server
3252 how they are seen by haproxy. This can be used for instance when a server is
3253 manipulated without access to haproxy and the operator needs to know whether
3254 haproxy still sees it up or not, or if the server is the last one in a farm.
3255
3256 The header is composed of fields delimited by semi-colons, the first of which
3257 is a word ("UP", "DOWN", "NOLB"), possibly followed by a number of valid
3258 checks on the total number before transition, just as appears in the stats
3259 interface. Next headers are in the form "<variable>=<value>", indicating in
3260 no specific order some values available in the stats interface :
Joseph Lynch514061c2015-01-15 17:52:59 -08003261 - a variable "address", containing the address of the backend server.
3262 This corresponds to the <address> field in the server declaration. For
3263 unix domain sockets, it will read "unix".
3264
3265 - a variable "port", containing the port of the backend server. This
3266 corresponds to the <port> field in the server declaration. For unix
3267 domain sockets, it will read "unix".
3268
Willy Tarreauef781042010-01-27 11:53:01 +01003269 - a variable "name", containing the name of the backend followed by a slash
3270 ("/") then the name of the server. This can be used when a server is
3271 checked in multiple backends.
3272
3273 - a variable "node" containing the name of the haproxy node, as set in the
3274 global "node" variable, otherwise the system's hostname if unspecified.
3275
3276 - a variable "weight" indicating the weight of the server, a slash ("/")
3277 and the total weight of the farm (just counting usable servers). This
3278 helps to know if other servers are available to handle the load when this
3279 one fails.
3280
3281 - a variable "scur" indicating the current number of concurrent connections
3282 on the server, followed by a slash ("/") then the total number of
3283 connections on all servers of the same backend.
3284
3285 - a variable "qcur" indicating the current number of requests in the
3286 server's queue.
3287
3288 Example of a header received by the application server :
3289 >>> X-Haproxy-Server-State: UP 2/3; name=bck/srv2; node=lb1; weight=1/2; \
3290 scur=13/22; qcur=0
3291
3292 See also : "option httpchk", "http-check disable-on-404"
3293
Willy Tarreauccbcc372012-12-27 12:37:57 +01003294http-request { allow | deny | tarpit | auth [realm <realm>] | redirect <rule> |
Willy Tarreauf4c43c12013-06-11 17:01:13 +02003295 add-header <name> <fmt> | set-header <name> <fmt> |
Thierry FOURNIER82bf70d2015-05-26 17:58:29 +02003296 capture <sample> [ len <length> | id <id> ] |
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02003297 del-header <name> | set-nice <nice> | set-log-level <level> |
Sasha Pachev218f0642014-06-16 12:05:59 -06003298 replace-header <name> <match-regex> <replace-fmt> |
3299 replace-value <name> <match-regex> <replace-fmt> |
Willy Tarreaua0dc23f2015-01-22 20:46:11 +01003300 set-method <fmt> | set-path <fmt> | set-query <fmt> |
3301 set-uri <fmt> | set-tos <tos> | set-mark <mark> |
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02003302 add-acl(<file name>) <key fmt> |
3303 del-acl(<file name>) <key fmt> |
3304 del-map(<file name>) <key fmt> |
Baptiste Assmannbb7e86a2014-09-03 18:29:47 +02003305 set-map(<file name>) <key fmt> <value fmt> |
Thierry FOURNIER90da1912015-03-05 11:17:06 +01003306 { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] |
3307 lua <function name>
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02003308 }
Cyril Bontéf0c60612010-02-06 14:44:47 +01003309 [ { if | unless } <condition> ]
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01003310 Access control for Layer 7 requests
3311
3312 May be used in sections: defaults | frontend | listen | backend
3313 no | yes | yes | yes
3314
Willy Tarreau20b0de52012-12-24 15:45:22 +01003315 The http-request statement defines a set of rules which apply to layer 7
3316 processing. The rules are evaluated in their declaration order when they are
3317 met in a frontend, listen or backend section. Any rule may optionally be
3318 followed by an ACL-based condition, in which case it will only be evaluated
3319 if the condition is true.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01003320
Willy Tarreau20b0de52012-12-24 15:45:22 +01003321 The first keyword is the rule's action. Currently supported actions include :
3322 - "allow" : this stops the evaluation of the rules and lets the request
3323 pass the check. No further "http-request" rules are evaluated.
3324
3325 - "deny" : this stops the evaluation of the rules and immediately rejects
3326 the request and emits an HTTP 403 error. No further "http-request" rules
3327 are evaluated.
3328
Willy Tarreauccbcc372012-12-27 12:37:57 +01003329 - "tarpit" : this stops the evaluation of the rules and immediately blocks
3330 the request without responding for a delay specified by "timeout tarpit"
3331 or "timeout connect" if the former is not set. After that delay, if the
3332 client is still connected, an HTTP error 500 is returned so that the
3333 client does not suspect it has been tarpitted. Logs will report the flags
3334 "PT". The goal of the tarpit rule is to slow down robots during an attack
3335 when they're limited on the number of concurrent requests. It can be very
3336 efficient against very dumb robots, and will significantly reduce the
3337 load on firewalls compared to a "deny" rule. But when facing "correctly"
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03003338 developed robots, it can make things worse by forcing haproxy and the
Willy Tarreauccbcc372012-12-27 12:37:57 +01003339 front firewall to support insane number of concurrent connections.
3340
Willy Tarreau20b0de52012-12-24 15:45:22 +01003341 - "auth" : this stops the evaluation of the rules and immediately responds
3342 with an HTTP 401 or 407 error code to invite the user to present a valid
3343 user name and password. No further "http-request" rules are evaluated. An
3344 optional "realm" parameter is supported, it sets the authentication realm
3345 that is returned with the response (typically the application's name).
3346
Willy Tarreau81499eb2012-12-27 12:19:02 +01003347 - "redirect" : this performs an HTTP redirection based on a redirect rule.
3348 This is exactly the same as the "redirect" statement except that it
3349 inserts a redirect rule which can be processed in the middle of other
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01003350 "http-request" rules and that these rules use the "log-format" strings.
3351 See the "redirect" keyword for the rule's syntax.
Willy Tarreau81499eb2012-12-27 12:19:02 +01003352
Willy Tarreau20b0de52012-12-24 15:45:22 +01003353 - "add-header" appends an HTTP header field whose name is specified in
3354 <name> and whose value is defined by <fmt> which follows the log-format
3355 rules (see Custom Log Format in section 8.2.4). This is particularly
3356 useful to pass connection-specific information to the server (eg: the
3357 client's SSL certificate), or to combine several headers into one. This
3358 rule is not final, so it is possible to add other similar rules. Note
3359 that header addition is performed immediately, so one rule might reuse
3360 the resulting header from a previous rule.
3361
3362 - "set-header" does the same as "add-header" except that the header name
3363 is first removed if it existed. This is useful when passing security
3364 information to the server, where the header must not be manipulated by
Willy Tarreau85603282015-01-21 20:39:27 +01003365 external users. Note that the new value is computed before the removal so
3366 it is possible to concatenate a value to an existing header.
Willy Tarreau20b0de52012-12-24 15:45:22 +01003367
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02003368 - "del-header" removes all HTTP header fields whose name is specified in
3369 <name>.
3370
Sasha Pachev218f0642014-06-16 12:05:59 -06003371 - "replace-header" matches the regular expression in all occurrences of
3372 header field <name> according to <match-regex>, and replaces them with
3373 the <replace-fmt> argument. Format characters are allowed in replace-fmt
3374 and work like in <fmt> arguments in "add-header". The match is only
3375 case-sensitive. It is important to understand that this action only
3376 considers whole header lines, regardless of the number of values they
3377 may contain. This usage is suited to headers naturally containing commas
3378 in their value, such as If-Modified-Since and so on.
3379
3380 Example:
3381
3382 http-request replace-header Cookie foo=([^;]*);(.*) foo=\1;ip=%bi;\2
3383
3384 applied to:
3385
3386 Cookie: foo=foobar; expires=Tue, 14-Jun-2016 01:40:45 GMT;
3387
3388 outputs:
3389
3390 Cookie: foo=foobar;ip=192.168.1.20; expires=Tue, 14-Jun-2016 01:40:45 GMT;
3391
3392 assuming the backend IP is 192.168.1.20
3393
3394 - "replace-value" works like "replace-header" except that it matches the
3395 regex against every comma-delimited value of the header field <name>
3396 instead of the entire header. This is suited for all headers which are
3397 allowed to carry more than one value. An example could be the Accept
3398 header.
3399
3400 Example:
3401
3402 http-request replace-value X-Forwarded-For ^192\.168\.(.*)$ 172.16.\1
3403
3404 applied to:
3405
3406 X-Forwarded-For: 192.168.10.1, 192.168.13.24, 10.0.0.37
3407
3408 outputs:
3409
3410 X-Forwarded-For: 172.16.10.1, 172.16.13.24, 10.0.0.37
3411
Willy Tarreaua0dc23f2015-01-22 20:46:11 +01003412 - "set-method" rewrites the request method with the result of the
3413 evaluation of format string <fmt>. There should be very few valid reasons
3414 for having to do so as this is more likely to break something than to fix
3415 it.
3416
3417 - "set-path" rewrites the request path with the result of the evaluation of
3418 format string <fmt>. The query string, if any, is left intact. If a
3419 scheme and authority is found before the path, they are left intact as
3420 well. If the request doesn't have a path ("*"), this one is replaced with
3421 the format. This can be used to prepend a directory component in front of
3422 a path for example. See also "set-query" and "set-uri".
3423
3424 Example :
3425 # prepend the host name before the path
3426 http-request set-path /%[hdr(host)]%[path]
3427
3428 - "set-query" rewrites the request's query string which appears after the
3429 first question mark ("?") with the result of the evaluation of format
3430 string <fmt>. The part prior to the question mark is left intact. If the
3431 request doesn't contain a question mark and the new value is not empty,
3432 then one is added at the end of the URI, followed by the new value. If
3433 a question mark was present, it will never be removed even if the value
3434 is empty. This can be used to add or remove parameters from the query
3435 string. See also "set-query" and "set-uri".
3436
3437 Example :
3438 # replace "%3D" with "=" in the query string
3439 http-request set-query %[query,regsub(%3D,=,g)]
3440
3441 - "set-uri" rewrites the request URI with the result of the evaluation of
3442 format string <fmt>. The scheme, authority, path and query string are all
3443 replaced at once. This can be used to rewrite hosts in front of proxies,
3444 or to perform complex modifications to the URI such as moving parts
3445 between the path and the query string. See also "set-path" and
3446 "set-query".
3447
Willy Tarreauf4c43c12013-06-11 17:01:13 +02003448 - "set-nice" sets the "nice" factor of the current request being processed.
3449 It only has effect against the other requests being processed at the same
3450 time. The default value is 0, unless altered by the "nice" setting on the
3451 "bind" line. The accepted range is -1024..1024. The higher the value, the
3452 nicest the request will be. Lower values will make the request more
3453 important than other ones. This can be useful to improve the speed of
3454 some requests, or lower the priority of non-important requests. Using
3455 this setting without prior experimentation can cause some major slowdown.
3456
Willy Tarreau9a355ec2013-06-11 17:45:46 +02003457 - "set-log-level" is used to change the log level of the current request
3458 when a certain condition is met. Valid levels are the 8 syslog levels
3459 (see the "log" keyword) plus the special level "silent" which disables
3460 logging for this request. This rule is not final so the last matching
3461 rule wins. This rule can be useful to disable health checks coming from
3462 another equipment.
3463
Willy Tarreau42cf39e2013-06-11 18:51:32 +02003464 - "set-tos" is used to set the TOS or DSCP field value of packets sent to
3465 the client to the value passed in <tos> on platforms which support this.
3466 This value represents the whole 8 bits of the IP TOS field, and can be
3467 expressed both in decimal or hexadecimal format (prefixed by "0x"). Note
3468 that only the 6 higher bits are used in DSCP or TOS, and the two lower
3469 bits are always 0. This can be used to adjust some routing behaviour on
3470 border routers based on some information from the request. See RFC 2474,
3471 2597, 3260 and 4594 for more information.
3472
Willy Tarreau51347ed2013-06-11 19:34:13 +02003473 - "set-mark" is used to set the Netfilter MARK on all packets sent to the
3474 client to the value passed in <mark> on platforms which support it. This
3475 value is an unsigned 32 bit value which can be matched by netfilter and
3476 by the routing table. It can be expressed both in decimal or hexadecimal
3477 format (prefixed by "0x"). This can be useful to force certain packets to
3478 take a different route (for example a cheaper network path for bulk
3479 downloads). This works on Linux kernels 2.6.32 and above and requires
3480 admin privileges.
3481
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02003482 - "add-acl" is used to add a new entry into an ACL. The ACL must be loaded
3483 from a file (even a dummy empty file). The file name of the ACL to be
3484 updated is passed between parentheses. It takes one argument: <key fmt>,
3485 which follows log-format rules, to collect content of the new entry. It
3486 performs a lookup in the ACL before insertion, to avoid duplicated (or
3487 more) values. This lookup is done by a linear search and can be expensive
3488 with large lists! It is the equivalent of the "add acl" command from the
3489 stats socket, but can be triggered by an HTTP request.
3490
3491 - "del-acl" is used to delete an entry from an ACL. The ACL must be loaded
3492 from a file (even a dummy empty file). The file name of the ACL to be
3493 updated is passed between parentheses. It takes one argument: <key fmt>,
3494 which follows log-format rules, to collect content of the entry to delete.
3495 It is the equivalent of the "del acl" command from the stats socket, but
3496 can be triggered by an HTTP request.
3497
3498 - "del-map" is used to delete an entry from a MAP. The MAP must be loaded
3499 from a file (even a dummy empty file). The file name of the MAP to be
3500 updated is passed between parentheses. It takes one argument: <key fmt>,
3501 which follows log-format rules, to collect content of the entry to delete.
3502 It takes one argument: "file name" It is the equivalent of the "del map"
3503 command from the stats socket, but can be triggered by an HTTP request.
3504
3505 - "set-map" is used to add a new entry into a MAP. The MAP must be loaded
3506 from a file (even a dummy empty file). The file name of the MAP to be
3507 updated is passed between parentheses. It takes 2 arguments: <key fmt>,
3508 which follows log-format rules, used to collect MAP key, and <value fmt>,
3509 which follows log-format rules, used to collect content for the new entry.
3510 It performs a lookup in the MAP before insertion, to avoid duplicated (or
3511 more) values. This lookup is done by a linear search and can be expensive
3512 with large lists! It is the equivalent of the "set map" command from the
3513 stats socket, but can be triggered by an HTTP request.
3514
Thierry FOURNIER82bf70d2015-05-26 17:58:29 +02003515 - capture <sample> [ len <length> | id <id> ] :
Willy Tarreaua9083d02015-05-08 15:27:59 +02003516 captures sample expression <sample> from the request buffer, and converts
3517 it to a string of at most <len> characters. The resulting string is
3518 stored into the next request "capture" slot, so it will possibly appear
3519 next to some captured HTTP headers. It will then automatically appear in
3520 the logs, and it will be possible to extract it using sample fetch rules
3521 to feed it into headers or anything. The length should be limited given
3522 that this size will be allocated for each capture during the whole
3523 session life. Please check section 7.3 (Fetching samples) and "capture
3524 request header" for more information.
3525
Thierry FOURNIER82bf70d2015-05-26 17:58:29 +02003526 If the keyword "id" is used instead of "len", the action tries to store
3527 the captured string in a previously declared capture slot. This is useful
3528 to run captures in backends. The slot id can be declared by a previous
3529 directive "http-request capture" or with the "declare capture" keyword.
3530
Willy Tarreau09448f72014-06-25 18:12:15 +02003531 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] :
3532 enables tracking of sticky counters from current request. These rules
3533 do not stop evaluation and do not change default action. Three sets of
3534 counters may be simultaneously tracked by the same connection. The first
3535 "track-sc0" rule executed enables tracking of the counters of the
3536 specified table as the first set. The first "track-sc1" rule executed
3537 enables tracking of the counters of the specified table as the second
3538 set. The first "track-sc2" rule executed enables tracking of the
3539 counters of the specified table as the third set. It is a recommended
3540 practice to use the first set of counters for the per-frontend counters
3541 and the second set for the per-backend ones. But this is just a
3542 guideline, all may be used everywhere.
3543
3544 These actions take one or two arguments :
3545 <key> is mandatory, and is a sample expression rule as described
3546 in section 7.3. It describes what elements of the incoming
3547 request or connection will be analysed, extracted, combined,
3548 and used to select which table entry to update the counters.
3549
3550 <table> is an optional table to be used instead of the default one,
3551 which is the stick-table declared in the current proxy. All
3552 the counters for the matches and updates for the key will
3553 then be performed in that table until the session ends.
3554
3555 Once a "track-sc*" rule is executed, the key is looked up in the table
3556 and if it is not found, an entry is allocated for it. Then a pointer to
3557 that entry is kept during all the session's life, and this entry's
3558 counters are updated as often as possible, every time the session's
3559 counters are updated, and also systematically when the session ends.
3560 Counters are only updated for events that happen after the tracking has
3561 been started. As an exception, connection counters and request counters
3562 are systematically updated so that they reflect useful information.
3563
3564 If the entry tracks concurrent connection counters, one connection is
3565 counted for as long as the entry is tracked, and the entry will not
3566 expire during that time. Tracking counters also provides a performance
3567 advantage over just checking the keys, because only one table lookup is
3568 performed for all ACL checks that make use of it.
3569
Thierry FOURNIER90da1912015-03-05 11:17:06 +01003570 - "lua" is used to run a Lua function if the action is executed. The single
3571 parameter is the name of the function to run. The prototype of the
3572 function is documented in the API documentation.
3573
Willy Tarreau20b0de52012-12-24 15:45:22 +01003574 There is no limit to the number of http-request statements per instance.
3575
3576 It is important to know that http-request rules are processed very early in
3577 the HTTP processing, just after "block" rules and before "reqdel" or "reqrep"
3578 rules. That way, headers added by "add-header"/"set-header" are visible by
3579 almost all further ACL rules.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01003580
3581 Example:
Cyril Bonté78caf842010-03-10 22:41:43 +01003582 acl nagios src 192.168.129.3
3583 acl local_net src 192.168.0.0/16
3584 acl auth_ok http_auth(L1)
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01003585
Cyril Bonté78caf842010-03-10 22:41:43 +01003586 http-request allow if nagios
3587 http-request allow if local_net auth_ok
3588 http-request auth realm Gimme if local_net auth_ok
3589 http-request deny
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01003590
Cyril Bonté78caf842010-03-10 22:41:43 +01003591 Example:
3592 acl auth_ok http_auth_group(L1) G1
Cyril Bonté78caf842010-03-10 22:41:43 +01003593 http-request auth unless auth_ok
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01003594
Willy Tarreau20b0de52012-12-24 15:45:22 +01003595 Example:
3596 http-request set-header X-Haproxy-Current-Date %T
3597 http-request set-header X-SSL %[ssl_fc]
3598 http-request set-header X-SSL-Session_ID %[ssl_fc_session_id]
3599 http-request set-header X-SSL-Client-Verify %[ssl_c_verify]
3600 http-request set-header X-SSL-Client-DN %{+Q}[ssl_c_s_dn]
3601 http-request set-header X-SSL-Client-CN %{+Q}[ssl_c_s_dn(cn)]
3602 http-request set-header X-SSL-Issuer %{+Q}[ssl_c_i_dn]
3603 http-request set-header X-SSL-Client-NotBefore %{+Q}[ssl_c_notbefore]
3604 http-request set-header X-SSL-Client-NotAfter %{+Q}[ssl_c_notafter]
3605
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02003606 Example:
3607 acl key req.hdr(X-Add-Acl-Key) -m found
3608 acl add path /addacl
3609 acl del path /delacl
3610
3611 acl myhost hdr(Host) -f myhost.lst
3612
3613 http-request add-acl(myhost.lst) %[req.hdr(X-Add-Acl-Key)] if key add
3614 http-request del-acl(myhost.lst) %[req.hdr(X-Add-Acl-Key)] if key del
3615
3616 Example:
3617 acl value req.hdr(X-Value) -m found
3618 acl setmap path /setmap
3619 acl delmap path /delmap
3620
3621 use_backend bk_appli if { hdr(Host),map_str(map.lst) -m found }
3622
3623 http-request set-map(map.lst) %[src] %[req.hdr(X-Value)] if setmap value
3624 http-request del-map(map.lst) %[src] if delmap
3625
Cyril Bonté2be1b3f2010-09-30 23:46:30 +02003626 See also : "stats http-request", section 3.4 about userlists and section 7
3627 about ACL usage.
Willy Tarreauef781042010-01-27 11:53:01 +01003628
Willy Tarreauf4c43c12013-06-11 17:01:13 +02003629http-response { allow | deny | add-header <name> <fmt> | set-nice <nice> |
Willy Tarreau51d861a2015-05-22 17:30:48 +02003630 capture <sample> id <id> | redirect <rule> |
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02003631 set-header <name> <fmt> | del-header <name> |
Sasha Pachev218f0642014-06-16 12:05:59 -06003632 replace-header <name> <regex-match> <replace-fmt> |
3633 replace-value <name> <regex-match> <replace-fmt> |
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02003634 set-log-level <level> | set-mark <mark> | set-tos <tos> |
3635 add-acl(<file name>) <key fmt> |
3636 del-acl(<file name>) <key fmt> |
3637 del-map(<file name>) <key fmt> |
Thierry FOURNIER90da1912015-03-05 11:17:06 +01003638 set-map(<file name>) <key fmt> <value fmt> |
3639 lua <function name>
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02003640 }
Lukas Tribus2dd1d1a2013-06-19 23:34:41 +02003641 [ { if | unless } <condition> ]
Willy Tarreaue365c0b2013-06-11 16:06:12 +02003642 Access control for Layer 7 responses
3643
3644 May be used in sections: defaults | frontend | listen | backend
3645 no | yes | yes | yes
3646
3647 The http-response statement defines a set of rules which apply to layer 7
3648 processing. The rules are evaluated in their declaration order when they are
3649 met in a frontend, listen or backend section. Any rule may optionally be
3650 followed by an ACL-based condition, in which case it will only be evaluated
3651 if the condition is true. Since these rules apply on responses, the backend
3652 rules are applied first, followed by the frontend's rules.
3653
3654 The first keyword is the rule's action. Currently supported actions include :
3655 - "allow" : this stops the evaluation of the rules and lets the response
3656 pass the check. No further "http-response" rules are evaluated for the
3657 current section.
3658
3659 - "deny" : this stops the evaluation of the rules and immediately rejects
3660 the response and emits an HTTP 502 error. No further "http-response"
3661 rules are evaluated.
3662
3663 - "add-header" appends an HTTP header field whose name is specified in
3664 <name> and whose value is defined by <fmt> which follows the log-format
3665 rules (see Custom Log Format in section 8.2.4). This may be used to send
3666 a cookie to a client for example, or to pass some internal information.
3667 This rule is not final, so it is possible to add other similar rules.
3668 Note that header addition is performed immediately, so one rule might
3669 reuse the resulting header from a previous rule.
3670
3671 - "set-header" does the same as "add-header" except that the header name
3672 is first removed if it existed. This is useful when passing security
3673 information to the server, where the header must not be manipulated by
3674 external users.
3675
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02003676 - "del-header" removes all HTTP header fields whose name is specified in
3677 <name>.
3678
Sasha Pachev218f0642014-06-16 12:05:59 -06003679 - "replace-header" matches the regular expression in all occurrences of
3680 header field <name> according to <match-regex>, and replaces them with
3681 the <replace-fmt> argument. Format characters are allowed in replace-fmt
3682 and work like in <fmt> arguments in "add-header". The match is only
3683 case-sensitive. It is important to understand that this action only
3684 considers whole header lines, regardless of the number of values they
3685 may contain. This usage is suited to headers naturally containing commas
3686 in their value, such as Set-Cookie, Expires and so on.
3687
3688 Example:
3689
3690 http-response replace-header Set-Cookie (C=[^;]*);(.*) \1;ip=%bi;\2
3691
3692 applied to:
3693
3694 Set-Cookie: C=1; expires=Tue, 14-Jun-2016 01:40:45 GMT
3695
3696 outputs:
3697
3698 Set-Cookie: C=1;ip=192.168.1.20; expires=Tue, 14-Jun-2016 01:40:45 GMT
3699
3700 assuming the backend IP is 192.168.1.20.
3701
3702 - "replace-value" works like "replace-header" except that it matches the
3703 regex against every comma-delimited value of the header field <name>
3704 instead of the entire header. This is suited for all headers which are
3705 allowed to carry more than one value. An example could be the Accept
3706 header.
3707
3708 Example:
3709
3710 http-response replace-value Cache-control ^public$ private
3711
3712 applied to:
3713
3714 Cache-Control: max-age=3600, public
3715
3716 outputs:
3717
3718 Cache-Control: max-age=3600, private
3719
Willy Tarreauf4c43c12013-06-11 17:01:13 +02003720 - "set-nice" sets the "nice" factor of the current request being processed.
3721 It only has effect against the other requests being processed at the same
3722 time. The default value is 0, unless altered by the "nice" setting on the
3723 "bind" line. The accepted range is -1024..1024. The higher the value, the
3724 nicest the request will be. Lower values will make the request more
3725 important than other ones. This can be useful to improve the speed of
3726 some requests, or lower the priority of non-important requests. Using
3727 this setting without prior experimentation can cause some major slowdown.
3728
Willy Tarreau9a355ec2013-06-11 17:45:46 +02003729 - "set-log-level" is used to change the log level of the current request
3730 when a certain condition is met. Valid levels are the 8 syslog levels
3731 (see the "log" keyword) plus the special level "silent" which disables
3732 logging for this request. This rule is not final so the last matching
3733 rule wins. This rule can be useful to disable health checks coming from
3734 another equipment.
3735
Willy Tarreau42cf39e2013-06-11 18:51:32 +02003736 - "set-tos" is used to set the TOS or DSCP field value of packets sent to
3737 the client to the value passed in <tos> on platforms which support this.
3738 This value represents the whole 8 bits of the IP TOS field, and can be
3739 expressed both in decimal or hexadecimal format (prefixed by "0x"). Note
3740 that only the 6 higher bits are used in DSCP or TOS, and the two lower
3741 bits are always 0. This can be used to adjust some routing behaviour on
3742 border routers based on some information from the request. See RFC 2474,
3743 2597, 3260 and 4594 for more information.
3744
Willy Tarreau51347ed2013-06-11 19:34:13 +02003745 - "set-mark" is used to set the Netfilter MARK on all packets sent to the
3746 client to the value passed in <mark> on platforms which support it. This
3747 value is an unsigned 32 bit value which can be matched by netfilter and
3748 by the routing table. It can be expressed both in decimal or hexadecimal
3749 format (prefixed by "0x"). This can be useful to force certain packets to
3750 take a different route (for example a cheaper network path for bulk
3751 downloads). This works on Linux kernels 2.6.32 and above and requires
3752 admin privileges.
3753
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02003754 - "add-acl" is used to add a new entry into an ACL. The ACL must be loaded
3755 from a file (even a dummy empty file). The file name of the ACL to be
3756 updated is passed between parentheses. It takes one argument: <key fmt>,
3757 which follows log-format rules, to collect content of the new entry. It
3758 performs a lookup in the ACL before insertion, to avoid duplicated (or
3759 more) values. This lookup is done by a linear search and can be expensive
3760 with large lists! It is the equivalent of the "add acl" command from the
3761 stats socket, but can be triggered by an HTTP response.
3762
3763 - "del-acl" is used to delete an entry from an ACL. The ACL must be loaded
3764 from a file (even a dummy empty file). The file name of the ACL to be
3765 updated is passed between parentheses. It takes one argument: <key fmt>,
3766 which follows log-format rules, to collect content of the entry to delete.
3767 It is the equivalent of the "del acl" command from the stats socket, but
3768 can be triggered by an HTTP response.
3769
3770 - "del-map" is used to delete an entry from a MAP. The MAP must be loaded
3771 from a file (even a dummy empty file). The file name of the MAP to be
3772 updated is passed between parentheses. It takes one argument: <key fmt>,
3773 which follows log-format rules, to collect content of the entry to delete.
3774 It takes one argument: "file name" It is the equivalent of the "del map"
3775 command from the stats socket, but can be triggered by an HTTP response.
3776
3777 - "set-map" is used to add a new entry into a MAP. The MAP must be loaded
3778 from a file (even a dummy empty file). The file name of the MAP to be
3779 updated is passed between parentheses. It takes 2 arguments: <key fmt>,
3780 which follows log-format rules, used to collect MAP key, and <value fmt>,
3781 which follows log-format rules, used to collect content for the new entry.
3782 It performs a lookup in the MAP before insertion, to avoid duplicated (or
3783 more) values. This lookup is done by a linear search and can be expensive
3784 with large lists! It is the equivalent of the "set map" command from the
3785 stats socket, but can be triggered by an HTTP response.
3786
Thierry FOURNIER90da1912015-03-05 11:17:06 +01003787 - "lua" is used to run a Lua function if the action is executed. The single
3788 parameter is the name of the function to run. The prototype of the
3789 function is documented in the API documentation.
3790
Thierry FOURNIERe80fada2015-05-26 18:06:31 +02003791 - capture <sample> id <id> :
3792 captures sample expression <sample> from the response buffer, and converts
3793 it to a string. The resulting string is stored into the next request
3794 "capture" slot, so it will possibly appear next to some captured HTTP
3795 headers. It will then automatically appear in the logs, and it will be
3796 possible to extract it using sample fetch rules to feed it into headers or
3797 anything. Please check section 7.3 (Fetching samples) and "capture
3798 response header" for more information.
3799
3800 The keyword "id" is the id of the capture slot which is used for storing
3801 the string. The capture slot must be defined in an associated frontend.
3802 This is useful to run captures in backends. The slot id can be declared by
3803 a previous directive "http-response capture" or with the "declare capture"
3804 keyword.
3805
Willy Tarreau51d861a2015-05-22 17:30:48 +02003806 - "redirect" : this performs an HTTP redirection based on a redirect rule.
3807 This supports a format string similarly to "http-request redirect" rules,
3808 with the exception that only the "location" type of redirect is possible
3809 on the response. See the "redirect" keyword for the rule's syntax. When
3810 a redirect rule is applied during a response, connections to the server
3811 are closed so that no data can be forwarded from the server to the client.
3812
Willy Tarreaue365c0b2013-06-11 16:06:12 +02003813 There is no limit to the number of http-response statements per instance.
3814
Godbach09250262013-07-02 01:19:15 +08003815 It is important to know that http-response rules are processed very early in
Willy Tarreaue365c0b2013-06-11 16:06:12 +02003816 the HTTP processing, before "reqdel" or "reqrep" rules. That way, headers
3817 added by "add-header"/"set-header" are visible by almost all further ACL
3818 rules.
3819
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02003820 Example:
3821 acl key_acl res.hdr(X-Acl-Key) -m found
3822
3823 acl myhost hdr(Host) -f myhost.lst
3824
3825 http-response add-acl(myhost.lst) %[res.hdr(X-Acl-Key)] if key_acl
3826 http-response del-acl(myhost.lst) %[res.hdr(X-Acl-Key)] if key_acl
3827
3828 Example:
3829 acl value res.hdr(X-Value) -m found
3830
3831 use_backend bk_appli if { hdr(Host),map_str(map.lst) -m found }
3832
3833 http-response set-map(map.lst) %[src] %[res.hdr(X-Value)] if value
3834 http-response del-map(map.lst) %[src] if ! value
3835
Willy Tarreaue365c0b2013-06-11 16:06:12 +02003836 See also : "http-request", section 3.4 about userlists and section 7 about
3837 ACL usage.
3838
Baptiste Assmann5ecb77f2013-10-06 23:24:13 +02003839
Mark Lamourinec2247f02012-01-04 13:02:01 -05003840http-send-name-header [<header>]
3841 Add the server name to a request. Use the header string given by <header>
3842
3843 May be used in sections: defaults | frontend | listen | backend
3844 yes | no | yes | yes
3845
3846 Arguments :
3847
3848 <header> The header string to use to send the server name
3849
3850 The "http-send-name-header" statement causes the name of the target
3851 server to be added to the headers of an HTTP request. The name
3852 is added with the header string proved.
3853
3854 See also : "server"
3855
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01003856id <value>
Willy Tarreau53fb4ae2009-10-04 23:04:08 +02003857 Set a persistent ID to a proxy.
3858 May be used in sections : defaults | frontend | listen | backend
3859 no | yes | yes | yes
3860 Arguments : none
3861
3862 Set a persistent ID for the proxy. This ID must be unique and positive.
3863 An unused ID will automatically be assigned if unset. The first assigned
3864 value will be 1. This ID is currently only returned in statistics.
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01003865
3866
Cyril Bonté0d4bf012010-04-25 23:21:46 +02003867ignore-persist { if | unless } <condition>
3868 Declare a condition to ignore persistence
3869 May be used in sections: defaults | frontend | listen | backend
3870 no | yes | yes | yes
3871
3872 By default, when cookie persistence is enabled, every requests containing
3873 the cookie are unconditionally persistent (assuming the target server is up
3874 and running).
3875
3876 The "ignore-persist" statement allows one to declare various ACL-based
3877 conditions which, when met, will cause a request to ignore persistence.
3878 This is sometimes useful to load balance requests for static files, which
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03003879 often don't require persistence. This can also be used to fully disable
Cyril Bonté0d4bf012010-04-25 23:21:46 +02003880 persistence for a specific User-Agent (for example, some web crawler bots).
3881
3882 Combined with "appsession", it can also help reduce HAProxy memory usage, as
3883 the appsession table won't grow if persistence is ignored.
3884
3885 The persistence is ignored when an "if" condition is met, or unless an
3886 "unless" condition is met.
3887
3888 See also : "force-persist", "cookie", and section 7 about ACL usage.
3889
3890
Willy Tarreau2769aa02007-12-27 18:26:09 +01003891log global
Willy Tarreau18324f52014-06-27 18:10:07 +02003892log <address> [len <length>] <facility> [<level> [<minlevel>]]
William Lallemand0f99e342011-10-12 17:50:54 +02003893no log
Willy Tarreau2769aa02007-12-27 18:26:09 +01003894 Enable per-instance logging of events and traffic.
3895 May be used in sections : defaults | frontend | listen | backend
3896 yes | yes | yes | yes
William Lallemand0f99e342011-10-12 17:50:54 +02003897
3898 Prefix :
3899 no should be used when the logger list must be flushed. For example,
3900 if you don't want to inherit from the default logger list. This
3901 prefix does not allow arguments.
3902
Willy Tarreau2769aa02007-12-27 18:26:09 +01003903 Arguments :
3904 global should be used when the instance's logging parameters are the
3905 same as the global ones. This is the most common usage. "global"
3906 replaces <address>, <facility> and <level> with those of the log
3907 entries found in the "global" section. Only one "log global"
3908 statement may be used per instance, and this form takes no other
3909 parameter.
3910
3911 <address> indicates where to send the logs. It takes the same format as
3912 for the "global" section's logs, and can be one of :
3913
3914 - An IPv4 address optionally followed by a colon (':') and a UDP
3915 port. If no port is specified, 514 is used by default (the
3916 standard syslog port).
3917
David du Colombier24bb5f52011-03-17 10:40:23 +01003918 - An IPv6 address followed by a colon (':') and optionally a UDP
3919 port. If no port is specified, 514 is used by default (the
3920 standard syslog port).
3921
Willy Tarreau2769aa02007-12-27 18:26:09 +01003922 - A filesystem path to a UNIX domain socket, keeping in mind
3923 considerations for chroot (be sure the path is accessible
3924 inside the chroot) and uid/gid (be sure the path is
3925 appropriately writeable).
3926
William Lallemandb2f07452015-05-12 14:27:13 +02003927 You may want to reference some environment variables in the
3928 address parameter, see section 2.3 about environment variables.
Willy Tarreaudad36a32013-03-11 01:20:04 +01003929
Willy Tarreau18324f52014-06-27 18:10:07 +02003930 <length> is an optional maximum line length. Log lines larger than this
3931 value will be truncated before being sent. The reason is that
3932 syslog servers act differently on log line length. All servers
3933 support the default value of 1024, but some servers simply drop
3934 larger lines while others do log them. If a server supports long
3935 lines, it may make sense to set this value here in order to avoid
3936 truncating long lines. Similarly, if a server drops long lines,
3937 it is preferable to truncate them before sending them. Accepted
3938 values are 80 to 65535 inclusive. The default value of 1024 is
3939 generally fine for all standard usages. Some specific cases of
3940 long captures or JSON-formated logs may require larger values.
3941
Willy Tarreau2769aa02007-12-27 18:26:09 +01003942 <facility> must be one of the 24 standard syslog facilities :
3943
3944 kern user mail daemon auth syslog lpr news
3945 uucp cron auth2 ftp ntp audit alert cron2
3946 local0 local1 local2 local3 local4 local5 local6 local7
3947
3948 <level> is optional and can be specified to filter outgoing messages. By
3949 default, all messages are sent. If a level is specified, only
3950 messages with a severity at least as important as this level
Willy Tarreauf7edefa2009-05-10 17:20:05 +02003951 will be sent. An optional minimum level can be specified. If it
3952 is set, logs emitted with a more severe level than this one will
3953 be capped to this level. This is used to avoid sending "emerg"
3954 messages on all terminals on some default syslog configurations.
3955 Eight levels are known :
Willy Tarreau2769aa02007-12-27 18:26:09 +01003956
3957 emerg alert crit err warning notice info debug
3958
William Lallemand0f99e342011-10-12 17:50:54 +02003959 It is important to keep in mind that it is the frontend which decides what to
3960 log from a connection, and that in case of content switching, the log entries
3961 from the backend will be ignored. Connections are logged at level "info".
Willy Tarreaucc6c8912009-02-22 10:53:55 +01003962
3963 However, backend log declaration define how and where servers status changes
3964 will be logged. Level "notice" will be used to indicate a server going up,
3965 "warning" will be used for termination signals and definitive service
3966 termination, and "alert" will be used for when a server goes down.
3967
3968 Note : According to RFC3164, messages are truncated to 1024 bytes before
3969 being emitted.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003970
3971 Example :
3972 log global
Willy Tarreauf7edefa2009-05-10 17:20:05 +02003973 log 127.0.0.1:514 local0 notice # only send important events
3974 log 127.0.0.1:514 local0 notice notice # same but limit output level
William Lallemandb2f07452015-05-12 14:27:13 +02003975 log "${LOCAL_SYSLOG}:514" local0 notice # send to local server
Willy Tarreaudad36a32013-03-11 01:20:04 +01003976
Willy Tarreau2769aa02007-12-27 18:26:09 +01003977
William Lallemand48940402012-01-30 16:47:22 +01003978log-format <string>
Willy Tarreaufb4e7ea2015-01-07 14:55:17 +01003979 Specifies the log format string to use for traffic logs
3980 May be used in sections: defaults | frontend | listen | backend
3981 yes | yes | yes | no
William Lallemand48940402012-01-30 16:47:22 +01003982
Willy Tarreaufb4e7ea2015-01-07 14:55:17 +01003983 This directive specifies the log format string that will be used for all logs
3984 resulting from traffic passing through the frontend using this line. If the
3985 directive is used in a defaults section, all subsequent frontends will use
3986 the same log format. Please see section 8.2.4 which covers the log format
3987 string in depth.
William Lallemand48940402012-01-30 16:47:22 +01003988
Willy Tarreau094af4e2015-01-07 15:03:42 +01003989log-tag <string>
3990 Specifies the log tag to use for all outgoing logs
3991 May be used in sections: defaults | frontend | listen | backend
3992 yes | yes | yes | yes
3993
3994 Sets the tag field in the syslog header to this string. It defaults to the
3995 log-tag set in the global section, otherwise the program name as launched
3996 from the command line, which usually is "haproxy". Sometimes it can be useful
3997 to differentiate between multiple processes running on the same host, or to
3998 differentiate customer instances running in the same process. In the backend,
3999 logs about servers up/down will use this tag. As a hint, it can be convenient
4000 to set a log-tag related to a hosted customer in a defaults section then put
4001 all the frontends and backends for that customer, then start another customer
4002 in a new defaults section. See also the global "log-tag" directive.
Willy Tarreau2769aa02007-12-27 18:26:09 +01004003
Willy Tarreauc35362a2014-04-25 13:58:37 +02004004max-keep-alive-queue <value>
4005 Set the maximum server queue size for maintaining keep-alive connections
4006 May be used in sections: defaults | frontend | listen | backend
4007 yes | no | yes | yes
4008
4009 HTTP keep-alive tries to reuse the same server connection whenever possible,
4010 but sometimes it can be counter-productive, for example if a server has a lot
4011 of connections while other ones are idle. This is especially true for static
4012 servers.
4013
4014 The purpose of this setting is to set a threshold on the number of queued
4015 connections at which haproxy stops trying to reuse the same server and prefers
4016 to find another one. The default value, -1, means there is no limit. A value
4017 of zero means that keep-alive requests will never be queued. For very close
4018 servers which can be reached with a low latency and which are not sensible to
4019 breaking keep-alive, a low value is recommended (eg: local static server can
4020 use a value of 10 or less). For remote servers suffering from a high latency,
4021 higher values might be needed to cover for the latency and/or the cost of
4022 picking a different server.
4023
4024 Note that this has no impact on responses which are maintained to the same
4025 server consecutively to a 401 response. They will still go to the same server
4026 even if they have to be queued.
4027
4028 See also : "option http-server-close", "option prefer-last-server", server
4029 "maxconn" and cookie persistence.
4030
4031
Willy Tarreau2769aa02007-12-27 18:26:09 +01004032maxconn <conns>
4033 Fix the maximum number of concurrent connections on a frontend
4034 May be used in sections : defaults | frontend | listen | backend
4035 yes | yes | yes | no
4036 Arguments :
4037 <conns> is the maximum number of concurrent connections the frontend will
4038 accept to serve. Excess connections will be queued by the system
4039 in the socket's listen queue and will be served once a connection
4040 closes.
4041
4042 If the system supports it, it can be useful on big sites to raise this limit
4043 very high so that haproxy manages connection queues, instead of leaving the
4044 clients with unanswered connection attempts. This value should not exceed the
4045 global maxconn. Also, keep in mind that a connection contains two buffers
4046 of 8kB each, as well as some other data resulting in about 17 kB of RAM being
4047 consumed per established connection. That means that a medium system equipped
4048 with 1GB of RAM can withstand around 40000-50000 concurrent connections if
4049 properly tuned.
4050
4051 Also, when <conns> is set to large values, it is possible that the servers
4052 are not sized to accept such loads, and for this reason it is generally wise
4053 to assign them some reasonable connection limits.
4054
Vincent Bernat6341be52012-06-27 17:18:30 +02004055 By default, this value is set to 2000.
4056
Willy Tarreau2769aa02007-12-27 18:26:09 +01004057 See also : "server", global section's "maxconn", "fullconn"
4058
4059
4060mode { tcp|http|health }
4061 Set the running mode or protocol of the instance
4062 May be used in sections : defaults | frontend | listen | backend
4063 yes | yes | yes | yes
4064 Arguments :
4065 tcp The instance will work in pure TCP mode. A full-duplex connection
4066 will be established between clients and servers, and no layer 7
4067 examination will be performed. This is the default mode. It
4068 should be used for SSL, SSH, SMTP, ...
4069
4070 http The instance will work in HTTP mode. The client request will be
4071 analyzed in depth before connecting to any server. Any request
4072 which is not RFC-compliant will be rejected. Layer 7 filtering,
4073 processing and switching will be possible. This is the mode which
4074 brings HAProxy most of its value.
4075
4076 health The instance will work in "health" mode. It will just reply "OK"
Willy Tarreau82569f92012-09-27 23:48:56 +02004077 to incoming connections and close the connection. Alternatively,
4078 If the "httpchk" option is set, "HTTP/1.0 200 OK" will be sent
4079 instead. Nothing will be logged in either case. This mode is used
4080 to reply to external components health checks. This mode is
4081 deprecated and should not be used anymore as it is possible to do
4082 the same and even better by combining TCP or HTTP modes with the
4083 "monitor" keyword.
Willy Tarreau2769aa02007-12-27 18:26:09 +01004084
Cyril Bonté108cf6e2012-04-21 23:30:29 +02004085 When doing content switching, it is mandatory that the frontend and the
4086 backend are in the same mode (generally HTTP), otherwise the configuration
4087 will be refused.
Willy Tarreau2769aa02007-12-27 18:26:09 +01004088
Cyril Bonté108cf6e2012-04-21 23:30:29 +02004089 Example :
Willy Tarreau2769aa02007-12-27 18:26:09 +01004090 defaults http_instances
4091 mode http
4092
Cyril Bonté108cf6e2012-04-21 23:30:29 +02004093 See also : "monitor", "monitor-net"
Willy Tarreau2769aa02007-12-27 18:26:09 +01004094
Willy Tarreau0ba27502007-12-24 16:55:16 +01004095
Cyril Bontéf0c60612010-02-06 14:44:47 +01004096monitor fail { if | unless } <condition>
Willy Tarreau2769aa02007-12-27 18:26:09 +01004097 Add a condition to report a failure to a monitor HTTP request.
Willy Tarreau0ba27502007-12-24 16:55:16 +01004098 May be used in sections : defaults | frontend | listen | backend
4099 no | yes | yes | no
Willy Tarreau0ba27502007-12-24 16:55:16 +01004100 Arguments :
4101 if <cond> the monitor request will fail if the condition is satisfied,
4102 and will succeed otherwise. The condition should describe a
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01004103 combined test which must induce a failure if all conditions
Willy Tarreau0ba27502007-12-24 16:55:16 +01004104 are met, for instance a low number of servers both in a
4105 backend and its backup.
4106
4107 unless <cond> the monitor request will succeed only if the condition is
4108 satisfied, and will fail otherwise. Such a condition may be
4109 based on a test on the presence of a minimum number of active
4110 servers in a list of backends.
4111
4112 This statement adds a condition which can force the response to a monitor
4113 request to report a failure. By default, when an external component queries
4114 the URI dedicated to monitoring, a 200 response is returned. When one of the
4115 conditions above is met, haproxy will return 503 instead of 200. This is
4116 very useful to report a site failure to an external component which may base
4117 routing advertisements between multiple sites on the availability reported by
4118 haproxy. In this case, one would rely on an ACL involving the "nbsrv"
Willy Tarreauae94d4d2011-05-11 16:28:49 +02004119 criterion. Note that "monitor fail" only works in HTTP mode. Both status
4120 messages may be tweaked using "errorfile" or "errorloc" if needed.
Willy Tarreau0ba27502007-12-24 16:55:16 +01004121
4122 Example:
4123 frontend www
Willy Tarreau2769aa02007-12-27 18:26:09 +01004124 mode http
Willy Tarreau0ba27502007-12-24 16:55:16 +01004125 acl site_dead nbsrv(dynamic) lt 2
4126 acl site_dead nbsrv(static) lt 2
4127 monitor-uri /site_alive
4128 monitor fail if site_dead
4129
Willy Tarreauae94d4d2011-05-11 16:28:49 +02004130 See also : "monitor-net", "monitor-uri", "errorfile", "errorloc"
Willy Tarreau2769aa02007-12-27 18:26:09 +01004131
4132
4133monitor-net <source>
4134 Declare a source network which is limited to monitor requests
4135 May be used in sections : defaults | frontend | listen | backend
4136 yes | yes | yes | no
4137 Arguments :
4138 <source> is the source IPv4 address or network which will only be able to
4139 get monitor responses to any request. It can be either an IPv4
4140 address, a host name, or an address followed by a slash ('/')
4141 followed by a mask.
4142
4143 In TCP mode, any connection coming from a source matching <source> will cause
4144 the connection to be immediately closed without any log. This allows another
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01004145 equipment to probe the port and verify that it is still listening, without
Willy Tarreau2769aa02007-12-27 18:26:09 +01004146 forwarding the connection to a remote server.
4147
4148 In HTTP mode, a connection coming from a source matching <source> will be
4149 accepted, the following response will be sent without waiting for a request,
4150 then the connection will be closed : "HTTP/1.0 200 OK". This is normally
4151 enough for any front-end HTTP probe to detect that the service is UP and
Willy Tarreau82569f92012-09-27 23:48:56 +02004152 running without forwarding the request to a backend server. Note that this
4153 response is sent in raw format, without any transformation. This is important
4154 as it means that it will not be SSL-encrypted on SSL listeners.
Willy Tarreau2769aa02007-12-27 18:26:09 +01004155
Willy Tarreau82569f92012-09-27 23:48:56 +02004156 Monitor requests are processed very early, just after tcp-request connection
4157 ACLs which are the only ones able to block them. These connections are short
4158 lived and never wait for any data from the client. They cannot be logged, and
4159 it is the intended purpose. They are only used to report HAProxy's health to
4160 an upper component, nothing more. Please note that "monitor fail" rules do
4161 not apply to connections intercepted by "monitor-net".
Willy Tarreau2769aa02007-12-27 18:26:09 +01004162
Willy Tarreau95cd2832010-03-04 23:36:33 +01004163 Last, please note that only one "monitor-net" statement can be specified in
4164 a frontend. If more than one is found, only the last one will be considered.
Cyril Bonté108cf6e2012-04-21 23:30:29 +02004165
Willy Tarreau2769aa02007-12-27 18:26:09 +01004166 Example :
4167 # addresses .252 and .253 are just probing us.
4168 frontend www
4169 monitor-net 192.168.0.252/31
4170
4171 See also : "monitor fail", "monitor-uri"
4172
4173
4174monitor-uri <uri>
4175 Intercept a URI used by external components' monitor requests
4176 May be used in sections : defaults | frontend | listen | backend
4177 yes | yes | yes | no
4178 Arguments :
4179 <uri> is the exact URI which we want to intercept to return HAProxy's
4180 health status instead of forwarding the request.
4181
4182 When an HTTP request referencing <uri> will be received on a frontend,
4183 HAProxy will not forward it nor log it, but instead will return either
4184 "HTTP/1.0 200 OK" or "HTTP/1.0 503 Service unavailable", depending on failure
4185 conditions defined with "monitor fail". This is normally enough for any
4186 front-end HTTP probe to detect that the service is UP and running without
4187 forwarding the request to a backend server. Note that the HTTP method, the
4188 version and all headers are ignored, but the request must at least be valid
4189 at the HTTP level. This keyword may only be used with an HTTP-mode frontend.
4190
4191 Monitor requests are processed very early. It is not possible to block nor
4192 divert them using ACLs. They cannot be logged either, and it is the intended
4193 purpose. They are only used to report HAProxy's health to an upper component,
4194 nothing more. However, it is possible to add any number of conditions using
4195 "monitor fail" and ACLs so that the result can be adjusted to whatever check
4196 can be imagined (most often the number of available servers in a backend).
4197
4198 Example :
4199 # Use /haproxy_test to report haproxy's status
4200 frontend www
4201 mode http
4202 monitor-uri /haproxy_test
4203
4204 See also : "monitor fail", "monitor-net"
4205
Willy Tarreau0ba27502007-12-24 16:55:16 +01004206
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004207option abortonclose
4208no option abortonclose
4209 Enable or disable early dropping of aborted requests pending in queues.
4210 May be used in sections : defaults | frontend | listen | backend
4211 yes | no | yes | yes
4212 Arguments : none
4213
4214 In presence of very high loads, the servers will take some time to respond.
4215 The per-instance connection queue will inflate, and the response time will
4216 increase respective to the size of the queue times the average per-session
4217 response time. When clients will wait for more than a few seconds, they will
Willy Tarreau198a7442008-01-17 12:05:32 +01004218 often hit the "STOP" button on their browser, leaving a useless request in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004219 the queue, and slowing down other users, and the servers as well, because the
4220 request will eventually be served, then aborted at the first error
4221 encountered while delivering the response.
4222
4223 As there is no way to distinguish between a full STOP and a simple output
4224 close on the client side, HTTP agents should be conservative and consider
4225 that the client might only have closed its output channel while waiting for
4226 the response. However, this introduces risks of congestion when lots of users
4227 do the same, and is completely useless nowadays because probably no client at
4228 all will close the session while waiting for the response. Some HTTP agents
Willy Tarreaud72758d2010-01-12 10:42:19 +01004229 support this behaviour (Squid, Apache, HAProxy), and others do not (TUX, most
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004230 hardware-based load balancers). So the probability for a closed input channel
Willy Tarreau198a7442008-01-17 12:05:32 +01004231 to represent a user hitting the "STOP" button is close to 100%, and the risk
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004232 of being the single component to break rare but valid traffic is extremely
4233 low, which adds to the temptation to be able to abort a session early while
4234 still not served and not pollute the servers.
4235
4236 In HAProxy, the user can choose the desired behaviour using the option
4237 "abortonclose". By default (without the option) the behaviour is HTTP
4238 compliant and aborted requests will be served. But when the option is
4239 specified, a session with an incoming channel closed will be aborted while
4240 it is still possible, either pending in the queue for a connection slot, or
4241 during the connection establishment if the server has not yet acknowledged
4242 the connection request. This considerably reduces the queue size and the load
4243 on saturated servers when users are tempted to click on STOP, which in turn
Willy Tarreaud72758d2010-01-12 10:42:19 +01004244 reduces the response time for other users.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004245
4246 If this option has been enabled in a "defaults" section, it can be disabled
4247 in a specific instance by prepending the "no" keyword before it.
4248
4249 See also : "timeout queue" and server's "maxconn" and "maxqueue" parameters
4250
4251
Willy Tarreau4076a152009-04-02 15:18:36 +02004252option accept-invalid-http-request
4253no option accept-invalid-http-request
4254 Enable or disable relaxing of HTTP request parsing
4255 May be used in sections : defaults | frontend | listen | backend
4256 yes | yes | yes | no
4257 Arguments : none
4258
Willy Tarreau91852eb2015-05-01 13:26:00 +02004259 By default, HAProxy complies with RFC7230 in terms of message parsing. This
Willy Tarreau4076a152009-04-02 15:18:36 +02004260 means that invalid characters in header names are not permitted and cause an
4261 error to be returned to the client. This is the desired behaviour as such
4262 forbidden characters are essentially used to build attacks exploiting server
4263 weaknesses, and bypass security filtering. Sometimes, a buggy browser or
4264 server will emit invalid header names for whatever reason (configuration,
4265 implementation) and the issue will not be immediately fixed. In such a case,
4266 it is possible to relax HAProxy's header name parser to accept any character
Willy Tarreau422246e2012-01-07 23:54:13 +01004267 even if that does not make sense, by specifying this option. Similarly, the
4268 list of characters allowed to appear in a URI is well defined by RFC3986, and
4269 chars 0-31, 32 (space), 34 ('"'), 60 ('<'), 62 ('>'), 92 ('\'), 94 ('^'), 96
4270 ('`'), 123 ('{'), 124 ('|'), 125 ('}'), 127 (delete) and anything above are
4271 not allowed at all. Haproxy always blocks a number of them (0..32, 127). The
Willy Tarreau91852eb2015-05-01 13:26:00 +02004272 remaining ones are blocked by default unless this option is enabled. This
Willy Tarreau13317662015-05-01 13:47:08 +02004273 option also relaxes the test on the HTTP version, it allows HTTP/0.9 requests
4274 to pass through (no version specified) and multiple digits for both the major
4275 and the minor version.
Willy Tarreau4076a152009-04-02 15:18:36 +02004276
4277 This option should never be enabled by default as it hides application bugs
4278 and open security breaches. It should only be deployed after a problem has
4279 been confirmed.
4280
4281 When this option is enabled, erroneous header names will still be accepted in
4282 requests, but the complete request will be captured in order to permit later
Willy Tarreau422246e2012-01-07 23:54:13 +01004283 analysis using the "show errors" request on the UNIX stats socket. Similarly,
4284 requests containing invalid chars in the URI part will be logged. Doing this
Willy Tarreau4076a152009-04-02 15:18:36 +02004285 also helps confirming that the issue has been solved.
4286
4287 If this option has been enabled in a "defaults" section, it can be disabled
4288 in a specific instance by prepending the "no" keyword before it.
4289
4290 See also : "option accept-invalid-http-response" and "show errors" on the
4291 stats socket.
4292
4293
4294option accept-invalid-http-response
4295no option accept-invalid-http-response
4296 Enable or disable relaxing of HTTP response parsing
4297 May be used in sections : defaults | frontend | listen | backend
4298 yes | no | yes | yes
4299 Arguments : none
4300
Willy Tarreau91852eb2015-05-01 13:26:00 +02004301 By default, HAProxy complies with RFC7230 in terms of message parsing. This
Willy Tarreau4076a152009-04-02 15:18:36 +02004302 means that invalid characters in header names are not permitted and cause an
4303 error to be returned to the client. This is the desired behaviour as such
4304 forbidden characters are essentially used to build attacks exploiting server
4305 weaknesses, and bypass security filtering. Sometimes, a buggy browser or
4306 server will emit invalid header names for whatever reason (configuration,
4307 implementation) and the issue will not be immediately fixed. In such a case,
4308 it is possible to relax HAProxy's header name parser to accept any character
Willy Tarreau91852eb2015-05-01 13:26:00 +02004309 even if that does not make sense, by specifying this option. This option also
4310 relaxes the test on the HTTP version format, it allows multiple digits for
4311 both the major and the minor version.
Willy Tarreau4076a152009-04-02 15:18:36 +02004312
4313 This option should never be enabled by default as it hides application bugs
4314 and open security breaches. It should only be deployed after a problem has
4315 been confirmed.
4316
4317 When this option is enabled, erroneous header names will still be accepted in
4318 responses, but the complete response will be captured in order to permit
4319 later analysis using the "show errors" request on the UNIX stats socket.
4320 Doing this also helps confirming that the issue has been solved.
4321
4322 If this option has been enabled in a "defaults" section, it can be disabled
4323 in a specific instance by prepending the "no" keyword before it.
4324
4325 See also : "option accept-invalid-http-request" and "show errors" on the
4326 stats socket.
4327
4328
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004329option allbackups
4330no option allbackups
4331 Use either all backup servers at a time or only the first one
4332 May be used in sections : defaults | frontend | listen | backend
4333 yes | no | yes | yes
4334 Arguments : none
4335
4336 By default, the first operational backup server gets all traffic when normal
4337 servers are all down. Sometimes, it may be preferred to use multiple backups
4338 at once, because one will not be enough. When "option allbackups" is enabled,
4339 the load balancing will be performed among all backup servers when all normal
4340 ones are unavailable. The same load balancing algorithm will be used and the
4341 servers' weights will be respected. Thus, there will not be any priority
4342 order between the backup servers anymore.
4343
4344 This option is mostly used with static server farms dedicated to return a
4345 "sorry" page when an application is completely offline.
4346
4347 If this option has been enabled in a "defaults" section, it can be disabled
4348 in a specific instance by prepending the "no" keyword before it.
4349
4350
4351option checkcache
4352no option checkcache
Godbach7056a352013-12-11 20:01:07 +08004353 Analyze all server responses and block responses with cacheable cookies
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004354 May be used in sections : defaults | frontend | listen | backend
4355 yes | no | yes | yes
4356 Arguments : none
4357
4358 Some high-level frameworks set application cookies everywhere and do not
4359 always let enough control to the developer to manage how the responses should
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01004360 be cached. When a session cookie is returned on a cacheable object, there is a
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004361 high risk of session crossing or stealing between users traversing the same
4362 caches. In some situations, it is better to block the response than to let
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02004363 some sensitive session information go in the wild.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004364
4365 The option "checkcache" enables deep inspection of all server responses for
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01004366 strict compliance with HTTP specification in terms of cacheability. It
Willy Tarreau198a7442008-01-17 12:05:32 +01004367 carefully checks "Cache-control", "Pragma" and "Set-cookie" headers in server
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004368 response to check if there's a risk of caching a cookie on a client-side
4369 proxy. When this option is enabled, the only responses which can be delivered
Willy Tarreau198a7442008-01-17 12:05:32 +01004370 to the client are :
4371 - all those without "Set-Cookie" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004372 - all those with a return code other than 200, 203, 206, 300, 301, 410,
Willy Tarreau198a7442008-01-17 12:05:32 +01004373 provided that the server has not set a "Cache-control: public" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004374 - all those that come from a POST request, provided that the server has not
4375 set a 'Cache-Control: public' header ;
4376 - those with a 'Pragma: no-cache' header
4377 - those with a 'Cache-control: private' header
4378 - those with a 'Cache-control: no-store' header
4379 - those with a 'Cache-control: max-age=0' header
4380 - those with a 'Cache-control: s-maxage=0' header
4381 - those with a 'Cache-control: no-cache' header
4382 - those with a 'Cache-control: no-cache="set-cookie"' header
4383 - those with a 'Cache-control: no-cache="set-cookie,' header
4384 (allowing other fields after set-cookie)
4385
4386 If a response doesn't respect these requirements, then it will be blocked
Willy Tarreau198a7442008-01-17 12:05:32 +01004387 just as if it was from an "rspdeny" filter, with an "HTTP 502 bad gateway".
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004388 The session state shows "PH--" meaning that the proxy blocked the response
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01004389 during headers processing. Additionally, an alert will be sent in the logs so
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004390 that admins are informed that there's something to be fixed.
4391
4392 Due to the high impact on the application, the application should be tested
4393 in depth with the option enabled before going to production. It is also a
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01004394 good practice to always activate it during tests, even if it is not used in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004395 production, as it will report potentially dangerous application behaviours.
4396
4397 If this option has been enabled in a "defaults" section, it can be disabled
4398 in a specific instance by prepending the "no" keyword before it.
4399
4400
4401option clitcpka
4402no option clitcpka
4403 Enable or disable the sending of TCP keepalive packets on the client side
4404 May be used in sections : defaults | frontend | listen | backend
4405 yes | yes | yes | no
4406 Arguments : none
4407
4408 When there is a firewall or any session-aware component between a client and
4409 a server, and when the protocol involves very long sessions with long idle
4410 periods (eg: remote desktops), there is a risk that one of the intermediate
4411 components decides to expire a session which has remained idle for too long.
4412
4413 Enabling socket-level TCP keep-alives makes the system regularly send packets
4414 to the other end of the connection, leaving it active. The delay between
4415 keep-alive probes is controlled by the system only and depends both on the
4416 operating system and its tuning parameters.
4417
4418 It is important to understand that keep-alive packets are neither emitted nor
4419 received at the application level. It is only the network stacks which sees
4420 them. For this reason, even if one side of the proxy already uses keep-alives
4421 to maintain its connection alive, those keep-alive packets will not be
4422 forwarded to the other side of the proxy.
4423
4424 Please note that this has nothing to do with HTTP keep-alive.
4425
4426 Using option "clitcpka" enables the emission of TCP keep-alive probes on the
4427 client side of a connection, which should help when session expirations are
4428 noticed between HAProxy and a client.
4429
4430 If this option has been enabled in a "defaults" section, it can be disabled
4431 in a specific instance by prepending the "no" keyword before it.
4432
4433 See also : "option srvtcpka", "option tcpka"
4434
4435
Willy Tarreau0ba27502007-12-24 16:55:16 +01004436option contstats
4437 Enable continuous traffic statistics updates
4438 May be used in sections : defaults | frontend | listen | backend
4439 yes | yes | yes | no
4440 Arguments : none
4441
4442 By default, counters used for statistics calculation are incremented
4443 only when a session finishes. It works quite well when serving small
4444 objects, but with big ones (for example large images or archives) or
4445 with A/V streaming, a graph generated from haproxy counters looks like
4446 a hedgehog. With this option enabled counters get incremented continuously,
4447 during a whole session. Recounting touches a hotpath directly so
4448 it is not enabled by default, as it has small performance impact (~0.5%).
4449
4450
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02004451option dontlog-normal
4452no option dontlog-normal
4453 Enable or disable logging of normal, successful connections
4454 May be used in sections : defaults | frontend | listen | backend
4455 yes | yes | yes | no
4456 Arguments : none
4457
4458 There are large sites dealing with several thousand connections per second
4459 and for which logging is a major pain. Some of them are even forced to turn
4460 logs off and cannot debug production issues. Setting this option ensures that
4461 normal connections, those which experience no error, no timeout, no retry nor
4462 redispatch, will not be logged. This leaves disk space for anomalies. In HTTP
4463 mode, the response status code is checked and return codes 5xx will still be
4464 logged.
4465
4466 It is strongly discouraged to use this option as most of the time, the key to
4467 complex issues is in the normal logs which will not be logged here. If you
4468 need to separate logs, see the "log-separate-errors" option instead.
4469
Willy Tarreauc57f0e22009-05-10 13:12:33 +02004470 See also : "log", "dontlognull", "log-separate-errors" and section 8 about
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02004471 logging.
4472
4473
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004474option dontlognull
4475no option dontlognull
4476 Enable or disable logging of null connections
4477 May be used in sections : defaults | frontend | listen | backend
4478 yes | yes | yes | no
4479 Arguments : none
4480
4481 In certain environments, there are components which will regularly connect to
4482 various systems to ensure that they are still alive. It can be the case from
4483 another load balancer as well as from monitoring systems. By default, even a
4484 simple port probe or scan will produce a log. If those connections pollute
4485 the logs too much, it is possible to enable option "dontlognull" to indicate
4486 that a connection on which no data has been transferred will not be logged,
Willy Tarreau0f228a02015-05-01 15:37:53 +02004487 which typically corresponds to those probes. Note that errors will still be
4488 returned to the client and accounted for in the stats. If this is not what is
4489 desired, option http-ignore-probes can be used instead.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004490
4491 It is generally recommended not to use this option in uncontrolled
4492 environments (eg: internet), otherwise scans and other malicious activities
4493 would not be logged.
4494
4495 If this option has been enabled in a "defaults" section, it can be disabled
4496 in a specific instance by prepending the "no" keyword before it.
4497
Willy Tarreau0f228a02015-05-01 15:37:53 +02004498 See also : "log", "http-ignore-probes", "monitor-net", "monitor-uri", and
4499 section 8 about logging.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004500
4501
4502option forceclose
4503no option forceclose
4504 Enable or disable active connection closing after response is transferred.
4505 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaua31e5df2009-12-30 01:10:35 +01004506 yes | yes | yes | yes
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004507 Arguments : none
4508
4509 Some HTTP servers do not necessarily close the connections when they receive
4510 the "Connection: close" set by "option httpclose", and if the client does not
4511 close either, then the connection remains open till the timeout expires. This
4512 causes high number of simultaneous connections on the servers and shows high
4513 global session times in the logs.
4514
4515 When this happens, it is possible to use "option forceclose". It will
Willy Tarreau82eeaf22009-12-29 12:09:05 +01004516 actively close the outgoing server channel as soon as the server has finished
Cyril Bonté653dcd62014-02-20 00:13:15 +01004517 to respond and release some resources earlier than with "option httpclose".
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004518
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02004519 This option may also be combined with "option http-pretend-keepalive", which
4520 will disable sending of the "Connection: close" header, but will still cause
4521 the connection to be closed once the whole response is received.
4522
Cyril Bonté653dcd62014-02-20 00:13:15 +01004523 This option disables and replaces any previous "option httpclose", "option
4524 http-server-close", "option http-keep-alive", or "option http-tunnel".
Willy Tarreau02bce8b2014-01-30 00:15:28 +01004525
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004526 If this option has been enabled in a "defaults" section, it can be disabled
4527 in a specific instance by prepending the "no" keyword before it.
4528
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02004529 See also : "option httpclose" and "option http-pretend-keepalive"
Willy Tarreaubf1f8162007-12-28 17:42:56 +01004530
4531
Willy Tarreau87cf5142011-08-19 22:57:24 +02004532option forwardfor [ except <network> ] [ header <name> ] [ if-none ]
Willy Tarreauc27debf2008-01-06 08:57:02 +01004533 Enable insertion of the X-Forwarded-For header to requests sent to servers
4534 May be used in sections : defaults | frontend | listen | backend
4535 yes | yes | yes | yes
4536 Arguments :
4537 <network> is an optional argument used to disable this option for sources
4538 matching <network>
Ross Westaf72a1d2008-08-03 10:51:45 +02004539 <name> an optional argument to specify a different "X-Forwarded-For"
Willy Tarreaud72758d2010-01-12 10:42:19 +01004540 header name.
Willy Tarreauc27debf2008-01-06 08:57:02 +01004541
4542 Since HAProxy works in reverse-proxy mode, the servers see its IP address as
4543 their client address. This is sometimes annoying when the client's IP address
4544 is expected in server logs. To solve this problem, the well-known HTTP header
4545 "X-Forwarded-For" may be added by HAProxy to all requests sent to the server.
4546 This header contains a value representing the client's IP address. Since this
4547 header is always appended at the end of the existing header list, the server
4548 must be configured to always use the last occurrence of this header only. See
Ross Westaf72a1d2008-08-03 10:51:45 +02004549 the server's manual to find how to enable use of this standard header. Note
4550 that only the last occurrence of the header must be used, since it is really
4551 possible that the client has already brought one.
4552
Willy Tarreaud72758d2010-01-12 10:42:19 +01004553 The keyword "header" may be used to supply a different header name to replace
Ross Westaf72a1d2008-08-03 10:51:45 +02004554 the default "X-Forwarded-For". This can be useful where you might already
Willy Tarreaud72758d2010-01-12 10:42:19 +01004555 have a "X-Forwarded-For" header from a different application (eg: stunnel),
4556 and you need preserve it. Also if your backend server doesn't use the
Ross Westaf72a1d2008-08-03 10:51:45 +02004557 "X-Forwarded-For" header and requires different one (eg: Zeus Web Servers
4558 require "X-Cluster-Client-IP").
Willy Tarreauc27debf2008-01-06 08:57:02 +01004559
4560 Sometimes, a same HAProxy instance may be shared between a direct client
4561 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
4562 used to decrypt HTTPS traffic). It is possible to disable the addition of the
4563 header for a known source address or network by adding the "except" keyword
4564 followed by the network address. In this case, any source IP matching the
4565 network will not cause an addition of this header. Most common uses are with
4566 private networks or 127.0.0.1.
4567
Willy Tarreau87cf5142011-08-19 22:57:24 +02004568 Alternatively, the keyword "if-none" states that the header will only be
4569 added if it is not present. This should only be used in perfectly trusted
4570 environment, as this might cause a security issue if headers reaching haproxy
4571 are under the control of the end-user.
4572
Willy Tarreauc27debf2008-01-06 08:57:02 +01004573 This option may be specified either in the frontend or in the backend. If at
Ross Westaf72a1d2008-08-03 10:51:45 +02004574 least one of them uses it, the header will be added. Note that the backend's
4575 setting of the header subargument takes precedence over the frontend's if
Willy Tarreau87cf5142011-08-19 22:57:24 +02004576 both are defined. In the case of the "if-none" argument, if at least one of
4577 the frontend or the backend does not specify it, it wants the addition to be
4578 mandatory, so it wins.
Willy Tarreauc27debf2008-01-06 08:57:02 +01004579
Ross Westaf72a1d2008-08-03 10:51:45 +02004580 Examples :
Willy Tarreauc27debf2008-01-06 08:57:02 +01004581 # Public HTTP address also used by stunnel on the same machine
4582 frontend www
4583 mode http
4584 option forwardfor except 127.0.0.1 # stunnel already adds the header
4585
Ross Westaf72a1d2008-08-03 10:51:45 +02004586 # Those servers want the IP Address in X-Client
4587 backend www
4588 mode http
4589 option forwardfor header X-Client
4590
Willy Tarreau87cf5142011-08-19 22:57:24 +02004591 See also : "option httpclose", "option http-server-close",
Willy Tarreau70dffda2014-01-30 03:07:23 +01004592 "option forceclose", "option http-keep-alive"
Willy Tarreauc27debf2008-01-06 08:57:02 +01004593
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02004594
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02004595option http-buffer-request
4596no option http-buffer-request
4597 Enable or disable waiting for whole HTTP request body before proceeding
4598 May be used in sections : defaults | frontend | listen | backend
4599 yes | yes | yes | yes
4600 Arguments : none
4601
4602 It is sometimes desirable to wait for the body of an HTTP request before
4603 taking a decision. This is what is being done by "balance url_param" for
4604 example. The first use case is to buffer requests from slow clients before
4605 connecting to the server. Another use case consists in taking the routing
4606 decision based on the request body's contents. This option placed in a
4607 frontend or backend forces the HTTP processing to wait until either the whole
4608 body is received, or the request buffer is full, or the first chunk is
4609 complete in case of chunked encoding. It can have undesired side effects with
4610 some applications abusing HTTP by expecting unbufferred transmissions between
4611 the frontend and the backend, so this should definitely not be used by
4612 default.
4613
4614 See also : "option http-no-delay"
4615
4616
Willy Tarreau0f228a02015-05-01 15:37:53 +02004617option http-ignore-probes
4618no option http-ignore-probes
4619 Enable or disable logging of null connections and request timeouts
4620 May be used in sections : defaults | frontend | listen | backend
4621 yes | yes | yes | no
4622 Arguments : none
4623
4624 Recently some browsers started to implement a "pre-connect" feature
4625 consisting in speculatively connecting to some recently visited web sites
4626 just in case the user would like to visit them. This results in many
4627 connections being established to web sites, which end up in 408 Request
4628 Timeout if the timeout strikes first, or 400 Bad Request when the browser
4629 decides to close them first. These ones pollute the log and feed the error
4630 counters. There was already "option dontlognull" but it's insufficient in
4631 this case. Instead, this option does the following things :
4632 - prevent any 400/408 message from being sent to the client if nothing
4633 was received over a connection before it was closed ;
4634 - prevent any log from being emitted in this situation ;
4635 - prevent any error counter from being incremented
4636
4637 That way the empty connection is silently ignored. Note that it is better
4638 not to use this unless it is clear that it is needed, because it will hide
4639 real problems. The most common reason for not receiving a request and seeing
4640 a 408 is due to an MTU inconsistency between the client and an intermediary
4641 element such as a VPN, which blocks too large packets. These issues are
4642 generally seen with POST requests as well as GET with large cookies. The logs
4643 are often the only way to detect them.
4644
4645 If this option has been enabled in a "defaults" section, it can be disabled
4646 in a specific instance by prepending the "no" keyword before it.
4647
4648 See also : "log", "dontlognull", "errorfile", and section 8 about logging.
4649
4650
Willy Tarreau16bfb022010-01-16 19:48:41 +01004651option http-keep-alive
4652no option http-keep-alive
4653 Enable or disable HTTP keep-alive from client to server
4654 May be used in sections : defaults | frontend | listen | backend
4655 yes | yes | yes | yes
4656 Arguments : none
4657
Willy Tarreau70dffda2014-01-30 03:07:23 +01004658 By default HAProxy operates in keep-alive mode with regards to persistent
4659 connections: for each connection it processes each request and response, and
4660 leaves the connection idle on both sides between the end of a response and the
4661 start of a new request. This mode may be changed by several options such as
4662 "option http-server-close", "option forceclose", "option httpclose" or
4663 "option http-tunnel". This option allows to set back the keep-alive mode,
4664 which can be useful when another mode was used in a defaults section.
4665
4666 Setting "option http-keep-alive" enables HTTP keep-alive mode on the client-
4667 and server- sides. This provides the lowest latency on the client side (slow
Willy Tarreau16bfb022010-01-16 19:48:41 +01004668 network) and the fastest session reuse on the server side at the expense
4669 of maintaining idle connections to the servers. In general, it is possible
4670 with this option to achieve approximately twice the request rate that the
4671 "http-server-close" option achieves on small objects. There are mainly two
4672 situations where this option may be useful :
4673
4674 - when the server is non-HTTP compliant and authenticates the connection
4675 instead of requests (eg: NTLM authentication)
4676
4677 - when the cost of establishing the connection to the server is significant
4678 compared to the cost of retrieving the associated object from the server.
4679
4680 This last case can happen when the server is a fast static server of cache.
4681 In this case, the server will need to be properly tuned to support high enough
4682 connection counts because connections will last until the client sends another
4683 request.
4684
4685 If the client request has to go to another backend or another server due to
4686 content switching or the load balancing algorithm, the idle connection will
Willy Tarreau9420b122013-12-15 18:58:25 +01004687 immediately be closed and a new one re-opened. Option "prefer-last-server" is
4688 available to try optimize server selection so that if the server currently
4689 attached to an idle connection is usable, it will be used.
Willy Tarreau16bfb022010-01-16 19:48:41 +01004690
4691 In general it is preferred to use "option http-server-close" with application
4692 servers, and some static servers might benefit from "option http-keep-alive".
4693
4694 At the moment, logs will not indicate whether requests came from the same
4695 session or not. The accept date reported in the logs corresponds to the end
4696 of the previous request, and the request time corresponds to the time spent
4697 waiting for a new request. The keep-alive request time is still bound to the
4698 timeout defined by "timeout http-keep-alive" or "timeout http-request" if
4699 not set.
4700
Cyril Bonté653dcd62014-02-20 00:13:15 +01004701 This option disables and replaces any previous "option httpclose", "option
4702 http-server-close", "option forceclose" or "option http-tunnel". When backend
Willy Tarreau70dffda2014-01-30 03:07:23 +01004703 and frontend options differ, all of these 4 options have precedence over
Cyril Bonté653dcd62014-02-20 00:13:15 +01004704 "option http-keep-alive".
Willy Tarreau16bfb022010-01-16 19:48:41 +01004705
4706 See also : "option forceclose", "option http-server-close",
Willy Tarreau9420b122013-12-15 18:58:25 +01004707 "option prefer-last-server", "option http-pretend-keepalive",
4708 "option httpclose", and "1.1. The HTTP transaction model".
Willy Tarreau16bfb022010-01-16 19:48:41 +01004709
4710
Willy Tarreau96e31212011-05-30 18:10:30 +02004711option http-no-delay
4712no option http-no-delay
4713 Instruct the system to favor low interactive delays over performance in HTTP
4714 May be used in sections : defaults | frontend | listen | backend
4715 yes | yes | yes | yes
4716 Arguments : none
4717
4718 In HTTP, each payload is unidirectional and has no notion of interactivity.
4719 Any agent is expected to queue data somewhat for a reasonably low delay.
4720 There are some very rare server-to-server applications that abuse the HTTP
4721 protocol and expect the payload phase to be highly interactive, with many
4722 interleaved data chunks in both directions within a single request. This is
4723 absolutely not supported by the HTTP specification and will not work across
4724 most proxies or servers. When such applications attempt to do this through
4725 haproxy, it works but they will experience high delays due to the network
4726 optimizations which favor performance by instructing the system to wait for
4727 enough data to be available in order to only send full packets. Typical
4728 delays are around 200 ms per round trip. Note that this only happens with
4729 abnormal uses. Normal uses such as CONNECT requests nor WebSockets are not
4730 affected.
4731
4732 When "option http-no-delay" is present in either the frontend or the backend
4733 used by a connection, all such optimizations will be disabled in order to
4734 make the exchanges as fast as possible. Of course this offers no guarantee on
4735 the functionality, as it may break at any other place. But if it works via
4736 HAProxy, it will work as fast as possible. This option should never be used
4737 by default, and should never be used at all unless such a buggy application
4738 is discovered. The impact of using this option is an increase of bandwidth
4739 usage and CPU usage, which may significantly lower performance in high
4740 latency environments.
4741
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02004742 See also : "option http-buffer-request"
4743
Willy Tarreau96e31212011-05-30 18:10:30 +02004744
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02004745option http-pretend-keepalive
4746no option http-pretend-keepalive
4747 Define whether haproxy will announce keepalive to the server or not
4748 May be used in sections : defaults | frontend | listen | backend
4749 yes | yes | yes | yes
4750 Arguments : none
4751
4752 When running with "option http-server-close" or "option forceclose", haproxy
4753 adds a "Connection: close" header to the request forwarded to the server.
4754 Unfortunately, when some servers see this header, they automatically refrain
4755 from using the chunked encoding for responses of unknown length, while this
4756 is totally unrelated. The immediate effect is that this prevents haproxy from
4757 maintaining the client connection alive. A second effect is that a client or
4758 a cache could receive an incomplete response without being aware of it, and
4759 consider the response complete.
4760
4761 By setting "option http-pretend-keepalive", haproxy will make the server
4762 believe it will keep the connection alive. The server will then not fall back
4763 to the abnormal undesired above. When haproxy gets the whole response, it
4764 will close the connection with the server just as it would do with the
4765 "forceclose" option. That way the client gets a normal response and the
4766 connection is correctly closed on the server side.
4767
4768 It is recommended not to enable this option by default, because most servers
4769 will more efficiently close the connection themselves after the last packet,
4770 and release its buffers slightly earlier. Also, the added packet on the
4771 network could slightly reduce the overall peak performance. However it is
4772 worth noting that when this option is enabled, haproxy will have slightly
4773 less work to do. So if haproxy is the bottleneck on the whole architecture,
4774 enabling this option might save a few CPU cycles.
4775
4776 This option may be set both in a frontend and in a backend. It is enabled if
4777 at least one of the frontend or backend holding a connection has it enabled.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04004778 This option may be combined with "option httpclose", which will cause
Willy Tarreau22a95342010-09-29 14:31:41 +02004779 keepalive to be announced to the server and close to be announced to the
4780 client. This practice is discouraged though.
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02004781
4782 If this option has been enabled in a "defaults" section, it can be disabled
4783 in a specific instance by prepending the "no" keyword before it.
4784
Willy Tarreau16bfb022010-01-16 19:48:41 +01004785 See also : "option forceclose", "option http-server-close", and
4786 "option http-keep-alive"
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02004787
Willy Tarreauc27debf2008-01-06 08:57:02 +01004788
Willy Tarreaub608feb2010-01-02 22:47:18 +01004789option http-server-close
4790no option http-server-close
4791 Enable or disable HTTP connection closing on the server side
4792 May be used in sections : defaults | frontend | listen | backend
4793 yes | yes | yes | yes
4794 Arguments : none
4795
Willy Tarreau70dffda2014-01-30 03:07:23 +01004796 By default HAProxy operates in keep-alive mode with regards to persistent
4797 connections: for each connection it processes each request and response, and
4798 leaves the connection idle on both sides between the end of a response and
4799 the start of a new request. This mode may be changed by several options such
4800 as "option http-server-close", "option forceclose", "option httpclose" or
4801 "option http-tunnel". Setting "option http-server-close" enables HTTP
4802 connection-close mode on the server side while keeping the ability to support
4803 HTTP keep-alive and pipelining on the client side. This provides the lowest
4804 latency on the client side (slow network) and the fastest session reuse on
4805 the server side to save server resources, similarly to "option forceclose".
4806 It also permits non-keepalive capable servers to be served in keep-alive mode
4807 to the clients if they conform to the requirements of RFC2616. Please note
4808 that some servers do not always conform to those requirements when they see
4809 "Connection: close" in the request. The effect will be that keep-alive will
4810 never be used. A workaround consists in enabling "option
4811 http-pretend-keepalive".
Willy Tarreaub608feb2010-01-02 22:47:18 +01004812
4813 At the moment, logs will not indicate whether requests came from the same
4814 session or not. The accept date reported in the logs corresponds to the end
4815 of the previous request, and the request time corresponds to the time spent
4816 waiting for a new request. The keep-alive request time is still bound to the
Willy Tarreaub16a5742010-01-10 14:46:16 +01004817 timeout defined by "timeout http-keep-alive" or "timeout http-request" if
4818 not set.
Willy Tarreaub608feb2010-01-02 22:47:18 +01004819
4820 This option may be set both in a frontend and in a backend. It is enabled if
4821 at least one of the frontend or backend holding a connection has it enabled.
Cyril Bonté653dcd62014-02-20 00:13:15 +01004822 It disables and replaces any previous "option httpclose", "option forceclose",
4823 "option http-tunnel" or "option http-keep-alive". Please check section 4
Willy Tarreau70dffda2014-01-30 03:07:23 +01004824 ("Proxies") to see how this option combines with others when frontend and
4825 backend options differ.
Willy Tarreaub608feb2010-01-02 22:47:18 +01004826
4827 If this option has been enabled in a "defaults" section, it can be disabled
4828 in a specific instance by prepending the "no" keyword before it.
4829
Patrick Mezard9ec2ec42010-06-12 17:02:45 +02004830 See also : "option forceclose", "option http-pretend-keepalive",
Willy Tarreau16bfb022010-01-16 19:48:41 +01004831 "option httpclose", "option http-keep-alive", and
4832 "1.1. The HTTP transaction model".
Willy Tarreaub608feb2010-01-02 22:47:18 +01004833
4834
Willy Tarreau02bce8b2014-01-30 00:15:28 +01004835option http-tunnel
4836no option http-tunnel
4837 Disable or enable HTTP connection processing after first transaction
4838 May be used in sections : defaults | frontend | listen | backend
4839 yes | yes | yes | yes
4840 Arguments : none
4841
Willy Tarreau70dffda2014-01-30 03:07:23 +01004842 By default HAProxy operates in keep-alive mode with regards to persistent
4843 connections: for each connection it processes each request and response, and
4844 leaves the connection idle on both sides between the end of a response and
4845 the start of a new request. This mode may be changed by several options such
4846 as "option http-server-close", "option forceclose", "option httpclose" or
4847 "option http-tunnel".
4848
4849 Option "http-tunnel" disables any HTTP processing past the first request and
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03004850 the first response. This is the mode which was used by default in versions
Willy Tarreau70dffda2014-01-30 03:07:23 +01004851 1.0 to 1.5-dev21. It is the mode with the lowest processing overhead, which
4852 is normally not needed anymore unless in very specific cases such as when
4853 using an in-house protocol that looks like HTTP but is not compatible, or
4854 just to log one request per client in order to reduce log size. Note that
4855 everything which works at the HTTP level, including header parsing/addition,
4856 cookie processing or content switching will only work for the first request
4857 and will be ignored after the first response.
Willy Tarreau02bce8b2014-01-30 00:15:28 +01004858
4859 If this option has been enabled in a "defaults" section, it can be disabled
4860 in a specific instance by prepending the "no" keyword before it.
4861
4862 See also : "option forceclose", "option http-server-close",
4863 "option httpclose", "option http-keep-alive", and
4864 "1.1. The HTTP transaction model".
4865
4866
Willy Tarreau88d349d2010-01-25 12:15:43 +01004867option http-use-proxy-header
Cyril Bontéf0c60612010-02-06 14:44:47 +01004868no option http-use-proxy-header
Willy Tarreau88d349d2010-01-25 12:15:43 +01004869 Make use of non-standard Proxy-Connection header instead of Connection
4870 May be used in sections : defaults | frontend | listen | backend
4871 yes | yes | yes | no
4872 Arguments : none
4873
4874 While RFC2616 explicitly states that HTTP/1.1 agents must use the
4875 Connection header to indicate their wish of persistent or non-persistent
4876 connections, both browsers and proxies ignore this header for proxied
4877 connections and make use of the undocumented, non-standard Proxy-Connection
4878 header instead. The issue begins when trying to put a load balancer between
4879 browsers and such proxies, because there will be a difference between what
4880 haproxy understands and what the client and the proxy agree on.
4881
4882 By setting this option in a frontend, haproxy can automatically switch to use
4883 that non-standard header if it sees proxied requests. A proxied request is
4884 defined here as one where the URI begins with neither a '/' nor a '*'. The
4885 choice of header only affects requests passing through proxies making use of
4886 one of the "httpclose", "forceclose" and "http-server-close" options. Note
4887 that this option can only be specified in a frontend and will affect the
4888 request along its whole life.
4889
Willy Tarreau844a7e72010-01-31 21:46:18 +01004890 Also, when this option is set, a request which requires authentication will
4891 automatically switch to use proxy authentication headers if it is itself a
4892 proxied request. That makes it possible to check or enforce authentication in
4893 front of an existing proxy.
4894
Willy Tarreau88d349d2010-01-25 12:15:43 +01004895 This option should normally never be used, except in front of a proxy.
4896
4897 See also : "option httpclose", "option forceclose" and "option
4898 http-server-close".
4899
4900
Willy Tarreaud63335a2010-02-26 12:56:52 +01004901option httpchk
4902option httpchk <uri>
4903option httpchk <method> <uri>
4904option httpchk <method> <uri> <version>
4905 Enable HTTP protocol to check on the servers health
4906 May be used in sections : defaults | frontend | listen | backend
4907 yes | no | yes | yes
4908 Arguments :
4909 <method> is the optional HTTP method used with the requests. When not set,
4910 the "OPTIONS" method is used, as it generally requires low server
4911 processing and is easy to filter out from the logs. Any method
4912 may be used, though it is not recommended to invent non-standard
4913 ones.
4914
4915 <uri> is the URI referenced in the HTTP requests. It defaults to " / "
4916 which is accessible by default on almost any server, but may be
4917 changed to any other URI. Query strings are permitted.
4918
4919 <version> is the optional HTTP version string. It defaults to "HTTP/1.0"
4920 but some servers might behave incorrectly in HTTP 1.0, so turning
4921 it to HTTP/1.1 may sometimes help. Note that the Host field is
4922 mandatory in HTTP/1.1, and as a trick, it is possible to pass it
4923 after "\r\n" following the version string.
4924
4925 By default, server health checks only consist in trying to establish a TCP
4926 connection. When "option httpchk" is specified, a complete HTTP request is
4927 sent once the TCP connection is established, and responses 2xx and 3xx are
4928 considered valid, while all other ones indicate a server failure, including
4929 the lack of any response.
4930
4931 The port and interval are specified in the server configuration.
4932
4933 This option does not necessarily require an HTTP backend, it also works with
4934 plain TCP backends. This is particularly useful to check simple scripts bound
4935 to some dedicated ports using the inetd daemon.
4936
4937 Examples :
4938 # Relay HTTPS traffic to Apache instance and check service availability
4939 # using HTTP request "OPTIONS * HTTP/1.1" on port 80.
4940 backend https_relay
4941 mode tcp
4942 option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
4943 server apache1 192.168.1.1:443 check port 80
4944
Simon Hormanafc47ee2013-11-25 10:46:35 +09004945 See also : "option ssl-hello-chk", "option smtpchk", "option mysql-check",
4946 "option pgsql-check", "http-check" and the "check", "port" and
4947 "inter" server options.
Willy Tarreaud63335a2010-02-26 12:56:52 +01004948
4949
Willy Tarreauc27debf2008-01-06 08:57:02 +01004950option httpclose
4951no option httpclose
4952 Enable or disable passive HTTP connection closing
4953 May be used in sections : defaults | frontend | listen | backend
4954 yes | yes | yes | yes
4955 Arguments : none
4956
Willy Tarreau70dffda2014-01-30 03:07:23 +01004957 By default HAProxy operates in keep-alive mode with regards to persistent
4958 connections: for each connection it processes each request and response, and
4959 leaves the connection idle on both sides between the end of a response and
4960 the start of a new request. This mode may be changed by several options such
Cyril Bonté653dcd62014-02-20 00:13:15 +01004961 as "option http-server-close", "option forceclose", "option httpclose" or
Willy Tarreau70dffda2014-01-30 03:07:23 +01004962 "option http-tunnel".
4963
4964 If "option httpclose" is set, HAProxy will work in HTTP tunnel mode and check
4965 if a "Connection: close" header is already set in each direction, and will
4966 add one if missing. Each end should react to this by actively closing the TCP
4967 connection after each transfer, thus resulting in a switch to the HTTP close
4968 mode. Any "Connection" header different from "close" will also be removed.
4969 Note that this option is deprecated since what it does is very cheap but not
4970 reliable. Using "option http-server-close" or "option forceclose" is strongly
4971 recommended instead.
Willy Tarreauc27debf2008-01-06 08:57:02 +01004972
4973 It seldom happens that some servers incorrectly ignore this header and do not
Jamie Gloudonaaa21002012-08-25 00:18:33 -04004974 close the connection even though they reply "Connection: close". For this
Willy Tarreau0dfdf192010-01-05 11:33:11 +01004975 reason, they are not compatible with older HTTP 1.0 browsers. If this happens
4976 it is possible to use the "option forceclose" which actively closes the
4977 request connection once the server responds. Option "forceclose" also
4978 releases the server connection earlier because it does not have to wait for
4979 the client to acknowledge it.
Willy Tarreauc27debf2008-01-06 08:57:02 +01004980
4981 This option may be set both in a frontend and in a backend. It is enabled if
4982 at least one of the frontend or backend holding a connection has it enabled.
Cyril Bonté653dcd62014-02-20 00:13:15 +01004983 It disables and replaces any previous "option http-server-close",
4984 "option forceclose", "option http-keep-alive" or "option http-tunnel". Please
Willy Tarreau70dffda2014-01-30 03:07:23 +01004985 check section 4 ("Proxies") to see how this option combines with others when
4986 frontend and backend options differ.
Willy Tarreauc27debf2008-01-06 08:57:02 +01004987
4988 If this option has been enabled in a "defaults" section, it can be disabled
4989 in a specific instance by prepending the "no" keyword before it.
4990
Patrick Mezard9ec2ec42010-06-12 17:02:45 +02004991 See also : "option forceclose", "option http-server-close" and
4992 "1.1. The HTTP transaction model".
Willy Tarreauc27debf2008-01-06 08:57:02 +01004993
4994
Emeric Brun3a058f32009-06-30 18:26:00 +02004995option httplog [ clf ]
Willy Tarreauc27debf2008-01-06 08:57:02 +01004996 Enable logging of HTTP request, session state and timers
4997 May be used in sections : defaults | frontend | listen | backend
4998 yes | yes | yes | yes
Emeric Brun3a058f32009-06-30 18:26:00 +02004999 Arguments :
5000 clf if the "clf" argument is added, then the output format will be
5001 the CLF format instead of HAProxy's default HTTP format. You can
5002 use this when you need to feed HAProxy's logs through a specific
5003 log analyser which only support the CLF format and which is not
5004 extensible.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005005
5006 By default, the log output format is very poor, as it only contains the
5007 source and destination addresses, and the instance name. By specifying
5008 "option httplog", each log line turns into a much richer format including,
5009 but not limited to, the HTTP request, the connection timers, the session
5010 status, the connections numbers, the captured headers and cookies, the
5011 frontend, backend and server name, and of course the source address and
5012 ports.
5013
5014 This option may be set either in the frontend or the backend.
5015
PiBa-NLbd556bf2014-12-11 21:31:54 +01005016 Specifying only "option httplog" will automatically clear the 'clf' mode
5017 if it was set by default.
Emeric Brun3a058f32009-06-30 18:26:00 +02005018
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005019 See also : section 8 about logging.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005020
Willy Tarreau55165fe2009-05-10 12:02:55 +02005021
5022option http_proxy
5023no option http_proxy
5024 Enable or disable plain HTTP proxy mode
5025 May be used in sections : defaults | frontend | listen | backend
5026 yes | yes | yes | yes
5027 Arguments : none
5028
5029 It sometimes happens that people need a pure HTTP proxy which understands
5030 basic proxy requests without caching nor any fancy feature. In this case,
5031 it may be worth setting up an HAProxy instance with the "option http_proxy"
5032 set. In this mode, no server is declared, and the connection is forwarded to
5033 the IP address and port found in the URL after the "http://" scheme.
5034
5035 No host address resolution is performed, so this only works when pure IP
5036 addresses are passed. Since this option's usage perimeter is rather limited,
5037 it will probably be used only by experts who know they need exactly it. Last,
5038 if the clients are susceptible of sending keep-alive requests, it will be
Cyril Bonté2409e682010-12-14 22:47:51 +01005039 needed to add "option httpclose" to ensure that all requests will correctly
Willy Tarreau55165fe2009-05-10 12:02:55 +02005040 be analyzed.
5041
5042 If this option has been enabled in a "defaults" section, it can be disabled
5043 in a specific instance by prepending the "no" keyword before it.
5044
5045 Example :
5046 # this backend understands HTTP proxy requests and forwards them directly.
5047 backend direct_forward
5048 option httpclose
5049 option http_proxy
5050
5051 See also : "option httpclose"
5052
Willy Tarreau211ad242009-10-03 21:45:07 +02005053
Jamie Gloudon801a0a32012-08-25 00:18:33 -04005054option independent-streams
5055no option independent-streams
5056 Enable or disable independent timeout processing for both directions
Willy Tarreauf27b5ea2009-10-03 22:01:18 +02005057 May be used in sections : defaults | frontend | listen | backend
5058 yes | yes | yes | yes
5059 Arguments : none
5060
5061 By default, when data is sent over a socket, both the write timeout and the
5062 read timeout for that socket are refreshed, because we consider that there is
5063 activity on that socket, and we have no other means of guessing if we should
5064 receive data or not.
5065
5066 While this default behaviour is desirable for almost all applications, there
5067 exists a situation where it is desirable to disable it, and only refresh the
5068 read timeout if there are incoming data. This happens on sessions with large
5069 timeouts and low amounts of exchanged data such as telnet session. If the
5070 server suddenly disappears, the output data accumulates in the system's
5071 socket buffers, both timeouts are correctly refreshed, and there is no way
5072 to know the server does not receive them, so we don't timeout. However, when
5073 the underlying protocol always echoes sent data, it would be enough by itself
5074 to detect the issue using the read timeout. Note that this problem does not
5075 happen with more verbose protocols because data won't accumulate long in the
5076 socket buffers.
5077
5078 When this option is set on the frontend, it will disable read timeout updates
5079 on data sent to the client. There probably is little use of this case. When
5080 the option is set on the backend, it will disable read timeout updates on
5081 data sent to the server. Doing so will typically break large HTTP posts from
5082 slow lines, so use it with caution.
5083
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03005084 Note: older versions used to call this setting "option independent-streams"
Jamie Gloudon801a0a32012-08-25 00:18:33 -04005085 with a spelling mistake. This spelling is still supported but
5086 deprecated.
5087
Willy Tarreauce887fd2012-05-12 12:50:00 +02005088 See also : "timeout client", "timeout server" and "timeout tunnel"
Willy Tarreauf27b5ea2009-10-03 22:01:18 +02005089
5090
Gabor Lekenyb4c81e42010-09-29 18:17:05 +02005091option ldap-check
5092 Use LDAPv3 health checks for server testing
5093 May be used in sections : defaults | frontend | listen | backend
5094 yes | no | yes | yes
5095 Arguments : none
5096
5097 It is possible to test that the server correctly talks LDAPv3 instead of just
5098 testing that it accepts the TCP connection. When this option is set, an
5099 LDAPv3 anonymous simple bind message is sent to the server, and the response
5100 is analyzed to find an LDAPv3 bind response message.
5101
5102 The server is considered valid only when the LDAP response contains success
5103 resultCode (http://tools.ietf.org/html/rfc4511#section-4.1.9).
5104
5105 Logging of bind requests is server dependent see your documentation how to
5106 configure it.
5107
5108 Example :
5109 option ldap-check
5110
5111 See also : "option httpchk"
5112
5113
Simon Horman98637e52014-06-20 12:30:16 +09005114option external-check
5115 Use external processes for server health checks
5116 May be used in sections : defaults | frontend | listen | backend
5117 yes | no | yes | yes
5118
5119 It is possible to test the health of a server using an external command.
5120 This is achieved by running the executable set using "external-check
5121 command".
5122
5123 Requires the "external-check" global to be set.
5124
5125 See also : "external-check", "external-check command", "external-check path"
5126
5127
Willy Tarreau211ad242009-10-03 21:45:07 +02005128option log-health-checks
5129no option log-health-checks
Willy Tarreaubef1b322014-05-13 21:01:39 +02005130 Enable or disable logging of health checks status updates
Willy Tarreau211ad242009-10-03 21:45:07 +02005131 May be used in sections : defaults | frontend | listen | backend
5132 yes | no | yes | yes
5133 Arguments : none
5134
Willy Tarreaubef1b322014-05-13 21:01:39 +02005135 By default, failed health check are logged if server is UP and successful
5136 health checks are logged if server is DOWN, so the amount of additional
5137 information is limited.
Willy Tarreau211ad242009-10-03 21:45:07 +02005138
Willy Tarreaubef1b322014-05-13 21:01:39 +02005139 When this option is enabled, any change of the health check status or to
5140 the server's health will be logged, so that it becomes possible to know
5141 that a server was failing occasional checks before crashing, or exactly when
5142 it failed to respond a valid HTTP status, then when the port started to
5143 reject connections, then when the server stopped responding at all.
5144
5145 Note that status changes not caused by health checks (eg: enable/disable on
5146 the CLI) are intentionally not logged by this option.
Willy Tarreau211ad242009-10-03 21:45:07 +02005147
Willy Tarreaubef1b322014-05-13 21:01:39 +02005148 See also: "option httpchk", "option ldap-check", "option mysql-check",
5149 "option pgsql-check", "option redis-check", "option smtpchk",
5150 "option tcp-check", "log" and section 8 about logging.
Willy Tarreau211ad242009-10-03 21:45:07 +02005151
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02005152
5153option log-separate-errors
5154no option log-separate-errors
5155 Change log level for non-completely successful connections
5156 May be used in sections : defaults | frontend | listen | backend
5157 yes | yes | yes | no
5158 Arguments : none
5159
5160 Sometimes looking for errors in logs is not easy. This option makes haproxy
5161 raise the level of logs containing potentially interesting information such
5162 as errors, timeouts, retries, redispatches, or HTTP status codes 5xx. The
5163 level changes from "info" to "err". This makes it possible to log them
5164 separately to a different file with most syslog daemons. Be careful not to
5165 remove them from the original file, otherwise you would lose ordering which
5166 provides very important information.
5167
5168 Using this option, large sites dealing with several thousand connections per
5169 second may log normal traffic to a rotating buffer and only archive smaller
5170 error logs.
5171
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005172 See also : "log", "dontlognull", "dontlog-normal" and section 8 about
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02005173 logging.
5174
Willy Tarreauc27debf2008-01-06 08:57:02 +01005175
5176option logasap
5177no option logasap
5178 Enable or disable early logging of HTTP requests
5179 May be used in sections : defaults | frontend | listen | backend
5180 yes | yes | yes | no
5181 Arguments : none
5182
5183 By default, HTTP requests are logged upon termination so that the total
5184 transfer time and the number of bytes appear in the logs. When large objects
5185 are being transferred, it may take a while before the request appears in the
5186 logs. Using "option logasap", the request gets logged as soon as the server
5187 sends the complete headers. The only missing information in the logs will be
5188 the total number of bytes which will indicate everything except the amount
5189 of data transferred, and the total time which will not take the transfer
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01005190 time into account. In such a situation, it's a good practice to capture the
Willy Tarreauc27debf2008-01-06 08:57:02 +01005191 "Content-Length" response header so that the logs at least indicate how many
5192 bytes are expected to be transferred.
5193
Willy Tarreaucc6c8912009-02-22 10:53:55 +01005194 Examples :
5195 listen http_proxy 0.0.0.0:80
5196 mode http
5197 option httplog
5198 option logasap
5199 log 192.168.2.200 local3
5200
5201 >>> Feb 6 12:14:14 localhost \
5202 haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
5203 static/srv1 9/10/7/14/+30 200 +243 - - ---- 3/1/1/1/0 1/0 \
5204 "GET /image.iso HTTP/1.0"
5205
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005206 See also : "option httplog", "capture response header", and section 8 about
Willy Tarreauc27debf2008-01-06 08:57:02 +01005207 logging.
5208
5209
Nenad Merdanovic6639a7c2014-05-30 14:26:32 +02005210option mysql-check [ user <username> [ post-41 ] ]
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02005211 Use MySQL health checks for server testing
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01005212 May be used in sections : defaults | frontend | listen | backend
5213 yes | no | yes | yes
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02005214 Arguments :
Cyril Bonté108cf6e2012-04-21 23:30:29 +02005215 <username> This is the username which will be used when connecting to MySQL
5216 server.
Nenad Merdanovic6639a7c2014-05-30 14:26:32 +02005217 post-41 Send post v4.1 client compatible checks
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02005218
5219 If you specify a username, the check consists of sending two MySQL packet,
5220 one Client Authentication packet, and one QUIT packet, to correctly close
5221 MySQL session. We then parse the MySQL Handshake Initialisation packet and/or
5222 Error packet. It is a basic but useful test which does not produce error nor
5223 aborted connect on the server. However, it requires adding an authorization
5224 in the MySQL table, like this :
5225
5226 USE mysql;
5227 INSERT INTO user (Host,User) values ('<ip_of_haproxy>','<username>');
5228 FLUSH PRIVILEGES;
5229
5230 If you don't specify a username (it is deprecated and not recommended), the
5231 check only consists in parsing the Mysql Handshake Initialisation packet or
5232 Error packet, we don't send anything in this mode. It was reported that it
5233 can generate lockout if check is too frequent and/or if there is not enough
5234 traffic. In fact, you need in this case to check MySQL "max_connect_errors"
5235 value as if a connection is established successfully within fewer than MySQL
5236 "max_connect_errors" attempts after a previous connection was interrupted,
5237 the error count for the host is cleared to zero. If HAProxy's server get
5238 blocked, the "FLUSH HOSTS" statement is the only way to unblock it.
5239
5240 Remember that this does not check database presence nor database consistency.
5241 To do this, you can use an external check with xinetd for example.
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01005242
Hervé COMMOWICK212f7782011-06-10 14:05:59 +02005243 The check requires MySQL >=3.22, for older version, please use TCP check.
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01005244
5245 Most often, an incoming MySQL server needs to see the client's IP address for
5246 various purposes, including IP privilege matching and connection logging.
5247 When possible, it is often wise to masquerade the client's IP address when
5248 connecting to the server using the "usesrc" argument of the "source" keyword,
5249 which requires the cttproxy feature to be compiled in, and the MySQL server
5250 to route the client via the machine hosting haproxy.
5251
5252 See also: "option httpchk"
5253
5254
Willy Tarreaua453bdd2008-01-08 19:50:52 +01005255option nolinger
5256no option nolinger
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005257 Enable or disable immediate session resource cleaning after close
Willy Tarreaua453bdd2008-01-08 19:50:52 +01005258 May be used in sections: defaults | frontend | listen | backend
5259 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005260 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01005261
5262 When clients or servers abort connections in a dirty way (eg: they are
5263 physically disconnected), the session timeouts triggers and the session is
5264 closed. But it will remain in FIN_WAIT1 state for some time in the system,
5265 using some resources and possibly limiting the ability to establish newer
5266 connections.
5267
5268 When this happens, it is possible to activate "option nolinger" which forces
5269 the system to immediately remove any socket's pending data on close. Thus,
5270 the session is instantly purged from the system's tables. This usually has
5271 side effects such as increased number of TCP resets due to old retransmits
5272 getting immediately rejected. Some firewalls may sometimes complain about
5273 this too.
5274
5275 For this reason, it is not recommended to use this option when not absolutely
5276 needed. You know that you need it when you have thousands of FIN_WAIT1
5277 sessions on your system (TIME_WAIT ones do not count).
5278
5279 This option may be used both on frontends and backends, depending on the side
5280 where it is required. Use it on the frontend for clients, and on the backend
5281 for servers.
5282
5283 If this option has been enabled in a "defaults" section, it can be disabled
5284 in a specific instance by prepending the "no" keyword before it.
5285
5286
Willy Tarreau55165fe2009-05-10 12:02:55 +02005287option originalto [ except <network> ] [ header <name> ]
5288 Enable insertion of the X-Original-To header to requests sent to servers
5289 May be used in sections : defaults | frontend | listen | backend
5290 yes | yes | yes | yes
5291 Arguments :
5292 <network> is an optional argument used to disable this option for sources
5293 matching <network>
5294 <name> an optional argument to specify a different "X-Original-To"
5295 header name.
5296
5297 Since HAProxy can work in transparent mode, every request from a client can
5298 be redirected to the proxy and HAProxy itself can proxy every request to a
5299 complex SQUID environment and the destination host from SO_ORIGINAL_DST will
5300 be lost. This is annoying when you want access rules based on destination ip
5301 addresses. To solve this problem, a new HTTP header "X-Original-To" may be
5302 added by HAProxy to all requests sent to the server. This header contains a
5303 value representing the original destination IP address. Since this must be
5304 configured to always use the last occurrence of this header only. Note that
5305 only the last occurrence of the header must be used, since it is really
5306 possible that the client has already brought one.
5307
5308 The keyword "header" may be used to supply a different header name to replace
5309 the default "X-Original-To". This can be useful where you might already
5310 have a "X-Original-To" header from a different application, and you need
5311 preserve it. Also if your backend server doesn't use the "X-Original-To"
5312 header and requires different one.
5313
5314 Sometimes, a same HAProxy instance may be shared between a direct client
5315 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
5316 used to decrypt HTTPS traffic). It is possible to disable the addition of the
5317 header for a known source address or network by adding the "except" keyword
5318 followed by the network address. In this case, any source IP matching the
5319 network will not cause an addition of this header. Most common uses are with
5320 private networks or 127.0.0.1.
5321
5322 This option may be specified either in the frontend or in the backend. If at
5323 least one of them uses it, the header will be added. Note that the backend's
5324 setting of the header subargument takes precedence over the frontend's if
5325 both are defined.
5326
Willy Tarreau55165fe2009-05-10 12:02:55 +02005327 Examples :
5328 # Original Destination address
5329 frontend www
5330 mode http
5331 option originalto except 127.0.0.1
5332
5333 # Those servers want the IP Address in X-Client-Dst
5334 backend www
5335 mode http
5336 option originalto header X-Client-Dst
5337
Willy Tarreau87cf5142011-08-19 22:57:24 +02005338 See also : "option httpclose", "option http-server-close",
5339 "option forceclose"
Willy Tarreau55165fe2009-05-10 12:02:55 +02005340
5341
Willy Tarreaua453bdd2008-01-08 19:50:52 +01005342option persist
5343no option persist
5344 Enable or disable forced persistence on down servers
5345 May be used in sections: defaults | frontend | listen | backend
5346 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005347 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01005348
5349 When an HTTP request reaches a backend with a cookie which references a dead
5350 server, by default it is redispatched to another server. It is possible to
5351 force the request to be sent to the dead server first using "option persist"
5352 if absolutely needed. A common use case is when servers are under extreme
5353 load and spend their time flapping. In this case, the users would still be
5354 directed to the server they opened the session on, in the hope they would be
5355 correctly served. It is recommended to use "option redispatch" in conjunction
5356 with this option so that in the event it would not be possible to connect to
5357 the server at all (server definitely dead), the client would finally be
5358 redirected to another valid server.
5359
5360 If this option has been enabled in a "defaults" section, it can be disabled
5361 in a specific instance by prepending the "no" keyword before it.
5362
Willy Tarreau4de91492010-01-22 19:10:05 +01005363 See also : "option redispatch", "retries", "force-persist"
Willy Tarreaua453bdd2008-01-08 19:50:52 +01005364
5365
Willy Tarreau0c122822013-12-15 18:49:01 +01005366option pgsql-check [ user <username> ]
5367 Use PostgreSQL health checks for server testing
5368 May be used in sections : defaults | frontend | listen | backend
5369 yes | no | yes | yes
5370 Arguments :
5371 <username> This is the username which will be used when connecting to
5372 PostgreSQL server.
5373
5374 The check sends a PostgreSQL StartupMessage and waits for either
5375 Authentication request or ErrorResponse message. It is a basic but useful
5376 test which does not produce error nor aborted connect on the server.
5377 This check is identical with the "mysql-check".
5378
5379 See also: "option httpchk"
5380
5381
Willy Tarreau9420b122013-12-15 18:58:25 +01005382option prefer-last-server
5383no option prefer-last-server
5384 Allow multiple load balanced requests to remain on the same server
5385 May be used in sections: defaults | frontend | listen | backend
5386 yes | no | yes | yes
5387 Arguments : none
5388
5389 When the load balancing algorithm in use is not deterministic, and a previous
5390 request was sent to a server to which haproxy still holds a connection, it is
5391 sometimes desirable that subsequent requests on a same session go to the same
5392 server as much as possible. Note that this is different from persistence, as
5393 we only indicate a preference which haproxy tries to apply without any form
5394 of warranty. The real use is for keep-alive connections sent to servers. When
5395 this option is used, haproxy will try to reuse the same connection that is
5396 attached to the server instead of rebalancing to another server, causing a
5397 close of the connection. This can make sense for static file servers. It does
Willy Tarreau068621e2013-12-23 15:11:25 +01005398 not make much sense to use this in combination with hashing algorithms. Note,
5399 haproxy already automatically tries to stick to a server which sends a 401 or
5400 to a proxy which sends a 407 (authentication required). This is mandatory for
5401 use with the broken NTLM authentication challenge, and significantly helps in
5402 troubleshooting some faulty applications. Option prefer-last-server might be
5403 desirable in these environments as well, to avoid redistributing the traffic
5404 after every other response.
Willy Tarreau9420b122013-12-15 18:58:25 +01005405
5406 If this option has been enabled in a "defaults" section, it can be disabled
5407 in a specific instance by prepending the "no" keyword before it.
5408
5409 See also: "option http-keep-alive"
5410
5411
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01005412option redispatch
Joseph Lynch726ab712015-05-11 23:25:34 -07005413option redispatch <interval>
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01005414no option redispatch
5415 Enable or disable session redistribution in case of connection failure
5416 May be used in sections: defaults | frontend | listen | backend
5417 yes | no | yes | yes
Joseph Lynch726ab712015-05-11 23:25:34 -07005418 Arguments :
5419 <interval> The optional integer value that controls how often redispatches
5420 occur when retrying connections. Positive value P indicates a
5421 redispatch is desired on every Pth retry, and negative value
5422 N indicate a redispath is desired on the Nth retry prior to the
5423 last retry. For example, the default of -1 preserves the
5424 historical behaviour of redispatching on the last retry, a
5425 positive value of 1 would indicate a redispatch on every retry,
5426 and a positive value of 3 would indicate a redispatch on every
5427 third retry. You can disable redispatches with a value of 0.
5428
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01005429
5430 In HTTP mode, if a server designated by a cookie is down, clients may
5431 definitely stick to it because they cannot flush the cookie, so they will not
5432 be able to access the service anymore.
5433
5434 Specifying "option redispatch" will allow the proxy to break their
5435 persistence and redistribute them to a working server.
5436
Joseph Lynch726ab712015-05-11 23:25:34 -07005437 It also allows to retry connections to another server in case of multiple
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01005438 connection failures. Of course, it requires having "retries" set to a nonzero
5439 value.
Willy Tarreaud72758d2010-01-12 10:42:19 +01005440
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01005441 This form is the preferred form, which replaces both the "redispatch" and
5442 "redisp" keywords.
5443
5444 If this option has been enabled in a "defaults" section, it can be disabled
5445 in a specific instance by prepending the "no" keyword before it.
5446
Willy Tarreau4de91492010-01-22 19:10:05 +01005447 See also : "redispatch", "retries", "force-persist"
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01005448
Willy Tarreaua453bdd2008-01-08 19:50:52 +01005449
Hervé COMMOWICKec032d62011-08-05 16:23:48 +02005450option redis-check
5451 Use redis health checks for server testing
5452 May be used in sections : defaults | frontend | listen | backend
5453 yes | no | yes | yes
5454 Arguments : none
5455
5456 It is possible to test that the server correctly talks REDIS protocol instead
5457 of just testing that it accepts the TCP connection. When this option is set,
5458 a PING redis command is sent to the server, and the response is analyzed to
5459 find the "+PONG" response message.
5460
5461 Example :
5462 option redis-check
5463
5464 See also : "option httpchk"
5465
5466
Willy Tarreaua453bdd2008-01-08 19:50:52 +01005467option smtpchk
5468option smtpchk <hello> <domain>
5469 Use SMTP health checks for server testing
5470 May be used in sections : defaults | frontend | listen | backend
5471 yes | no | yes | yes
Willy Tarreaud72758d2010-01-12 10:42:19 +01005472 Arguments :
Willy Tarreaua453bdd2008-01-08 19:50:52 +01005473 <hello> is an optional argument. It is the "hello" command to use. It can
5474 be either "HELO" (for SMTP) or "EHLO" (for ESTMP). All other
5475 values will be turned into the default command ("HELO").
5476
5477 <domain> is the domain name to present to the server. It may only be
5478 specified (and is mandatory) if the hello command has been
5479 specified. By default, "localhost" is used.
5480
5481 When "option smtpchk" is set, the health checks will consist in TCP
5482 connections followed by an SMTP command. By default, this command is
5483 "HELO localhost". The server's return code is analyzed and only return codes
5484 starting with a "2" will be considered as valid. All other responses,
5485 including a lack of response will constitute an error and will indicate a
5486 dead server.
5487
5488 This test is meant to be used with SMTP servers or relays. Depending on the
5489 request, it is possible that some servers do not log each connection attempt,
5490 so you may want to experiment to improve the behaviour. Using telnet on port
5491 25 is often easier than adjusting the configuration.
5492
5493 Most often, an incoming SMTP server needs to see the client's IP address for
5494 various purposes, including spam filtering, anti-spoofing and logging. When
5495 possible, it is often wise to masquerade the client's IP address when
5496 connecting to the server using the "usesrc" argument of the "source" keyword,
5497 which requires the cttproxy feature to be compiled in.
5498
5499 Example :
5500 option smtpchk HELO mydomain.org
5501
5502 See also : "option httpchk", "source"
5503
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01005504
Krzysztof Piotr Oledzkiaeebf9b2009-10-04 15:43:17 +02005505option socket-stats
5506no option socket-stats
5507
5508 Enable or disable collecting & providing separate statistics for each socket.
5509 May be used in sections : defaults | frontend | listen | backend
5510 yes | yes | yes | no
5511
5512 Arguments : none
5513
5514
Willy Tarreauff4f82d2009-02-06 11:28:13 +01005515option splice-auto
5516no option splice-auto
5517 Enable or disable automatic kernel acceleration on sockets in both directions
5518 May be used in sections : defaults | frontend | listen | backend
5519 yes | yes | yes | yes
5520 Arguments : none
5521
5522 When this option is enabled either on a frontend or on a backend, haproxy
5523 will automatically evaluate the opportunity to use kernel tcp splicing to
5524 forward data between the client and the server, in either direction. Haproxy
5525 uses heuristics to estimate if kernel splicing might improve performance or
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005526 not. Both directions are handled independently. Note that the heuristics used
Willy Tarreauff4f82d2009-02-06 11:28:13 +01005527 are not much aggressive in order to limit excessive use of splicing. This
5528 option requires splicing to be enabled at compile time, and may be globally
5529 disabled with the global option "nosplice". Since splice uses pipes, using it
5530 requires that there are enough spare pipes.
5531
5532 Important note: kernel-based TCP splicing is a Linux-specific feature which
5533 first appeared in kernel 2.6.25. It offers kernel-based acceleration to
5534 transfer data between sockets without copying these data to user-space, thus
5535 providing noticeable performance gains and CPU cycles savings. Since many
5536 early implementations are buggy, corrupt data and/or are inefficient, this
5537 feature is not enabled by default, and it should be used with extreme care.
5538 While it is not possible to detect the correctness of an implementation,
5539 2.6.29 is the first version offering a properly working implementation. In
5540 case of doubt, splicing may be globally disabled using the global "nosplice"
5541 keyword.
5542
5543 Example :
5544 option splice-auto
5545
5546 If this option has been enabled in a "defaults" section, it can be disabled
5547 in a specific instance by prepending the "no" keyword before it.
5548
5549 See also : "option splice-request", "option splice-response", and global
5550 options "nosplice" and "maxpipes"
5551
5552
5553option splice-request
5554no option splice-request
5555 Enable or disable automatic kernel acceleration on sockets for requests
5556 May be used in sections : defaults | frontend | listen | backend
5557 yes | yes | yes | yes
5558 Arguments : none
5559
5560 When this option is enabled either on a frontend or on a backend, haproxy
Jamie Gloudonaaa21002012-08-25 00:18:33 -04005561 will use kernel tcp splicing whenever possible to forward data going from
Willy Tarreauff4f82d2009-02-06 11:28:13 +01005562 the client to the server. It might still use the recv/send scheme if there
5563 are no spare pipes left. This option requires splicing to be enabled at
5564 compile time, and may be globally disabled with the global option "nosplice".
5565 Since splice uses pipes, using it requires that there are enough spare pipes.
5566
5567 Important note: see "option splice-auto" for usage limitations.
5568
5569 Example :
5570 option splice-request
5571
5572 If this option has been enabled in a "defaults" section, it can be disabled
5573 in a specific instance by prepending the "no" keyword before it.
5574
5575 See also : "option splice-auto", "option splice-response", and global options
5576 "nosplice" and "maxpipes"
5577
5578
5579option splice-response
5580no option splice-response
5581 Enable or disable automatic kernel acceleration on sockets for responses
5582 May be used in sections : defaults | frontend | listen | backend
5583 yes | yes | yes | yes
5584 Arguments : none
5585
5586 When this option is enabled either on a frontend or on a backend, haproxy
Jamie Gloudonaaa21002012-08-25 00:18:33 -04005587 will use kernel tcp splicing whenever possible to forward data going from
Willy Tarreauff4f82d2009-02-06 11:28:13 +01005588 the server to the client. It might still use the recv/send scheme if there
5589 are no spare pipes left. This option requires splicing to be enabled at
5590 compile time, and may be globally disabled with the global option "nosplice".
5591 Since splice uses pipes, using it requires that there are enough spare pipes.
5592
5593 Important note: see "option splice-auto" for usage limitations.
5594
5595 Example :
5596 option splice-response
5597
5598 If this option has been enabled in a "defaults" section, it can be disabled
5599 in a specific instance by prepending the "no" keyword before it.
5600
5601 See also : "option splice-auto", "option splice-request", and global options
5602 "nosplice" and "maxpipes"
5603
5604
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005605option srvtcpka
5606no option srvtcpka
5607 Enable or disable the sending of TCP keepalive packets on the server side
5608 May be used in sections : defaults | frontend | listen | backend
5609 yes | no | yes | yes
5610 Arguments : none
5611
5612 When there is a firewall or any session-aware component between a client and
5613 a server, and when the protocol involves very long sessions with long idle
5614 periods (eg: remote desktops), there is a risk that one of the intermediate
5615 components decides to expire a session which has remained idle for too long.
5616
5617 Enabling socket-level TCP keep-alives makes the system regularly send packets
5618 to the other end of the connection, leaving it active. The delay between
5619 keep-alive probes is controlled by the system only and depends both on the
5620 operating system and its tuning parameters.
5621
5622 It is important to understand that keep-alive packets are neither emitted nor
5623 received at the application level. It is only the network stacks which sees
5624 them. For this reason, even if one side of the proxy already uses keep-alives
5625 to maintain its connection alive, those keep-alive packets will not be
5626 forwarded to the other side of the proxy.
5627
5628 Please note that this has nothing to do with HTTP keep-alive.
5629
5630 Using option "srvtcpka" enables the emission of TCP keep-alive probes on the
5631 server side of a connection, which should help when session expirations are
5632 noticed between HAProxy and a server.
5633
5634 If this option has been enabled in a "defaults" section, it can be disabled
5635 in a specific instance by prepending the "no" keyword before it.
5636
5637 See also : "option clitcpka", "option tcpka"
5638
5639
Willy Tarreaua453bdd2008-01-08 19:50:52 +01005640option ssl-hello-chk
5641 Use SSLv3 client hello health checks for server testing
5642 May be used in sections : defaults | frontend | listen | backend
5643 yes | no | yes | yes
5644 Arguments : none
5645
5646 When some SSL-based protocols are relayed in TCP mode through HAProxy, it is
5647 possible to test that the server correctly talks SSL instead of just testing
5648 that it accepts the TCP connection. When "option ssl-hello-chk" is set, pure
5649 SSLv3 client hello messages are sent once the connection is established to
5650 the server, and the response is analyzed to find an SSL server hello message.
5651 The server is considered valid only when the response contains this server
5652 hello message.
5653
5654 All servers tested till there correctly reply to SSLv3 client hello messages,
5655 and most servers tested do not even log the requests containing only hello
5656 messages, which is appreciable.
5657
Willy Tarreau763a95b2012-10-04 23:15:39 +02005658 Note that this check works even when SSL support was not built into haproxy
5659 because it forges the SSL message. When SSL support is available, it is best
5660 to use native SSL health checks instead of this one.
Willy Tarreaua453bdd2008-01-08 19:50:52 +01005661
Willy Tarreau763a95b2012-10-04 23:15:39 +02005662 See also: "option httpchk", "check-ssl"
5663
Willy Tarreaua453bdd2008-01-08 19:50:52 +01005664
Willy Tarreaued179852013-12-16 01:07:00 +01005665option tcp-check
5666 Perform health checks using tcp-check send/expect sequences
5667 May be used in sections: defaults | frontend | listen | backend
5668 yes | no | yes | yes
5669
5670 This health check method is intended to be combined with "tcp-check" command
5671 lists in order to support send/expect types of health check sequences.
5672
5673 TCP checks currently support 4 modes of operations :
5674 - no "tcp-check" directive : the health check only consists in a connection
5675 attempt, which remains the default mode.
5676
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03005677 - "tcp-check send" or "tcp-check send-binary" only is mentioned : this is
Willy Tarreaued179852013-12-16 01:07:00 +01005678 used to send a string along with a connection opening. With some
5679 protocols, it helps sending a "QUIT" message for example that prevents
5680 the server from logging a connection error for each health check. The
5681 check result will still be based on the ability to open the connection
5682 only.
5683
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03005684 - "tcp-check expect" only is mentioned : this is used to test a banner.
Willy Tarreaued179852013-12-16 01:07:00 +01005685 The connection is opened and haproxy waits for the server to present some
5686 contents which must validate some rules. The check result will be based
5687 on the matching between the contents and the rules. This is suited for
5688 POP, IMAP, SMTP, FTP, SSH, TELNET.
5689
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03005690 - both "tcp-check send" and "tcp-check expect" are mentioned : this is
Willy Tarreaued179852013-12-16 01:07:00 +01005691 used to test a hello-type protocol. Haproxy sends a message, the server
5692 responds and its response is analysed. the check result will be based on
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03005693 the matching between the response contents and the rules. This is often
Willy Tarreaued179852013-12-16 01:07:00 +01005694 suited for protocols which require a binding or a request/response model.
5695 LDAP, MySQL, Redis and SSL are example of such protocols, though they
5696 already all have their dedicated checks with a deeper understanding of
5697 the respective protocols.
5698 In this mode, many questions may be sent and many answers may be
5699 analysed.
5700
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02005701 A fifth mode can be used to insert comments in different steps of the
5702 script.
5703
5704 For each tcp-check rule you create, you can add a "comment" directive,
5705 followed by a string. This string will be reported in the log and stderr
5706 in debug mode. It is useful to make user-friendly error reporting.
5707 The "comment" is of course optional.
5708
5709
Willy Tarreaued179852013-12-16 01:07:00 +01005710 Examples :
5711 # perform a POP check (analyse only server's banner)
5712 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02005713 tcp-check expect string +OK\ POP3\ ready comment POP\ protocol
Willy Tarreaued179852013-12-16 01:07:00 +01005714
5715 # perform an IMAP check (analyse only server's banner)
5716 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02005717 tcp-check expect string *\ OK\ IMAP4\ ready comment IMAP\ protocol
Willy Tarreaued179852013-12-16 01:07:00 +01005718
5719 # look for the redis master server after ensuring it speaks well
5720 # redis protocol, then it exits properly.
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03005721 # (send a command then analyse the response 3 times)
Willy Tarreaued179852013-12-16 01:07:00 +01005722 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02005723 tcp-check comment PING\ phase
Willy Tarreaued179852013-12-16 01:07:00 +01005724 tcp-check send PING\r\n
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02005725 tcp-check expect +PONGe
5726 tcp-check comment role\ check
Willy Tarreaued179852013-12-16 01:07:00 +01005727 tcp-check send info\ replication\r\n
5728 tcp-check expect string role:master
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02005729 tcp-check comment QUIT\ phase
Willy Tarreaued179852013-12-16 01:07:00 +01005730 tcp-check send QUIT\r\n
5731 tcp-check expect string +OK
5732
5733 forge a HTTP request, then analyse the response
5734 (send many headers before analyzing)
5735 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02005736 tcp-check comment forge\ and\ send\ HTTP\ request
Willy Tarreaued179852013-12-16 01:07:00 +01005737 tcp-check send HEAD\ /\ HTTP/1.1\r\n
5738 tcp-check send Host:\ www.mydomain.com\r\n
5739 tcp-check send User-Agent:\ HAProxy\ tcpcheck\r\n
5740 tcp-check send \r\n
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02005741 tcp-check expect rstring HTTP/1\..\ (2..|3..) comment check\ HTTP\ response
Willy Tarreaued179852013-12-16 01:07:00 +01005742
5743
5744 See also : "tcp-check expect", "tcp-check send"
5745
5746
Willy Tarreau9ea05a72009-06-14 12:07:01 +02005747option tcp-smart-accept
5748no option tcp-smart-accept
5749 Enable or disable the saving of one ACK packet during the accept sequence
5750 May be used in sections : defaults | frontend | listen | backend
5751 yes | yes | yes | no
5752 Arguments : none
5753
5754 When an HTTP connection request comes in, the system acknowledges it on
5755 behalf of HAProxy, then the client immediately sends its request, and the
5756 system acknowledges it too while it is notifying HAProxy about the new
5757 connection. HAProxy then reads the request and responds. This means that we
5758 have one TCP ACK sent by the system for nothing, because the request could
5759 very well be acknowledged by HAProxy when it sends its response.
5760
5761 For this reason, in HTTP mode, HAProxy automatically asks the system to avoid
5762 sending this useless ACK on platforms which support it (currently at least
5763 Linux). It must not cause any problem, because the system will send it anyway
5764 after 40 ms if the response takes more time than expected to come.
5765
5766 During complex network debugging sessions, it may be desirable to disable
5767 this optimization because delayed ACKs can make troubleshooting more complex
5768 when trying to identify where packets are delayed. It is then possible to
5769 fall back to normal behaviour by specifying "no option tcp-smart-accept".
5770
5771 It is also possible to force it for non-HTTP proxies by simply specifying
5772 "option tcp-smart-accept". For instance, it can make sense with some services
5773 such as SMTP where the server speaks first.
5774
5775 It is recommended to avoid forcing this option in a defaults section. In case
5776 of doubt, consider setting it back to automatic values by prepending the
5777 "default" keyword before it, or disabling it using the "no" keyword.
5778
Willy Tarreaud88edf22009-06-14 15:48:17 +02005779 See also : "option tcp-smart-connect"
5780
5781
5782option tcp-smart-connect
5783no option tcp-smart-connect
5784 Enable or disable the saving of one ACK packet during the connect sequence
5785 May be used in sections : defaults | frontend | listen | backend
5786 yes | no | yes | yes
5787 Arguments : none
5788
5789 On certain systems (at least Linux), HAProxy can ask the kernel not to
5790 immediately send an empty ACK upon a connection request, but to directly
5791 send the buffer request instead. This saves one packet on the network and
5792 thus boosts performance. It can also be useful for some servers, because they
5793 immediately get the request along with the incoming connection.
5794
5795 This feature is enabled when "option tcp-smart-connect" is set in a backend.
5796 It is not enabled by default because it makes network troubleshooting more
5797 complex.
5798
5799 It only makes sense to enable it with protocols where the client speaks first
5800 such as HTTP. In other situations, if there is no data to send in place of
5801 the ACK, a normal ACK is sent.
5802
5803 If this option has been enabled in a "defaults" section, it can be disabled
5804 in a specific instance by prepending the "no" keyword before it.
5805
5806 See also : "option tcp-smart-accept"
5807
Willy Tarreau9ea05a72009-06-14 12:07:01 +02005808
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005809option tcpka
5810 Enable or disable the sending of TCP keepalive packets on both sides
5811 May be used in sections : defaults | frontend | listen | backend
5812 yes | yes | yes | yes
5813 Arguments : none
5814
5815 When there is a firewall or any session-aware component between a client and
5816 a server, and when the protocol involves very long sessions with long idle
5817 periods (eg: remote desktops), there is a risk that one of the intermediate
5818 components decides to expire a session which has remained idle for too long.
5819
5820 Enabling socket-level TCP keep-alives makes the system regularly send packets
5821 to the other end of the connection, leaving it active. The delay between
5822 keep-alive probes is controlled by the system only and depends both on the
5823 operating system and its tuning parameters.
5824
5825 It is important to understand that keep-alive packets are neither emitted nor
5826 received at the application level. It is only the network stacks which sees
5827 them. For this reason, even if one side of the proxy already uses keep-alives
5828 to maintain its connection alive, those keep-alive packets will not be
5829 forwarded to the other side of the proxy.
5830
5831 Please note that this has nothing to do with HTTP keep-alive.
5832
5833 Using option "tcpka" enables the emission of TCP keep-alive probes on both
5834 the client and server sides of a connection. Note that this is meaningful
5835 only in "defaults" or "listen" sections. If this option is used in a
5836 frontend, only the client side will get keep-alives, and if this option is
5837 used in a backend, only the server side will get keep-alives. For this
5838 reason, it is strongly recommended to explicitly use "option clitcpka" and
5839 "option srvtcpka" when the configuration is split between frontends and
5840 backends.
5841
5842 See also : "option clitcpka", "option srvtcpka"
5843
Willy Tarreau844e3c52008-01-11 16:28:18 +01005844
5845option tcplog
5846 Enable advanced logging of TCP connections with session state and timers
5847 May be used in sections : defaults | frontend | listen | backend
5848 yes | yes | yes | yes
5849 Arguments : none
5850
5851 By default, the log output format is very poor, as it only contains the
5852 source and destination addresses, and the instance name. By specifying
5853 "option tcplog", each log line turns into a much richer format including, but
5854 not limited to, the connection timers, the session status, the connections
5855 numbers, the frontend, backend and server name, and of course the source
5856 address and ports. This option is useful for pure TCP proxies in order to
5857 find which of the client or server disconnects or times out. For normal HTTP
5858 proxies, it's better to use "option httplog" which is even more complete.
5859
5860 This option may be set either in the frontend or the backend.
5861
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005862 See also : "option httplog", and section 8 about logging.
Willy Tarreau844e3c52008-01-11 16:28:18 +01005863
5864
Willy Tarreau844e3c52008-01-11 16:28:18 +01005865option transparent
5866no option transparent
5867 Enable client-side transparent proxying
5868 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau4b1f8592008-12-23 23:13:55 +01005869 yes | no | yes | yes
Willy Tarreau844e3c52008-01-11 16:28:18 +01005870 Arguments : none
5871
5872 This option was introduced in order to provide layer 7 persistence to layer 3
5873 load balancers. The idea is to use the OS's ability to redirect an incoming
5874 connection for a remote address to a local process (here HAProxy), and let
5875 this process know what address was initially requested. When this option is
5876 used, sessions without cookies will be forwarded to the original destination
5877 IP address of the incoming request (which should match that of another
5878 equipment), while requests with cookies will still be forwarded to the
5879 appropriate server.
5880
5881 Note that contrary to a common belief, this option does NOT make HAProxy
5882 present the client's IP to the server when establishing the connection.
5883
Willy Tarreaua1146052011-03-01 09:51:54 +01005884 See also: the "usesrc" argument of the "source" keyword, and the
Willy Tarreaueabeafa2008-01-16 16:17:06 +01005885 "transparent" option of the "bind" keyword.
Willy Tarreau844e3c52008-01-11 16:28:18 +01005886
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005887
Simon Horman98637e52014-06-20 12:30:16 +09005888external-check command <command>
5889 Executable to run when performing an external-check
5890 May be used in sections : defaults | frontend | listen | backend
5891 yes | no | yes | yes
5892
5893 Arguments :
5894 <command> is the external command to run
5895
Simon Horman98637e52014-06-20 12:30:16 +09005896 The arguments passed to the to the command are:
5897
Cyril Bonté777be862014-12-02 21:21:35 +01005898 <proxy_address> <proxy_port> <server_address> <server_port>
Simon Horman98637e52014-06-20 12:30:16 +09005899
Cyril Bonté777be862014-12-02 21:21:35 +01005900 The <proxy_address> and <proxy_port> are derived from the first listener
5901 that is either IPv4, IPv6 or a UNIX socket. In the case of a UNIX socket
5902 listener the proxy_address will be the path of the socket and the
5903 <proxy_port> will be the string "NOT_USED". In a backend section, it's not
5904 possible to determine a listener, and both <proxy_address> and <proxy_port>
5905 will have the string value "NOT_USED".
Simon Horman98637e52014-06-20 12:30:16 +09005906
Cyril Bonté72cda2a2014-12-27 22:28:39 +01005907 Some values are also provided through environment variables.
5908
5909 Environment variables :
5910 HAPROXY_PROXY_ADDR The first bind address if available (or empty if not
5911 applicable, for example in a "backend" section).
5912
5913 HAPROXY_PROXY_ID The backend id.
5914
5915 HAPROXY_PROXY_NAME The backend name.
5916
5917 HAPROXY_PROXY_PORT The first bind port if available (or empty if not
5918 applicable, for example in a "backend" section or
5919 for a UNIX socket).
5920
5921 HAPROXY_SERVER_ADDR The server address.
5922
5923 HAPROXY_SERVER_CURCONN The current number of connections on the server.
5924
5925 HAPROXY_SERVER_ID The server id.
5926
5927 HAPROXY_SERVER_MAXCONN The server max connections.
5928
5929 HAPROXY_SERVER_NAME The server name.
5930
5931 HAPROXY_SERVER_PORT The server port if available (or empty for a UNIX
5932 socket).
5933
5934 PATH The PATH environment variable used when executing
5935 the command may be set using "external-check path".
5936
Simon Horman98637e52014-06-20 12:30:16 +09005937 If the command executed and exits with a zero status then the check is
5938 considered to have passed, otherwise the check is considered to have
5939 failed.
5940
5941 Example :
5942 external-check command /bin/true
5943
5944 See also : "external-check", "option external-check", "external-check path"
5945
5946
5947external-check path <path>
5948 The value of the PATH environment variable used when running an external-check
5949 May be used in sections : defaults | frontend | listen | backend
5950 yes | no | yes | yes
5951
5952 Arguments :
5953 <path> is the path used when executing external command to run
5954
5955 The default path is "".
5956
5957 Example :
5958 external-check path "/usr/bin:/bin"
5959
5960 See also : "external-check", "option external-check",
5961 "external-check command"
5962
5963
Emeric Brun647caf12009-06-30 17:57:00 +02005964persist rdp-cookie
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02005965persist rdp-cookie(<name>)
Emeric Brun647caf12009-06-30 17:57:00 +02005966 Enable RDP cookie-based persistence
5967 May be used in sections : defaults | frontend | listen | backend
5968 yes | no | yes | yes
5969 Arguments :
5970 <name> is the optional name of the RDP cookie to check. If omitted, the
Willy Tarreau61e28f22010-05-16 22:31:05 +02005971 default cookie name "msts" will be used. There currently is no
5972 valid reason to change this name.
Emeric Brun647caf12009-06-30 17:57:00 +02005973
5974 This statement enables persistence based on an RDP cookie. The RDP cookie
5975 contains all information required to find the server in the list of known
5976 servers. So when this option is set in the backend, the request is analysed
5977 and if an RDP cookie is found, it is decoded. If it matches a known server
5978 which is still UP (or if "option persist" is set), then the connection is
5979 forwarded to this server.
5980
5981 Note that this only makes sense in a TCP backend, but for this to work, the
5982 frontend must have waited long enough to ensure that an RDP cookie is present
5983 in the request buffer. This is the same requirement as with the "rdp-cookie"
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005984 load-balancing method. Thus it is highly recommended to put all statements in
Emeric Brun647caf12009-06-30 17:57:00 +02005985 a single "listen" section.
5986
Willy Tarreau61e28f22010-05-16 22:31:05 +02005987 Also, it is important to understand that the terminal server will emit this
5988 RDP cookie only if it is configured for "token redirection mode", which means
5989 that the "IP address redirection" option is disabled.
5990
Emeric Brun647caf12009-06-30 17:57:00 +02005991 Example :
5992 listen tse-farm
5993 bind :3389
5994 # wait up to 5s for an RDP cookie in the request
5995 tcp-request inspect-delay 5s
5996 tcp-request content accept if RDP_COOKIE
5997 # apply RDP cookie persistence
5998 persist rdp-cookie
5999 # if server is unknown, let's balance on the same cookie.
Cyril Bontédc4d9032012-04-08 21:57:39 +02006000 # alternatively, "balance leastconn" may be useful too.
Emeric Brun647caf12009-06-30 17:57:00 +02006001 balance rdp-cookie
6002 server srv1 1.1.1.1:3389
6003 server srv2 1.1.1.2:3389
6004
Simon Hormanab814e02011-06-24 14:50:20 +09006005 See also : "balance rdp-cookie", "tcp-request", the "req_rdp_cookie" ACL and
6006 the rdp_cookie pattern fetch function.
Emeric Brun647caf12009-06-30 17:57:00 +02006007
6008
Willy Tarreau3a7d2072009-03-05 23:48:25 +01006009rate-limit sessions <rate>
6010 Set a limit on the number of new sessions accepted per second on a frontend
6011 May be used in sections : defaults | frontend | listen | backend
6012 yes | yes | yes | no
6013 Arguments :
6014 <rate> The <rate> parameter is an integer designating the maximum number
6015 of new sessions per second to accept on the frontend.
6016
6017 When the frontend reaches the specified number of new sessions per second, it
6018 stops accepting new connections until the rate drops below the limit again.
6019 During this time, the pending sessions will be kept in the socket's backlog
6020 (in system buffers) and haproxy will not even be aware that sessions are
6021 pending. When applying very low limit on a highly loaded service, it may make
6022 sense to increase the socket's backlog using the "backlog" keyword.
6023
6024 This feature is particularly efficient at blocking connection-based attacks
6025 or service abuse on fragile servers. Since the session rate is measured every
6026 millisecond, it is extremely accurate. Also, the limit applies immediately,
6027 no delay is needed at all to detect the threshold.
6028
6029 Example : limit the connection rate on SMTP to 10 per second max
6030 listen smtp
6031 mode tcp
6032 bind :25
6033 rate-limit sessions 10
6034 server 127.0.0.1:1025
6035
Willy Tarreaua17c2d92011-07-25 08:16:20 +02006036 Note : when the maximum rate is reached, the frontend's status is not changed
6037 but its sockets appear as "WAITING" in the statistics if the
6038 "socket-stats" option is enabled.
Willy Tarreau3a7d2072009-03-05 23:48:25 +01006039
6040 See also : the "backlog" keyword and the "fe_sess_rate" ACL criterion.
6041
6042
Willy Tarreau2e1dca82012-09-12 08:43:15 +02006043redirect location <loc> [code <code>] <option> [{if | unless} <condition>]
6044redirect prefix <pfx> [code <code>] <option> [{if | unless} <condition>]
6045redirect scheme <sch> [code <code>] <option> [{if | unless} <condition>]
Willy Tarreaub463dfb2008-06-07 23:08:56 +02006046 Return an HTTP redirection if/unless a condition is matched
6047 May be used in sections : defaults | frontend | listen | backend
6048 no | yes | yes | yes
6049
6050 If/unless the condition is matched, the HTTP request will lead to a redirect
Willy Tarreauf285f542010-01-03 20:03:03 +01006051 response. If no condition is specified, the redirect applies unconditionally.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02006052
Willy Tarreau0140f252008-11-19 21:07:09 +01006053 Arguments :
Willy Tarreau2e1dca82012-09-12 08:43:15 +02006054 <loc> With "redirect location", the exact value in <loc> is placed into
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01006055 the HTTP "Location" header. When used in an "http-request" rule,
6056 <loc> value follows the log-format rules and can include some
6057 dynamic values (see Custom Log Format in section 8.2.4).
Willy Tarreau2e1dca82012-09-12 08:43:15 +02006058
6059 <pfx> With "redirect prefix", the "Location" header is built from the
6060 concatenation of <pfx> and the complete URI path, including the
6061 query string, unless the "drop-query" option is specified (see
6062 below). As a special case, if <pfx> equals exactly "/", then
6063 nothing is inserted before the original URI. It allows one to
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01006064 redirect to the same URL (for instance, to insert a cookie). When
6065 used in an "http-request" rule, <pfx> value follows the log-format
6066 rules and can include some dynamic values (see Custom Log Format
6067 in section 8.2.4).
Willy Tarreau2e1dca82012-09-12 08:43:15 +02006068
6069 <sch> With "redirect scheme", then the "Location" header is built by
6070 concatenating <sch> with "://" then the first occurrence of the
6071 "Host" header, and then the URI path, including the query string
6072 unless the "drop-query" option is specified (see below). If no
6073 path is found or if the path is "*", then "/" is used instead. If
6074 no "Host" header is found, then an empty host component will be
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006075 returned, which most recent browsers interpret as redirecting to
Willy Tarreau2e1dca82012-09-12 08:43:15 +02006076 the same host. This directive is mostly used to redirect HTTP to
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01006077 HTTPS. When used in an "http-request" rule, <sch> value follows
6078 the log-format rules and can include some dynamic values (see
6079 Custom Log Format in section 8.2.4).
Willy Tarreau0140f252008-11-19 21:07:09 +01006080
6081 <code> The code is optional. It indicates which type of HTTP redirection
Willy Tarreaub67fdc42013-03-29 19:28:11 +01006082 is desired. Only codes 301, 302, 303, 307 and 308 are supported,
6083 with 302 used by default if no code is specified. 301 means
6084 "Moved permanently", and a browser may cache the Location. 302
6085 means "Moved permanently" and means that the browser should not
6086 cache the redirection. 303 is equivalent to 302 except that the
6087 browser will fetch the location with a GET method. 307 is just
6088 like 302 but makes it clear that the same method must be reused.
6089 Likewise, 308 replaces 301 if the same method must be used.
Willy Tarreau0140f252008-11-19 21:07:09 +01006090
6091 <option> There are several options which can be specified to adjust the
6092 expected behaviour of a redirection :
6093
6094 - "drop-query"
6095 When this keyword is used in a prefix-based redirection, then the
6096 location will be set without any possible query-string, which is useful
6097 for directing users to a non-secure page for instance. It has no effect
6098 with a location-type redirect.
6099
Willy Tarreau81e3b4f2010-01-10 00:42:19 +01006100 - "append-slash"
6101 This keyword may be used in conjunction with "drop-query" to redirect
6102 users who use a URL not ending with a '/' to the same one with the '/'.
6103 It can be useful to ensure that search engines will only see one URL.
6104 For this, a return code 301 is preferred.
6105
Willy Tarreau0140f252008-11-19 21:07:09 +01006106 - "set-cookie NAME[=value]"
6107 A "Set-Cookie" header will be added with NAME (and optionally "=value")
6108 to the response. This is sometimes used to indicate that a user has
6109 been seen, for instance to protect against some types of DoS. No other
6110 cookie option is added, so the cookie will be a session cookie. Note
6111 that for a browser, a sole cookie name without an equal sign is
6112 different from a cookie with an equal sign.
6113
6114 - "clear-cookie NAME[=]"
6115 A "Set-Cookie" header will be added with NAME (and optionally "="), but
6116 with the "Max-Age" attribute set to zero. This will tell the browser to
6117 delete this cookie. It is useful for instance on logout pages. It is
6118 important to note that clearing the cookie "NAME" will not remove a
6119 cookie set with "NAME=value". You have to clear the cookie "NAME=" for
6120 that, because the browser makes the difference.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02006121
6122 Example: move the login URL only to HTTPS.
6123 acl clear dst_port 80
6124 acl secure dst_port 8080
6125 acl login_page url_beg /login
Willy Tarreau0140f252008-11-19 21:07:09 +01006126 acl logout url_beg /logout
Willy Tarreau79da4692008-11-19 20:03:04 +01006127 acl uid_given url_reg /login?userid=[^&]+
Willy Tarreau0140f252008-11-19 21:07:09 +01006128 acl cookie_set hdr_sub(cookie) SEEN=1
6129
6130 redirect prefix https://mysite.com set-cookie SEEN=1 if !cookie_set
Willy Tarreau79da4692008-11-19 20:03:04 +01006131 redirect prefix https://mysite.com if login_page !secure
6132 redirect prefix http://mysite.com drop-query if login_page !uid_given
6133 redirect location http://mysite.com/ if !login_page secure
Willy Tarreau0140f252008-11-19 21:07:09 +01006134 redirect location / clear-cookie USERID= if logout
Willy Tarreaub463dfb2008-06-07 23:08:56 +02006135
Willy Tarreau81e3b4f2010-01-10 00:42:19 +01006136 Example: send redirects for request for articles without a '/'.
6137 acl missing_slash path_reg ^/article/[^/]*$
6138 redirect code 301 prefix / drop-query append-slash if missing_slash
6139
Willy Tarreau2e1dca82012-09-12 08:43:15 +02006140 Example: redirect all HTTP traffic to HTTPS when SSL is handled by haproxy.
David BERARDe7153042012-11-03 00:11:31 +01006141 redirect scheme https if !{ ssl_fc }
Willy Tarreau2e1dca82012-09-12 08:43:15 +02006142
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01006143 Example: append 'www.' prefix in front of all hosts not having it
6144 http-request redirect code 301 location www.%[hdr(host)]%[req.uri] \
6145 unless { hdr_beg(host) -i www }
6146
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006147 See section 7 about ACL usage.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02006148
6149
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006150redisp (deprecated)
6151redispatch (deprecated)
6152 Enable or disable session redistribution in case of connection failure
6153 May be used in sections: defaults | frontend | listen | backend
6154 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006155 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006156
6157 In HTTP mode, if a server designated by a cookie is down, clients may
6158 definitely stick to it because they cannot flush the cookie, so they will not
6159 be able to access the service anymore.
6160
6161 Specifying "redispatch" will allow the proxy to break their persistence and
6162 redistribute them to a working server.
6163
6164 It also allows to retry last connection to another server in case of multiple
6165 connection failures. Of course, it requires having "retries" set to a nonzero
6166 value.
Willy Tarreaud72758d2010-01-12 10:42:19 +01006167
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006168 This form is deprecated, do not use it in any new configuration, use the new
6169 "option redispatch" instead.
6170
6171 See also : "option redispatch"
6172
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006173
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01006174reqadd <string> [{if | unless} <cond>]
Willy Tarreau303c0352008-01-17 19:01:39 +01006175 Add a header at the end of the HTTP request
6176 May be used in sections : defaults | frontend | listen | backend
6177 no | yes | yes | yes
6178 Arguments :
6179 <string> is the complete line to be added. Any space or known delimiter
6180 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006181 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01006182
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01006183 <cond> is an optional matching condition built from ACLs. It makes it
6184 possible to ignore this rule when other conditions are not met.
6185
Willy Tarreau303c0352008-01-17 19:01:39 +01006186 A new line consisting in <string> followed by a line feed will be added after
6187 the last header of an HTTP request.
6188
6189 Header transformations only apply to traffic which passes through HAProxy,
6190 and not to traffic generated by HAProxy, such as health-checks or error
6191 responses.
6192
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01006193 Example : add "X-Proto: SSL" to requests coming via port 81
6194 acl is-ssl dst_port 81
6195 reqadd X-Proto:\ SSL if is-ssl
6196
6197 See also: "rspadd", section 6 about HTTP header manipulation, and section 7
6198 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01006199
6200
Willy Tarreau5321c422010-01-28 20:35:13 +01006201reqallow <search> [{if | unless} <cond>]
6202reqiallow <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01006203 Definitely allow an HTTP request if a line matches a regular expression
6204 May be used in sections : defaults | frontend | listen | backend
6205 no | yes | yes | yes
6206 Arguments :
6207 <search> is the regular expression applied to HTTP headers and to the
6208 request line. This is an extended regular expression. Parenthesis
6209 grouping is supported and no preliminary backslash is required.
6210 Any space or known delimiter must be escaped using a backslash
6211 ('\'). The pattern applies to a full line at a time. The
6212 "reqallow" keyword strictly matches case while "reqiallow"
6213 ignores case.
6214
Willy Tarreau5321c422010-01-28 20:35:13 +01006215 <cond> is an optional matching condition built from ACLs. It makes it
6216 possible to ignore this rule when other conditions are not met.
6217
Willy Tarreau303c0352008-01-17 19:01:39 +01006218 A request containing any line which matches extended regular expression
6219 <search> will mark the request as allowed, even if any later test would
6220 result in a deny. The test applies both to the request line and to request
6221 headers. Keep in mind that URLs in request line are case-sensitive while
Willy Tarreaud72758d2010-01-12 10:42:19 +01006222 header names are not.
Willy Tarreau303c0352008-01-17 19:01:39 +01006223
6224 It is easier, faster and more powerful to use ACLs to write access policies.
6225 Reqdeny, reqallow and reqpass should be avoided in new designs.
6226
6227 Example :
6228 # allow www.* but refuse *.local
6229 reqiallow ^Host:\ www\.
6230 reqideny ^Host:\ .*\.local
6231
Willy Tarreau5321c422010-01-28 20:35:13 +01006232 See also: "reqdeny", "block", section 6 about HTTP header manipulation, and
6233 section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01006234
6235
Willy Tarreau5321c422010-01-28 20:35:13 +01006236reqdel <search> [{if | unless} <cond>]
6237reqidel <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01006238 Delete all headers matching a regular expression in an HTTP request
6239 May be used in sections : defaults | frontend | listen | backend
6240 no | yes | yes | yes
6241 Arguments :
6242 <search> is the regular expression applied to HTTP headers and to the
6243 request line. This is an extended regular expression. Parenthesis
6244 grouping is supported and no preliminary backslash is required.
6245 Any space or known delimiter must be escaped using a backslash
6246 ('\'). The pattern applies to a full line at a time. The "reqdel"
6247 keyword strictly matches case while "reqidel" ignores case.
6248
Willy Tarreau5321c422010-01-28 20:35:13 +01006249 <cond> is an optional matching condition built from ACLs. It makes it
6250 possible to ignore this rule when other conditions are not met.
6251
Willy Tarreau303c0352008-01-17 19:01:39 +01006252 Any header line matching extended regular expression <search> in the request
6253 will be completely deleted. Most common use of this is to remove unwanted
6254 and/or dangerous headers or cookies from a request before passing it to the
6255 next servers.
6256
6257 Header transformations only apply to traffic which passes through HAProxy,
6258 and not to traffic generated by HAProxy, such as health-checks or error
6259 responses. Keep in mind that header names are not case-sensitive.
6260
6261 Example :
6262 # remove X-Forwarded-For header and SERVER cookie
6263 reqidel ^X-Forwarded-For:.*
6264 reqidel ^Cookie:.*SERVER=
6265
Willy Tarreau5321c422010-01-28 20:35:13 +01006266 See also: "reqadd", "reqrep", "rspdel", section 6 about HTTP header
6267 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01006268
6269
Willy Tarreau5321c422010-01-28 20:35:13 +01006270reqdeny <search> [{if | unless} <cond>]
6271reqideny <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01006272 Deny an HTTP request if a line matches a regular expression
6273 May be used in sections : defaults | frontend | listen | backend
6274 no | yes | yes | yes
6275 Arguments :
6276 <search> is the regular expression applied to HTTP headers and to the
6277 request line. This is an extended regular expression. Parenthesis
6278 grouping is supported and no preliminary backslash is required.
6279 Any space or known delimiter must be escaped using a backslash
6280 ('\'). The pattern applies to a full line at a time. The
6281 "reqdeny" keyword strictly matches case while "reqideny" ignores
6282 case.
6283
Willy Tarreau5321c422010-01-28 20:35:13 +01006284 <cond> is an optional matching condition built from ACLs. It makes it
6285 possible to ignore this rule when other conditions are not met.
6286
Willy Tarreau303c0352008-01-17 19:01:39 +01006287 A request containing any line which matches extended regular expression
6288 <search> will mark the request as denied, even if any later test would
6289 result in an allow. The test applies both to the request line and to request
6290 headers. Keep in mind that URLs in request line are case-sensitive while
Willy Tarreaud72758d2010-01-12 10:42:19 +01006291 header names are not.
Willy Tarreau303c0352008-01-17 19:01:39 +01006292
Willy Tarreauced27012008-01-17 20:35:34 +01006293 A denied request will generate an "HTTP 403 forbidden" response once the
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01006294 complete request has been parsed. This is consistent with what is practiced
Willy Tarreaud72758d2010-01-12 10:42:19 +01006295 using ACLs.
Willy Tarreauced27012008-01-17 20:35:34 +01006296
Willy Tarreau303c0352008-01-17 19:01:39 +01006297 It is easier, faster and more powerful to use ACLs to write access policies.
6298 Reqdeny, reqallow and reqpass should be avoided in new designs.
6299
6300 Example :
6301 # refuse *.local, then allow www.*
6302 reqideny ^Host:\ .*\.local
6303 reqiallow ^Host:\ www\.
6304
Willy Tarreau5321c422010-01-28 20:35:13 +01006305 See also: "reqallow", "rspdeny", "block", section 6 about HTTP header
6306 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01006307
6308
Willy Tarreau5321c422010-01-28 20:35:13 +01006309reqpass <search> [{if | unless} <cond>]
6310reqipass <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01006311 Ignore any HTTP request line matching a regular expression in next rules
6312 May be used in sections : defaults | frontend | listen | backend
6313 no | yes | yes | yes
6314 Arguments :
6315 <search> is the regular expression applied to HTTP headers and to the
6316 request line. This is an extended regular expression. Parenthesis
6317 grouping is supported and no preliminary backslash is required.
6318 Any space or known delimiter must be escaped using a backslash
6319 ('\'). The pattern applies to a full line at a time. The
6320 "reqpass" keyword strictly matches case while "reqipass" ignores
6321 case.
6322
Willy Tarreau5321c422010-01-28 20:35:13 +01006323 <cond> is an optional matching condition built from ACLs. It makes it
6324 possible to ignore this rule when other conditions are not met.
6325
Willy Tarreau303c0352008-01-17 19:01:39 +01006326 A request containing any line which matches extended regular expression
6327 <search> will skip next rules, without assigning any deny or allow verdict.
6328 The test applies both to the request line and to request headers. Keep in
6329 mind that URLs in request line are case-sensitive while header names are not.
6330
6331 It is easier, faster and more powerful to use ACLs to write access policies.
6332 Reqdeny, reqallow and reqpass should be avoided in new designs.
6333
6334 Example :
6335 # refuse *.local, then allow www.*, but ignore "www.private.local"
6336 reqipass ^Host:\ www.private\.local
6337 reqideny ^Host:\ .*\.local
6338 reqiallow ^Host:\ www\.
6339
Willy Tarreau5321c422010-01-28 20:35:13 +01006340 See also: "reqallow", "reqdeny", "block", section 6 about HTTP header
6341 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01006342
6343
Willy Tarreau5321c422010-01-28 20:35:13 +01006344reqrep <search> <string> [{if | unless} <cond>]
6345reqirep <search> <string> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01006346 Replace a regular expression with a string in an HTTP request line
6347 May be used in sections : defaults | frontend | listen | backend
6348 no | yes | yes | yes
6349 Arguments :
6350 <search> is the regular expression applied to HTTP headers and to the
6351 request line. This is an extended regular expression. Parenthesis
6352 grouping is supported and no preliminary backslash is required.
6353 Any space or known delimiter must be escaped using a backslash
6354 ('\'). The pattern applies to a full line at a time. The "reqrep"
6355 keyword strictly matches case while "reqirep" ignores case.
6356
6357 <string> is the complete line to be added. Any space or known delimiter
6358 must be escaped using a backslash ('\'). References to matched
6359 pattern groups are possible using the common \N form, with N
6360 being a single digit between 0 and 9. Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006361 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01006362
Willy Tarreau5321c422010-01-28 20:35:13 +01006363 <cond> is an optional matching condition built from ACLs. It makes it
6364 possible to ignore this rule when other conditions are not met.
6365
Willy Tarreau303c0352008-01-17 19:01:39 +01006366 Any line matching extended regular expression <search> in the request (both
6367 the request line and header lines) will be completely replaced with <string>.
6368 Most common use of this is to rewrite URLs or domain names in "Host" headers.
6369
6370 Header transformations only apply to traffic which passes through HAProxy,
6371 and not to traffic generated by HAProxy, such as health-checks or error
6372 responses. Note that for increased readability, it is suggested to add enough
6373 spaces between the request and the response. Keep in mind that URLs in
6374 request line are case-sensitive while header names are not.
6375
6376 Example :
6377 # replace "/static/" with "/" at the beginning of any request path.
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04006378 reqrep ^([^\ :]*)\ /static/(.*) \1\ /\2
Willy Tarreau303c0352008-01-17 19:01:39 +01006379 # replace "www.mydomain.com" with "www" in the host name.
6380 reqirep ^Host:\ www.mydomain.com Host:\ www
6381
Dmitry Sivachenkof6f4f7b2012-10-21 18:10:25 +04006382 See also: "reqadd", "reqdel", "rsprep", "tune.bufsize", section 6 about
6383 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01006384
6385
Willy Tarreau5321c422010-01-28 20:35:13 +01006386reqtarpit <search> [{if | unless} <cond>]
6387reqitarpit <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01006388 Tarpit an HTTP request containing a line matching a regular expression
6389 May be used in sections : defaults | frontend | listen | backend
6390 no | yes | yes | yes
6391 Arguments :
6392 <search> is the regular expression applied to HTTP headers and to the
6393 request line. This is an extended regular expression. Parenthesis
6394 grouping is supported and no preliminary backslash is required.
6395 Any space or known delimiter must be escaped using a backslash
6396 ('\'). The pattern applies to a full line at a time. The
6397 "reqtarpit" keyword strictly matches case while "reqitarpit"
6398 ignores case.
6399
Willy Tarreau5321c422010-01-28 20:35:13 +01006400 <cond> is an optional matching condition built from ACLs. It makes it
6401 possible to ignore this rule when other conditions are not met.
6402
Willy Tarreau303c0352008-01-17 19:01:39 +01006403 A request containing any line which matches extended regular expression
6404 <search> will be tarpitted, which means that it will connect to nowhere, will
Willy Tarreauced27012008-01-17 20:35:34 +01006405 be kept open for a pre-defined time, then will return an HTTP error 500 so
6406 that the attacker does not suspect it has been tarpitted. The status 500 will
6407 be reported in the logs, but the completion flags will indicate "PT". The
Willy Tarreau303c0352008-01-17 19:01:39 +01006408 delay is defined by "timeout tarpit", or "timeout connect" if the former is
6409 not set.
6410
6411 The goal of the tarpit is to slow down robots attacking servers with
6412 identifiable requests. Many robots limit their outgoing number of connections
6413 and stay connected waiting for a reply which can take several minutes to
6414 come. Depending on the environment and attack, it may be particularly
6415 efficient at reducing the load on the network and firewalls.
6416
Willy Tarreau5321c422010-01-28 20:35:13 +01006417 Examples :
Willy Tarreau303c0352008-01-17 19:01:39 +01006418 # ignore user-agents reporting any flavour of "Mozilla" or "MSIE", but
6419 # block all others.
6420 reqipass ^User-Agent:\.*(Mozilla|MSIE)
6421 reqitarpit ^User-Agent:
6422
Willy Tarreau5321c422010-01-28 20:35:13 +01006423 # block bad guys
6424 acl badguys src 10.1.0.3 172.16.13.20/28
6425 reqitarpit . if badguys
6426
6427 See also: "reqallow", "reqdeny", "reqpass", section 6 about HTTP header
6428 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01006429
6430
Willy Tarreaue5c5ce92008-06-20 17:27:19 +02006431retries <value>
6432 Set the number of retries to perform on a server after a connection failure
6433 May be used in sections: defaults | frontend | listen | backend
6434 yes | no | yes | yes
6435 Arguments :
6436 <value> is the number of times a connection attempt should be retried on
6437 a server when a connection either is refused or times out. The
6438 default value is 3.
6439
6440 It is important to understand that this value applies to the number of
6441 connection attempts, not full requests. When a connection has effectively
6442 been established to a server, there will be no more retry.
6443
6444 In order to avoid immediate reconnections to a server which is restarting,
Joseph Lynch726ab712015-05-11 23:25:34 -07006445 a turn-around timer of min("timeout connect", one second) is applied before
6446 a retry occurs.
Willy Tarreaue5c5ce92008-06-20 17:27:19 +02006447
6448 When "option redispatch" is set, the last retry may be performed on another
6449 server even if a cookie references a different server.
6450
6451 See also : "option redispatch"
6452
6453
Willy Tarreaufdb563c2010-01-31 15:43:27 +01006454rspadd <string> [{if | unless} <cond>]
Willy Tarreau303c0352008-01-17 19:01:39 +01006455 Add a header at the end of the HTTP response
6456 May be used in sections : defaults | frontend | listen | backend
6457 no | yes | yes | yes
6458 Arguments :
6459 <string> is the complete line to be added. Any space or known delimiter
6460 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006461 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01006462
Willy Tarreaufdb563c2010-01-31 15:43:27 +01006463 <cond> is an optional matching condition built from ACLs. It makes it
6464 possible to ignore this rule when other conditions are not met.
6465
Willy Tarreau303c0352008-01-17 19:01:39 +01006466 A new line consisting in <string> followed by a line feed will be added after
6467 the last header of an HTTP response.
6468
6469 Header transformations only apply to traffic which passes through HAProxy,
6470 and not to traffic generated by HAProxy, such as health-checks or error
6471 responses.
6472
Willy Tarreaufdb563c2010-01-31 15:43:27 +01006473 See also: "reqadd", section 6 about HTTP header manipulation, and section 7
6474 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01006475
6476
Willy Tarreaufdb563c2010-01-31 15:43:27 +01006477rspdel <search> [{if | unless} <cond>]
6478rspidel <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01006479 Delete all headers matching a regular expression in an HTTP response
6480 May be used in sections : defaults | frontend | listen | backend
6481 no | yes | yes | yes
6482 Arguments :
6483 <search> is the regular expression applied to HTTP headers and to the
6484 response line. This is an extended regular expression, so
6485 parenthesis grouping is supported and no preliminary backslash
6486 is required. Any space or known delimiter must be escaped using
6487 a backslash ('\'). The pattern applies to a full line at a time.
6488 The "rspdel" keyword strictly matches case while "rspidel"
6489 ignores case.
6490
Willy Tarreaufdb563c2010-01-31 15:43:27 +01006491 <cond> is an optional matching condition built from ACLs. It makes it
6492 possible to ignore this rule when other conditions are not met.
6493
Willy Tarreau303c0352008-01-17 19:01:39 +01006494 Any header line matching extended regular expression <search> in the response
6495 will be completely deleted. Most common use of this is to remove unwanted
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02006496 and/or sensitive headers or cookies from a response before passing it to the
Willy Tarreau303c0352008-01-17 19:01:39 +01006497 client.
6498
6499 Header transformations only apply to traffic which passes through HAProxy,
6500 and not to traffic generated by HAProxy, such as health-checks or error
6501 responses. Keep in mind that header names are not case-sensitive.
6502
6503 Example :
6504 # remove the Server header from responses
Willy Tarreau5e80e022013-05-25 08:31:25 +02006505 rspidel ^Server:.*
Willy Tarreau303c0352008-01-17 19:01:39 +01006506
Willy Tarreaufdb563c2010-01-31 15:43:27 +01006507 See also: "rspadd", "rsprep", "reqdel", section 6 about HTTP header
6508 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01006509
6510
Willy Tarreaufdb563c2010-01-31 15:43:27 +01006511rspdeny <search> [{if | unless} <cond>]
6512rspideny <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01006513 Block an HTTP response if a line matches a regular expression
6514 May be used in sections : defaults | frontend | listen | backend
6515 no | yes | yes | yes
6516 Arguments :
6517 <search> is the regular expression applied to HTTP headers and to the
6518 response line. This is an extended regular expression, so
6519 parenthesis grouping is supported and no preliminary backslash
6520 is required. Any space or known delimiter must be escaped using
6521 a backslash ('\'). The pattern applies to a full line at a time.
6522 The "rspdeny" keyword strictly matches case while "rspideny"
6523 ignores case.
6524
Willy Tarreaufdb563c2010-01-31 15:43:27 +01006525 <cond> is an optional matching condition built from ACLs. It makes it
6526 possible to ignore this rule when other conditions are not met.
6527
Willy Tarreau303c0352008-01-17 19:01:39 +01006528 A response containing any line which matches extended regular expression
6529 <search> will mark the request as denied. The test applies both to the
6530 response line and to response headers. Keep in mind that header names are not
6531 case-sensitive.
6532
6533 Main use of this keyword is to prevent sensitive information leak and to
Willy Tarreauced27012008-01-17 20:35:34 +01006534 block the response before it reaches the client. If a response is denied, it
6535 will be replaced with an HTTP 502 error so that the client never retrieves
6536 any sensitive data.
Willy Tarreau303c0352008-01-17 19:01:39 +01006537
6538 It is easier, faster and more powerful to use ACLs to write access policies.
6539 Rspdeny should be avoided in new designs.
6540
6541 Example :
6542 # Ensure that no content type matching ms-word will leak
6543 rspideny ^Content-type:\.*/ms-word
6544
Willy Tarreaufdb563c2010-01-31 15:43:27 +01006545 See also: "reqdeny", "acl", "block", section 6 about HTTP header manipulation
6546 and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01006547
6548
Willy Tarreaufdb563c2010-01-31 15:43:27 +01006549rsprep <search> <string> [{if | unless} <cond>]
6550rspirep <search> <string> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01006551 Replace a regular expression with a string in an HTTP response line
6552 May be used in sections : defaults | frontend | listen | backend
6553 no | yes | yes | yes
6554 Arguments :
6555 <search> is the regular expression applied to HTTP headers and to the
6556 response line. This is an extended regular expression, so
6557 parenthesis grouping is supported and no preliminary backslash
6558 is required. Any space or known delimiter must be escaped using
6559 a backslash ('\'). The pattern applies to a full line at a time.
6560 The "rsprep" keyword strictly matches case while "rspirep"
6561 ignores case.
6562
6563 <string> is the complete line to be added. Any space or known delimiter
6564 must be escaped using a backslash ('\'). References to matched
6565 pattern groups are possible using the common \N form, with N
6566 being a single digit between 0 and 9. Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006567 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01006568
Willy Tarreaufdb563c2010-01-31 15:43:27 +01006569 <cond> is an optional matching condition built from ACLs. It makes it
6570 possible to ignore this rule when other conditions are not met.
6571
Willy Tarreau303c0352008-01-17 19:01:39 +01006572 Any line matching extended regular expression <search> in the response (both
6573 the response line and header lines) will be completely replaced with
6574 <string>. Most common use of this is to rewrite Location headers.
6575
6576 Header transformations only apply to traffic which passes through HAProxy,
6577 and not to traffic generated by HAProxy, such as health-checks or error
6578 responses. Note that for increased readability, it is suggested to add enough
6579 spaces between the request and the response. Keep in mind that header names
6580 are not case-sensitive.
6581
6582 Example :
6583 # replace "Location: 127.0.0.1:8080" with "Location: www.mydomain.com"
6584 rspirep ^Location:\ 127.0.0.1:8080 Location:\ www.mydomain.com
6585
Willy Tarreaufdb563c2010-01-31 15:43:27 +01006586 See also: "rspadd", "rspdel", "reqrep", section 6 about HTTP header
6587 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01006588
6589
David du Colombier486df472011-03-17 10:40:26 +01006590server <name> <address>[:[port]] [param*]
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006591 Declare a server in a backend
6592 May be used in sections : defaults | frontend | listen | backend
6593 no | no | yes | yes
6594 Arguments :
6595 <name> is the internal name assigned to this server. This name will
Cyril Bonté941a0c62012-10-15 19:44:24 +02006596 appear in logs and alerts. If "http-send-name-header" is
Mark Lamourinec2247f02012-01-04 13:02:01 -05006597 set, it will be added to the request header sent to the server.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006598
David du Colombier486df472011-03-17 10:40:26 +01006599 <address> is the IPv4 or IPv6 address of the server. Alternatively, a
6600 resolvable hostname is supported, but this name will be resolved
6601 during start-up. Address "0.0.0.0" or "*" has a special meaning.
6602 It indicates that the connection will be forwarded to the same IP
Willy Tarreaud669a4f2010-07-13 14:49:50 +02006603 address as the one from the client connection. This is useful in
6604 transparent proxy architectures where the client's connection is
6605 intercepted and haproxy must forward to the original destination
6606 address. This is more or less what the "transparent" keyword does
6607 except that with a server it's possible to limit concurrency and
Willy Tarreau24709282013-03-10 21:32:12 +01006608 to report statistics. Optionally, an address family prefix may be
6609 used before the address to force the family regardless of the
6610 address format, which can be useful to specify a path to a unix
6611 socket with no slash ('/'). Currently supported prefixes are :
6612 - 'ipv4@' -> address is always IPv4
6613 - 'ipv6@' -> address is always IPv6
6614 - 'unix@' -> address is a path to a local unix socket
Willy Tarreauccfccef2014-05-10 01:49:15 +02006615 - 'abns@' -> address is in abstract namespace (Linux only)
William Lallemandb2f07452015-05-12 14:27:13 +02006616 You may want to reference some environment variables in the
6617 address parameter, see section 2.3 about environment
6618 variables.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006619
Willy Tarreaub6205fd2012-09-24 12:27:33 +02006620 <port> is an optional port specification. If set, all connections will
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006621 be sent to this port. If unset, the same port the client
6622 connected to will be used. The port may also be prefixed by a "+"
6623 or a "-". In this case, the server's port will be determined by
6624 adding this value to the client's port.
6625
6626 <param*> is a list of parameters for this server. The "server" keywords
6627 accepts an important number of options and has a complete section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006628 dedicated to it. Please refer to section 5 for more details.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006629
6630 Examples :
6631 server first 10.1.1.1:1080 cookie first check inter 1000
6632 server second 10.1.1.2:1080 cookie second check inter 1000
Willy Tarreau24709282013-03-10 21:32:12 +01006633 server transp ipv4@
William Lallemandb2f07452015-05-12 14:27:13 +02006634 server backup "${SRV_BACKUP}:1080" backup
6635 server www1_dc1 "${LAN_DC1}.101:80"
6636 server www1_dc2 "${LAN_DC2}.101:80"
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006637
Mark Lamourinec2247f02012-01-04 13:02:01 -05006638 See also: "default-server", "http-send-name-header" and section 5 about
6639 server options
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006640
6641
6642source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
Willy Tarreaubce70882009-09-07 11:51:47 +02006643source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | hdr_ip(<hdr>[,<occ>]) } ]
Willy Tarreaud53f96b2009-02-04 18:46:54 +01006644source <addr>[:<port>] [interface <name>]
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006645 Set the source address for outgoing connections
6646 May be used in sections : defaults | frontend | listen | backend
6647 yes | no | yes | yes
6648 Arguments :
6649 <addr> is the IPv4 address HAProxy will bind to before connecting to a
6650 server. This address is also used as a source for health checks.
Willy Tarreau24709282013-03-10 21:32:12 +01006651
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006652 The default value of 0.0.0.0 means that the system will select
Willy Tarreau24709282013-03-10 21:32:12 +01006653 the most appropriate address to reach its destination. Optionally
6654 an address family prefix may be used before the address to force
6655 the family regardless of the address format, which can be useful
6656 to specify a path to a unix socket with no slash ('/'). Currently
6657 supported prefixes are :
6658 - 'ipv4@' -> address is always IPv4
6659 - 'ipv6@' -> address is always IPv6
6660 - 'unix@' -> address is a path to a local unix socket
Willy Tarreauccfccef2014-05-10 01:49:15 +02006661 - 'abns@' -> address is in abstract namespace (Linux only)
William Lallemandb2f07452015-05-12 14:27:13 +02006662 You may want to reference some environment variables in the address
6663 parameter, see section 2.3 about environment variables.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006664
6665 <port> is an optional port. It is normally not needed but may be useful
6666 in some very specific contexts. The default value of zero means
Willy Tarreauc6f4ce82009-06-10 11:09:37 +02006667 the system will select a free port. Note that port ranges are not
6668 supported in the backend. If you want to force port ranges, you
6669 have to specify them on each "server" line.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006670
6671 <addr2> is the IP address to present to the server when connections are
6672 forwarded in full transparent proxy mode. This is currently only
6673 supported on some patched Linux kernels. When this address is
6674 specified, clients connecting to the server will be presented
6675 with this address, while health checks will still use the address
6676 <addr>.
6677
6678 <port2> is the optional port to present to the server when connections
6679 are forwarded in full transparent proxy mode (see <addr2> above).
6680 The default value of zero means the system will select a free
6681 port.
6682
Willy Tarreaubce70882009-09-07 11:51:47 +02006683 <hdr> is the name of a HTTP header in which to fetch the IP to bind to.
6684 This is the name of a comma-separated header list which can
6685 contain multiple IP addresses. By default, the last occurrence is
6686 used. This is designed to work with the X-Forwarded-For header
Baptiste Assmannea3e73b2013-02-02 23:47:49 +01006687 and to automatically bind to the client's IP address as seen
Willy Tarreaubce70882009-09-07 11:51:47 +02006688 by previous proxy, typically Stunnel. In order to use another
6689 occurrence from the last one, please see the <occ> parameter
6690 below. When the header (or occurrence) is not found, no binding
6691 is performed so that the proxy's default IP address is used. Also
6692 keep in mind that the header name is case insensitive, as for any
6693 HTTP header.
6694
6695 <occ> is the occurrence number of a value to be used in a multi-value
6696 header. This is to be used in conjunction with "hdr_ip(<hdr>)",
Jamie Gloudonaaa21002012-08-25 00:18:33 -04006697 in order to specify which occurrence to use for the source IP
Willy Tarreaubce70882009-09-07 11:51:47 +02006698 address. Positive values indicate a position from the first
6699 occurrence, 1 being the first one. Negative values indicate
6700 positions relative to the last one, -1 being the last one. This
6701 is helpful for situations where an X-Forwarded-For header is set
6702 at the entry point of an infrastructure and must be used several
6703 proxy layers away. When this value is not specified, -1 is
6704 assumed. Passing a zero here disables the feature.
6705
Willy Tarreaud53f96b2009-02-04 18:46:54 +01006706 <name> is an optional interface name to which to bind to for outgoing
6707 traffic. On systems supporting this features (currently, only
6708 Linux), this allows one to bind all traffic to the server to
6709 this interface even if it is not the one the system would select
6710 based on routing tables. This should be used with extreme care.
6711 Note that using this option requires root privileges.
6712
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006713 The "source" keyword is useful in complex environments where a specific
6714 address only is allowed to connect to the servers. It may be needed when a
6715 private address must be used through a public gateway for instance, and it is
6716 known that the system cannot determine the adequate source address by itself.
6717
6718 An extension which is available on certain patched Linux kernels may be used
6719 through the "usesrc" optional keyword. It makes it possible to connect to the
6720 servers with an IP address which does not belong to the system itself. This
6721 is called "full transparent proxy mode". For this to work, the destination
6722 servers have to route their traffic back to this address through the machine
6723 running HAProxy, and IP forwarding must generally be enabled on this machine.
6724
6725 In this "full transparent proxy" mode, it is possible to force a specific IP
6726 address to be presented to the servers. This is not much used in fact. A more
6727 common use is to tell HAProxy to present the client's IP address. For this,
6728 there are two methods :
6729
6730 - present the client's IP and port addresses. This is the most transparent
6731 mode, but it can cause problems when IP connection tracking is enabled on
6732 the machine, because a same connection may be seen twice with different
6733 states. However, this solution presents the huge advantage of not
6734 limiting the system to the 64k outgoing address+port couples, because all
6735 of the client ranges may be used.
6736
6737 - present only the client's IP address and select a spare port. This
6738 solution is still quite elegant but slightly less transparent (downstream
6739 firewalls logs will not match upstream's). It also presents the downside
6740 of limiting the number of concurrent connections to the usual 64k ports.
6741 However, since the upstream and downstream ports are different, local IP
6742 connection tracking on the machine will not be upset by the reuse of the
6743 same session.
6744
6745 Note that depending on the transparent proxy technology used, it may be
6746 required to force the source address. In fact, cttproxy version 2 requires an
6747 IP address in <addr> above, and does not support setting of "0.0.0.0" as the
6748 IP address because it creates NAT entries which much match the exact outgoing
6749 address. Tproxy version 4 and some other kernel patches which work in pure
6750 forwarding mode generally will not have this limitation.
6751
6752 This option sets the default source for all servers in the backend. It may
6753 also be specified in a "defaults" section. Finer source address specification
6754 is possible at the server level using the "source" server option. Refer to
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006755 section 5 for more information.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006756
6757 Examples :
6758 backend private
6759 # Connect to the servers using our 192.168.1.200 source address
6760 source 192.168.1.200
6761
6762 backend transparent_ssl1
6763 # Connect to the SSL farm from the client's source address
6764 source 192.168.1.200 usesrc clientip
6765
6766 backend transparent_ssl2
6767 # Connect to the SSL farm from the client's source address and port
6768 # not recommended if IP conntrack is present on the local machine.
6769 source 192.168.1.200 usesrc client
6770
6771 backend transparent_ssl3
6772 # Connect to the SSL farm from the client's source address. It
6773 # is more conntrack-friendly.
6774 source 192.168.1.200 usesrc clientip
6775
6776 backend transparent_smtp
6777 # Connect to the SMTP farm from the client's source address/port
6778 # with Tproxy version 4.
6779 source 0.0.0.0 usesrc clientip
6780
Willy Tarreaubce70882009-09-07 11:51:47 +02006781 backend transparent_http
6782 # Connect to the servers using the client's IP as seen by previous
6783 # proxy.
6784 source 0.0.0.0 usesrc hdr_ip(x-forwarded-for,-1)
6785
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006786 See also : the "source" server option in section 5, the Tproxy patches for
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006787 the Linux kernel on www.balabit.com, the "bind" keyword.
6788
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006789
Willy Tarreau844e3c52008-01-11 16:28:18 +01006790srvtimeout <timeout> (deprecated)
6791 Set the maximum inactivity time on the server side.
6792 May be used in sections : defaults | frontend | listen | backend
6793 yes | no | yes | yes
6794 Arguments :
6795 <timeout> is the timeout value specified in milliseconds by default, but
6796 can be in any other unit if the number is suffixed by the unit,
6797 as explained at the top of this document.
6798
6799 The inactivity timeout applies when the server is expected to acknowledge or
6800 send data. In HTTP mode, this timeout is particularly important to consider
6801 during the first phase of the server's response, when it has to send the
6802 headers, as it directly represents the server's processing time for the
6803 request. To find out what value to put there, it's often good to start with
6804 what would be considered as unacceptable response times, then check the logs
6805 to observe the response time distribution, and adjust the value accordingly.
6806
6807 The value is specified in milliseconds by default, but can be in any other
6808 unit if the number is suffixed by the unit, as specified at the top of this
6809 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
6810 recommended that the client timeout remains equal to the server timeout in
6811 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01006812 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01006813 packet losses by specifying timeouts that are slightly above multiples of 3
Willy Tarreaud72758d2010-01-12 10:42:19 +01006814 seconds (eg: 4 or 5 seconds minimum).
Willy Tarreau844e3c52008-01-11 16:28:18 +01006815
6816 This parameter is specific to backends, but can be specified once for all in
6817 "defaults" sections. This is in fact one of the easiest solutions not to
6818 forget about it. An unspecified timeout results in an infinite timeout, which
6819 is not recommended. Such a usage is accepted and works but reports a warning
6820 during startup because it may results in accumulation of expired sessions in
6821 the system if the system's timeouts are not configured either.
6822
6823 This parameter is provided for compatibility but is currently deprecated.
6824 Please use "timeout server" instead.
6825
Willy Tarreauce887fd2012-05-12 12:50:00 +02006826 See also : "timeout server", "timeout tunnel", "timeout client" and
6827 "clitimeout".
Willy Tarreau844e3c52008-01-11 16:28:18 +01006828
6829
Cyril Bonté66c327d2010-10-12 00:14:37 +02006830stats admin { if | unless } <cond>
6831 Enable statistics admin level if/unless a condition is matched
6832 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02006833 no | yes | yes | yes
Cyril Bonté66c327d2010-10-12 00:14:37 +02006834
6835 This statement enables the statistics admin level if/unless a condition is
6836 matched.
6837
6838 The admin level allows to enable/disable servers from the web interface. By
6839 default, statistics page is read-only for security reasons.
6840
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01006841 Note : Consider not using this feature in multi-process mode (nbproc > 1)
6842 unless you know what you do : memory is not shared between the
6843 processes, which can result in random behaviours.
6844
Cyril Bonté23b39d92011-02-10 22:54:44 +01006845 Currently, the POST request is limited to the buffer size minus the reserved
6846 buffer space, which means that if the list of servers is too long, the
6847 request won't be processed. It is recommended to alter few servers at a
6848 time.
Cyril Bonté66c327d2010-10-12 00:14:37 +02006849
6850 Example :
6851 # statistics admin level only for localhost
6852 backend stats_localhost
6853 stats enable
6854 stats admin if LOCALHOST
6855
6856 Example :
6857 # statistics admin level always enabled because of the authentication
6858 backend stats_auth
6859 stats enable
6860 stats auth admin:AdMiN123
6861 stats admin if TRUE
6862
6863 Example :
6864 # statistics admin level depends on the authenticated user
6865 userlist stats-auth
6866 group admin users admin
6867 user admin insecure-password AdMiN123
6868 group readonly users haproxy
6869 user haproxy insecure-password haproxy
6870
6871 backend stats_auth
6872 stats enable
6873 acl AUTH http_auth(stats-auth)
6874 acl AUTH_ADMIN http_auth_group(stats-auth) admin
6875 stats http-request auth unless AUTH
6876 stats admin if AUTH_ADMIN
6877
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01006878 See also : "stats enable", "stats auth", "stats http-request", "nbproc",
6879 "bind-process", section 3.4 about userlists and section 7 about
6880 ACL usage.
Cyril Bonté66c327d2010-10-12 00:14:37 +02006881
6882
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006883stats auth <user>:<passwd>
6884 Enable statistics with authentication and grant access to an account
6885 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02006886 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006887 Arguments :
6888 <user> is a user name to grant access to
6889
6890 <passwd> is the cleartext password associated to this user
6891
6892 This statement enables statistics with default settings, and restricts access
6893 to declared users only. It may be repeated as many times as necessary to
6894 allow as many users as desired. When a user tries to access the statistics
6895 without a valid account, a "401 Forbidden" response will be returned so that
6896 the browser asks the user to provide a valid user and password. The real
6897 which will be returned to the browser is configurable using "stats realm".
6898
6899 Since the authentication method is HTTP Basic Authentication, the passwords
6900 circulate in cleartext on the network. Thus, it was decided that the
6901 configuration file would also use cleartext passwords to remind the users
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02006902 that those ones should not be sensitive and not shared with any other account.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006903
6904 It is also possible to reduce the scope of the proxies which appear in the
6905 report using "stats scope".
6906
6907 Though this statement alone is enough to enable statistics reporting, it is
6908 recommended to set all other settings in order to avoid relying on default
6909 unobvious parameters.
6910
6911 Example :
6912 # public access (limited to this backend only)
6913 backend public_www
6914 server srv1 192.168.0.1:80
6915 stats enable
6916 stats hide-version
6917 stats scope .
6918 stats uri /admin?stats
6919 stats realm Haproxy\ Statistics
6920 stats auth admin1:AdMiN123
6921 stats auth admin2:AdMiN321
6922
6923 # internal monitoring access (unlimited)
6924 backend private_monitoring
6925 stats enable
6926 stats uri /admin?stats
6927 stats refresh 5s
6928
6929 See also : "stats enable", "stats realm", "stats scope", "stats uri"
6930
6931
6932stats enable
6933 Enable statistics reporting with default settings
6934 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02006935 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006936 Arguments : none
6937
6938 This statement enables statistics reporting with default settings defined
6939 at build time. Unless stated otherwise, these settings are used :
6940 - stats uri : /haproxy?stats
6941 - stats realm : "HAProxy Statistics"
6942 - stats auth : no authentication
6943 - stats scope : no restriction
6944
6945 Though this statement alone is enough to enable statistics reporting, it is
6946 recommended to set all other settings in order to avoid relying on default
6947 unobvious parameters.
6948
6949 Example :
6950 # public access (limited to this backend only)
6951 backend public_www
6952 server srv1 192.168.0.1:80
6953 stats enable
6954 stats hide-version
6955 stats scope .
6956 stats uri /admin?stats
6957 stats realm Haproxy\ Statistics
6958 stats auth admin1:AdMiN123
6959 stats auth admin2:AdMiN321
6960
6961 # internal monitoring access (unlimited)
6962 backend private_monitoring
6963 stats enable
6964 stats uri /admin?stats
6965 stats refresh 5s
6966
6967 See also : "stats auth", "stats realm", "stats uri"
6968
6969
Willy Tarreaud63335a2010-02-26 12:56:52 +01006970stats hide-version
6971 Enable statistics and hide HAProxy version reporting
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02006972 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02006973 yes | yes | yes | yes
Willy Tarreaud63335a2010-02-26 12:56:52 +01006974 Arguments : none
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02006975
Willy Tarreaud63335a2010-02-26 12:56:52 +01006976 By default, the stats page reports some useful status information along with
6977 the statistics. Among them is HAProxy's version. However, it is generally
6978 considered dangerous to report precise version to anyone, as it can help them
6979 target known weaknesses with specific attacks. The "stats hide-version"
6980 statement removes the version from the statistics report. This is recommended
6981 for public sites or any site with a weak login/password.
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02006982
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +02006983 Though this statement alone is enough to enable statistics reporting, it is
6984 recommended to set all other settings in order to avoid relying on default
6985 unobvious parameters.
6986
Willy Tarreaud63335a2010-02-26 12:56:52 +01006987 Example :
6988 # public access (limited to this backend only)
6989 backend public_www
6990 server srv1 192.168.0.1:80
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +02006991 stats enable
Willy Tarreaud63335a2010-02-26 12:56:52 +01006992 stats hide-version
6993 stats scope .
6994 stats uri /admin?stats
6995 stats realm Haproxy\ Statistics
6996 stats auth admin1:AdMiN123
6997 stats auth admin2:AdMiN321
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02006998
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02006999 # internal monitoring access (unlimited)
7000 backend private_monitoring
7001 stats enable
Willy Tarreaud63335a2010-02-26 12:56:52 +01007002 stats uri /admin?stats
7003 stats refresh 5s
Krzysztof Piotr Oledzki15514c22010-01-04 16:03:09 +01007004
Willy Tarreaud63335a2010-02-26 12:56:52 +01007005 See also : "stats auth", "stats enable", "stats realm", "stats uri"
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02007006
Willy Tarreau983e01e2010-01-11 18:42:06 +01007007
Cyril Bonté2be1b3f2010-09-30 23:46:30 +02007008stats http-request { allow | deny | auth [realm <realm>] }
7009 [ { if | unless } <condition> ]
7010 Access control for statistics
7011
7012 May be used in sections: defaults | frontend | listen | backend
7013 no | no | yes | yes
7014
7015 As "http-request", these set of options allow to fine control access to
7016 statistics. Each option may be followed by if/unless and acl.
7017 First option with matched condition (or option without condition) is final.
7018 For "deny" a 403 error will be returned, for "allow" normal processing is
7019 performed, for "auth" a 401/407 error code is returned so the client
7020 should be asked to enter a username and password.
7021
7022 There is no fixed limit to the number of http-request statements per
7023 instance.
7024
7025 See also : "http-request", section 3.4 about userlists and section 7
7026 about ACL usage.
7027
7028
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007029stats realm <realm>
7030 Enable statistics and set authentication realm
7031 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007032 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007033 Arguments :
7034 <realm> is the name of the HTTP Basic Authentication realm reported to
7035 the browser. The browser uses it to display it in the pop-up
7036 inviting the user to enter a valid username and password.
7037
7038 The realm is read as a single word, so any spaces in it should be escaped
7039 using a backslash ('\').
7040
7041 This statement is useful only in conjunction with "stats auth" since it is
7042 only related to authentication.
7043
7044 Though this statement alone is enough to enable statistics reporting, it is
7045 recommended to set all other settings in order to avoid relying on default
7046 unobvious parameters.
7047
7048 Example :
7049 # public access (limited to this backend only)
7050 backend public_www
7051 server srv1 192.168.0.1:80
7052 stats enable
7053 stats hide-version
7054 stats scope .
7055 stats uri /admin?stats
7056 stats realm Haproxy\ Statistics
7057 stats auth admin1:AdMiN123
7058 stats auth admin2:AdMiN321
7059
7060 # internal monitoring access (unlimited)
7061 backend private_monitoring
7062 stats enable
7063 stats uri /admin?stats
7064 stats refresh 5s
7065
7066 See also : "stats auth", "stats enable", "stats uri"
7067
7068
7069stats refresh <delay>
7070 Enable statistics with automatic refresh
7071 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007072 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007073 Arguments :
7074 <delay> is the suggested refresh delay, specified in seconds, which will
7075 be returned to the browser consulting the report page. While the
7076 browser is free to apply any delay, it will generally respect it
7077 and refresh the page this every seconds. The refresh interval may
7078 be specified in any other non-default time unit, by suffixing the
7079 unit after the value, as explained at the top of this document.
7080
7081 This statement is useful on monitoring displays with a permanent page
7082 reporting the load balancer's activity. When set, the HTML report page will
7083 include a link "refresh"/"stop refresh" so that the user can select whether
7084 he wants automatic refresh of the page or not.
7085
7086 Though this statement alone is enough to enable statistics reporting, it is
7087 recommended to set all other settings in order to avoid relying on default
7088 unobvious parameters.
7089
7090 Example :
7091 # public access (limited to this backend only)
7092 backend public_www
7093 server srv1 192.168.0.1:80
7094 stats enable
7095 stats hide-version
7096 stats scope .
7097 stats uri /admin?stats
7098 stats realm Haproxy\ Statistics
7099 stats auth admin1:AdMiN123
7100 stats auth admin2:AdMiN321
7101
7102 # internal monitoring access (unlimited)
7103 backend private_monitoring
7104 stats enable
7105 stats uri /admin?stats
7106 stats refresh 5s
7107
7108 See also : "stats auth", "stats enable", "stats realm", "stats uri"
7109
7110
7111stats scope { <name> | "." }
7112 Enable statistics and limit access scope
7113 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007114 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007115 Arguments :
7116 <name> is the name of a listen, frontend or backend section to be
7117 reported. The special name "." (a single dot) designates the
7118 section in which the statement appears.
7119
7120 When this statement is specified, only the sections enumerated with this
7121 statement will appear in the report. All other ones will be hidden. This
7122 statement may appear as many times as needed if multiple sections need to be
7123 reported. Please note that the name checking is performed as simple string
7124 comparisons, and that it is never checked that a give section name really
7125 exists.
7126
7127 Though this statement alone is enough to enable statistics reporting, it is
7128 recommended to set all other settings in order to avoid relying on default
7129 unobvious parameters.
7130
7131 Example :
7132 # public access (limited to this backend only)
7133 backend public_www
7134 server srv1 192.168.0.1:80
7135 stats enable
7136 stats hide-version
7137 stats scope .
7138 stats uri /admin?stats
7139 stats realm Haproxy\ Statistics
7140 stats auth admin1:AdMiN123
7141 stats auth admin2:AdMiN321
7142
7143 # internal monitoring access (unlimited)
7144 backend private_monitoring
7145 stats enable
7146 stats uri /admin?stats
7147 stats refresh 5s
7148
7149 See also : "stats auth", "stats enable", "stats realm", "stats uri"
7150
Willy Tarreaud63335a2010-02-26 12:56:52 +01007151
Willy Tarreauc9705a12010-07-27 20:05:50 +02007152stats show-desc [ <desc> ]
Willy Tarreaud63335a2010-02-26 12:56:52 +01007153 Enable reporting of a description on the statistics page.
7154 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007155 yes | yes | yes | yes
Willy Tarreaud63335a2010-02-26 12:56:52 +01007156
Willy Tarreauc9705a12010-07-27 20:05:50 +02007157 <desc> is an optional description to be reported. If unspecified, the
Willy Tarreaud63335a2010-02-26 12:56:52 +01007158 description from global section is automatically used instead.
7159
7160 This statement is useful for users that offer shared services to their
7161 customers, where node or description should be different for each customer.
7162
7163 Though this statement alone is enough to enable statistics reporting, it is
7164 recommended to set all other settings in order to avoid relying on default
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04007165 unobvious parameters. By default description is not shown.
Willy Tarreaud63335a2010-02-26 12:56:52 +01007166
7167 Example :
7168 # internal monitoring access (unlimited)
7169 backend private_monitoring
7170 stats enable
7171 stats show-desc Master node for Europe, Asia, Africa
7172 stats uri /admin?stats
7173 stats refresh 5s
7174
7175 See also: "show-node", "stats enable", "stats uri" and "description" in
7176 global section.
7177
7178
7179stats show-legends
Willy Tarreaued2119c2014-04-24 22:10:39 +02007180 Enable reporting additional information on the statistics page
7181 May be used in sections : defaults | frontend | listen | backend
7182 yes | yes | yes | yes
7183 Arguments : none
7184
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03007185 Enable reporting additional information on the statistics page :
Willy Tarreaud63335a2010-02-26 12:56:52 +01007186 - cap: capabilities (proxy)
7187 - mode: one of tcp, http or health (proxy)
7188 - id: SNMP ID (proxy, socket, server)
7189 - IP (socket, server)
7190 - cookie (backend, server)
7191
7192 Though this statement alone is enough to enable statistics reporting, it is
7193 recommended to set all other settings in order to avoid relying on default
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04007194 unobvious parameters. Default behaviour is not to show this information.
Willy Tarreaud63335a2010-02-26 12:56:52 +01007195
7196 See also: "stats enable", "stats uri".
7197
7198
7199stats show-node [ <name> ]
7200 Enable reporting of a host name on the statistics page.
7201 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007202 yes | yes | yes | yes
Willy Tarreaud63335a2010-02-26 12:56:52 +01007203 Arguments:
7204 <name> is an optional name to be reported. If unspecified, the
7205 node name from global section is automatically used instead.
7206
7207 This statement is useful for users that offer shared services to their
7208 customers, where node or description might be different on a stats page
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04007209 provided for each customer. Default behaviour is not to show host name.
Willy Tarreaud63335a2010-02-26 12:56:52 +01007210
7211 Though this statement alone is enough to enable statistics reporting, it is
7212 recommended to set all other settings in order to avoid relying on default
7213 unobvious parameters.
7214
7215 Example:
7216 # internal monitoring access (unlimited)
7217 backend private_monitoring
7218 stats enable
7219 stats show-node Europe-1
7220 stats uri /admin?stats
7221 stats refresh 5s
7222
7223 See also: "show-desc", "stats enable", "stats uri", and "node" in global
7224 section.
7225
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007226
7227stats uri <prefix>
7228 Enable statistics and define the URI prefix to access them
7229 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007230 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007231 Arguments :
7232 <prefix> is the prefix of any URI which will be redirected to stats. This
7233 prefix may contain a question mark ('?') to indicate part of a
7234 query string.
7235
7236 The statistics URI is intercepted on the relayed traffic, so it appears as a
7237 page within the normal application. It is strongly advised to ensure that the
7238 selected URI will never appear in the application, otherwise it will never be
7239 possible to reach it in the application.
7240
7241 The default URI compiled in haproxy is "/haproxy?stats", but this may be
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01007242 changed at build time, so it's better to always explicitly specify it here.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007243 It is generally a good idea to include a question mark in the URI so that
7244 intermediate proxies refrain from caching the results. Also, since any string
7245 beginning with the prefix will be accepted as a stats request, the question
7246 mark helps ensuring that no valid URI will begin with the same words.
7247
7248 It is sometimes very convenient to use "/" as the URI prefix, and put that
7249 statement in a "listen" instance of its own. That makes it easy to dedicate
7250 an address or a port to statistics only.
7251
7252 Though this statement alone is enough to enable statistics reporting, it is
7253 recommended to set all other settings in order to avoid relying on default
7254 unobvious parameters.
7255
7256 Example :
7257 # public access (limited to this backend only)
7258 backend public_www
7259 server srv1 192.168.0.1:80
7260 stats enable
7261 stats hide-version
7262 stats scope .
7263 stats uri /admin?stats
7264 stats realm Haproxy\ Statistics
7265 stats auth admin1:AdMiN123
7266 stats auth admin2:AdMiN321
7267
7268 # internal monitoring access (unlimited)
7269 backend private_monitoring
7270 stats enable
7271 stats uri /admin?stats
7272 stats refresh 5s
7273
7274 See also : "stats auth", "stats enable", "stats realm"
7275
7276
Willy Tarreaud63335a2010-02-26 12:56:52 +01007277stick match <pattern> [table <table>] [{if | unless} <cond>]
7278 Define a request pattern matching condition to stick a user to a server
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007279 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaud63335a2010-02-26 12:56:52 +01007280 no | no | yes | yes
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007281
7282 Arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02007283 <pattern> is a sample expression rule as described in section 7.3. It
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007284 describes what elements of the incoming request or connection
7285 will be analysed in the hope to find a matching entry in a
7286 stickiness table. This rule is mandatory.
7287
7288 <table> is an optional stickiness table name. If unspecified, the same
7289 backend's table is used. A stickiness table is declared using
7290 the "stick-table" statement.
7291
7292 <cond> is an optional matching condition. It makes it possible to match
7293 on a certain criterion only when other conditions are met (or
7294 not met). For instance, it could be used to match on a source IP
7295 address except when a request passes through a known proxy, in
7296 which case we'd match on a header containing that IP address.
7297
7298 Some protocols or applications require complex stickiness rules and cannot
7299 always simply rely on cookies nor hashing. The "stick match" statement
7300 describes a rule to extract the stickiness criterion from an incoming request
7301 or connection. See section 7 for a complete list of possible patterns and
7302 transformation rules.
7303
7304 The table has to be declared using the "stick-table" statement. It must be of
7305 a type compatible with the pattern. By default it is the one which is present
7306 in the same backend. It is possible to share a table with other backends by
7307 referencing it using the "table" keyword. If another table is referenced,
7308 the server's ID inside the backends are used. By default, all server IDs
7309 start at 1 in each backend, so the server ordering is enough. But in case of
7310 doubt, it is highly recommended to force server IDs using their "id" setting.
7311
7312 It is possible to restrict the conditions where a "stick match" statement
7313 will apply, using "if" or "unless" followed by a condition. See section 7 for
7314 ACL based conditions.
7315
7316 There is no limit on the number of "stick match" statements. The first that
7317 applies and matches will cause the request to be directed to the same server
7318 as was used for the request which created the entry. That way, multiple
7319 matches can be used as fallbacks.
7320
7321 The stick rules are checked after the persistence cookies, so they will not
7322 affect stickiness if a cookie has already been used to select a server. That
7323 way, it becomes very easy to insert cookies and match on IP addresses in
7324 order to maintain stickiness between HTTP and HTTPS.
7325
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01007326 Note : Consider not using this feature in multi-process mode (nbproc > 1)
7327 unless you know what you do : memory is not shared between the
7328 processes, which can result in random behaviours.
7329
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007330 Example :
7331 # forward SMTP users to the same server they just used for POP in the
7332 # last 30 minutes
7333 backend pop
7334 mode tcp
7335 balance roundrobin
7336 stick store-request src
7337 stick-table type ip size 200k expire 30m
7338 server s1 192.168.1.1:110
7339 server s2 192.168.1.1:110
7340
7341 backend smtp
7342 mode tcp
7343 balance roundrobin
7344 stick match src table pop
7345 server s1 192.168.1.1:25
7346 server s2 192.168.1.1:25
7347
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01007348 See also : "stick-table", "stick on", "nbproc", "bind-process" and section 7
Willy Tarreaube722a22014-06-13 16:31:59 +02007349 about ACLs and samples fetching.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007350
7351
7352stick on <pattern> [table <table>] [{if | unless} <condition>]
7353 Define a request pattern to associate a user to a server
7354 May be used in sections : defaults | frontend | listen | backend
7355 no | no | yes | yes
7356
7357 Note : This form is exactly equivalent to "stick match" followed by
7358 "stick store-request", all with the same arguments. Please refer
7359 to both keywords for details. It is only provided as a convenience
7360 for writing more maintainable configurations.
7361
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01007362 Note : Consider not using this feature in multi-process mode (nbproc > 1)
7363 unless you know what you do : memory is not shared between the
7364 processes, which can result in random behaviours.
7365
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007366 Examples :
7367 # The following form ...
Willy Tarreauec579d82010-02-26 19:15:04 +01007368 stick on src table pop if !localhost
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007369
7370 # ...is strictly equivalent to this one :
7371 stick match src table pop if !localhost
7372 stick store-request src table pop if !localhost
7373
7374
7375 # Use cookie persistence for HTTP, and stick on source address for HTTPS as
7376 # well as HTTP without cookie. Share the same table between both accesses.
7377 backend http
7378 mode http
7379 balance roundrobin
7380 stick on src table https
7381 cookie SRV insert indirect nocache
7382 server s1 192.168.1.1:80 cookie s1
7383 server s2 192.168.1.1:80 cookie s2
7384
7385 backend https
7386 mode tcp
7387 balance roundrobin
7388 stick-table type ip size 200k expire 30m
7389 stick on src
7390 server s1 192.168.1.1:443
7391 server s2 192.168.1.1:443
7392
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01007393 See also : "stick match", "stick store-request", "nbproc" and "bind-process".
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007394
7395
7396stick store-request <pattern> [table <table>] [{if | unless} <condition>]
7397 Define a request pattern used to create an entry in a stickiness table
7398 May be used in sections : defaults | frontend | listen | backend
7399 no | no | yes | yes
7400
7401 Arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02007402 <pattern> is a sample expression rule as described in section 7.3. It
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007403 describes what elements of the incoming request or connection
7404 will be analysed, extracted and stored in the table once a
7405 server is selected.
7406
7407 <table> is an optional stickiness table name. If unspecified, the same
7408 backend's table is used. A stickiness table is declared using
7409 the "stick-table" statement.
7410
7411 <cond> is an optional storage condition. It makes it possible to store
7412 certain criteria only when some conditions are met (or not met).
7413 For instance, it could be used to store the source IP address
7414 except when the request passes through a known proxy, in which
7415 case we'd store a converted form of a header containing that IP
7416 address.
7417
7418 Some protocols or applications require complex stickiness rules and cannot
7419 always simply rely on cookies nor hashing. The "stick store-request" statement
7420 describes a rule to decide what to extract from the request and when to do
7421 it, in order to store it into a stickiness table for further requests to
7422 match it using the "stick match" statement. Obviously the extracted part must
7423 make sense and have a chance to be matched in a further request. Storing a
7424 client's IP address for instance often makes sense. Storing an ID found in a
7425 URL parameter also makes sense. Storing a source port will almost never make
7426 any sense because it will be randomly matched. See section 7 for a complete
7427 list of possible patterns and transformation rules.
7428
7429 The table has to be declared using the "stick-table" statement. It must be of
7430 a type compatible with the pattern. By default it is the one which is present
7431 in the same backend. It is possible to share a table with other backends by
7432 referencing it using the "table" keyword. If another table is referenced,
7433 the server's ID inside the backends are used. By default, all server IDs
7434 start at 1 in each backend, so the server ordering is enough. But in case of
7435 doubt, it is highly recommended to force server IDs using their "id" setting.
7436
7437 It is possible to restrict the conditions where a "stick store-request"
7438 statement will apply, using "if" or "unless" followed by a condition. This
7439 condition will be evaluated while parsing the request, so any criteria can be
7440 used. See section 7 for ACL based conditions.
7441
7442 There is no limit on the number of "stick store-request" statements, but
7443 there is a limit of 8 simultaneous stores per request or response. This
7444 makes it possible to store up to 8 criteria, all extracted from either the
7445 request or the response, regardless of the number of rules. Only the 8 first
7446 ones which match will be kept. Using this, it is possible to feed multiple
7447 tables at once in the hope to increase the chance to recognize a user on
Willy Tarreau9667a802013-12-09 12:52:13 +01007448 another protocol or access method. Using multiple store-request rules with
7449 the same table is possible and may be used to find the best criterion to rely
7450 on, by arranging the rules by decreasing preference order. Only the first
7451 extracted criterion for a given table will be stored. All subsequent store-
7452 request rules referencing the same table will be skipped and their ACLs will
7453 not be evaluated.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007454
7455 The "store-request" rules are evaluated once the server connection has been
7456 established, so that the table will contain the real server that processed
7457 the request.
7458
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01007459 Note : Consider not using this feature in multi-process mode (nbproc > 1)
7460 unless you know what you do : memory is not shared between the
7461 processes, which can result in random behaviours.
7462
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007463 Example :
7464 # forward SMTP users to the same server they just used for POP in the
7465 # last 30 minutes
7466 backend pop
7467 mode tcp
7468 balance roundrobin
7469 stick store-request src
7470 stick-table type ip size 200k expire 30m
7471 server s1 192.168.1.1:110
7472 server s2 192.168.1.1:110
7473
7474 backend smtp
7475 mode tcp
7476 balance roundrobin
7477 stick match src table pop
7478 server s1 192.168.1.1:25
7479 server s2 192.168.1.1:25
7480
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01007481 See also : "stick-table", "stick on", "nbproc", "bind-process" and section 7
Willy Tarreaube722a22014-06-13 16:31:59 +02007482 about ACLs and sample fetching.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007483
7484
Emeric Brun7c6b82e2010-09-24 16:34:28 +02007485stick-table type {ip | integer | string [len <length>] | binary [len <length>]}
Emeric Brunf099e792010-09-27 12:05:28 +02007486 size <size> [expire <expire>] [nopurge] [peers <peersect>]
7487 [store <data_type>]*
Godbach64cef792013-12-04 16:08:22 +08007488 Configure the stickiness table for the current section
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007489 May be used in sections : defaults | frontend | listen | backend
Willy Tarreauc00cdc22010-06-06 16:48:26 +02007490 no | yes | yes | yes
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007491
7492 Arguments :
7493 ip a table declared with "type ip" will only store IPv4 addresses.
7494 This form is very compact (about 50 bytes per entry) and allows
7495 very fast entry lookup and stores with almost no overhead. This
7496 is mainly used to store client source IP addresses.
7497
David du Colombier9a6d3c92011-03-17 10:40:24 +01007498 ipv6 a table declared with "type ipv6" will only store IPv6 addresses.
7499 This form is very compact (about 60 bytes per entry) and allows
7500 very fast entry lookup and stores with almost no overhead. This
7501 is mainly used to store client source IP addresses.
7502
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007503 integer a table declared with "type integer" will store 32bit integers
7504 which can represent a client identifier found in a request for
7505 instance.
7506
7507 string a table declared with "type string" will store substrings of up
7508 to <len> characters. If the string provided by the pattern
7509 extractor is larger than <len>, it will be truncated before
7510 being stored. During matching, at most <len> characters will be
7511 compared between the string in the table and the extracted
7512 pattern. When not specified, the string is automatically limited
Emeric Brun7c6b82e2010-09-24 16:34:28 +02007513 to 32 characters.
7514
7515 binary a table declared with "type binary" will store binary blocks
7516 of <len> bytes. If the block provided by the pattern
7517 extractor is larger than <len>, it will be truncated before
Willy Tarreaube722a22014-06-13 16:31:59 +02007518 being stored. If the block provided by the sample expression
Emeric Brun7c6b82e2010-09-24 16:34:28 +02007519 is shorter than <len>, it will be padded by 0. When not
7520 specified, the block is automatically limited to 32 bytes.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007521
7522 <length> is the maximum number of characters that will be stored in a
Emeric Brun7c6b82e2010-09-24 16:34:28 +02007523 "string" type table (See type "string" above). Or the number
7524 of bytes of the block in "binary" type table. Be careful when
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007525 changing this parameter as memory usage will proportionally
7526 increase.
7527
7528 <size> is the maximum number of entries that can fit in the table. This
Cyril Bonté78caf842010-03-10 22:41:43 +01007529 value directly impacts memory usage. Count approximately
7530 50 bytes per entry, plus the size of a string if any. The size
7531 supports suffixes "k", "m", "g" for 2^10, 2^20 and 2^30 factors.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007532
7533 [nopurge] indicates that we refuse to purge older entries when the table
7534 is full. When not specified and the table is full when haproxy
7535 wants to store an entry in it, it will flush a few of the oldest
7536 entries in order to release some space for the new ones. This is
7537 most often the desired behaviour. In some specific cases, it
7538 be desirable to refuse new entries instead of purging the older
7539 ones. That may be the case when the amount of data to store is
7540 far above the hardware limits and we prefer not to offer access
7541 to new clients than to reject the ones already connected. When
7542 using this parameter, be sure to properly set the "expire"
7543 parameter (see below).
7544
Emeric Brunf099e792010-09-27 12:05:28 +02007545 <peersect> is the name of the peers section to use for replication. Entries
7546 which associate keys to server IDs are kept synchronized with
7547 the remote peers declared in this section. All entries are also
7548 automatically learned from the local peer (old process) during a
7549 soft restart.
7550
Willy Tarreau1abc6732015-05-01 19:21:02 +02007551 NOTE : each peers section may be referenced only by tables
7552 belonging to the same unique process.
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01007553
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007554 <expire> defines the maximum duration of an entry in the table since it
7555 was last created, refreshed or matched. The expiration delay is
7556 defined using the standard time format, similarly as the various
7557 timeouts. The maximum duration is slightly above 24 days. See
7558 section 2.2 for more information. If this delay is not specified,
Cyril Bontédc4d9032012-04-08 21:57:39 +02007559 the session won't automatically expire, but older entries will
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007560 be removed once full. Be sure not to use the "nopurge" parameter
7561 if not expiration delay is specified.
7562
Willy Tarreau08d5f982010-06-06 13:34:54 +02007563 <data_type> is used to store additional information in the stick-table. This
7564 may be used by ACLs in order to control various criteria related
7565 to the activity of the client matching the stick-table. For each
7566 item specified here, the size of each entry will be inflated so
Willy Tarreauc9705a12010-07-27 20:05:50 +02007567 that the additional data can fit. Several data types may be
7568 stored with an entry. Multiple data types may be specified after
7569 the "store" keyword, as a comma-separated list. Alternatively,
7570 it is possible to repeat the "store" keyword followed by one or
7571 several data types. Except for the "server_id" type which is
7572 automatically detected and enabled, all data types must be
7573 explicitly declared to be stored. If an ACL references a data
7574 type which is not stored, the ACL will simply not match. Some
7575 data types require an argument which must be passed just after
7576 the type between parenthesis. See below for the supported data
7577 types and their arguments.
7578
7579 The data types that can be stored with an entry are the following :
7580 - server_id : this is an integer which holds the numeric ID of the server a
7581 request was assigned to. It is used by the "stick match", "stick store",
7582 and "stick on" rules. It is automatically enabled when referenced.
7583
7584 - gpc0 : first General Purpose Counter. It is a positive 32-bit integer
7585 integer which may be used for anything. Most of the time it will be used
7586 to put a special tag on some entries, for instance to note that a
7587 specific behaviour was detected and must be known for future matches.
7588
Willy Tarreauba2ffd12013-05-29 15:54:14 +02007589 - gpc0_rate(<period>) : increment rate of the first General Purpose Counter
7590 over a period. It is a positive 32-bit integer integer which may be used
7591 for anything. Just like <gpc0>, it counts events, but instead of keeping
7592 a cumulative count, it maintains the rate at which the counter is
7593 incremented. Most of the time it will be used to measure the frequency of
7594 occurrence of certain events (eg: requests to a specific URL).
7595
Willy Tarreauc9705a12010-07-27 20:05:50 +02007596 - conn_cnt : Connection Count. It is a positive 32-bit integer which counts
7597 the absolute number of connections received from clients which matched
7598 this entry. It does not mean the connections were accepted, just that
7599 they were received.
7600
7601 - conn_cur : Current Connections. It is a positive 32-bit integer which
7602 stores the concurrent connection counts for the entry. It is incremented
7603 once an incoming connection matches the entry, and decremented once the
7604 connection leaves. That way it is possible to know at any time the exact
7605 number of concurrent connections for an entry.
7606
7607 - conn_rate(<period>) : frequency counter (takes 12 bytes). It takes an
7608 integer parameter <period> which indicates in milliseconds the length
7609 of the period over which the average is measured. It reports the average
7610 incoming connection rate over that period, in connections per period. The
7611 result is an integer which can be matched using ACLs.
7612
7613 - sess_cnt : Session Count. It is a positive 32-bit integer which counts
7614 the absolute number of sessions received from clients which matched this
7615 entry. A session is a connection that was accepted by the layer 4 rules.
7616
7617 - sess_rate(<period>) : frequency counter (takes 12 bytes). It takes an
7618 integer parameter <period> which indicates in milliseconds the length
7619 of the period over which the average is measured. It reports the average
7620 incoming session rate over that period, in sessions per period. The
7621 result is an integer which can be matched using ACLs.
7622
7623 - http_req_cnt : HTTP request Count. It is a positive 32-bit integer which
7624 counts the absolute number of HTTP requests received from clients which
7625 matched this entry. It does not matter whether they are valid requests or
7626 not. Note that this is different from sessions when keep-alive is used on
7627 the client side.
7628
7629 - http_req_rate(<period>) : frequency counter (takes 12 bytes). It takes an
7630 integer parameter <period> which indicates in milliseconds the length
7631 of the period over which the average is measured. It reports the average
7632 HTTP request rate over that period, in requests per period. The result is
7633 an integer which can be matched using ACLs. It does not matter whether
7634 they are valid requests or not. Note that this is different from sessions
7635 when keep-alive is used on the client side.
7636
7637 - http_err_cnt : HTTP Error Count. It is a positive 32-bit integer which
7638 counts the absolute number of HTTP requests errors induced by clients
7639 which matched this entry. Errors are counted on invalid and truncated
7640 requests, as well as on denied or tarpitted requests, and on failed
7641 authentications. If the server responds with 4xx, then the request is
7642 also counted as an error since it's an error triggered by the client
7643 (eg: vulnerability scan).
7644
7645 - http_err_rate(<period>) : frequency counter (takes 12 bytes). It takes an
7646 integer parameter <period> which indicates in milliseconds the length
7647 of the period over which the average is measured. It reports the average
7648 HTTP request error rate over that period, in requests per period (see
7649 http_err_cnt above for what is accounted as an error). The result is an
7650 integer which can be matched using ACLs.
7651
7652 - bytes_in_cnt : client to server byte count. It is a positive 64-bit
7653 integer which counts the cumulated amount of bytes received from clients
7654 which matched this entry. Headers are included in the count. This may be
7655 used to limit abuse of upload features on photo or video servers.
7656
7657 - bytes_in_rate(<period>) : frequency counter (takes 12 bytes). It takes an
7658 integer parameter <period> which indicates in milliseconds the length
7659 of the period over which the average is measured. It reports the average
7660 incoming bytes rate over that period, in bytes per period. It may be used
7661 to detect users which upload too much and too fast. Warning: with large
7662 uploads, it is possible that the amount of uploaded data will be counted
7663 once upon termination, thus causing spikes in the average transfer speed
7664 instead of having a smooth one. This may partially be smoothed with
7665 "option contstats" though this is not perfect yet. Use of byte_in_cnt is
7666 recommended for better fairness.
7667
7668 - bytes_out_cnt : server to client byte count. It is a positive 64-bit
7669 integer which counts the cumulated amount of bytes sent to clients which
7670 matched this entry. Headers are included in the count. This may be used
7671 to limit abuse of bots sucking the whole site.
7672
7673 - bytes_out_rate(<period>) : frequency counter (takes 12 bytes). It takes
7674 an integer parameter <period> which indicates in milliseconds the length
7675 of the period over which the average is measured. It reports the average
7676 outgoing bytes rate over that period, in bytes per period. It may be used
7677 to detect users which download too much and too fast. Warning: with large
7678 transfers, it is possible that the amount of transferred data will be
7679 counted once upon termination, thus causing spikes in the average
7680 transfer speed instead of having a smooth one. This may partially be
7681 smoothed with "option contstats" though this is not perfect yet. Use of
7682 byte_out_cnt is recommended for better fairness.
Willy Tarreau08d5f982010-06-06 13:34:54 +02007683
Willy Tarreauc00cdc22010-06-06 16:48:26 +02007684 There is only one stick-table per proxy. At the moment of writing this doc,
7685 it does not seem useful to have multiple tables per proxy. If this happens
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007686 to be required, simply create a dummy backend with a stick-table in it and
7687 reference it.
7688
7689 It is important to understand that stickiness based on learning information
7690 has some limitations, including the fact that all learned associations are
7691 lost upon restart. In general it can be good as a complement but not always
7692 as an exclusive stickiness.
7693
Willy Tarreauc9705a12010-07-27 20:05:50 +02007694 Last, memory requirements may be important when storing many data types.
7695 Indeed, storing all indicators above at once in each entry requires 116 bytes
7696 per entry, or 116 MB for a 1-million entries table. This is definitely not
7697 something that can be ignored.
7698
7699 Example:
7700 # Keep track of counters of up to 1 million IP addresses over 5 minutes
7701 # and store a general purpose counter and the average connection rate
7702 # computed over a sliding window of 30 seconds.
7703 stick-table type ip size 1m expire 5m store gpc0,conn_rate(30s)
7704
7705 See also : "stick match", "stick on", "stick store-request", section 2.2
David du Colombiera13d1b92011-03-17 10:40:22 +01007706 about time format and section 7 about ACLs.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01007707
7708
Emeric Brun6a1cefa2010-09-24 18:15:17 +02007709stick store-response <pattern> [table <table>] [{if | unless} <condition>]
7710 Define a request pattern used to create an entry in a stickiness table
7711 May be used in sections : defaults | frontend | listen | backend
7712 no | no | yes | yes
7713
7714 Arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02007715 <pattern> is a sample expression rule as described in section 7.3. It
Emeric Brun6a1cefa2010-09-24 18:15:17 +02007716 describes what elements of the response or connection will
7717 be analysed, extracted and stored in the table once a
7718 server is selected.
7719
7720 <table> is an optional stickiness table name. If unspecified, the same
7721 backend's table is used. A stickiness table is declared using
7722 the "stick-table" statement.
7723
7724 <cond> is an optional storage condition. It makes it possible to store
7725 certain criteria only when some conditions are met (or not met).
7726 For instance, it could be used to store the SSL session ID only
7727 when the response is a SSL server hello.
7728
7729 Some protocols or applications require complex stickiness rules and cannot
7730 always simply rely on cookies nor hashing. The "stick store-response"
7731 statement describes a rule to decide what to extract from the response and
7732 when to do it, in order to store it into a stickiness table for further
7733 requests to match it using the "stick match" statement. Obviously the
7734 extracted part must make sense and have a chance to be matched in a further
Cyril Bonté108cf6e2012-04-21 23:30:29 +02007735 request. Storing an ID found in a header of a response makes sense.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02007736 See section 7 for a complete list of possible patterns and transformation
7737 rules.
7738
7739 The table has to be declared using the "stick-table" statement. It must be of
7740 a type compatible with the pattern. By default it is the one which is present
7741 in the same backend. It is possible to share a table with other backends by
7742 referencing it using the "table" keyword. If another table is referenced,
7743 the server's ID inside the backends are used. By default, all server IDs
7744 start at 1 in each backend, so the server ordering is enough. But in case of
7745 doubt, it is highly recommended to force server IDs using their "id" setting.
7746
7747 It is possible to restrict the conditions where a "stick store-response"
7748 statement will apply, using "if" or "unless" followed by a condition. This
7749 condition will be evaluated while parsing the response, so any criteria can
7750 be used. See section 7 for ACL based conditions.
7751
7752 There is no limit on the number of "stick store-response" statements, but
7753 there is a limit of 8 simultaneous stores per request or response. This
7754 makes it possible to store up to 8 criteria, all extracted from either the
7755 request or the response, regardless of the number of rules. Only the 8 first
7756 ones which match will be kept. Using this, it is possible to feed multiple
7757 tables at once in the hope to increase the chance to recognize a user on
Willy Tarreau9667a802013-12-09 12:52:13 +01007758 another protocol or access method. Using multiple store-response rules with
7759 the same table is possible and may be used to find the best criterion to rely
7760 on, by arranging the rules by decreasing preference order. Only the first
7761 extracted criterion for a given table will be stored. All subsequent store-
7762 response rules referencing the same table will be skipped and their ACLs will
7763 not be evaluated. However, even if a store-request rule references a table, a
7764 store-response rule may also use the same table. This means that each table
7765 may learn exactly one element from the request and one element from the
7766 response at once.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02007767
7768 The table will contain the real server that processed the request.
7769
7770 Example :
7771 # Learn SSL session ID from both request and response and create affinity.
7772 backend https
7773 mode tcp
7774 balance roundrobin
Cyril Bontédc4d9032012-04-08 21:57:39 +02007775 # maximum SSL session ID length is 32 bytes.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02007776 stick-table type binary len 32 size 30k expire 30m
Cyril Bonté108cf6e2012-04-21 23:30:29 +02007777
Emeric Brun6a1cefa2010-09-24 18:15:17 +02007778 acl clienthello req_ssl_hello_type 1
7779 acl serverhello rep_ssl_hello_type 2
7780
7781 # use tcp content accepts to detects ssl client and server hello.
7782 tcp-request inspect-delay 5s
7783 tcp-request content accept if clienthello
7784
7785 # no timeout on response inspect delay by default.
7786 tcp-response content accept if serverhello
Cyril Bonté108cf6e2012-04-21 23:30:29 +02007787
Emeric Brun6a1cefa2010-09-24 18:15:17 +02007788 # SSL session ID (SSLID) may be present on a client or server hello.
7789 # Its length is coded on 1 byte at offset 43 and its value starts
7790 # at offset 44.
7791
7792 # Match and learn on request if client hello.
7793 stick on payload_lv(43,1) if clienthello
7794
7795 # Learn on response if server hello.
7796 stick store-response payload_lv(43,1) if serverhello
Cyril Bontédc4d9032012-04-08 21:57:39 +02007797
Emeric Brun6a1cefa2010-09-24 18:15:17 +02007798 server s1 192.168.1.1:443
7799 server s2 192.168.1.1:443
7800
7801 See also : "stick-table", "stick on", and section 7 about ACLs and pattern
7802 extraction.
7803
7804
Willy Tarreau938c7fe2014-04-25 14:21:39 +02007805tcp-check connect [params*]
7806 Opens a new connection
7807 May be used in sections: defaults | frontend | listen | backend
7808 no | no | yes | yes
7809
7810 When an application lies on more than a single TCP port or when HAProxy
7811 load-balance many services in a single backend, it makes sense to probe all
7812 the services individually before considering a server as operational.
7813
7814 When there are no TCP port configured on the server line neither server port
7815 directive, then the 'tcp-check connect port <port>' must be the first step
7816 of the sequence.
7817
7818 In a tcp-check ruleset a 'connect' is required, it is also mandatory to start
7819 the ruleset with a 'connect' rule. Purpose is to ensure admin know what they
7820 do.
7821
7822 Parameters :
7823 They are optional and can be used to describe how HAProxy should open and
7824 use the TCP connection.
7825
7826 port if not set, check port or server port is used.
7827 It tells HAProxy where to open the connection to.
7828 <port> must be a valid TCP port source integer, from 1 to 65535.
7829
7830 send-proxy send a PROXY protocol string
7831
7832 ssl opens a ciphered connection
7833
7834 Examples:
7835 # check HTTP and HTTPs services on a server.
7836 # first open port 80 thanks to server line port directive, then
7837 # tcp-check opens port 443, ciphered and run a request on it:
7838 option tcp-check
7839 tcp-check connect
7840 tcp-check send GET\ /\ HTTP/1.0\r\n
7841 tcp-check send Host:\ haproxy.1wt.eu\r\n
7842 tcp-check send \r\n
7843 tcp-check expect rstring (2..|3..)
7844 tcp-check connect port 443 ssl
7845 tcp-check send GET\ /\ HTTP/1.0\r\n
7846 tcp-check send Host:\ haproxy.1wt.eu\r\n
7847 tcp-check send \r\n
7848 tcp-check expect rstring (2..|3..)
7849 server www 10.0.0.1 check port 80
7850
7851 # check both POP and IMAP from a single server:
7852 option tcp-check
7853 tcp-check connect port 110
7854 tcp-check expect string +OK\ POP3\ ready
7855 tcp-check connect port 143
7856 tcp-check expect string *\ OK\ IMAP4\ ready
7857 server mail 10.0.0.1 check
7858
7859 See also : "option tcp-check", "tcp-check send", "tcp-check expect"
7860
7861
7862tcp-check expect [!] <match> <pattern>
7863 Specify data to be collected and analysed during a generic health check
7864 May be used in sections: defaults | frontend | listen | backend
7865 no | no | yes | yes
7866
7867 Arguments :
7868 <match> is a keyword indicating how to look for a specific pattern in the
7869 response. The keyword may be one of "string", "rstring" or
7870 binary.
7871 The keyword may be preceded by an exclamation mark ("!") to negate
7872 the match. Spaces are allowed between the exclamation mark and the
7873 keyword. See below for more details on the supported keywords.
7874
7875 <pattern> is the pattern to look for. It may be a string or a regular
7876 expression. If the pattern contains spaces, they must be escaped
7877 with the usual backslash ('\').
7878 If the match is set to binary, then the pattern must be passed as
7879 a serie of hexadecimal digits in an even number. Each sequence of
7880 two digits will represent a byte. The hexadecimal digits may be
7881 used upper or lower case.
7882
7883
7884 The available matches are intentionally similar to their http-check cousins :
7885
7886 string <string> : test the exact string matches in the response buffer.
7887 A health check response will be considered valid if the
7888 response's buffer contains this exact string. If the
7889 "string" keyword is prefixed with "!", then the response
7890 will be considered invalid if the body contains this
7891 string. This can be used to look for a mandatory pattern
7892 in a protocol response, or to detect a failure when a
7893 specific error appears in a protocol banner.
7894
7895 rstring <regex> : test a regular expression on the response buffer.
7896 A health check response will be considered valid if the
7897 response's buffer matches this expression. If the
7898 "rstring" keyword is prefixed with "!", then the response
7899 will be considered invalid if the body matches the
7900 expression.
7901
7902 binary <hexstring> : test the exact string in its hexadecimal form matches
7903 in the response buffer. A health check response will
7904 be considered valid if the response's buffer contains
7905 this exact hexadecimal string.
7906 Purpose is to match data on binary protocols.
7907
7908 It is important to note that the responses will be limited to a certain size
7909 defined by the global "tune.chksize" option, which defaults to 16384 bytes.
7910 Thus, too large responses may not contain the mandatory pattern when using
7911 "string", "rstring" or binary. If a large response is absolutely required, it
7912 is possible to change the default max size by setting the global variable.
7913 However, it is worth keeping in mind that parsing very large responses can
7914 waste some CPU cycles, especially when regular expressions are used, and that
7915 it is always better to focus the checks on smaller resources. Also, in its
7916 current state, the check will not find any string nor regex past a null
7917 character in the response. Similarly it is not possible to request matching
7918 the null character.
7919
7920 Examples :
7921 # perform a POP check
7922 option tcp-check
7923 tcp-check expect string +OK\ POP3\ ready
7924
7925 # perform an IMAP check
7926 option tcp-check
7927 tcp-check expect string *\ OK\ IMAP4\ ready
7928
7929 # look for the redis master server
7930 option tcp-check
7931 tcp-check send PING\r\n
7932 tcp-check expect +PONG
7933 tcp-check send info\ replication\r\n
7934 tcp-check expect string role:master
7935 tcp-check send QUIT\r\n
7936 tcp-check expect string +OK
7937
7938
7939 See also : "option tcp-check", "tcp-check connect", "tcp-check send",
7940 "tcp-check send-binary", "http-check expect", tune.chksize
7941
7942
7943tcp-check send <data>
7944 Specify a string to be sent as a question during a generic health check
7945 May be used in sections: defaults | frontend | listen | backend
7946 no | no | yes | yes
7947
7948 <data> : the data to be sent as a question during a generic health check
7949 session. For now, <data> must be a string.
7950
7951 Examples :
7952 # look for the redis master server
7953 option tcp-check
7954 tcp-check send info\ replication\r\n
7955 tcp-check expect string role:master
7956
7957 See also : "option tcp-check", "tcp-check connect", "tcp-check expect",
7958 "tcp-check send-binary", tune.chksize
7959
7960
7961tcp-check send-binary <hexastring>
7962 Specify an hexa digits string to be sent as a binary question during a raw
7963 tcp health check
7964 May be used in sections: defaults | frontend | listen | backend
7965 no | no | yes | yes
7966
7967 <data> : the data to be sent as a question during a generic health check
7968 session. For now, <data> must be a string.
7969 <hexastring> : test the exact string in its hexadecimal form matches in the
7970 response buffer. A health check response will be considered
7971 valid if the response's buffer contains this exact
7972 hexadecimal string.
7973 Purpose is to send binary data to ask on binary protocols.
7974
7975 Examples :
7976 # redis check in binary
7977 option tcp-check
7978 tcp-check send-binary 50494e470d0a # PING\r\n
7979 tcp-check expect binary 2b504F4e47 # +PONG
7980
7981
7982 See also : "option tcp-check", "tcp-check connect", "tcp-check expect",
7983 "tcp-check send", tune.chksize
7984
7985
Willy Tarreaue9656522010-08-17 15:40:09 +02007986tcp-request connection <action> [{if | unless} <condition>]
7987 Perform an action on an incoming connection depending on a layer 4 condition
Willy Tarreau1a687942010-05-23 22:40:30 +02007988 May be used in sections : defaults | frontend | listen | backend
7989 no | yes | yes | no
Willy Tarreaue9656522010-08-17 15:40:09 +02007990 Arguments :
7991 <action> defines the action to perform if the condition applies. Valid
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02007992 actions include : "accept", "reject", "track-sc0", "track-sc1",
7993 "track-sc2", and "expect-proxy". See below for more details.
Willy Tarreau1a687942010-05-23 22:40:30 +02007994
Willy Tarreaue9656522010-08-17 15:40:09 +02007995 <condition> is a standard layer4-only ACL-based condition (see section 7).
Willy Tarreau68c03ab2010-08-06 15:08:45 +02007996
7997 Immediately after acceptance of a new incoming connection, it is possible to
7998 evaluate some conditions to decide whether this connection must be accepted
Willy Tarreaue9656522010-08-17 15:40:09 +02007999 or dropped or have its counters tracked. Those conditions cannot make use of
8000 any data contents because the connection has not been read from yet, and the
8001 buffers are not yet allocated. This is used to selectively and very quickly
8002 accept or drop connections from various sources with a very low overhead. If
8003 some contents need to be inspected in order to take the decision, the
8004 "tcp-request content" statements must be used instead.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008005
Willy Tarreaue9656522010-08-17 15:40:09 +02008006 The "tcp-request connection" rules are evaluated in their exact declaration
8007 order. If no rule matches or if there is no rule, the default action is to
8008 accept the incoming connection. There is no specific limit to the number of
8009 rules which may be inserted.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008010
Willy Tarreaua9083d02015-05-08 15:27:59 +02008011 Four types of actions are supported :
Willy Tarreaue9656522010-08-17 15:40:09 +02008012 - accept :
8013 accepts the connection if the condition is true (when used with "if")
8014 or false (when used with "unless"). The first such rule executed ends
8015 the rules evaluation.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008016
Willy Tarreaue9656522010-08-17 15:40:09 +02008017 - reject :
8018 rejects the connection if the condition is true (when used with "if")
8019 or false (when used with "unless"). The first such rule executed ends
8020 the rules evaluation. Rejected connections do not even become a
8021 session, which is why they are accounted separately for in the stats,
8022 as "denied connections". They are not considered for the session
8023 rate-limit and are not logged either. The reason is that these rules
8024 should only be used to filter extremely high connection rates such as
8025 the ones encountered during a massive DDoS attack. Under these extreme
8026 conditions, the simple action of logging each event would make the
8027 system collapse and would considerably lower the filtering capacity. If
8028 logging is absolutely desired, then "tcp-request content" rules should
8029 be used instead.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008030
Willy Tarreau4f0d9192013-06-11 20:40:55 +02008031 - expect-proxy layer4 :
8032 configures the client-facing connection to receive a PROXY protocol
8033 header before any byte is read from the socket. This is equivalent to
8034 having the "accept-proxy" keyword on the "bind" line, except that using
8035 the TCP rule allows the PROXY protocol to be accepted only for certain
8036 IP address ranges using an ACL. This is convenient when multiple layers
8037 of load balancers are passed through by traffic coming from public
8038 hosts.
8039
Willy Tarreau18bf01e2014-06-13 16:18:52 +02008040 - capture <sample> len <length> :
8041 This only applies to "tcp-request content" rules. It captures sample
8042 expression <sample> from the request buffer, and converts it to a
8043 string of at most <len> characters. The resulting string is stored into
8044 the next request "capture" slot, so it will possibly appear next to
8045 some captured HTTP headers. It will then automatically appear in the
8046 logs, and it will be possible to extract it using sample fetch rules to
8047 feed it into headers or anything. The length should be limited given
8048 that this size will be allocated for each capture during the whole
Willy Tarreaua9083d02015-05-08 15:27:59 +02008049 session life. Please check section 7.3 (Fetching samples) and "capture
8050 request header" for more information.
Willy Tarreau18bf01e2014-06-13 16:18:52 +02008051
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02008052 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] :
Willy Tarreaue9656522010-08-17 15:40:09 +02008053 enables tracking of sticky counters from current connection. These
Willy Tarreau09448f72014-06-25 18:12:15 +02008054 rules do not stop evaluation and do not change default action. 3 sets
Willy Tarreaue9656522010-08-17 15:40:09 +02008055 of counters may be simultaneously tracked by the same connection. The
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02008056 first "track-sc0" rule executed enables tracking of the counters of the
8057 specified table as the first set. The first "track-sc1" rule executed
Willy Tarreaue9656522010-08-17 15:40:09 +02008058 enables tracking of the counters of the specified table as the second
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02008059 set. The first "track-sc2" rule executed enables tracking of the
8060 counters of the specified table as the third set. It is a recommended
8061 practice to use the first set of counters for the per-frontend counters
8062 and the second set for the per-backend ones. But this is just a
8063 guideline, all may be used everywhere.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008064
Willy Tarreaue9656522010-08-17 15:40:09 +02008065 These actions take one or two arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02008066 <key> is mandatory, and is a sample expression rule as described
Willy Tarreau74ca5042013-06-11 23:12:07 +02008067 in section 7.3. It describes what elements of the incoming
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01008068 request or connection will be analysed, extracted, combined,
8069 and used to select which table entry to update the counters.
8070 Note that "tcp-request connection" cannot use content-based
8071 fetches.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008072
Willy Tarreaue9656522010-08-17 15:40:09 +02008073 <table> is an optional table to be used instead of the default one,
8074 which is the stick-table declared in the current proxy. All
8075 the counters for the matches and updates for the key will
8076 then be performed in that table until the session ends.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008077
Willy Tarreaue9656522010-08-17 15:40:09 +02008078 Once a "track-sc*" rule is executed, the key is looked up in the table
8079 and if it is not found, an entry is allocated for it. Then a pointer to
8080 that entry is kept during all the session's life, and this entry's
8081 counters are updated as often as possible, every time the session's
8082 counters are updated, and also systematically when the session ends.
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01008083 Counters are only updated for events that happen after the tracking has
8084 been started. For example, connection counters will not be updated when
8085 tracking layer 7 information, since the connection event happens before
8086 layer7 information is extracted.
8087
Willy Tarreaue9656522010-08-17 15:40:09 +02008088 If the entry tracks concurrent connection counters, one connection is
8089 counted for as long as the entry is tracked, and the entry will not
8090 expire during that time. Tracking counters also provides a performance
8091 advantage over just checking the keys, because only one table lookup is
8092 performed for all ACL checks that make use of it.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008093
Willy Tarreaue9656522010-08-17 15:40:09 +02008094 Note that the "if/unless" condition is optional. If no condition is set on
8095 the action, it is simply performed unconditionally. That can be useful for
8096 "track-sc*" actions as well as for changing the default action to a reject.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008097
Willy Tarreaue9656522010-08-17 15:40:09 +02008098 Example: accept all connections from white-listed hosts, reject too fast
8099 connection without counting them, and track accepted connections.
8100 This results in connection rate being capped from abusive sources.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008101
Willy Tarreaue9656522010-08-17 15:40:09 +02008102 tcp-request connection accept if { src -f /etc/haproxy/whitelist.lst }
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008103 tcp-request connection reject if { src_conn_rate gt 10 }
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02008104 tcp-request connection track-sc0 src
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008105
Willy Tarreaue9656522010-08-17 15:40:09 +02008106 Example: accept all connections from white-listed hosts, count all other
8107 connections and reject too fast ones. This results in abusive ones
8108 being blocked as long as they don't slow down.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008109
Willy Tarreaue9656522010-08-17 15:40:09 +02008110 tcp-request connection accept if { src -f /etc/haproxy/whitelist.lst }
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02008111 tcp-request connection track-sc0 src
8112 tcp-request connection reject if { sc0_conn_rate gt 10 }
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008113
Willy Tarreau4f0d9192013-06-11 20:40:55 +02008114 Example: enable the PROXY protocol for traffic coming from all known proxies.
8115
8116 tcp-request connection expect-proxy layer4 if { src -f proxies.lst }
8117
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008118 See section 7 about ACL usage.
8119
Willy Tarreaue9656522010-08-17 15:40:09 +02008120 See also : "tcp-request content", "stick-table"
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008121
8122
Willy Tarreaue9656522010-08-17 15:40:09 +02008123tcp-request content <action> [{if | unless} <condition>]
8124 Perform an action on a new session depending on a layer 4-7 condition
Willy Tarreau62644772008-07-16 18:36:06 +02008125 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaufb356202010-08-03 14:02:05 +02008126 no | yes | yes | yes
Willy Tarreaue9656522010-08-17 15:40:09 +02008127 Arguments :
8128 <action> defines the action to perform if the condition applies. Valid
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02008129 actions include : "accept", "reject", "track-sc0", "track-sc1",
Thierry FOURNIER90da1912015-03-05 11:17:06 +01008130 "track-sc2", "capture" and "lua". See "tcp-request connection"
8131 above for their signification.
Willy Tarreau62644772008-07-16 18:36:06 +02008132
Willy Tarreaue9656522010-08-17 15:40:09 +02008133 <condition> is a standard layer 4-7 ACL-based condition (see section 7).
Willy Tarreau62644772008-07-16 18:36:06 +02008134
Willy Tarreaue9656522010-08-17 15:40:09 +02008135 A request's contents can be analysed at an early stage of request processing
8136 called "TCP content inspection". During this stage, ACL-based rules are
8137 evaluated every time the request contents are updated, until either an
8138 "accept" or a "reject" rule matches, or the TCP request inspection delay
8139 expires with no matching rule.
Willy Tarreau62644772008-07-16 18:36:06 +02008140
Willy Tarreaue9656522010-08-17 15:40:09 +02008141 The first difference between these rules and "tcp-request connection" rules
8142 is that "tcp-request content" rules can make use of contents to take a
8143 decision. Most often, these decisions will consider a protocol recognition or
8144 validity. The second difference is that content-based rules can be used in
Willy Tarreauf3338342014-01-28 21:40:28 +01008145 both frontends and backends. In case of HTTP keep-alive with the client, all
8146 tcp-request content rules are evaluated again, so haproxy keeps a record of
8147 what sticky counters were assigned by a "tcp-request connection" versus a
8148 "tcp-request content" rule, and flushes all the content-related ones after
8149 processing an HTTP request, so that they may be evaluated again by the rules
8150 being evaluated again for the next request. This is of particular importance
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03008151 when the rule tracks some L7 information or when it is conditioned by an
Willy Tarreauf3338342014-01-28 21:40:28 +01008152 L7-based ACL, since tracking may change between requests.
Willy Tarreau62644772008-07-16 18:36:06 +02008153
Willy Tarreaue9656522010-08-17 15:40:09 +02008154 Content-based rules are evaluated in their exact declaration order. If no
8155 rule matches or if there is no rule, the default action is to accept the
8156 contents. There is no specific limit to the number of rules which may be
8157 inserted.
Willy Tarreau62644772008-07-16 18:36:06 +02008158
Willy Tarreau18bf01e2014-06-13 16:18:52 +02008159 Four types of actions are supported :
8160 - accept : the request is accepted
8161 - reject : the request is rejected and the connection is closed
8162 - capture : the specified sample expression is captured
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02008163 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>]
Willy Tarreau62644772008-07-16 18:36:06 +02008164
Willy Tarreaue9656522010-08-17 15:40:09 +02008165 They have the same meaning as their counter-parts in "tcp-request connection"
8166 so please refer to that section for a complete description.
Willy Tarreau62644772008-07-16 18:36:06 +02008167
Willy Tarreauf3338342014-01-28 21:40:28 +01008168 While there is nothing mandatory about it, it is recommended to use the
8169 track-sc0 in "tcp-request connection" rules, track-sc1 for "tcp-request
8170 content" rules in the frontend, and track-sc2 for "tcp-request content"
8171 rules in the backend, because that makes the configuration more readable
8172 and easier to troubleshoot, but this is just a guideline and all counters
8173 may be used everywhere.
Willy Tarreau62644772008-07-16 18:36:06 +02008174
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01008175 Note that the "if/unless" condition is optional. If no condition is set on
Willy Tarreaue9656522010-08-17 15:40:09 +02008176 the action, it is simply performed unconditionally. That can be useful for
8177 "track-sc*" actions as well as for changing the default action to a reject.
Willy Tarreau62644772008-07-16 18:36:06 +02008178
Willy Tarreaue9656522010-08-17 15:40:09 +02008179 It is perfectly possible to match layer 7 contents with "tcp-request content"
Willy Tarreauc0239e02012-04-16 14:42:55 +02008180 rules, since HTTP-specific ACL matches are able to preliminarily parse the
8181 contents of a buffer before extracting the required data. If the buffered
8182 contents do not parse as a valid HTTP message, then the ACL does not match.
8183 The parser which is involved there is exactly the same as for all other HTTP
Willy Tarreauf3338342014-01-28 21:40:28 +01008184 processing, so there is no risk of parsing something differently. In an HTTP
8185 backend connected to from an HTTP frontend, it is guaranteed that HTTP
8186 contents will always be immediately present when the rule is evaluated first.
Willy Tarreau62644772008-07-16 18:36:06 +02008187
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01008188 Tracking layer7 information is also possible provided that the information
Willy Tarreau4d54c7c2014-09-16 15:48:15 +02008189 are present when the rule is processed. The rule processing engine is able to
8190 wait until the inspect delay expires when the data to be tracked is not yet
8191 available.
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01008192
Thierry FOURNIER90da1912015-03-05 11:17:06 +01008193 The "lua" keyword is followed by a Lua function name. It is used to run a Lua
8194 function if the action is executed. The single parameter is the name of the
8195 function to run. The prototype of the function is documented in the API
8196 documentation.
8197
Willy Tarreau62644772008-07-16 18:36:06 +02008198 Example:
Willy Tarreaue9656522010-08-17 15:40:09 +02008199 # Accept HTTP requests containing a Host header saying "example.com"
8200 # and reject everything else.
8201 acl is_host_com hdr(Host) -i example.com
8202 tcp-request inspect-delay 30s
Willy Tarreauc0239e02012-04-16 14:42:55 +02008203 tcp-request content accept if is_host_com
Willy Tarreaue9656522010-08-17 15:40:09 +02008204 tcp-request content reject
8205
8206 Example:
Willy Tarreau62644772008-07-16 18:36:06 +02008207 # reject SMTP connection if client speaks first
8208 tcp-request inspect-delay 30s
8209 acl content_present req_len gt 0
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008210 tcp-request content reject if content_present
Willy Tarreau62644772008-07-16 18:36:06 +02008211
8212 # Forward HTTPS connection only if client speaks
8213 tcp-request inspect-delay 30s
8214 acl content_present req_len gt 0
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008215 tcp-request content accept if content_present
Willy Tarreaue9656522010-08-17 15:40:09 +02008216 tcp-request content reject
8217
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01008218 Example:
8219 # Track the last IP from X-Forwarded-For
8220 tcp-request inspect-delay 10s
Willy Tarreau4d54c7c2014-09-16 15:48:15 +02008221 tcp-request content track-sc0 hdr(x-forwarded-for,-1)
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01008222
8223 Example:
8224 # track request counts per "base" (concatenation of Host+URL)
8225 tcp-request inspect-delay 10s
Willy Tarreau4d54c7c2014-09-16 15:48:15 +02008226 tcp-request content track-sc0 base table req-rate
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01008227
Willy Tarreaue9656522010-08-17 15:40:09 +02008228 Example: track per-frontend and per-backend counters, block abusers at the
8229 frontend when the backend detects abuse.
8230
8231 frontend http
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02008232 # Use General Purpose Couter 0 in SC0 as a global abuse counter
Willy Tarreaue9656522010-08-17 15:40:09 +02008233 # protecting all our sites
8234 stick-table type ip size 1m expire 5m store gpc0
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02008235 tcp-request connection track-sc0 src
8236 tcp-request connection reject if { sc0_get_gpc0 gt 0 }
Willy Tarreaue9656522010-08-17 15:40:09 +02008237 ...
8238 use_backend http_dynamic if { path_end .php }
8239
8240 backend http_dynamic
8241 # if a source makes too fast requests to this dynamic site (tracked
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02008242 # by SC1), block it globally in the frontend.
Willy Tarreaue9656522010-08-17 15:40:09 +02008243 stick-table type ip size 1m expire 5m store http_req_rate(10s)
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02008244 acl click_too_fast sc1_http_req_rate gt 10
8245 acl mark_as_abuser sc0_inc_gpc0 gt 0
8246 tcp-request content track-sc1 src
Willy Tarreaue9656522010-08-17 15:40:09 +02008247 tcp-request content reject if click_too_fast mark_as_abuser
Willy Tarreau62644772008-07-16 18:36:06 +02008248
Willy Tarreauc57f0e22009-05-10 13:12:33 +02008249 See section 7 about ACL usage.
Willy Tarreau62644772008-07-16 18:36:06 +02008250
Willy Tarreaue9656522010-08-17 15:40:09 +02008251 See also : "tcp-request connection", "tcp-request inspect-delay"
Willy Tarreau62644772008-07-16 18:36:06 +02008252
8253
8254tcp-request inspect-delay <timeout>
8255 Set the maximum allowed time to wait for data during content inspection
8256 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaufb356202010-08-03 14:02:05 +02008257 no | yes | yes | yes
Willy Tarreau62644772008-07-16 18:36:06 +02008258 Arguments :
8259 <timeout> is the timeout value specified in milliseconds by default, but
8260 can be in any other unit if the number is suffixed by the unit,
8261 as explained at the top of this document.
8262
8263 People using haproxy primarily as a TCP relay are often worried about the
8264 risk of passing any type of protocol to a server without any analysis. In
8265 order to be able to analyze the request contents, we must first withhold
8266 the data then analyze them. This statement simply enables withholding of
8267 data for at most the specified amount of time.
8268
Willy Tarreaufb356202010-08-03 14:02:05 +02008269 TCP content inspection applies very early when a connection reaches a
8270 frontend, then very early when the connection is forwarded to a backend. This
8271 means that a connection may experience a first delay in the frontend and a
8272 second delay in the backend if both have tcp-request rules.
8273
Willy Tarreau62644772008-07-16 18:36:06 +02008274 Note that when performing content inspection, haproxy will evaluate the whole
8275 rules for every new chunk which gets in, taking into account the fact that
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01008276 those data are partial. If no rule matches before the aforementioned delay,
Willy Tarreau62644772008-07-16 18:36:06 +02008277 a last check is performed upon expiration, this time considering that the
Willy Tarreaud869b242009-03-15 14:43:58 +01008278 contents are definitive. If no delay is set, haproxy will not wait at all
8279 and will immediately apply a verdict based on the available information.
8280 Obviously this is unlikely to be very useful and might even be racy, so such
8281 setups are not recommended.
Willy Tarreau62644772008-07-16 18:36:06 +02008282
8283 As soon as a rule matches, the request is released and continues as usual. If
8284 the timeout is reached and no rule matches, the default policy will be to let
8285 it pass through unaffected.
8286
8287 For most protocols, it is enough to set it to a few seconds, as most clients
8288 send the full request immediately upon connection. Add 3 or more seconds to
8289 cover TCP retransmits but that's all. For some protocols, it may make sense
Willy Tarreaud72758d2010-01-12 10:42:19 +01008290 to use large values, for instance to ensure that the client never talks
Willy Tarreau62644772008-07-16 18:36:06 +02008291 before the server (eg: SMTP), or to wait for a client to talk before passing
8292 data to the server (eg: SSL). Note that the client timeout must cover at
Willy Tarreaub824b002010-09-29 16:36:16 +02008293 least the inspection delay, otherwise it will expire first. If the client
8294 closes the connection or if the buffer is full, the delay immediately expires
8295 since the contents will not be able to change anymore.
Willy Tarreau62644772008-07-16 18:36:06 +02008296
Willy Tarreau55165fe2009-05-10 12:02:55 +02008297 See also : "tcp-request content accept", "tcp-request content reject",
Willy Tarreau62644772008-07-16 18:36:06 +02008298 "timeout client".
8299
8300
Emeric Brun0a3b67f2010-09-24 15:34:53 +02008301tcp-response content <action> [{if | unless} <condition>]
8302 Perform an action on a session response depending on a layer 4-7 condition
8303 May be used in sections : defaults | frontend | listen | backend
8304 no | no | yes | yes
8305 Arguments :
8306 <action> defines the action to perform if the condition applies. Valid
Thierry FOURNIER90da1912015-03-05 11:17:06 +01008307 actions include : "accept", "close", "reject", "lua".
Emeric Brun0a3b67f2010-09-24 15:34:53 +02008308
8309 <condition> is a standard layer 4-7 ACL-based condition (see section 7).
8310
8311 Response contents can be analysed at an early stage of response processing
8312 called "TCP content inspection". During this stage, ACL-based rules are
8313 evaluated every time the response contents are updated, until either an
Willy Tarreaucc1e04b2013-09-11 23:20:29 +02008314 "accept", "close" or a "reject" rule matches, or a TCP response inspection
8315 delay is set and expires with no matching rule.
Emeric Brun0a3b67f2010-09-24 15:34:53 +02008316
8317 Most often, these decisions will consider a protocol recognition or validity.
8318
8319 Content-based rules are evaluated in their exact declaration order. If no
8320 rule matches or if there is no rule, the default action is to accept the
8321 contents. There is no specific limit to the number of rules which may be
8322 inserted.
8323
8324 Two types of actions are supported :
8325 - accept :
8326 accepts the response if the condition is true (when used with "if")
8327 or false (when used with "unless"). The first such rule executed ends
8328 the rules evaluation.
8329
Willy Tarreaucc1e04b2013-09-11 23:20:29 +02008330 - close :
8331 immediately closes the connection with the server if the condition is
8332 true (when used with "if"), or false (when used with "unless"). The
8333 first such rule executed ends the rules evaluation. The main purpose of
8334 this action is to force a connection to be finished between a client
8335 and a server after an exchange when the application protocol expects
8336 some long time outs to elapse first. The goal is to eliminate idle
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03008337 connections which take significant resources on servers with certain
Willy Tarreaucc1e04b2013-09-11 23:20:29 +02008338 protocols.
8339
Emeric Brun0a3b67f2010-09-24 15:34:53 +02008340 - reject :
8341 rejects the response if the condition is true (when used with "if")
8342 or false (when used with "unless"). The first such rule executed ends
Jamie Gloudonaaa21002012-08-25 00:18:33 -04008343 the rules evaluation. Rejected session are immediately closed.
Emeric Brun0a3b67f2010-09-24 15:34:53 +02008344
8345 Note that the "if/unless" condition is optional. If no condition is set on
8346 the action, it is simply performed unconditionally. That can be useful for
8347 for changing the default action to a reject.
8348
Jamie Gloudonaaa21002012-08-25 00:18:33 -04008349 It is perfectly possible to match layer 7 contents with "tcp-response
8350 content" rules, but then it is important to ensure that a full response has
8351 been buffered, otherwise no contents will match. In order to achieve this,
8352 the best solution involves detecting the HTTP protocol during the inspection
Emeric Brun0a3b67f2010-09-24 15:34:53 +02008353 period.
8354
Thierry FOURNIER90da1912015-03-05 11:17:06 +01008355 The "lua" keyword is followed by a Lua function name. It is used to run a Lua
8356 function if the action is executed. The single parameter is the name of the
8357 function to run. The prototype of the function is documented in the API
8358 documentation.
8359
Emeric Brun0a3b67f2010-09-24 15:34:53 +02008360 See section 7 about ACL usage.
8361
8362 See also : "tcp-request content", "tcp-response inspect-delay"
8363
8364
8365tcp-response inspect-delay <timeout>
8366 Set the maximum allowed time to wait for a response during content inspection
8367 May be used in sections : defaults | frontend | listen | backend
8368 no | no | yes | yes
8369 Arguments :
8370 <timeout> is the timeout value specified in milliseconds by default, but
8371 can be in any other unit if the number is suffixed by the unit,
8372 as explained at the top of this document.
8373
8374 See also : "tcp-response content", "tcp-request inspect-delay".
8375
8376
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01008377timeout check <timeout>
8378 Set additional check timeout, but only after a connection has been already
8379 established.
8380
8381 May be used in sections: defaults | frontend | listen | backend
8382 yes | no | yes | yes
8383 Arguments:
8384 <timeout> is the timeout value specified in milliseconds by default, but
8385 can be in any other unit if the number is suffixed by the unit,
8386 as explained at the top of this document.
8387
8388 If set, haproxy uses min("timeout connect", "inter") as a connect timeout
8389 for check and "timeout check" as an additional read timeout. The "min" is
8390 used so that people running with *very* long "timeout connect" (eg. those
8391 who needed this due to the queue or tarpit) do not slow down their checks.
Willy Tarreaud7550a22010-02-10 05:10:19 +01008392 (Please also note that there is no valid reason to have such long connect
8393 timeouts, because "timeout queue" and "timeout tarpit" can always be used to
8394 avoid that).
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01008395
8396 If "timeout check" is not set haproxy uses "inter" for complete check
8397 timeout (connect + read) exactly like all <1.3.15 version.
8398
8399 In most cases check request is much simpler and faster to handle than normal
8400 requests and people may want to kick out laggy servers so this timeout should
Willy Tarreau41a340d2008-01-22 12:25:31 +01008401 be smaller than "timeout server".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01008402
8403 This parameter is specific to backends, but can be specified once for all in
8404 "defaults" sections. This is in fact one of the easiest solutions not to
8405 forget about it.
8406
Willy Tarreau41a340d2008-01-22 12:25:31 +01008407 See also: "timeout connect", "timeout queue", "timeout server",
8408 "timeout tarpit".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01008409
8410
Willy Tarreau0ba27502007-12-24 16:55:16 +01008411timeout client <timeout>
8412timeout clitimeout <timeout> (deprecated)
8413 Set the maximum inactivity time on the client side.
8414 May be used in sections : defaults | frontend | listen | backend
8415 yes | yes | yes | no
8416 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01008417 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01008418 can be in any other unit if the number is suffixed by the unit,
8419 as explained at the top of this document.
8420
8421 The inactivity timeout applies when the client is expected to acknowledge or
8422 send data. In HTTP mode, this timeout is particularly important to consider
8423 during the first phase, when the client sends the request, and during the
8424 response while it is reading data sent by the server. The value is specified
8425 in milliseconds by default, but can be in any other unit if the number is
8426 suffixed by the unit, as specified at the top of this document. In TCP mode
8427 (and to a lesser extent, in HTTP mode), it is highly recommended that the
8428 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01008429 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01008430 losses by specifying timeouts that are slightly above multiples of 3 seconds
Willy Tarreauce887fd2012-05-12 12:50:00 +02008431 (eg: 4 or 5 seconds). If some long-lived sessions are mixed with short-lived
8432 sessions (eg: WebSocket and HTTP), it's worth considering "timeout tunnel",
Willy Tarreau05cdd962014-05-10 14:30:07 +02008433 which overrides "timeout client" and "timeout server" for tunnels, as well as
8434 "timeout client-fin" for half-closed connections.
Willy Tarreau0ba27502007-12-24 16:55:16 +01008435
8436 This parameter is specific to frontends, but can be specified once for all in
8437 "defaults" sections. This is in fact one of the easiest solutions not to
8438 forget about it. An unspecified timeout results in an infinite timeout, which
8439 is not recommended. Such a usage is accepted and works but reports a warning
8440 during startup because it may results in accumulation of expired sessions in
8441 the system if the system's timeouts are not configured either.
8442
8443 This parameter replaces the old, deprecated "clitimeout". It is recommended
8444 to use it to write new configurations. The form "timeout clitimeout" is
8445 provided only by backwards compatibility but its use is strongly discouraged.
8446
Willy Tarreauce887fd2012-05-12 12:50:00 +02008447 See also : "clitimeout", "timeout server", "timeout tunnel".
Willy Tarreau0ba27502007-12-24 16:55:16 +01008448
8449
Willy Tarreau05cdd962014-05-10 14:30:07 +02008450timeout client-fin <timeout>
8451 Set the inactivity timeout on the client side for half-closed connections.
8452 May be used in sections : defaults | frontend | listen | backend
8453 yes | yes | yes | no
8454 Arguments :
8455 <timeout> is the timeout value specified in milliseconds by default, but
8456 can be in any other unit if the number is suffixed by the unit,
8457 as explained at the top of this document.
8458
8459 The inactivity timeout applies when the client is expected to acknowledge or
8460 send data while one direction is already shut down. This timeout is different
8461 from "timeout client" in that it only applies to connections which are closed
8462 in one direction. This is particularly useful to avoid keeping connections in
8463 FIN_WAIT state for too long when clients do not disconnect cleanly. This
8464 problem is particularly common long connections such as RDP or WebSocket.
8465 Note that this timeout can override "timeout tunnel" when a connection shuts
8466 down in one direction.
8467
8468 This parameter is specific to frontends, but can be specified once for all in
8469 "defaults" sections. By default it is not set, so half-closed connections
8470 will use the other timeouts (timeout.client or timeout.tunnel).
8471
8472 See also : "timeout client", "timeout server-fin", and "timeout tunnel".
8473
8474
Willy Tarreau0ba27502007-12-24 16:55:16 +01008475timeout connect <timeout>
8476timeout contimeout <timeout> (deprecated)
8477 Set the maximum time to wait for a connection attempt to a server to succeed.
8478 May be used in sections : defaults | frontend | listen | backend
8479 yes | no | yes | yes
8480 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01008481 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01008482 can be in any other unit if the number is suffixed by the unit,
8483 as explained at the top of this document.
8484
8485 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01008486 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreaud72758d2010-01-12 10:42:19 +01008487 cover one or several TCP packet losses by specifying timeouts that are
Willy Tarreau0ba27502007-12-24 16:55:16 +01008488 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01008489 connect timeout also presets both queue and tarpit timeouts to the same value
8490 if these have not been specified.
Willy Tarreau0ba27502007-12-24 16:55:16 +01008491
8492 This parameter is specific to backends, but can be specified once for all in
8493 "defaults" sections. This is in fact one of the easiest solutions not to
8494 forget about it. An unspecified timeout results in an infinite timeout, which
8495 is not recommended. Such a usage is accepted and works but reports a warning
8496 during startup because it may results in accumulation of failed sessions in
8497 the system if the system's timeouts are not configured either.
8498
8499 This parameter replaces the old, deprecated "contimeout". It is recommended
8500 to use it to write new configurations. The form "timeout contimeout" is
8501 provided only by backwards compatibility but its use is strongly discouraged.
8502
Willy Tarreau41a340d2008-01-22 12:25:31 +01008503 See also: "timeout check", "timeout queue", "timeout server", "contimeout",
8504 "timeout tarpit".
Willy Tarreau0ba27502007-12-24 16:55:16 +01008505
8506
Willy Tarreaub16a5742010-01-10 14:46:16 +01008507timeout http-keep-alive <timeout>
8508 Set the maximum allowed time to wait for a new HTTP request to appear
8509 May be used in sections : defaults | frontend | listen | backend
8510 yes | yes | yes | yes
8511 Arguments :
8512 <timeout> is the timeout value specified in milliseconds by default, but
8513 can be in any other unit if the number is suffixed by the unit,
8514 as explained at the top of this document.
8515
8516 By default, the time to wait for a new request in case of keep-alive is set
8517 by "timeout http-request". However this is not always convenient because some
8518 people want very short keep-alive timeouts in order to release connections
8519 faster, and others prefer to have larger ones but still have short timeouts
8520 once the request has started to present itself.
8521
8522 The "http-keep-alive" timeout covers these needs. It will define how long to
8523 wait for a new HTTP request to start coming after a response was sent. Once
8524 the first byte of request has been seen, the "http-request" timeout is used
8525 to wait for the complete request to come. Note that empty lines prior to a
8526 new request do not refresh the timeout and are not counted as a new request.
8527
8528 There is also another difference between the two timeouts : when a connection
8529 expires during timeout http-keep-alive, no error is returned, the connection
8530 just closes. If the connection expires in "http-request" while waiting for a
8531 connection to complete, a HTTP 408 error is returned.
8532
8533 In general it is optimal to set this value to a few tens to hundreds of
8534 milliseconds, to allow users to fetch all objects of a page at once but
8535 without waiting for further clicks. Also, if set to a very small value (eg:
8536 1 millisecond) it will probably only accept pipelined requests but not the
8537 non-pipelined ones. It may be a nice trade-off for very large sites running
Patrick Mézard2382ad62010-05-09 10:43:32 +02008538 with tens to hundreds of thousands of clients.
Willy Tarreaub16a5742010-01-10 14:46:16 +01008539
8540 If this parameter is not set, the "http-request" timeout applies, and if both
8541 are not set, "timeout client" still applies at the lower level. It should be
8542 set in the frontend to take effect, unless the frontend is in TCP mode, in
8543 which case the HTTP backend's timeout will be used.
8544
8545 See also : "timeout http-request", "timeout client".
8546
8547
Willy Tarreau036fae02008-01-06 13:24:40 +01008548timeout http-request <timeout>
8549 Set the maximum allowed time to wait for a complete HTTP request
8550 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaucd7afc02009-07-12 10:03:17 +02008551 yes | yes | yes | yes
Willy Tarreau036fae02008-01-06 13:24:40 +01008552 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01008553 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau036fae02008-01-06 13:24:40 +01008554 can be in any other unit if the number is suffixed by the unit,
8555 as explained at the top of this document.
8556
8557 In order to offer DoS protection, it may be required to lower the maximum
8558 accepted time to receive a complete HTTP request without affecting the client
8559 timeout. This helps protecting against established connections on which
8560 nothing is sent. The client timeout cannot offer a good protection against
8561 this abuse because it is an inactivity timeout, which means that if the
8562 attacker sends one character every now and then, the timeout will not
8563 trigger. With the HTTP request timeout, no matter what speed the client
Willy Tarreau2705a612014-05-23 17:38:34 +02008564 types, the request will be aborted if it does not complete in time. When the
8565 timeout expires, an HTTP 408 response is sent to the client to inform it
8566 about the problem, and the connection is closed. The logs will report
8567 termination codes "cR". Some recent browsers are having problems with this
8568 standard, well-documented behaviour, so it might be needed to hide the 408
Willy Tarreau0f228a02015-05-01 15:37:53 +02008569 code using "option http-ignore-probes" or "errorfile 408 /dev/null". See
8570 more details in the explanations of the "cR" termination code in section 8.5.
Willy Tarreau036fae02008-01-06 13:24:40 +01008571
8572 Note that this timeout only applies to the header part of the request, and
8573 not to any data. As soon as the empty line is received, this timeout is not
Willy Tarreaub16a5742010-01-10 14:46:16 +01008574 used anymore. It is used again on keep-alive connections to wait for a second
8575 request if "timeout http-keep-alive" is not set.
Willy Tarreau036fae02008-01-06 13:24:40 +01008576
8577 Generally it is enough to set it to a few seconds, as most clients send the
8578 full request immediately upon connection. Add 3 or more seconds to cover TCP
8579 retransmits but that's all. Setting it to very low values (eg: 50 ms) will
8580 generally work on local networks as long as there are no packet losses. This
8581 will prevent people from sending bare HTTP requests using telnet.
8582
8583 If this parameter is not set, the client timeout still applies between each
Willy Tarreaucd7afc02009-07-12 10:03:17 +02008584 chunk of the incoming request. It should be set in the frontend to take
8585 effect, unless the frontend is in TCP mode, in which case the HTTP backend's
8586 timeout will be used.
Willy Tarreau036fae02008-01-06 13:24:40 +01008587
Willy Tarreau0f228a02015-05-01 15:37:53 +02008588 See also : "errorfile", "http-ignore-probes", "timeout http-keep-alive", and
8589 "timeout client".
Willy Tarreau036fae02008-01-06 13:24:40 +01008590
Willy Tarreau844e3c52008-01-11 16:28:18 +01008591
8592timeout queue <timeout>
8593 Set the maximum time to wait in the queue for a connection slot to be free
8594 May be used in sections : defaults | frontend | listen | backend
8595 yes | no | yes | yes
8596 Arguments :
8597 <timeout> is the timeout value specified in milliseconds by default, but
8598 can be in any other unit if the number is suffixed by the unit,
8599 as explained at the top of this document.
8600
8601 When a server's maxconn is reached, connections are left pending in a queue
8602 which may be server-specific or global to the backend. In order not to wait
8603 indefinitely, a timeout is applied to requests pending in the queue. If the
8604 timeout is reached, it is considered that the request will almost never be
8605 served, so it is dropped and a 503 error is returned to the client.
8606
8607 The "timeout queue" statement allows to fix the maximum time for a request to
8608 be left pending in a queue. If unspecified, the same value as the backend's
8609 connection timeout ("timeout connect") is used, for backwards compatibility
8610 with older versions with no "timeout queue" parameter.
8611
8612 See also : "timeout connect", "contimeout".
8613
8614
8615timeout server <timeout>
8616timeout srvtimeout <timeout> (deprecated)
8617 Set the maximum inactivity time on the server side.
8618 May be used in sections : defaults | frontend | listen | backend
8619 yes | no | yes | yes
8620 Arguments :
8621 <timeout> is the timeout value specified in milliseconds by default, but
8622 can be in any other unit if the number is suffixed by the unit,
8623 as explained at the top of this document.
8624
8625 The inactivity timeout applies when the server is expected to acknowledge or
8626 send data. In HTTP mode, this timeout is particularly important to consider
8627 during the first phase of the server's response, when it has to send the
8628 headers, as it directly represents the server's processing time for the
8629 request. To find out what value to put there, it's often good to start with
8630 what would be considered as unacceptable response times, then check the logs
8631 to observe the response time distribution, and adjust the value accordingly.
8632
8633 The value is specified in milliseconds by default, but can be in any other
8634 unit if the number is suffixed by the unit, as specified at the top of this
8635 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
8636 recommended that the client timeout remains equal to the server timeout in
8637 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01008638 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01008639 packet losses by specifying timeouts that are slightly above multiples of 3
Willy Tarreauce887fd2012-05-12 12:50:00 +02008640 seconds (eg: 4 or 5 seconds minimum). If some long-lived sessions are mixed
8641 with short-lived sessions (eg: WebSocket and HTTP), it's worth considering
8642 "timeout tunnel", which overrides "timeout client" and "timeout server" for
8643 tunnels.
Willy Tarreau844e3c52008-01-11 16:28:18 +01008644
8645 This parameter is specific to backends, but can be specified once for all in
8646 "defaults" sections. This is in fact one of the easiest solutions not to
8647 forget about it. An unspecified timeout results in an infinite timeout, which
8648 is not recommended. Such a usage is accepted and works but reports a warning
8649 during startup because it may results in accumulation of expired sessions in
8650 the system if the system's timeouts are not configured either.
8651
8652 This parameter replaces the old, deprecated "srvtimeout". It is recommended
8653 to use it to write new configurations. The form "timeout srvtimeout" is
8654 provided only by backwards compatibility but its use is strongly discouraged.
8655
Willy Tarreauce887fd2012-05-12 12:50:00 +02008656 See also : "srvtimeout", "timeout client" and "timeout tunnel".
Willy Tarreau844e3c52008-01-11 16:28:18 +01008657
Willy Tarreau05cdd962014-05-10 14:30:07 +02008658
8659timeout server-fin <timeout>
8660 Set the inactivity timeout on the server side for half-closed connections.
8661 May be used in sections : defaults | frontend | listen | backend
8662 yes | no | yes | yes
8663 Arguments :
8664 <timeout> is the timeout value specified in milliseconds by default, but
8665 can be in any other unit if the number is suffixed by the unit,
8666 as explained at the top of this document.
8667
8668 The inactivity timeout applies when the server is expected to acknowledge or
8669 send data while one direction is already shut down. This timeout is different
8670 from "timeout server" in that it only applies to connections which are closed
8671 in one direction. This is particularly useful to avoid keeping connections in
8672 FIN_WAIT state for too long when a remote server does not disconnect cleanly.
8673 This problem is particularly common long connections such as RDP or WebSocket.
8674 Note that this timeout can override "timeout tunnel" when a connection shuts
8675 down in one direction. This setting was provided for completeness, but in most
8676 situations, it should not be needed.
8677
8678 This parameter is specific to backends, but can be specified once for all in
8679 "defaults" sections. By default it is not set, so half-closed connections
8680 will use the other timeouts (timeout.server or timeout.tunnel).
8681
8682 See also : "timeout client-fin", "timeout server", and "timeout tunnel".
8683
Willy Tarreau844e3c52008-01-11 16:28:18 +01008684
8685timeout tarpit <timeout>
Cyril Bonté78caf842010-03-10 22:41:43 +01008686 Set the duration for which tarpitted connections will be maintained
Willy Tarreau844e3c52008-01-11 16:28:18 +01008687 May be used in sections : defaults | frontend | listen | backend
8688 yes | yes | yes | yes
8689 Arguments :
8690 <timeout> is the tarpit duration specified in milliseconds by default, but
8691 can be in any other unit if the number is suffixed by the unit,
8692 as explained at the top of this document.
8693
8694 When a connection is tarpitted using "reqtarpit", it is maintained open with
8695 no activity for a certain amount of time, then closed. "timeout tarpit"
8696 defines how long it will be maintained open.
8697
8698 The value is specified in milliseconds by default, but can be in any other
8699 unit if the number is suffixed by the unit, as specified at the top of this
8700 document. If unspecified, the same value as the backend's connection timeout
8701 ("timeout connect") is used, for backwards compatibility with older versions
Cyril Bonté78caf842010-03-10 22:41:43 +01008702 with no "timeout tarpit" parameter.
Willy Tarreau844e3c52008-01-11 16:28:18 +01008703
8704 See also : "timeout connect", "contimeout".
8705
8706
Willy Tarreauce887fd2012-05-12 12:50:00 +02008707timeout tunnel <timeout>
8708 Set the maximum inactivity time on the client and server side for tunnels.
8709 May be used in sections : defaults | frontend | listen | backend
8710 yes | no | yes | yes
8711 Arguments :
8712 <timeout> is the timeout value specified in milliseconds by default, but
8713 can be in any other unit if the number is suffixed by the unit,
8714 as explained at the top of this document.
8715
Jamie Gloudonaaa21002012-08-25 00:18:33 -04008716 The tunnel timeout applies when a bidirectional connection is established
Willy Tarreauce887fd2012-05-12 12:50:00 +02008717 between a client and a server, and the connection remains inactive in both
8718 directions. This timeout supersedes both the client and server timeouts once
8719 the connection becomes a tunnel. In TCP, this timeout is used as soon as no
8720 analyser remains attached to either connection (eg: tcp content rules are
8721 accepted). In HTTP, this timeout is used when a connection is upgraded (eg:
8722 when switching to the WebSocket protocol, or forwarding a CONNECT request
8723 to a proxy), or after the first response when no keepalive/close option is
8724 specified.
8725
Willy Tarreau05cdd962014-05-10 14:30:07 +02008726 Since this timeout is usually used in conjunction with long-lived connections,
8727 it usually is a good idea to also set "timeout client-fin" to handle the
8728 situation where a client suddenly disappears from the net and does not
8729 acknowledge a close, or sends a shutdown and does not acknowledge pending
8730 data anymore. This can happen in lossy networks where firewalls are present,
8731 and is detected by the presence of large amounts of sessions in a FIN_WAIT
8732 state.
8733
Willy Tarreauce887fd2012-05-12 12:50:00 +02008734 The value is specified in milliseconds by default, but can be in any other
8735 unit if the number is suffixed by the unit, as specified at the top of this
8736 document. Whatever the expected normal idle time, it is a good practice to
8737 cover at least one or several TCP packet losses by specifying timeouts that
8738 are slightly above multiples of 3 seconds (eg: 4 or 5 seconds minimum).
8739
8740 This parameter is specific to backends, but can be specified once for all in
8741 "defaults" sections. This is in fact one of the easiest solutions not to
8742 forget about it.
8743
8744 Example :
8745 defaults http
8746 option http-server-close
8747 timeout connect 5s
8748 timeout client 30s
Willy Tarreau05cdd962014-05-10 14:30:07 +02008749 timeout client-fin 30s
Willy Tarreauce887fd2012-05-12 12:50:00 +02008750 timeout server 30s
8751 timeout tunnel 1h # timeout to use with WebSocket and CONNECT
8752
Willy Tarreau05cdd962014-05-10 14:30:07 +02008753 See also : "timeout client", "timeout client-fin", "timeout server".
Willy Tarreauce887fd2012-05-12 12:50:00 +02008754
8755
Willy Tarreau844e3c52008-01-11 16:28:18 +01008756transparent (deprecated)
8757 Enable client-side transparent proxying
8758 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau4b1f8592008-12-23 23:13:55 +01008759 yes | no | yes | yes
Willy Tarreau844e3c52008-01-11 16:28:18 +01008760 Arguments : none
8761
8762 This keyword was introduced in order to provide layer 7 persistence to layer
8763 3 load balancers. The idea is to use the OS's ability to redirect an incoming
8764 connection for a remote address to a local process (here HAProxy), and let
8765 this process know what address was initially requested. When this option is
8766 used, sessions without cookies will be forwarded to the original destination
8767 IP address of the incoming request (which should match that of another
8768 equipment), while requests with cookies will still be forwarded to the
8769 appropriate server.
8770
8771 The "transparent" keyword is deprecated, use "option transparent" instead.
8772
8773 Note that contrary to a common belief, this option does NOT make HAProxy
8774 present the client's IP to the server when establishing the connection.
8775
Willy Tarreau844e3c52008-01-11 16:28:18 +01008776 See also: "option transparent"
8777
William Lallemanda73203e2012-03-12 12:48:57 +01008778unique-id-format <string>
8779 Generate a unique ID for each request.
8780 May be used in sections : defaults | frontend | listen | backend
8781 yes | yes | yes | no
8782 Arguments :
8783 <string> is a log-format string.
8784
Cyril Bonté108cf6e2012-04-21 23:30:29 +02008785 This keyword creates a ID for each request using the custom log format. A
8786 unique ID is useful to trace a request passing through many components of
8787 a complex infrastructure. The newly created ID may also be logged using the
8788 %ID tag the log-format string.
William Lallemanda73203e2012-03-12 12:48:57 +01008789
Cyril Bonté108cf6e2012-04-21 23:30:29 +02008790 The format should be composed from elements that are guaranteed to be
8791 unique when combined together. For instance, if multiple haproxy instances
8792 are involved, it might be important to include the node name. It is often
8793 needed to log the incoming connection's source and destination addresses
8794 and ports. Note that since multiple requests may be performed over the same
8795 connection, including a request counter may help differentiate them.
8796 Similarly, a timestamp may protect against a rollover of the counter.
8797 Logging the process ID will avoid collisions after a service restart.
William Lallemanda73203e2012-03-12 12:48:57 +01008798
Cyril Bonté108cf6e2012-04-21 23:30:29 +02008799 It is recommended to use hexadecimal notation for many fields since it
8800 makes them more compact and saves space in logs.
William Lallemanda73203e2012-03-12 12:48:57 +01008801
Cyril Bonté108cf6e2012-04-21 23:30:29 +02008802 Example:
William Lallemanda73203e2012-03-12 12:48:57 +01008803
Julien Vehentf21be322014-03-07 08:27:34 -05008804 unique-id-format %{+X}o\ %ci:%cp_%fi:%fp_%Ts_%rt:%pid
William Lallemanda73203e2012-03-12 12:48:57 +01008805
8806 will generate:
8807
8808 7F000001:8296_7F00001E:1F90_4F7B0A69_0003:790A
8809
8810 See also: "unique-id-header"
8811
8812unique-id-header <name>
8813 Add a unique ID header in the HTTP request.
8814 May be used in sections : defaults | frontend | listen | backend
8815 yes | yes | yes | no
8816 Arguments :
8817 <name> is the name of the header.
8818
Cyril Bonté108cf6e2012-04-21 23:30:29 +02008819 Add a unique-id header in the HTTP request sent to the server, using the
8820 unique-id-format. It can't work if the unique-id-format doesn't exist.
William Lallemanda73203e2012-03-12 12:48:57 +01008821
Cyril Bonté108cf6e2012-04-21 23:30:29 +02008822 Example:
William Lallemanda73203e2012-03-12 12:48:57 +01008823
Julien Vehentf21be322014-03-07 08:27:34 -05008824 unique-id-format %{+X}o\ %ci:%cp_%fi:%fp_%Ts_%rt:%pid
William Lallemanda73203e2012-03-12 12:48:57 +01008825 unique-id-header X-Unique-ID
8826
8827 will generate:
8828
8829 X-Unique-ID: 7F000001:8296_7F00001E:1F90_4F7B0A69_0003:790A
8830
8831 See also: "unique-id-format"
Willy Tarreau844e3c52008-01-11 16:28:18 +01008832
Willy Tarreauf51658d2014-04-23 01:21:56 +02008833use_backend <backend> [{if | unless} <condition>]
Willy Tarreau1d0dfb12009-07-07 15:10:31 +02008834 Switch to a specific backend if/unless an ACL-based condition is matched.
Willy Tarreau844e3c52008-01-11 16:28:18 +01008835 May be used in sections : defaults | frontend | listen | backend
8836 no | yes | yes | no
8837 Arguments :
Bertrand Jacquin702d44f2013-11-19 11:43:06 +01008838 <backend> is the name of a valid backend or "listen" section, or a
8839 "log-format" string resolving to a backend name.
Willy Tarreau844e3c52008-01-11 16:28:18 +01008840
Willy Tarreauf51658d2014-04-23 01:21:56 +02008841 <condition> is a condition composed of ACLs, as described in section 7. If
8842 it is omitted, the rule is unconditionally applied.
Willy Tarreau844e3c52008-01-11 16:28:18 +01008843
8844 When doing content-switching, connections arrive on a frontend and are then
8845 dispatched to various backends depending on a number of conditions. The
8846 relation between the conditions and the backends is described with the
Willy Tarreau1d0dfb12009-07-07 15:10:31 +02008847 "use_backend" keyword. While it is normally used with HTTP processing, it can
8848 also be used in pure TCP, either without content using stateless ACLs (eg:
8849 source address validation) or combined with a "tcp-request" rule to wait for
8850 some payload.
Willy Tarreau844e3c52008-01-11 16:28:18 +01008851
8852 There may be as many "use_backend" rules as desired. All of these rules are
8853 evaluated in their declaration order, and the first one which matches will
8854 assign the backend.
8855
8856 In the first form, the backend will be used if the condition is met. In the
8857 second form, the backend will be used if the condition is not met. If no
8858 condition is valid, the backend defined with "default_backend" will be used.
8859 If no default backend is defined, either the servers in the same section are
8860 used (in case of a "listen" section) or, in case of a frontend, no server is
8861 used and a 503 service unavailable response is returned.
8862
Willy Tarreau51aecc72009-07-12 09:47:04 +02008863 Note that it is possible to switch from a TCP frontend to an HTTP backend. In
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01008864 this case, either the frontend has already checked that the protocol is HTTP,
Willy Tarreau51aecc72009-07-12 09:47:04 +02008865 and backend processing will immediately follow, or the backend will wait for
8866 a complete HTTP request to get in. This feature is useful when a frontend
8867 must decode several protocols on a unique port, one of them being HTTP.
8868
Bertrand Jacquin702d44f2013-11-19 11:43:06 +01008869 When <backend> is a simple name, it is resolved at configuration time, and an
8870 error is reported if the specified backend does not exist. If <backend> is
8871 a log-format string instead, no check may be done at configuration time, so
8872 the backend name is resolved dynamically at run time. If the resulting
8873 backend name does not correspond to any valid backend, no other rule is
8874 evaluated, and the default_backend directive is applied instead. Note that
8875 when using dynamic backend names, it is highly recommended to use a prefix
8876 that no other backend uses in order to ensure that an unauthorized backend
8877 cannot be forced from the request.
8878
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03008879 It is worth mentioning that "use_backend" rules with an explicit name are
Bertrand Jacquin702d44f2013-11-19 11:43:06 +01008880 used to detect the association between frontends and backends to compute the
8881 backend's "fullconn" setting. This cannot be done for dynamic names.
8882
8883 See also: "default_backend", "tcp-request", "fullconn", "log-format", and
8884 section 7 about ACLs.
Willy Tarreaud72758d2010-01-12 10:42:19 +01008885
Willy Tarreau036fae02008-01-06 13:24:40 +01008886
Willy Tarreau4a5cade2012-04-05 21:09:48 +02008887use-server <server> if <condition>
8888use-server <server> unless <condition>
8889 Only use a specific server if/unless an ACL-based condition is matched.
8890 May be used in sections : defaults | frontend | listen | backend
8891 no | no | yes | yes
8892 Arguments :
Cyril Bonté108cf6e2012-04-21 23:30:29 +02008893 <server> is the name of a valid server in the same backend section.
Willy Tarreau4a5cade2012-04-05 21:09:48 +02008894
8895 <condition> is a condition composed of ACLs, as described in section 7.
8896
8897 By default, connections which arrive to a backend are load-balanced across
8898 the available servers according to the configured algorithm, unless a
8899 persistence mechanism such as a cookie is used and found in the request.
8900
8901 Sometimes it is desirable to forward a particular request to a specific
8902 server without having to declare a dedicated backend for this server. This
8903 can be achieved using the "use-server" rules. These rules are evaluated after
8904 the "redirect" rules and before evaluating cookies, and they have precedence
8905 on them. There may be as many "use-server" rules as desired. All of these
8906 rules are evaluated in their declaration order, and the first one which
8907 matches will assign the server.
8908
8909 If a rule designates a server which is down, and "option persist" is not used
8910 and no force-persist rule was validated, it is ignored and evaluation goes on
8911 with the next rules until one matches.
8912
8913 In the first form, the server will be used if the condition is met. In the
8914 second form, the server will be used if the condition is not met. If no
8915 condition is valid, the processing continues and the server will be assigned
8916 according to other persistence mechanisms.
8917
8918 Note that even if a rule is matched, cookie processing is still performed but
8919 does not assign the server. This allows prefixed cookies to have their prefix
8920 stripped.
8921
8922 The "use-server" statement works both in HTTP and TCP mode. This makes it
8923 suitable for use with content-based inspection. For instance, a server could
8924 be selected in a farm according to the TLS SNI field. And if these servers
8925 have their weight set to zero, they will not be used for other traffic.
8926
8927 Example :
8928 # intercept incoming TLS requests based on the SNI field
8929 use-server www if { req_ssl_sni -i www.example.com }
8930 server www 192.168.0.1:443 weight 0
8931 use-server mail if { req_ssl_sni -i mail.example.com }
8932 server mail 192.168.0.1:587 weight 0
8933 use-server imap if { req_ssl_sni -i imap.example.com }
8934 server mail 192.168.0.1:993 weight 0
8935 # all the rest is forwarded to this server
8936 server default 192.168.0.2:443 check
8937
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03008938 See also: "use_backend", section 5 about server and section 7 about ACLs.
Willy Tarreau4a5cade2012-04-05 21:09:48 +02008939
Willy Tarreaub6205fd2012-09-24 12:27:33 +02008940
89415. Bind and Server options
8942--------------------------
8943
8944The "bind", "server" and "default-server" keywords support a number of settings
8945depending on some build options and on the system HAProxy was built on. These
8946settings generally each consist in one word sometimes followed by a value,
8947written on the same line as the "bind" or "server" line. All these options are
8948described in this section.
8949
8950
89515.1. Bind options
8952-----------------
8953
8954The "bind" keyword supports a certain number of settings which are all passed
8955as arguments on the same line. The order in which those arguments appear makes
8956no importance, provided that they appear after the bind address. All of these
8957parameters are optional. Some of them consist in a single words (booleans),
8958while other ones expect a value after them. In this case, the value must be
8959provided immediately after the setting name.
8960
8961The currently supported settings are the following ones.
8962
8963accept-proxy
8964 Enforces the use of the PROXY protocol over any connection accepted by any of
Willy Tarreau77992672014-06-14 11:06:17 +02008965 the sockets declared on the same line. Versions 1 and 2 of the PROXY protocol
8966 are supported and correctly detected. The PROXY protocol dictates the layer
Willy Tarreaub6205fd2012-09-24 12:27:33 +02008967 3/4 addresses of the incoming connection to be used everywhere an address is
8968 used, with the only exception of "tcp-request connection" rules which will
8969 only see the real connection address. Logs will reflect the addresses
8970 indicated in the protocol, unless it is violated, in which case the real
8971 address will still be used. This keyword combined with support from external
8972 components can be used as an efficient and reliable alternative to the
8973 X-Forwarded-For mechanism which is not always reliable and not even always
Willy Tarreau4f0d9192013-06-11 20:40:55 +02008974 usable. See also "tcp-request connection expect-proxy" for a finer-grained
8975 setting of which client is allowed to use the protocol.
Willy Tarreaub6205fd2012-09-24 12:27:33 +02008976
Willy Tarreauab861d32013-04-02 02:30:41 +02008977alpn <protocols>
8978 This enables the TLS ALPN extension and advertises the specified protocol
8979 list as supported on top of ALPN. The protocol list consists in a comma-
8980 delimited list of protocol names, for instance: "http/1.1,http/1.0" (without
8981 quotes). This requires that the SSL library is build with support for TLS
8982 extensions enabled (check with haproxy -vv). The ALPN extension replaces the
8983 initial NPN extension.
8984
Willy Tarreaub6205fd2012-09-24 12:27:33 +02008985backlog <backlog>
8986 Sets the socket's backlog to this value. If unspecified, the frontend's
8987 backlog is used instead, which generally defaults to the maxconn value.
8988
Emeric Brun7fb34422012-09-28 15:26:15 +02008989ecdhe <named curve>
8990 This setting is only available when support for OpenSSL was built in. It sets
Emeric Brun6924ef82013-03-06 14:08:53 +01008991 the named curve (RFC 4492) used to generate ECDH ephemeral keys. By default,
8992 used named curve is prime256v1.
Emeric Brun7fb34422012-09-28 15:26:15 +02008993
Emeric Brunfd33a262012-10-11 16:28:27 +02008994ca-file <cafile>
Emeric Brun1a073b42012-09-28 17:07:34 +02008995 This setting is only available when support for OpenSSL was built in. It
8996 designates a PEM file from which to load CA certificates used to verify
8997 client's certificate.
8998
Emeric Brunb6dc9342012-09-28 17:55:37 +02008999ca-ignore-err [all|<errorID>,...]
9000 This setting is only available when support for OpenSSL was built in.
9001 Sets a comma separated list of errorIDs to ignore during verify at depth > 0.
9002 If set to 'all', all errors are ignored. SSL handshake is not aborted if an
9003 error is ignored.
9004
Willy Tarreaub6205fd2012-09-24 12:27:33 +02009005ciphers <ciphers>
9006 This setting is only available when support for OpenSSL was built in. It sets
9007 the string describing the list of cipher algorithms ("cipher suite") that are
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009008 negotiated during the SSL/TLS handshake. The format of the string is defined
Willy Tarreaub6205fd2012-09-24 12:27:33 +02009009 in "man 1 ciphers" from OpenSSL man pages, and can be for instance a string
9010 such as "AES:ALL:!aNULL:!eNULL:+RC4:@STRENGTH" (without quotes).
9011
Emeric Brunfd33a262012-10-11 16:28:27 +02009012crl-file <crlfile>
Emeric Brun1a073b42012-09-28 17:07:34 +02009013 This setting is only available when support for OpenSSL was built in. It
9014 designates a PEM file from which to load certificate revocation list used
9015 to verify client's certificate.
9016
Willy Tarreaub6205fd2012-09-24 12:27:33 +02009017crt <cert>
Alex Davies0fbf0162013-03-02 16:04:50 +00009018 This setting is only available when support for OpenSSL was built in. It
9019 designates a PEM file containing both the required certificates and any
9020 associated private keys. This file can be built by concatenating multiple
9021 PEM files into one (e.g. cat cert.pem key.pem > combined.pem). If your CA
9022 requires an intermediate certificate, this can also be concatenated into this
9023 file.
9024
9025 If the OpenSSL used supports Diffie-Hellman, parameters present in this file
9026 are loaded.
9027
9028 If a directory name is used instead of a PEM file, then all files found in
Cyril Bonté3180f7b2015-01-25 00:16:08 +01009029 that directory will be loaded in alphabetic order unless their name ends with
Janusz Dziemidowicz2c701b52015-03-07 23:03:59 +01009030 '.issuer', '.ocsp' or '.sctl' (reserved extensions). This directive may be
9031 specified multiple times in order to load certificates from multiple files or
9032 directories. The certificates will be presented to clients who provide a
9033 valid TLS Server Name Indication field matching one of their CN or alt
9034 subjects. Wildcards are supported, where a wildcard character '*' is used
9035 instead of the first hostname component (eg: *.example.org matches
9036 www.example.org but not www.sub.example.org).
Alex Davies0fbf0162013-03-02 16:04:50 +00009037
9038 If no SNI is provided by the client or if the SSL library does not support
9039 TLS extensions, or if the client provides an SNI hostname which does not
9040 match any certificate, then the first loaded certificate will be presented.
9041 This means that when loading certificates from a directory, it is highly
Cyril Bonté3180f7b2015-01-25 00:16:08 +01009042 recommended to load the default one first as a file or to ensure that it will
9043 always be the first one in the directory.
Alex Davies0fbf0162013-03-02 16:04:50 +00009044
Emeric Brune032bfa2012-09-28 13:01:45 +02009045 Note that the same cert may be loaded multiple times without side effects.
Willy Tarreaub6205fd2012-09-24 12:27:33 +02009046
Alex Davies0fbf0162013-03-02 16:04:50 +00009047 Some CAs (such as Godaddy) offer a drop down list of server types that do not
9048 include HAProxy when obtaining a certificate. If this happens be sure to
Godbach8bf60a12014-04-21 21:42:41 +08009049 choose a webserver that the CA believes requires an intermediate CA (for
Alex Davies0fbf0162013-03-02 16:04:50 +00009050 Godaddy, selection Apache Tomcat will get the correct bundle, but many
9051 others, e.g. nginx, result in a wrong bundle that will not work for some
9052 clients).
9053
Emeric Brun4147b2e2014-06-16 18:36:30 +02009054 For each PEM file, haproxy checks for the presence of file at the same path
9055 suffixed by ".ocsp". If such file is found, support for the TLS Certificate
9056 Status Request extension (also known as "OCSP stapling") is automatically
9057 enabled. The content of this file is optional. If not empty, it must contain
9058 a valid OCSP Response in DER format. In order to be valid an OCSP Response
9059 must comply with the following rules: it has to indicate a good status,
9060 it has to be a single response for the certificate of the PEM file, and it
9061 has to be valid at the moment of addition. If these rules are not respected
9062 the OCSP Response is ignored and a warning is emitted. In order to identify
9063 which certificate an OCSP Response applies to, the issuer's certificate is
9064 necessary. If the issuer's certificate is not found in the PEM file, it will
9065 be loaded from a file at the same path as the PEM file suffixed by ".issuer"
9066 if it exists otherwise it will fail with an error.
9067
Janusz Dziemidowicz2c701b52015-03-07 23:03:59 +01009068 For each PEM file, haproxy also checks for the presence of file at the same
9069 path suffixed by ".sctl". If such file is found, support for Certificate
9070 Transparency (RFC6962) TLS extension is enabled. The file must contain a
9071 valid Signed Certificate Timestamp List, as described in RFC. File is parsed
9072 to check basic syntax, but no signatures are verified.
9073
Emeric Brunb6dc9342012-09-28 17:55:37 +02009074crt-ignore-err <errors>
Alex Davies0fbf0162013-03-02 16:04:50 +00009075 This setting is only available when support for OpenSSL was built in. Sets a
9076 comma separated list of errorIDs to ignore during verify at depth == 0. If
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009077 set to 'all', all errors are ignored. SSL handshake is not aborted if an error
Alex Davies0fbf0162013-03-02 16:04:50 +00009078 is ignored.
Emeric Brunb6dc9342012-09-28 17:55:37 +02009079
Emmanuel Hocdetfe616562013-01-22 15:31:15 +01009080crt-list <file>
9081 This setting is only available when support for OpenSSL was built in. It
Emmanuel Hocdet7c41a1b2013-05-07 20:20:06 +02009082 designates a list of PEM file with an optional list of SNI filter per
9083 certificate, with the following format for each line :
Emmanuel Hocdetfe616562013-01-22 15:31:15 +01009084
Emmanuel Hocdet7c41a1b2013-05-07 20:20:06 +02009085 <crtfile> [[!]<snifilter> ...]
Emmanuel Hocdetfe616562013-01-22 15:31:15 +01009086
Emmanuel Hocdet7c41a1b2013-05-07 20:20:06 +02009087 Wildcards are supported in the SNI filter. Negative filter are also supported,
9088 only useful in combination with a wildcard filter to exclude a particular SNI.
9089 The certificates will be presented to clients who provide a valid TLS Server
9090 Name Indication field matching one of the SNI filters. If no SNI filter is
9091 specified, the CN and alt subjects are used. This directive may be specified
9092 multiple times. See the "crt" option for more information. The default
9093 certificate is still needed to meet OpenSSL expectations. If it is not used,
9094 the 'strict-sni' option may be used.
Emmanuel Hocdetfe616562013-01-22 15:31:15 +01009095
Willy Tarreaub6205fd2012-09-24 12:27:33 +02009096defer-accept
9097 Is an optional keyword which is supported only on certain Linux kernels. It
9098 states that a connection will only be accepted once some data arrive on it,
9099 or at worst after the first retransmit. This should be used only on protocols
9100 for which the client talks first (eg: HTTP). It can slightly improve
9101 performance by ensuring that most of the request is already available when
9102 the connection is accepted. On the other hand, it will not be able to detect
9103 connections which don't talk. It is important to note that this option is
9104 broken in all kernels up to 2.6.31, as the connection is never accepted until
9105 the client talks. This can cause issues with front firewalls which would see
9106 an established connection while the proxy will only see it in SYN_RECV. This
9107 option is only supported on TCPv4/TCPv6 sockets and ignored by other ones.
9108
Emeric Brun2cb7ae52012-10-05 14:14:21 +02009109force-sslv3
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009110 This option enforces use of SSLv3 only on SSL connections instantiated from
Emeric Brun2cb7ae52012-10-05 14:14:21 +02009111 this listener. SSLv3 is generally less expensive than the TLS counterparts
Emeric Brun2c86cbf2014-10-30 15:56:50 +01009112 for high connection rates. This option is also available on global statement
9113 "ssl-default-bind-options". See also "no-tlsv*" and "no-sslv3".
Emeric Brun2cb7ae52012-10-05 14:14:21 +02009114
9115force-tlsv10
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009116 This option enforces use of TLSv1.0 only on SSL connections instantiated from
Emeric Brun2c86cbf2014-10-30 15:56:50 +01009117 this listener. This option is also available on global statement
9118 "ssl-default-bind-options". See also "no-tlsv*" and "no-sslv3".
Emeric Brun2cb7ae52012-10-05 14:14:21 +02009119
9120force-tlsv11
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009121 This option enforces use of TLSv1.1 only on SSL connections instantiated from
Emeric Brun2c86cbf2014-10-30 15:56:50 +01009122 this listener. This option is also available on global statement
9123 "ssl-default-bind-options". See also "no-tlsv*", and "no-sslv3".
Emeric Brun2cb7ae52012-10-05 14:14:21 +02009124
9125force-tlsv12
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009126 This option enforces use of TLSv1.2 only on SSL connections instantiated from
Emeric Brun2c86cbf2014-10-30 15:56:50 +01009127 this listener. This option is also available on global statement
9128 "ssl-default-bind-options". See also "no-tlsv*", and "no-sslv3".
Emeric Brun2cb7ae52012-10-05 14:14:21 +02009129
Willy Tarreaub6205fd2012-09-24 12:27:33 +02009130gid <gid>
9131 Sets the group of the UNIX sockets to the designated system gid. It can also
9132 be set by default in the global section's "unix-bind" statement. Note that
9133 some platforms simply ignore this. This setting is equivalent to the "group"
9134 setting except that the group ID is used instead of its name. This setting is
9135 ignored by non UNIX sockets.
9136
9137group <group>
9138 Sets the group of the UNIX sockets to the designated system group. It can
9139 also be set by default in the global section's "unix-bind" statement. Note
9140 that some platforms simply ignore this. This setting is equivalent to the
9141 "gid" setting except that the group name is used instead of its gid. This
9142 setting is ignored by non UNIX sockets.
9143
9144id <id>
9145 Fixes the socket ID. By default, socket IDs are automatically assigned, but
9146 sometimes it is more convenient to fix them to ease monitoring. This value
9147 must be strictly positive and unique within the listener/frontend. This
9148 option can only be used when defining only a single socket.
9149
9150interface <interface>
Lukas Tribusfce2e962013-02-12 22:13:19 +01009151 Restricts the socket to a specific interface. When specified, only packets
9152 received from that particular interface are processed by the socket. This is
9153 currently only supported on Linux. The interface must be a primary system
9154 interface, not an aliased interface. It is also possible to bind multiple
9155 frontends to the same address if they are bound to different interfaces. Note
9156 that binding to a network interface requires root privileges. This parameter
9157 is only compatible with TCPv4/TCPv6 sockets.
Willy Tarreaub6205fd2012-09-24 12:27:33 +02009158
Willy Tarreauabb175f2012-09-24 12:43:26 +02009159level <level>
9160 This setting is used with the stats sockets only to restrict the nature of
9161 the commands that can be issued on the socket. It is ignored by other
9162 sockets. <level> can be one of :
9163 - "user" is the least privileged level ; only non-sensitive stats can be
9164 read, and no change is allowed. It would make sense on systems where it
9165 is not easy to restrict access to the socket.
9166 - "operator" is the default level and fits most common uses. All data can
9167 be read, and only non-sensitive changes are permitted (eg: clear max
9168 counters).
9169 - "admin" should be used with care, as everything is permitted (eg: clear
9170 all counters).
9171
Willy Tarreaub6205fd2012-09-24 12:27:33 +02009172maxconn <maxconn>
9173 Limits the sockets to this number of concurrent connections. Extraneous
9174 connections will remain in the system's backlog until a connection is
9175 released. If unspecified, the limit will be the same as the frontend's
9176 maxconn. Note that in case of port ranges or multiple addresses, the same
9177 value will be applied to each socket. This setting enables different
9178 limitations on expensive sockets, for instance SSL entries which may easily
9179 eat all memory.
9180
9181mode <mode>
9182 Sets the octal mode used to define access permissions on the UNIX socket. It
9183 can also be set by default in the global section's "unix-bind" statement.
9184 Note that some platforms simply ignore this. This setting is ignored by non
9185 UNIX sockets.
9186
9187mss <maxseg>
9188 Sets the TCP Maximum Segment Size (MSS) value to be advertised on incoming
9189 connections. This can be used to force a lower MSS for certain specific
9190 ports, for instance for connections passing through a VPN. Note that this
9191 relies on a kernel feature which is theoretically supported under Linux but
9192 was buggy in all versions prior to 2.6.28. It may or may not work on other
9193 operating systems. It may also not change the advertised value but change the
9194 effective size of outgoing segments. The commonly advertised value for TCPv4
9195 over Ethernet networks is 1460 = 1500(MTU) - 40(IP+TCP). If this value is
9196 positive, it will be used as the advertised MSS. If it is negative, it will
9197 indicate by how much to reduce the incoming connection's advertised MSS for
9198 outgoing segments. This parameter is only compatible with TCP v4/v6 sockets.
9199
9200name <name>
9201 Sets an optional name for these sockets, which will be reported on the stats
9202 page.
9203
9204nice <nice>
9205 Sets the 'niceness' of connections initiated from the socket. Value must be
9206 in the range -1024..1024 inclusive, and defaults to zero. Positive values
9207 means that such connections are more friendly to others and easily offer
9208 their place in the scheduler. On the opposite, negative values mean that
9209 connections want to run with a higher priority than others. The difference
9210 only happens under high loads when the system is close to saturation.
9211 Negative values are appropriate for low-latency or administration services,
9212 and high values are generally recommended for CPU intensive tasks such as SSL
9213 processing or bulk transfers which are less sensible to latency. For example,
9214 it may make sense to use a positive value for an SMTP socket and a negative
9215 one for an RDP socket.
9216
Emeric Brun9b3009b2012-10-05 11:55:06 +02009217no-sslv3
Willy Tarreaub6205fd2012-09-24 12:27:33 +02009218 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009219 disables support for SSLv3 on any sockets instantiated from the listener when
Willy Tarreaub6205fd2012-09-24 12:27:33 +02009220 SSL is supported. Note that SSLv2 is forced disabled in the code and cannot
Emeric Brun2c86cbf2014-10-30 15:56:50 +01009221 be enabled using any configuration option. This option is also available on
9222 global statement "ssl-default-bind-options". See also "force-tls*",
Emeric Brun2cb7ae52012-10-05 14:14:21 +02009223 and "force-sslv3".
Willy Tarreaub6205fd2012-09-24 12:27:33 +02009224
Emeric Brun90ad8722012-10-02 14:00:59 +02009225no-tls-tickets
9226 This setting is only available when support for OpenSSL was built in. It
9227 disables the stateless session resumption (RFC 5077 TLS Ticket
9228 extension) and force to use stateful session resumption. Stateless
Emeric Brun2c86cbf2014-10-30 15:56:50 +01009229 session resumption is more expensive in CPU usage. This option is also
9230 available on global statement "ssl-default-bind-options".
Emeric Brun90ad8722012-10-02 14:00:59 +02009231
Emeric Brun9b3009b2012-10-05 11:55:06 +02009232no-tlsv10
Willy Tarreaub6205fd2012-09-24 12:27:33 +02009233 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009234 disables support for TLSv1.0 on any sockets instantiated from the listener
Emeric Brun2cb7ae52012-10-05 14:14:21 +02009235 when SSL is supported. Note that SSLv2 is forced disabled in the code and
Emeric Brun2c86cbf2014-10-30 15:56:50 +01009236 cannot be enabled using any configuration option. This option is also
9237 available on global statement "ssl-default-bind-options". See also
9238 "force-tlsv*", and "force-sslv3".
Willy Tarreaub6205fd2012-09-24 12:27:33 +02009239
Emeric Brun9b3009b2012-10-05 11:55:06 +02009240no-tlsv11
Emeric Brunf5da4932012-09-28 19:42:54 +02009241 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009242 disables support for TLSv1.1 on any sockets instantiated from the listener
Emeric Brun2cb7ae52012-10-05 14:14:21 +02009243 when SSL is supported. Note that SSLv2 is forced disabled in the code and
Emeric Brun2c86cbf2014-10-30 15:56:50 +01009244 cannot be enabled using any configuration option. This option is also
9245 available on global statement "ssl-default-bind-options". See also
9246 "force-tlsv*", and "force-sslv3".
Emeric Brunf5da4932012-09-28 19:42:54 +02009247
Emeric Brun9b3009b2012-10-05 11:55:06 +02009248no-tlsv12
Emeric Brunf5da4932012-09-28 19:42:54 +02009249 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009250 disables support for TLSv1.2 on any sockets instantiated from the listener
Emeric Brun2cb7ae52012-10-05 14:14:21 +02009251 when SSL is supported. Note that SSLv2 is forced disabled in the code and
Emeric Brun2c86cbf2014-10-30 15:56:50 +01009252 cannot be enabled using any configuration option. This option is also
9253 available on global statement "ssl-default-bind-options". See also
9254 "force-tlsv*", and "force-sslv3".
Emeric Brunf5da4932012-09-28 19:42:54 +02009255
Willy Tarreau6c9a3d52012-10-18 18:57:14 +02009256npn <protocols>
9257 This enables the NPN TLS extension and advertises the specified protocol list
9258 as supported on top of NPN. The protocol list consists in a comma-delimited
9259 list of protocol names, for instance: "http/1.1,http/1.0" (without quotes).
9260 This requires that the SSL library is build with support for TLS extensions
Willy Tarreauab861d32013-04-02 02:30:41 +02009261 enabled (check with haproxy -vv). Note that the NPN extension has been
9262 replaced with the ALPN extension (see the "alpn" keyword).
Willy Tarreau6c9a3d52012-10-18 18:57:14 +02009263
Willy Tarreau6ae1ba62014-05-07 19:01:58 +02009264process [ all | odd | even | <number 1-64>[-<number 1-64>] ]
9265 This restricts the list of processes on which this listener is allowed to
9266 run. It does not enforce any process but eliminates those which do not match.
9267 If the frontend uses a "bind-process" setting, the intersection between the
9268 two is applied. If in the end the listener is not allowed to run on any
9269 remaining process, a warning is emitted, and the listener will either run on
9270 the first process of the listener if a single process was specified, or on
9271 all of its processes if multiple processes were specified. For the unlikely
Willy Tarreauae302532014-05-07 19:22:24 +02009272 case where several ranges are needed, this directive may be repeated. The
9273 main purpose of this directive is to be used with the stats sockets and have
9274 one different socket per process. The second purpose is to have multiple bind
9275 lines sharing the same IP:port but not the same process in a listener, so
9276 that the system can distribute the incoming connections into multiple queues
9277 and allow a smoother inter-process load balancing. Currently Linux 3.9 and
9278 above is known for supporting this. See also "bind-process" and "nbproc".
Willy Tarreau6ae1ba62014-05-07 19:01:58 +02009279
Willy Tarreaub6205fd2012-09-24 12:27:33 +02009280ssl
9281 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009282 enables SSL deciphering on connections instantiated from this listener. A
Willy Tarreaub6205fd2012-09-24 12:27:33 +02009283 certificate is necessary (see "crt" above). All contents in the buffers will
9284 appear in clear text, so that ACLs and HTTP processing will only have access
9285 to deciphered contents.
9286
Emmanuel Hocdet65623372013-01-24 17:17:15 +01009287strict-sni
9288 This setting is only available when support for OpenSSL was built in. The
9289 SSL/TLS negotiation is allow only if the client provided an SNI which match
9290 a certificate. The default certificate is not used.
9291 See the "crt" option for more information.
9292
Willy Tarreau2af207a2015-02-04 00:45:58 +01009293tcp-ut <delay>
9294 Sets the TCP User Timeout for all incoming connections instanciated from this
9295 listening socket. This option is available on Linux since version 2.6.37. It
9296 allows haproxy to configure a timeout for sockets which contain data not
9297 receiving an acknoledgement for the configured delay. This is especially
9298 useful on long-lived connections experiencing long idle periods such as
9299 remote terminals or database connection pools, where the client and server
9300 timeouts must remain high to allow a long period of idle, but where it is
9301 important to detect that the client has disappeared in order to release all
9302 resources associated with its connection (and the server's session). The
9303 argument is a delay expressed in milliseconds by default. This only works
9304 for regular TCP connections, and is ignored for other protocols.
9305
Willy Tarreau1c862c52012-10-05 16:21:00 +02009306tfo
Lukas Tribus0defb902013-02-13 23:35:39 +01009307 Is an optional keyword which is supported only on Linux kernels >= 3.7. It
Willy Tarreau1c862c52012-10-05 16:21:00 +02009308 enables TCP Fast Open on the listening socket, which means that clients which
9309 support this feature will be able to send a request and receive a response
9310 during the 3-way handshake starting from second connection, thus saving one
9311 round-trip after the first connection. This only makes sense with protocols
9312 that use high connection rates and where each round trip matters. This can
9313 possibly cause issues with many firewalls which do not accept data on SYN
9314 packets, so this option should only be enabled once well tested. This option
Lukas Tribus0999f762013-04-02 16:43:24 +02009315 is only supported on TCPv4/TCPv6 sockets and ignored by other ones. You may
9316 need to build HAProxy with USE_TFO=1 if your libc doesn't define
9317 TCP_FASTOPEN.
Willy Tarreau1c862c52012-10-05 16:21:00 +02009318
Nenad Merdanovic188ad3e2015-02-27 19:56:50 +01009319tls-ticket-keys <keyfile>
9320 Sets the TLS ticket keys file to load the keys from. The keys need to be 48
9321 bytes long, encoded with base64 (ex. openssl rand -base64 48). Number of keys
9322 is specified by the TLS_TICKETS_NO build option (default 3) and at least as
9323 many keys need to be present in the file. Last TLS_TICKETS_NO keys will be
9324 used for decryption and the penultimate one for encryption. This enables easy
9325 key rotation by just appending new key to the file and reloading the process.
9326 Keys must be periodically rotated (ex. every 12h) or Perfect Forward Secrecy
9327 is compromised. It is also a good idea to keep the keys off any permanent
9328 storage such as hard drives (hint: use tmpfs and don't swap those files).
9329 Lifetime hint can be changed using tune.ssl.timeout.
9330
Willy Tarreaub6205fd2012-09-24 12:27:33 +02009331transparent
9332 Is an optional keyword which is supported only on certain Linux kernels. It
9333 indicates that the addresses will be bound even if they do not belong to the
9334 local machine, and that packets targeting any of these addresses will be
9335 intercepted just as if the addresses were locally configured. This normally
9336 requires that IP forwarding is enabled. Caution! do not use this with the
9337 default address '*', as it would redirect any traffic for the specified port.
9338 This keyword is available only when HAProxy is built with USE_LINUX_TPROXY=1.
9339 This parameter is only compatible with TCPv4 and TCPv6 sockets, depending on
9340 kernel version. Some distribution kernels include backports of the feature,
9341 so check for support with your vendor.
9342
Willy Tarreau77e3af92012-11-24 15:07:23 +01009343v4v6
9344 Is an optional keyword which is supported only on most recent systems
9345 including Linux kernels >= 2.4.21. It is used to bind a socket to both IPv4
9346 and IPv6 when it uses the default address. Doing so is sometimes necessary
9347 on systems which bind to IPv6 only by default. It has no effect on non-IPv6
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009348 sockets, and is overridden by the "v6only" option.
Willy Tarreau77e3af92012-11-24 15:07:23 +01009349
Willy Tarreau9b6700f2012-11-24 11:55:28 +01009350v6only
9351 Is an optional keyword which is supported only on most recent systems
9352 including Linux kernels >= 2.4.21. It is used to bind a socket to IPv6 only
9353 when it uses the default address. Doing so is sometimes preferred to doing it
Willy Tarreau77e3af92012-11-24 15:07:23 +01009354 system-wide as it is per-listener. It has no effect on non-IPv6 sockets and
9355 has precedence over the "v4v6" option.
Willy Tarreau9b6700f2012-11-24 11:55:28 +01009356
Willy Tarreaub6205fd2012-09-24 12:27:33 +02009357uid <uid>
9358 Sets the owner of the UNIX sockets to the designated system uid. It can also
9359 be set by default in the global section's "unix-bind" statement. Note that
9360 some platforms simply ignore this. This setting is equivalent to the "user"
9361 setting except that the user numeric ID is used instead of its name. This
9362 setting is ignored by non UNIX sockets.
9363
9364user <user>
9365 Sets the owner of the UNIX sockets to the designated system user. It can also
9366 be set by default in the global section's "unix-bind" statement. Note that
9367 some platforms simply ignore this. This setting is equivalent to the "uid"
9368 setting except that the user name is used instead of its uid. This setting is
9369 ignored by non UNIX sockets.
9370
Emeric Brun1a073b42012-09-28 17:07:34 +02009371verify [none|optional|required]
9372 This setting is only available when support for OpenSSL was built in. If set
9373 to 'none', client certificate is not requested. This is the default. In other
9374 cases, a client certificate is requested. If the client does not provide a
9375 certificate after the request and if 'verify' is set to 'required', then the
9376 handshake is aborted, while it would have succeeded if set to 'optional'. The
Emeric Brunfd33a262012-10-11 16:28:27 +02009377 certificate provided by the client is always verified using CAs from
9378 'ca-file' and optional CRLs from 'crl-file'. On verify failure the handshake
9379 is aborted, regardless of the 'verify' option, unless the error code exactly
9380 matches one of those listed with 'ca-ignore-err' or 'crt-ignore-err'.
Willy Tarreau4a5cade2012-04-05 21:09:48 +02009381
Willy Tarreaub6205fd2012-09-24 12:27:33 +020093825.2. Server and default-server options
Cyril Bontéf0c60612010-02-06 14:44:47 +01009383------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02009384
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01009385The "server" and "default-server" keywords support a certain number of settings
9386which are all passed as arguments on the server line. The order in which those
9387arguments appear does not count, and they are all optional. Some of those
9388settings are single words (booleans) while others expect one or several values
9389after them. In this case, the values must immediately follow the setting name.
9390Except default-server, all those settings must be specified after the server's
9391address if they are used:
Willy Tarreau6a06a402007-07-15 20:15:28 +02009392
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009393 server <name> <address>[:port] [settings ...]
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01009394 default-server [settings ...]
Willy Tarreau6a06a402007-07-15 20:15:28 +02009395
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009396The currently supported settings are the following ones.
Willy Tarreau0ba27502007-12-24 16:55:16 +01009397
Willy Tarreauceb4ac92012-04-28 00:41:46 +02009398addr <ipv4|ipv6>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009399 Using the "addr" parameter, it becomes possible to use a different IP address
9400 to send health-checks. On some servers, it may be desirable to dedicate an IP
9401 address to specific component able to perform complex tests which are more
9402 suitable to health-checks than the application. This parameter is ignored if
9403 the "check" parameter is not set. See also the "port" parameter.
Willy Tarreau6a06a402007-07-15 20:15:28 +02009404
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009405 Supported in default-server: No
9406
Simon Hormand60d6912013-11-25 10:46:36 +09009407agent-check
9408 Enable an auxiliary agent check which is run independently of a regular
Willy Tarreau81f5d942013-12-09 20:51:51 +01009409 health check. An agent health check is performed by making a TCP connection
9410 to the port set by the "agent-port" parameter and reading an ASCII string.
9411 The string is made of a series of words delimited by spaces, tabs or commas
9412 in any order, optionally terminated by '\r' and/or '\n', each consisting of :
Simon Hormand60d6912013-11-25 10:46:36 +09009413
Willy Tarreau81f5d942013-12-09 20:51:51 +01009414 - An ASCII representation of a positive integer percentage, e.g. "75%".
Simon Hormand60d6912013-11-25 10:46:36 +09009415 Values in this format will set the weight proportional to the initial
Willy Tarreauc5af3a62014-10-07 15:27:33 +02009416 weight of a server as configured when haproxy starts. Note that a zero
9417 weight is reported on the stats page as "DRAIN" since it has the same
9418 effect on the server (it's removed from the LB farm).
Simon Hormand60d6912013-11-25 10:46:36 +09009419
Willy Tarreau81f5d942013-12-09 20:51:51 +01009420 - The word "ready". This will turn the server's administrative state to the
9421 READY mode, thus cancelling any DRAIN or MAINT state
Simon Hormand60d6912013-11-25 10:46:36 +09009422
Willy Tarreau81f5d942013-12-09 20:51:51 +01009423 - The word "drain". This will turn the server's administrative state to the
9424 DRAIN mode, thus it will not accept any new connections other than those
9425 that are accepted via persistence.
Simon Hormand60d6912013-11-25 10:46:36 +09009426
Willy Tarreau81f5d942013-12-09 20:51:51 +01009427 - The word "maint". This will turn the server's administrative state to the
9428 MAINT mode, thus it will not accept any new connections at all, and health
9429 checks will be stopped.
Simon Hormand60d6912013-11-25 10:46:36 +09009430
Willy Tarreau81f5d942013-12-09 20:51:51 +01009431 - The words "down", "failed", or "stopped", optionally followed by a
9432 description string after a sharp ('#'). All of these mark the server's
9433 operating state as DOWN, but since the word itself is reported on the stats
9434 page, the difference allows an administrator to know if the situation was
9435 expected or not : the service may intentionally be stopped, may appear up
9436 but fail some validity tests, or may be seen as down (eg: missing process,
9437 or port not responding).
Simon Hormand60d6912013-11-25 10:46:36 +09009438
Willy Tarreau81f5d942013-12-09 20:51:51 +01009439 - The word "up" sets back the server's operating state as UP if health checks
9440 also report that the service is accessible.
Simon Hormand60d6912013-11-25 10:46:36 +09009441
Willy Tarreau81f5d942013-12-09 20:51:51 +01009442 Parameters which are not advertised by the agent are not changed. For
9443 example, an agent might be designed to monitor CPU usage and only report a
9444 relative weight and never interact with the operating status. Similarly, an
9445 agent could be designed as an end-user interface with 3 radio buttons
9446 allowing an administrator to change only the administrative state. However,
9447 it is important to consider that only the agent may revert its own actions,
9448 so if a server is set to DRAIN mode or to DOWN state using the agent, the
9449 agent must implement the other equivalent actions to bring the service into
9450 operations again.
Simon Hormand60d6912013-11-25 10:46:36 +09009451
Simon Horman2f1f9552013-11-25 10:46:37 +09009452 Failure to connect to the agent is not considered an error as connectivity
9453 is tested by the regular health check which is enabled by the "check"
Willy Tarreau81f5d942013-12-09 20:51:51 +01009454 parameter. Warning though, it is not a good idea to stop an agent after it
9455 reports "down", since only an agent reporting "up" will be able to turn the
9456 server up again. Note that the CLI on the Unix stats socket is also able to
9457 force an agent's result in order to workaround a bogus agent if needed.
Simon Horman2f1f9552013-11-25 10:46:37 +09009458
Willy Tarreau81f5d942013-12-09 20:51:51 +01009459 Requires the "agent-port" parameter to be set. See also the "agent-inter"
9460 parameter.
Simon Hormand60d6912013-11-25 10:46:36 +09009461
9462 Supported in default-server: No
9463
9464agent-inter <delay>
9465 The "agent-inter" parameter sets the interval between two agent checks
9466 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
9467
9468 Just as with every other time-based parameter, it may be entered in any
9469 other explicit unit among { us, ms, s, m, h, d }. The "agent-inter"
9470 parameter also serves as a timeout for agent checks "timeout check" is
9471 not set. In order to reduce "resonance" effects when multiple servers are
9472 hosted on the same hardware, the agent and health checks of all servers
9473 are started with a small time offset between them. It is also possible to
9474 add some random noise in the agent and health checks interval using the
9475 global "spread-checks" keyword. This makes sense for instance when a lot
9476 of backends use the same servers.
9477
9478 See also the "agent-check" and "agent-port" parameters.
9479
9480 Supported in default-server: Yes
9481
9482agent-port <port>
9483 The "agent-port" parameter sets the TCP port used for agent checks.
9484
9485 See also the "agent-check" and "agent-inter" parameters.
9486
9487 Supported in default-server: Yes
9488
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009489backup
9490 When "backup" is present on a server line, the server is only used in load
9491 balancing when all other non-backup servers are unavailable. Requests coming
9492 with a persistence cookie referencing the server will always be served
9493 though. By default, only the first operational backup server is used, unless
9494 the "allbackups" option is set in the backend. See also the "allbackups"
9495 option.
Willy Tarreau6a06a402007-07-15 20:15:28 +02009496
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009497 Supported in default-server: No
9498
Emeric Brunef42d922012-10-11 16:11:36 +02009499ca-file <cafile>
9500 This setting is only available when support for OpenSSL was built in. It
9501 designates a PEM file from which to load CA certificates used to verify
9502 server's certificate.
9503
9504 Supported in default-server: No
9505
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009506check
9507 This option enables health checks on the server. By default, a server is
Patrick Mézardb7aeec62012-01-22 16:01:22 +01009508 always considered available. If "check" is set, the server is available when
9509 accepting periodic TCP connections, to ensure that it is really able to serve
9510 requests. The default address and port to send the tests to are those of the
9511 server, and the default source is the same as the one defined in the
9512 backend. It is possible to change the address using the "addr" parameter, the
9513 port using the "port" parameter, the source address using the "source"
9514 address, and the interval and timers using the "inter", "rise" and "fall"
Simon Hormanafc47ee2013-11-25 10:46:35 +09009515 parameters. The request method is define in the backend using the "httpchk",
9516 "smtpchk", "mysql-check", "pgsql-check" and "ssl-hello-chk" options. Please
9517 refer to those options and parameters for more information.
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009518
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009519 Supported in default-server: No
9520
Willy Tarreau6c16adc2012-10-05 00:04:16 +02009521check-send-proxy
9522 This option forces emission of a PROXY protocol line with outgoing health
9523 checks, regardless of whether the server uses send-proxy or not for the
9524 normal traffic. By default, the PROXY protocol is enabled for health checks
9525 if it is already enabled for normal traffic and if no "port" nor "addr"
9526 directive is present. However, if such a directive is present, the
9527 "check-send-proxy" option needs to be used to force the use of the
9528 protocol. See also the "send-proxy" option for more information.
9529
9530 Supported in default-server: No
9531
Willy Tarreau763a95b2012-10-04 23:15:39 +02009532check-ssl
9533 This option forces encryption of all health checks over SSL, regardless of
9534 whether the server uses SSL or not for the normal traffic. This is generally
9535 used when an explicit "port" or "addr" directive is specified and SSL health
9536 checks are not inherited. It is important to understand that this option
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009537 inserts an SSL transport layer below the checks, so that a simple TCP connect
Willy Tarreau763a95b2012-10-04 23:15:39 +02009538 check becomes an SSL connect, which replaces the old ssl-hello-chk. The most
9539 common use is to send HTTPS checks by combining "httpchk" with SSL checks.
9540 All SSL settings are common to health checks and traffic (eg: ciphers).
9541 See the "ssl" option for more information.
9542
9543 Supported in default-server: No
9544
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02009545ciphers <ciphers>
9546 This option sets the string describing the list of cipher algorithms that is
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009547 is negotiated during the SSL/TLS handshake with the server. The format of the
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02009548 string is defined in "man 1 ciphers". When SSL is used to communicate with
9549 servers on the local network, it is common to see a weaker set of algorithms
9550 than what is used over the internet. Doing so reduces CPU usage on both the
9551 server and haproxy while still keeping it compatible with deployed software.
9552 Some algorithms such as RC4-SHA1 are reasonably cheap. If no security at all
9553 is needed and just connectivity, using DES can be appropriate.
9554
Willy Tarreau763a95b2012-10-04 23:15:39 +02009555 Supported in default-server: No
9556
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009557cookie <value>
9558 The "cookie" parameter sets the cookie value assigned to the server to
9559 <value>. This value will be checked in incoming requests, and the first
9560 operational server possessing the same value will be selected. In return, in
9561 cookie insertion or rewrite modes, this value will be assigned to the cookie
9562 sent to the client. There is nothing wrong in having several servers sharing
9563 the same cookie value, and it is in fact somewhat common between normal and
9564 backup servers. See also the "cookie" keyword in backend section.
9565
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009566 Supported in default-server: No
9567
Emeric Brunef42d922012-10-11 16:11:36 +02009568crl-file <crlfile>
9569 This setting is only available when support for OpenSSL was built in. It
9570 designates a PEM file from which to load certificate revocation list used
9571 to verify server's certificate.
9572
9573 Supported in default-server: No
9574
Emeric Bruna7aa3092012-10-26 12:58:00 +02009575crt <cert>
9576 This setting is only available when support for OpenSSL was built in.
9577 It designates a PEM file from which to load both a certificate and the
9578 associated private key. This file can be built by concatenating both PEM
9579 files into one. This certificate will be sent if the server send a client
9580 certificate request.
9581
9582 Supported in default-server: No
9583
Willy Tarreau96839092010-03-29 10:02:24 +02009584disabled
9585 The "disabled" keyword starts the server in the "disabled" state. That means
9586 that it is marked down in maintenance mode, and no connection other than the
9587 ones allowed by persist mode will reach it. It is very well suited to setup
9588 new servers, because normal traffic will never reach them, while it is still
9589 possible to test the service by making use of the force-persist mechanism.
9590
9591 Supported in default-server: No
9592
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009593error-limit <count>
Willy Tarreau983e01e2010-01-11 18:42:06 +01009594 If health observing is enabled, the "error-limit" parameter specifies the
9595 number of consecutive errors that triggers event selected by the "on-error"
9596 option. By default it is set to 10 consecutive errors.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01009597
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009598 Supported in default-server: Yes
9599
9600 See also the "check", "error-limit" and "on-error".
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01009601
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009602fall <count>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009603 The "fall" parameter states that a server will be considered as dead after
9604 <count> consecutive unsuccessful health checks. This value defaults to 3 if
9605 unspecified. See also the "check", "inter" and "rise" parameters.
9606
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009607 Supported in default-server: Yes
9608
Emeric Brun8694b9a2012-10-05 14:39:07 +02009609force-sslv3
9610 This option enforces use of SSLv3 only when SSL is used to communicate with
9611 the server. SSLv3 is generally less expensive than the TLS counterparts for
Emeric Brun2c86cbf2014-10-30 15:56:50 +01009612 high connection rates. This option is also available on global statement
9613 "ssl-default-server-options". See also "no-tlsv*", "no-sslv3".
Emeric Brun8694b9a2012-10-05 14:39:07 +02009614
9615 Supported in default-server: No
9616
9617force-tlsv10
9618 This option enforces use of TLSv1.0 only when SSL is used to communicate with
Emeric Brun2c86cbf2014-10-30 15:56:50 +01009619 the server. This option is also available on global statement
9620 "ssl-default-server-options". See also "no-tlsv*", "no-sslv3".
Emeric Brun8694b9a2012-10-05 14:39:07 +02009621
9622 Supported in default-server: No
9623
9624force-tlsv11
9625 This option enforces use of TLSv1.1 only when SSL is used to communicate with
Emeric Brun2c86cbf2014-10-30 15:56:50 +01009626 the server. This option is also available on global statement
9627 "ssl-default-server-options". See also "no-tlsv*", "no-sslv3".
Emeric Brun8694b9a2012-10-05 14:39:07 +02009628
9629 Supported in default-server: No
9630
9631force-tlsv12
9632 This option enforces use of TLSv1.2 only when SSL is used to communicate with
Emeric Brun2c86cbf2014-10-30 15:56:50 +01009633 the server. This option is also available on global statement
9634 "ssl-default-server-options". See also "no-tlsv*", "no-sslv3".
Emeric Brun8694b9a2012-10-05 14:39:07 +02009635
9636 Supported in default-server: No
9637
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009638id <value>
Willy Tarreau53fb4ae2009-10-04 23:04:08 +02009639 Set a persistent ID for the server. This ID must be positive and unique for
9640 the proxy. An unused ID will automatically be assigned if unset. The first
9641 assigned value will be 1. This ID is currently only returned in statistics.
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009642
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009643 Supported in default-server: No
9644
9645inter <delay>
9646fastinter <delay>
9647downinter <delay>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009648 The "inter" parameter sets the interval between two consecutive health checks
9649 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
9650 It is also possible to use "fastinter" and "downinter" to optimize delays
9651 between checks depending on the server state :
9652
9653 Server state | Interval used
9654 ---------------------------------+-----------------------------------------
9655 UP 100% (non-transitional) | "inter"
9656 ---------------------------------+-----------------------------------------
9657 Transitionally UP (going down), |
9658 Transitionally DOWN (going up), | "fastinter" if set, "inter" otherwise.
9659 or yet unchecked. |
9660 ---------------------------------+-----------------------------------------
9661 DOWN 100% (non-transitional) | "downinter" if set, "inter" otherwise.
9662 ---------------------------------+-----------------------------------------
Willy Tarreaud72758d2010-01-12 10:42:19 +01009663
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009664 Just as with every other time-based parameter, they can be entered in any
9665 other explicit unit among { us, ms, s, m, h, d }. The "inter" parameter also
9666 serves as a timeout for health checks sent to servers if "timeout check" is
9667 not set. In order to reduce "resonance" effects when multiple servers are
Simon Hormand60d6912013-11-25 10:46:36 +09009668 hosted on the same hardware, the agent and health checks of all servers
9669 are started with a small time offset between them. It is also possible to
9670 add some random noise in the agent and health checks interval using the
9671 global "spread-checks" keyword. This makes sense for instance when a lot
9672 of backends use the same servers.
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009673
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009674 Supported in default-server: Yes
9675
9676maxconn <maxconn>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009677 The "maxconn" parameter specifies the maximal number of concurrent
9678 connections that will be sent to this server. If the number of incoming
9679 concurrent requests goes higher than this value, they will be queued, waiting
9680 for a connection to be released. This parameter is very important as it can
9681 save fragile servers from going down under extreme loads. If a "minconn"
9682 parameter is specified, the limit becomes dynamic. The default value is "0"
9683 which means unlimited. See also the "minconn" and "maxqueue" parameters, and
9684 the backend's "fullconn" keyword.
9685
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009686 Supported in default-server: Yes
9687
9688maxqueue <maxqueue>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009689 The "maxqueue" parameter specifies the maximal number of connections which
9690 will wait in the queue for this server. If this limit is reached, next
9691 requests will be redispatched to other servers instead of indefinitely
9692 waiting to be served. This will break persistence but may allow people to
9693 quickly re-log in when the server they try to connect to is dying. The
9694 default value is "0" which means the queue is unlimited. See also the
9695 "maxconn" and "minconn" parameters.
9696
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009697 Supported in default-server: Yes
9698
9699minconn <minconn>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009700 When the "minconn" parameter is set, the maxconn limit becomes a dynamic
9701 limit following the backend's load. The server will always accept at least
9702 <minconn> connections, never more than <maxconn>, and the limit will be on
9703 the ramp between both values when the backend has less than <fullconn>
9704 concurrent connections. This makes it possible to limit the load on the
9705 server during normal loads, but push it further for important loads without
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01009706 overloading the server during exceptional loads. See also the "maxconn"
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009707 and "maxqueue" parameters, as well as the "fullconn" backend keyword.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01009708
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009709 Supported in default-server: Yes
9710
Willy Tarreau2a3fb1c2015-02-05 16:47:07 +01009711no-ssl-reuse
9712 This option disables SSL session reuse when SSL is used to communicate with
9713 the server. It will force the server to perform a full handshake for every
9714 new connection. It's probably only useful for benchmarking, troubleshooting,
9715 and for paranoid users.
9716
9717 Supported in default-server: No
9718
Emeric Brun9b3009b2012-10-05 11:55:06 +02009719no-sslv3
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02009720 This option disables support for SSLv3 when SSL is used to communicate with
9721 the server. Note that SSLv2 is disabled in the code and cannot be enabled
Emeric Brun8694b9a2012-10-05 14:39:07 +02009722 using any configuration option. See also "force-sslv3", "force-tlsv*".
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02009723
Willy Tarreau763a95b2012-10-04 23:15:39 +02009724 Supported in default-server: No
9725
Emeric Brunf9c5c472012-10-11 15:28:34 +02009726no-tls-tickets
9727 This setting is only available when support for OpenSSL was built in. It
9728 disables the stateless session resumption (RFC 5077 TLS Ticket
9729 extension) and force to use stateful session resumption. Stateless
Emeric Brun2c86cbf2014-10-30 15:56:50 +01009730 session resumption is more expensive in CPU usage for servers. This option
9731 is also available on global statement "ssl-default-server-options".
Emeric Brunf9c5c472012-10-11 15:28:34 +02009732
9733 Supported in default-server: No
9734
Emeric Brun9b3009b2012-10-05 11:55:06 +02009735no-tlsv10
Emeric Brun8694b9a2012-10-05 14:39:07 +02009736 This option disables support for TLSv1.0 when SSL is used to communicate with
Emeric Brunf5da4932012-09-28 19:42:54 +02009737 the server. Note that SSLv2 is disabled in the code and cannot be enabled
9738 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun2c86cbf2014-10-30 15:56:50 +01009739 often makes sense to disable it when communicating with local servers. This
9740 option is also available on global statement "ssl-default-server-options".
9741 See also "force-sslv3", "force-tlsv*".
Emeric Brunf5da4932012-09-28 19:42:54 +02009742
Willy Tarreau763a95b2012-10-04 23:15:39 +02009743 Supported in default-server: No
9744
Emeric Brun9b3009b2012-10-05 11:55:06 +02009745no-tlsv11
Emeric Brun8694b9a2012-10-05 14:39:07 +02009746 This option disables support for TLSv1.1 when SSL is used to communicate with
Emeric Brunf5da4932012-09-28 19:42:54 +02009747 the server. Note that SSLv2 is disabled in the code and cannot be enabled
9748 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun2c86cbf2014-10-30 15:56:50 +01009749 often makes sense to disable it when communicating with local servers. This
9750 option is also available on global statement "ssl-default-server-options".
9751 See also "force-sslv3", "force-tlsv*".
Emeric Brunf5da4932012-09-28 19:42:54 +02009752
Willy Tarreau763a95b2012-10-04 23:15:39 +02009753 Supported in default-server: No
9754
Emeric Brun9b3009b2012-10-05 11:55:06 +02009755no-tlsv12
Emeric Brun8694b9a2012-10-05 14:39:07 +02009756 This option disables support for TLSv1.2 when SSL is used to communicate with
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02009757 the server. Note that SSLv2 is disabled in the code and cannot be enabled
9758 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun2c86cbf2014-10-30 15:56:50 +01009759 often makes sense to disable it when communicating with local servers. This
9760 option is also available on global statement "ssl-default-server-options".
9761 See also "force-sslv3", "force-tlsv*".
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02009762
Willy Tarreau763a95b2012-10-04 23:15:39 +02009763 Supported in default-server: No
9764
Simon Hormanfa461682011-06-25 09:39:49 +09009765non-stick
9766 Never add connections allocated to this sever to a stick-table.
9767 This may be used in conjunction with backup to ensure that
9768 stick-table persistence is disabled for backup servers.
9769
Willy Tarreau763a95b2012-10-04 23:15:39 +02009770 Supported in default-server: No
9771
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01009772observe <mode>
9773 This option enables health adjusting based on observing communication with
9774 the server. By default this functionality is disabled and enabling it also
9775 requires to enable health checks. There are two supported modes: "layer4" and
9776 "layer7". In layer4 mode, only successful/unsuccessful tcp connections are
9777 significant. In layer7, which is only allowed for http proxies, responses
9778 received from server are verified, like valid/wrong http code, unparsable
Willy Tarreau150d1462012-03-10 08:19:02 +01009779 headers, a timeout, etc. Valid status codes include 100 to 499, 501 and 505.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01009780
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009781 Supported in default-server: No
9782
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01009783 See also the "check", "on-error" and "error-limit".
9784
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009785on-error <mode>
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01009786 Select what should happen when enough consecutive errors are detected.
9787 Currently, four modes are available:
9788 - fastinter: force fastinter
9789 - fail-check: simulate a failed check, also forces fastinter (default)
9790 - sudden-death: simulate a pre-fatal failed health check, one more failed
9791 check will mark a server down, forces fastinter
9792 - mark-down: mark the server immediately down and force fastinter
9793
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009794 Supported in default-server: Yes
9795
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +01009796 See also the "check", "observe" and "error-limit".
9797
Simon Hormane0d1bfb2011-06-21 14:34:58 +09009798on-marked-down <action>
9799 Modify what occurs when a server is marked down.
9800 Currently one action is available:
Justin Karnegeseb2c24a2012-05-24 15:28:52 -07009801 - shutdown-sessions: Shutdown peer sessions. When this setting is enabled,
9802 all connections to the server are immediately terminated when the server
9803 goes down. It might be used if the health check detects more complex cases
9804 than a simple connection status, and long timeouts would cause the service
9805 to remain unresponsive for too long a time. For instance, a health check
9806 might detect that a database is stuck and that there's no chance to reuse
9807 existing connections anymore. Connections killed this way are logged with
9808 a 'D' termination code (for "Down").
Simon Hormane0d1bfb2011-06-21 14:34:58 +09009809
9810 Actions are disabled by default
9811
9812 Supported in default-server: Yes
9813
Justin Karnegeseb2c24a2012-05-24 15:28:52 -07009814on-marked-up <action>
9815 Modify what occurs when a server is marked up.
9816 Currently one action is available:
9817 - shutdown-backup-sessions: Shutdown sessions on all backup servers. This is
9818 done only if the server is not in backup state and if it is not disabled
9819 (it must have an effective weight > 0). This can be used sometimes to force
9820 an active server to take all the traffic back after recovery when dealing
9821 with long sessions (eg: LDAP, SQL, ...). Doing this can cause more trouble
9822 than it tries to solve (eg: incomplete transactions), so use this feature
9823 with extreme care. Sessions killed because a server comes up are logged
9824 with an 'U' termination code (for "Up").
9825
9826 Actions are disabled by default
9827
9828 Supported in default-server: Yes
9829
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009830port <port>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009831 Using the "port" parameter, it becomes possible to use a different port to
9832 send health-checks. On some servers, it may be desirable to dedicate a port
9833 to a specific component able to perform complex tests which are more suitable
9834 to health-checks than the application. It is common to run a simple script in
9835 inetd for instance. This parameter is ignored if the "check" parameter is not
9836 set. See also the "addr" parameter.
9837
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009838 Supported in default-server: Yes
9839
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009840redir <prefix>
9841 The "redir" parameter enables the redirection mode for all GET and HEAD
9842 requests addressing this server. This means that instead of having HAProxy
9843 forward the request to the server, it will send an "HTTP 302" response with
9844 the "Location" header composed of this prefix immediately followed by the
9845 requested URI beginning at the leading '/' of the path component. That means
9846 that no trailing slash should be used after <prefix>. All invalid requests
9847 will be rejected, and all non-GET or HEAD requests will be normally served by
9848 the server. Note that since the response is completely forged, no header
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01009849 mangling nor cookie insertion is possible in the response. However, cookies in
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009850 requests are still analysed, making this solution completely usable to direct
9851 users to a remote location in case of local disaster. Main use consists in
9852 increasing bandwidth for static servers by having the clients directly
9853 connect to them. Note: never use a relative location here, it would cause a
9854 loop between the client and HAProxy!
9855
9856 Example : server srv1 192.168.1.1:80 redir http://image1.mydomain.com check
9857
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009858 Supported in default-server: No
9859
9860rise <count>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009861 The "rise" parameter states that a server will be considered as operational
9862 after <count> consecutive successful health checks. This value defaults to 2
9863 if unspecified. See also the "check", "inter" and "fall" parameters.
9864
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009865 Supported in default-server: Yes
9866
Willy Tarreau5ab04ec2011-03-20 10:32:26 +01009867send-proxy
9868 The "send-proxy" parameter enforces use of the PROXY protocol over any
9869 connection established to this server. The PROXY protocol informs the other
9870 end about the layer 3/4 addresses of the incoming connection, so that it can
9871 know the client's address or the public address it accessed to, whatever the
9872 upper layer protocol. For connections accepted by an "accept-proxy" listener,
9873 the advertised address will be used. Only TCPv4 and TCPv6 address families
9874 are supported. Other families such as Unix sockets, will report an UNKNOWN
9875 family. Servers using this option can fully be chained to another instance of
9876 haproxy listening with an "accept-proxy" setting. This setting must not be
Willy Tarreau6c16adc2012-10-05 00:04:16 +02009877 used if the server isn't aware of the protocol. When health checks are sent
9878 to the server, the PROXY protocol is automatically used when this option is
9879 set, unless there is an explicit "port" or "addr" directive, in which case an
9880 explicit "check-send-proxy" directive would also be needed to use the PROXY
9881 protocol. See also the "accept-proxy" option of the "bind" keyword.
Willy Tarreau5ab04ec2011-03-20 10:32:26 +01009882
9883 Supported in default-server: No
9884
David Safb76832014-05-08 23:42:08 -04009885send-proxy-v2
9886 The "send-proxy-v2" parameter enforces use of the PROXY protocol version 2
9887 over any connection established to this server. The PROXY protocol informs
9888 the other end about the layer 3/4 addresses of the incoming connection, so
9889 that it can know the client's address or the public address it accessed to,
9890 whatever the upper layer protocol. This setting must not be used if the
9891 server isn't aware of this version of the protocol. See also the "send-proxy"
9892 option of the "bind" keyword.
9893
9894 Supported in default-server: No
9895
9896send-proxy-v2-ssl
9897 The "send-proxy-v2-ssl" parameter enforces use of the PROXY protocol version
9898 2 over any connection established to this server. The PROXY protocol informs
9899 the other end about the layer 3/4 addresses of the incoming connection, so
9900 that it can know the client's address or the public address it accessed to,
9901 whatever the upper layer protocol. In addition, the SSL information extension
9902 of the PROXY protocol is added to the PROXY protocol header. This setting
9903 must not be used if the server isn't aware of this version of the protocol.
9904 See also the "send-proxy-v2" option of the "bind" keyword.
9905
9906 Supported in default-server: No
9907
9908send-proxy-v2-ssl-cn
9909 The "send-proxy-v2-ssl" parameter enforces use of the PROXY protocol version
9910 2 over any connection established to this server. The PROXY protocol informs
9911 the other end about the layer 3/4 addresses of the incoming connection, so
9912 that it can know the client's address or the public address it accessed to,
9913 whatever the upper layer protocol. In addition, the SSL information extension
9914 of the PROXY protocol, along along with the Common Name from the subject of
9915 the client certificate (if any), is added to the PROXY protocol header. This
9916 setting must not be used if the server isn't aware of this version of the
9917 protocol. See also the "send-proxy-v2" option of the "bind" keyword.
9918
9919 Supported in default-server: No
9920
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009921slowstart <start_time_in_ms>
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009922 The "slowstart" parameter for a server accepts a value in milliseconds which
9923 indicates after how long a server which has just come back up will run at
9924 full speed. Just as with every other time-based parameter, it can be entered
9925 in any other explicit unit among { us, ms, s, m, h, d }. The speed grows
9926 linearly from 0 to 100% during this time. The limitation applies to two
9927 parameters :
9928
9929 - maxconn: the number of connections accepted by the server will grow from 1
9930 to 100% of the usual dynamic limit defined by (minconn,maxconn,fullconn).
9931
9932 - weight: when the backend uses a dynamic weighted algorithm, the weight
9933 grows linearly from 1 to 100%. In this case, the weight is updated at every
9934 health-check. For this reason, it is important that the "inter" parameter
9935 is smaller than the "slowstart", in order to maximize the number of steps.
9936
9937 The slowstart never applies when haproxy starts, otherwise it would cause
9938 trouble to running servers. It only applies when a server has been previously
9939 seen as failed.
9940
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009941 Supported in default-server: Yes
9942
Willy Tarreauc6f4ce82009-06-10 11:09:37 +02009943source <addr>[:<pl>[-<ph>]] [usesrc { <addr2>[:<port2>] | client | clientip } ]
Willy Tarreaubce70882009-09-07 11:51:47 +02009944source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | hdr_ip(<hdr>[,<occ>]) } ]
Willy Tarreauc6f4ce82009-06-10 11:09:37 +02009945source <addr>[:<pl>[-<ph>]] [interface <name>] ...
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009946 The "source" parameter sets the source address which will be used when
9947 connecting to the server. It follows the exact same parameters and principle
9948 as the backend "source" keyword, except that it only applies to the server
9949 referencing it. Please consult the "source" keyword for details.
9950
Willy Tarreauc6f4ce82009-06-10 11:09:37 +02009951 Additionally, the "source" statement on a server line allows one to specify a
9952 source port range by indicating the lower and higher bounds delimited by a
9953 dash ('-'). Some operating systems might require a valid IP address when a
9954 source port range is specified. It is permitted to have the same IP/range for
9955 several servers. Doing so makes it possible to bypass the maximum of 64k
9956 total concurrent connections. The limit will then reach 64k connections per
9957 server.
9958
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009959 Supported in default-server: No
9960
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02009961ssl
Willy Tarreau44f65392013-06-25 07:56:20 +02009962 This option enables SSL ciphering on outgoing connections to the server. It
9963 is critical to verify server certificates using "verify" when using SSL to
9964 connect to servers, otherwise the communication is prone to trivial man in
9965 the-middle attacks rendering SSL useless. When this option is used, health
9966 checks are automatically sent in SSL too unless there is a "port" or an
9967 "addr" directive indicating the check should be sent to a different location.
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009968 See the "check-ssl" option to force SSL health checks.
Willy Tarreau763a95b2012-10-04 23:15:39 +02009969
9970 Supported in default-server: No
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02009971
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009972track [<proxy>/]<server>
Willy Tarreau32091232014-05-16 13:52:00 +02009973 This option enables ability to set the current state of the server by tracking
9974 another one. It is possible to track a server which itself tracks another
9975 server, provided that at the end of the chain, a server has health checks
9976 enabled. If <proxy> is omitted the current one is used. If disable-on-404 is
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009977 used, it has to be enabled on both proxies.
9978
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +01009979 Supported in default-server: No
9980
Emeric Brunef42d922012-10-11 16:11:36 +02009981verify [none|required]
9982 This setting is only available when support for OpenSSL was built in. If set
Emeric Brun850efd52014-01-29 12:24:34 +01009983 to 'none', server certificate is not verified. In the other case, The
9984 certificate provided by the server is verified using CAs from 'ca-file'
9985 and optional CRLs from 'crl-file'. If 'ssl_server_verify' is not specified
9986 in global section, this is the default. On verify failure the handshake
Willy Tarreau44f65392013-06-25 07:56:20 +02009987 is aborted. It is critically important to verify server certificates when
9988 using SSL to connect to servers, otherwise the communication is prone to
9989 trivial man-in-the-middle attacks rendering SSL totally useless.
Emeric Brunef42d922012-10-11 16:11:36 +02009990
9991 Supported in default-server: No
9992
Evan Broderbe554312013-06-27 00:05:25 -07009993verifyhost <hostname>
9994 This setting is only available when support for OpenSSL was built in, and
9995 only takes effect if 'verify required' is also specified. When set, the
9996 hostnames in the subject and subjectAlternateNames of the certificate
9997 provided by the server are checked. If none of the hostnames in the
9998 certificate match the specified hostname, the handshake is aborted. The
9999 hostnames in the server-provided certificate may include wildcards.
10000
10001 Supported in default-server: No
10002
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010003weight <weight>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010004 The "weight" parameter is used to adjust the server's weight relative to
10005 other servers. All servers will receive a load proportional to their weight
10006 relative to the sum of all weights, so the higher the weight, the higher the
Willy Tarreau6704d672009-06-15 10:56:05 +020010007 load. The default weight is 1, and the maximal value is 256. A value of 0
10008 means the server will not participate in load-balancing but will still accept
10009 persistent connections. If this parameter is used to distribute the load
10010 according to server's capacity, it is recommended to start with values which
10011 can both grow and shrink, for instance between 10 and 100 to leave enough
10012 room above and below for later adjustments.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010013
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010014 Supported in default-server: Yes
10015
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010016
100176. HTTP header manipulation
10018---------------------------
10019
10020In HTTP mode, it is possible to rewrite, add or delete some of the request and
10021response headers based on regular expressions. It is also possible to block a
10022request or a response if a particular header matches a regular expression,
10023which is enough to stop most elementary protocol attacks, and to protect
Willy Tarreau70dffda2014-01-30 03:07:23 +010010024against information leak from the internal network.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010025
Willy Tarreau70dffda2014-01-30 03:07:23 +010010026If HAProxy encounters an "Informational Response" (status code 1xx), it is able
10027to process all rsp* rules which can allow, deny, rewrite or delete a header,
10028but it will refuse to add a header to any such messages as this is not
10029HTTP-compliant. The reason for still processing headers in such responses is to
10030stop and/or fix any possible information leak which may happen, for instance
10031because another downstream equipment would unconditionally add a header, or if
10032a server name appears there. When such messages are seen, normal processing
10033still occurs on the next non-informational messages.
Willy Tarreau816b9792009-09-15 21:25:21 +020010034
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010035This section covers common usage of the following keywords, described in detail
10036in section 4.2 :
10037
10038 - reqadd <string>
10039 - reqallow <search>
10040 - reqiallow <search>
10041 - reqdel <search>
10042 - reqidel <search>
10043 - reqdeny <search>
10044 - reqideny <search>
10045 - reqpass <search>
10046 - reqipass <search>
10047 - reqrep <search> <replace>
10048 - reqirep <search> <replace>
10049 - reqtarpit <search>
10050 - reqitarpit <search>
10051 - rspadd <string>
10052 - rspdel <search>
10053 - rspidel <search>
10054 - rspdeny <search>
10055 - rspideny <search>
10056 - rsprep <search> <replace>
10057 - rspirep <search> <replace>
10058
10059With all these keywords, the same conventions are used. The <search> parameter
10060is a POSIX extended regular expression (regex) which supports grouping through
10061parenthesis (without the backslash). Spaces and other delimiters must be
10062prefixed with a backslash ('\') to avoid confusion with a field delimiter.
10063Other characters may be prefixed with a backslash to change their meaning :
10064
10065 \t for a tab
10066 \r for a carriage return (CR)
10067 \n for a new line (LF)
10068 \ to mark a space and differentiate it from a delimiter
10069 \# to mark a sharp and differentiate it from a comment
10070 \\ to use a backslash in a regex
10071 \\\\ to use a backslash in the text (*2 for regex, *2 for haproxy)
10072 \xXX to write the ASCII hex code XX as in the C language
10073
10074The <replace> parameter contains the string to be used to replace the largest
10075portion of text matching the regex. It can make use of the special characters
10076above, and can reference a substring which is delimited by parenthesis in the
10077regex, by writing a backslash ('\') immediately followed by one digit from 0 to
100789 indicating the group position (0 designating the entire line). This practice
10079is very common to users of the "sed" program.
10080
10081The <string> parameter represents the string which will systematically be added
10082after the last header line. It can also use special character sequences above.
10083
10084Notes related to these keywords :
10085---------------------------------
10086 - these keywords are not always convenient to allow/deny based on header
10087 contents. It is strongly recommended to use ACLs with the "block" keyword
10088 instead, resulting in far more flexible and manageable rules.
10089
10090 - lines are always considered as a whole. It is not possible to reference
10091 a header name only or a value only. This is important because of the way
10092 headers are written (notably the number of spaces after the colon).
10093
10094 - the first line is always considered as a header, which makes it possible to
10095 rewrite or filter HTTP requests URIs or response codes, but in turn makes
10096 it harder to distinguish between headers and request line. The regex prefix
10097 ^[^\ \t]*[\ \t] matches any HTTP method followed by a space, and the prefix
10098 ^[^ \t:]*: matches any header name followed by a colon.
10099
10100 - for performances reasons, the number of characters added to a request or to
10101 a response is limited at build time to values between 1 and 4 kB. This
10102 should normally be far more than enough for most usages. If it is too short
10103 on occasional usages, it is possible to gain some space by removing some
10104 useless headers before adding new ones.
10105
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010010106 - keywords beginning with "reqi" and "rspi" are the same as their counterpart
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010107 without the 'i' letter except that they ignore case when matching patterns.
10108
10109 - when a request passes through a frontend then a backend, all req* rules
10110 from the frontend will be evaluated, then all req* rules from the backend
10111 will be evaluated. The reverse path is applied to responses.
10112
10113 - req* statements are applied after "block" statements, so that "block" is
10114 always the first one, but before "use_backend" in order to permit rewriting
Willy Tarreaud72758d2010-01-12 10:42:19 +010010115 before switching.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010116
10117
Willy Tarreau74ca5042013-06-11 23:12:07 +0200101187. Using ACLs and fetching samples
10119----------------------------------
10120
10121Haproxy is capable of extracting data from request or response streams, from
10122client or server information, from tables, environmental information etc...
10123The action of extracting such data is called fetching a sample. Once retrieved,
10124these samples may be used for various purposes such as a key to a stick-table,
10125but most common usages consist in matching them against predefined constant
10126data called patterns.
10127
10128
101297.1. ACL basics
10130---------------
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010131
10132The use of Access Control Lists (ACL) provides a flexible solution to perform
10133content switching and generally to take decisions based on content extracted
10134from the request, the response or any environmental status. The principle is
10135simple :
10136
Willy Tarreau74ca5042013-06-11 23:12:07 +020010137 - extract a data sample from a stream, table or the environment
Willy Tarreaue6b11e42013-11-26 19:02:32 +010010138 - optionally apply some format conversion to the extracted sample
Willy Tarreau74ca5042013-06-11 23:12:07 +020010139 - apply one or multiple pattern matching methods on this sample
10140 - perform actions only when a pattern matches the sample
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010141
Willy Tarreau74ca5042013-06-11 23:12:07 +020010142The actions generally consist in blocking a request, selecting a backend, or
10143adding a header.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010144
10145In order to define a test, the "acl" keyword is used. The syntax is :
10146
Willy Tarreau74ca5042013-06-11 23:12:07 +020010147 acl <aclname> <criterion> [flags] [operator] [<value>] ...
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010148
10149This creates a new ACL <aclname> or completes an existing one with new tests.
10150Those tests apply to the portion of request/response specified in <criterion>
10151and may be adjusted with optional flags [flags]. Some criteria also support
Willy Tarreaue6b11e42013-11-26 19:02:32 +010010152an operator which may be specified before the set of values. Optionally some
10153conversion operators may be applied to the sample, and they will be specified
10154as a comma-delimited list of keywords just after the first keyword. The values
10155are of the type supported by the criterion, and are separated by spaces.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010156
10157ACL names must be formed from upper and lower case letters, digits, '-' (dash),
10158'_' (underscore) , '.' (dot) and ':' (colon). ACL names are case-sensitive,
10159which means that "my_acl" and "My_Acl" are two different ACLs.
10160
10161There is no enforced limit to the number of ACLs. The unused ones do not affect
10162performance, they just consume a small amount of memory.
10163
Willy Tarreau74ca5042013-06-11 23:12:07 +020010164The criterion generally is the name of a sample fetch method, or one of its ACL
10165specific declinations. The default test method is implied by the output type of
10166this sample fetch method. The ACL declinations can describe alternate matching
Willy Tarreaue6b11e42013-11-26 19:02:32 +010010167methods of a same sample fetch method. The sample fetch methods are the only
10168ones supporting a conversion.
Willy Tarreau74ca5042013-06-11 23:12:07 +020010169
10170Sample fetch methods return data which can be of the following types :
10171 - boolean
10172 - integer (signed or unsigned)
10173 - IPv4 or IPv6 address
10174 - string
10175 - data block
10176
Willy Tarreaue6b11e42013-11-26 19:02:32 +010010177Converters transform any of these data into any of these. For example, some
10178converters might convert a string to a lower-case string while other ones
10179would turn a string to an IPv4 address, or apply a netmask to an IP address.
10180The resulting sample is of the type of the last converter applied to the list,
10181which defaults to the type of the sample fetch method.
10182
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020010183Each sample or converter returns data of a specific type, specified with its
10184keyword in this documentation. When an ACL is declared using a standard sample
10185fetch method, certain types automatically involved a default matching method
10186which are summarized in the table below :
10187
10188 +---------------------+-----------------+
10189 | Sample or converter | Default |
10190 | output type | matching method |
10191 +---------------------+-----------------+
10192 | boolean | bool |
10193 +---------------------+-----------------+
10194 | integer | int |
10195 +---------------------+-----------------+
10196 | ip | ip |
10197 +---------------------+-----------------+
10198 | string | str |
10199 +---------------------+-----------------+
10200 | binary | none, use "-m" |
10201 +---------------------+-----------------+
10202
10203Note that in order to match a binary samples, it is mandatory to specify a
10204matching method, see below.
10205
Willy Tarreau74ca5042013-06-11 23:12:07 +020010206The ACL engine can match these types against patterns of the following types :
10207 - boolean
10208 - integer or integer range
10209 - IP address / network
10210 - string (exact, substring, suffix, prefix, subdir, domain)
10211 - regular expression
10212 - hex block
10213
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010214The following ACL flags are currently supported :
10215
Willy Tarreau2b5285d2010-05-09 23:45:24 +020010216 -i : ignore case during matching of all subsequent patterns.
10217 -f : load patterns from a file.
Willy Tarreau74ca5042013-06-11 23:12:07 +020010218 -m : use a specific pattern matching method
Thierry FOURNIERb7729c92014-02-11 16:24:41 +010010219 -n : forbid the DNS resolutions
Thierry FOURNIER9860c412014-01-29 14:23:29 +010010220 -M : load the file pointed by -f like a map file.
Thierry FOURNIER3534d882014-01-20 17:01:44 +010010221 -u : force the unique id of the ACL
Willy Tarreau6a06a402007-07-15 20:15:28 +020010222 -- : force end of flags. Useful when a string looks like one of the flags.
10223
Willy Tarreau74ca5042013-06-11 23:12:07 +020010224The "-f" flag is followed by the name of a file from which all lines will be
10225read as individual values. It is even possible to pass multiple "-f" arguments
10226if the patterns are to be loaded from multiple files. Empty lines as well as
10227lines beginning with a sharp ('#') will be ignored. All leading spaces and tabs
10228will be stripped. If it is absolutely necessary to insert a valid pattern
10229beginning with a sharp, just prefix it with a space so that it is not taken for
10230a comment. Depending on the data type and match method, haproxy may load the
10231lines into a binary tree, allowing very fast lookups. This is true for IPv4 and
10232exact string matching. In this case, duplicates will automatically be removed.
10233
Thierry FOURNIER9860c412014-01-29 14:23:29 +010010234The "-M" flag allows an ACL to use a map file. If this flag is set, the file is
10235parsed as two column file. The first column contains the patterns used by the
10236ACL, and the second column contain the samples. The sample can be used later by
10237a map. This can be useful in some rare cases where an ACL would just be used to
10238check for the existence of a pattern in a map before a mapping is applied.
10239
Thierry FOURNIER3534d882014-01-20 17:01:44 +010010240The "-u" flag forces the unique id of the ACL. This unique id is used with the
10241socket interface to identify ACL and dynamically change its values. Note that a
10242file is always identified by its name even if an id is set.
10243
Willy Tarreau74ca5042013-06-11 23:12:07 +020010244Also, note that the "-i" flag applies to subsequent entries and not to entries
10245loaded from files preceding it. For instance :
10246
10247 acl valid-ua hdr(user-agent) -f exact-ua.lst -i -f generic-ua.lst test
10248
10249In this example, each line of "exact-ua.lst" will be exactly matched against
10250the "user-agent" header of the request. Then each line of "generic-ua" will be
10251case-insensitively matched. Then the word "test" will be insensitively matched
10252as well.
10253
10254The "-m" flag is used to select a specific pattern matching method on the input
10255sample. All ACL-specific criteria imply a pattern matching method and generally
10256do not need this flag. However, this flag is useful with generic sample fetch
10257methods to describe how they're going to be matched against the patterns. This
10258is required for sample fetches which return data type for which there is no
10259obvious matching method (eg: string or binary). When "-m" is specified and
10260followed by a pattern matching method name, this method is used instead of the
10261default one for the criterion. This makes it possible to match contents in ways
10262that were not initially planned, or with sample fetch methods which return a
10263string. The matching method also affects the way the patterns are parsed.
10264
Thierry FOURNIERb7729c92014-02-11 16:24:41 +010010265The "-n" flag forbids the dns resolutions. It is used with the load of ip files.
10266By default, if the parser cannot parse ip address it considers that the parsed
10267string is maybe a domain name and try dns resolution. The flag "-n" disable this
10268resolution. It is useful for detecting malformed ip lists. Note that if the DNS
10269server is not reachable, the haproxy configuration parsing may last many minutes
10270waiting fir the timeout. During this time no error messages are displayed. The
10271flag "-n" disable this behavior. Note also that during the runtime, this
10272function is disabled for the dynamic acl modifications.
10273
Willy Tarreau74ca5042013-06-11 23:12:07 +020010274There are some restrictions however. Not all methods can be used with all
10275sample fetch methods. Also, if "-m" is used in conjunction with "-f", it must
10276be placed first. The pattern matching method must be one of the following :
Willy Tarreau5adeda12013-03-31 22:13:34 +020010277
10278 - "found" : only check if the requested sample could be found in the stream,
10279 but do not compare it against any pattern. It is recommended not
Willy Tarreau74ca5042013-06-11 23:12:07 +020010280 to pass any pattern to avoid confusion. This matching method is
10281 particularly useful to detect presence of certain contents such
10282 as headers, cookies, etc... even if they are empty and without
10283 comparing them to anything nor counting them.
Willy Tarreau5adeda12013-03-31 22:13:34 +020010284
10285 - "bool" : check the value as a boolean. It can only be applied to fetches
10286 which return a boolean or integer value, and takes no pattern.
Willy Tarreau74ca5042013-06-11 23:12:07 +020010287 Value zero or false does not match, all other values do match.
Willy Tarreau5adeda12013-03-31 22:13:34 +020010288
10289 - "int" : match the value as an integer. It can be used with integer and
Willy Tarreau74ca5042013-06-11 23:12:07 +020010290 boolean samples. Boolean false is integer 0, true is integer 1.
Willy Tarreau5adeda12013-03-31 22:13:34 +020010291
10292 - "ip" : match the value as an IPv4 or IPv6 address. It is compatible
Willy Tarreau74ca5042013-06-11 23:12:07 +020010293 with IP address samples only, so it is implied and never needed.
Willy Tarreau5adeda12013-03-31 22:13:34 +020010294
10295 - "bin" : match the contents against an hexadecimal string representing a
10296 binary sequence. This may be used with binary or string samples.
10297
10298 - "len" : match the sample's length as an integer. This may be used with
10299 binary or string samples.
10300
Willy Tarreau74ca5042013-06-11 23:12:07 +020010301 - "str" : exact match : match the contents against a string. This may be
10302 used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020010303
Willy Tarreau74ca5042013-06-11 23:12:07 +020010304 - "sub" : substring match : check that the contents contain at least one of
10305 the provided string patterns. This may be used with binary or
10306 string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020010307
Willy Tarreau74ca5042013-06-11 23:12:07 +020010308 - "reg" : regex match : match the contents against a list of regular
10309 expressions. This may be used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020010310
Willy Tarreau74ca5042013-06-11 23:12:07 +020010311 - "beg" : prefix match : check that the contents begin like the provided
10312 string patterns. This may be used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020010313
Willy Tarreau74ca5042013-06-11 23:12:07 +020010314 - "end" : suffix match : check that the contents end like the provided
10315 string patterns. This may be used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020010316
Willy Tarreau74ca5042013-06-11 23:12:07 +020010317 - "dir" : subdir match : check that a slash-delimited portion of the
10318 contents exactly matches one of the provided string patterns.
Willy Tarreau5adeda12013-03-31 22:13:34 +020010319 This may be used with binary or string samples.
10320
Willy Tarreau74ca5042013-06-11 23:12:07 +020010321 - "dom" : domain match : check that a dot-delimited portion of the contents
10322 exactly match one of the provided string patterns. This may be
10323 used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020010324
10325For example, to quickly detect the presence of cookie "JSESSIONID" in an HTTP
10326request, it is possible to do :
10327
10328 acl jsess_present cook(JSESSIONID) -m found
10329
10330In order to apply a regular expression on the 500 first bytes of data in the
10331buffer, one would use the following acl :
10332
10333 acl script_tag payload(0,500) -m reg -i <script>
10334
Willy Tarreaue6b11e42013-11-26 19:02:32 +010010335On systems where the regex library is much slower when using "-i", it is
10336possible to convert the sample to lowercase before matching, like this :
10337
10338 acl script_tag payload(0,500),lower -m reg <script>
10339
Willy Tarreau74ca5042013-06-11 23:12:07 +020010340All ACL-specific criteria imply a default matching method. Most often, these
10341criteria are composed by concatenating the name of the original sample fetch
10342method and the matching method. For example, "hdr_beg" applies the "beg" match
10343to samples retrieved using the "hdr" fetch method. Since all ACL-specific
10344criteria rely on a sample fetch method, it is always possible instead to use
10345the original sample fetch method and the explicit matching method using "-m".
Willy Tarreau2b5285d2010-05-09 23:45:24 +020010346
Willy Tarreau74ca5042013-06-11 23:12:07 +020010347If an alternate match is specified using "-m" on an ACL-specific criterion,
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010348the matching method is simply applied to the underlying sample fetch method.
10349For example, all ACLs below are exact equivalent :
Willy Tarreau2b5285d2010-05-09 23:45:24 +020010350
Willy Tarreau74ca5042013-06-11 23:12:07 +020010351 acl short_form hdr_beg(host) www.
10352 acl alternate1 hdr_beg(host) -m beg www.
10353 acl alternate2 hdr_dom(host) -m beg www.
10354 acl alternate3 hdr(host) -m beg www.
Willy Tarreau2b5285d2010-05-09 23:45:24 +020010355
Willy Tarreau2b5285d2010-05-09 23:45:24 +020010356
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020010357The table below summarizes the compatibility matrix between sample or converter
10358types and the pattern types to fetch against. It indicates for each compatible
10359combination the name of the matching method to be used, surrounded with angle
10360brackets ">" and "<" when the method is the default one and will work by
10361default without "-m".
Willy Tarreau0ba27502007-12-24 16:55:16 +010010362
Willy Tarreau74ca5042013-06-11 23:12:07 +020010363 +-------------------------------------------------+
10364 | Input sample type |
10365 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020010366 | pattern type | boolean | integer | ip | string | binary |
Willy Tarreau74ca5042013-06-11 23:12:07 +020010367 +----------------------+---------+---------+---------+---------+---------+
10368 | none (presence only) | found | found | found | found | found |
10369 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020010370 | none (boolean value) |> bool <| bool | | bool | |
Willy Tarreau74ca5042013-06-11 23:12:07 +020010371 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020010372 | integer (value) | int |> int <| int | int | |
Willy Tarreau74ca5042013-06-11 23:12:07 +020010373 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010010374 | integer (length) | len | len | len | len | len |
Willy Tarreau74ca5042013-06-11 23:12:07 +020010375 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020010376 | IP address | | |> ip <| ip | ip |
Willy Tarreau74ca5042013-06-11 23:12:07 +020010377 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020010378 | exact string | str | str | str |> str <| str |
Willy Tarreau74ca5042013-06-11 23:12:07 +020010379 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010010380 | prefix | beg | beg | beg | beg | beg |
Willy Tarreau74ca5042013-06-11 23:12:07 +020010381 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010010382 | suffix | end | end | end | end | end |
Willy Tarreau74ca5042013-06-11 23:12:07 +020010383 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010010384 | substring | sub | sub | sub | sub | sub |
Willy Tarreau74ca5042013-06-11 23:12:07 +020010385 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010010386 | subdir | dir | dir | dir | dir | dir |
Willy Tarreau74ca5042013-06-11 23:12:07 +020010387 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010010388 | domain | dom | dom | dom | dom | dom |
Willy Tarreau74ca5042013-06-11 23:12:07 +020010389 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010010390 | regex | reg | reg | reg | reg | reg |
Willy Tarreau74ca5042013-06-11 23:12:07 +020010391 +----------------------+---------+---------+---------+---------+---------+
10392 | hex block | | | | bin | bin |
10393 +----------------------+---------+---------+---------+---------+---------+
Willy Tarreau6a06a402007-07-15 20:15:28 +020010394
10395
Willy Tarreau74ca5042013-06-11 23:12:07 +0200103967.1.1. Matching booleans
10397------------------------
10398
10399In order to match a boolean, no value is needed and all values are ignored.
10400Boolean matching is used by default for all fetch methods of type "boolean".
10401When boolean matching is used, the fetched value is returned as-is, which means
10402that a boolean "true" will always match and a boolean "false" will never match.
10403
10404Boolean matching may also be enforced using "-m bool" on fetch methods which
10405return an integer value. Then, integer value 0 is converted to the boolean
10406"false" and all other values are converted to "true".
10407
Willy Tarreau6a06a402007-07-15 20:15:28 +020010408
Willy Tarreau74ca5042013-06-11 23:12:07 +0200104097.1.2. Matching integers
10410------------------------
10411
10412Integer matching applies by default to integer fetch methods. It can also be
10413enforced on boolean fetches using "-m int". In this case, "false" is converted
10414to the integer 0, and "true" is converted to the integer 1.
10415
10416Integer matching also supports integer ranges and operators. Note that integer
10417matching only applies to positive values. A range is a value expressed with a
10418lower and an upper bound separated with a colon, both of which may be omitted.
Willy Tarreau6a06a402007-07-15 20:15:28 +020010419
10420For instance, "1024:65535" is a valid range to represent a range of
10421unprivileged ports, and "1024:" would also work. "0:1023" is a valid
10422representation of privileged ports, and ":1023" would also work.
10423
Willy Tarreau62644772008-07-16 18:36:06 +020010424As a special case, some ACL functions support decimal numbers which are in fact
10425two integers separated by a dot. This is used with some version checks for
10426instance. All integer properties apply to those decimal numbers, including
10427ranges and operators.
10428
Willy Tarreau6a06a402007-07-15 20:15:28 +020010429For an easier usage, comparison operators are also supported. Note that using
Willy Tarreau0ba27502007-12-24 16:55:16 +010010430operators with ranges does not make much sense and is strongly discouraged.
10431Similarly, it does not make much sense to perform order comparisons with a set
10432of values.
Willy Tarreau6a06a402007-07-15 20:15:28 +020010433
Willy Tarreau0ba27502007-12-24 16:55:16 +010010434Available operators for integer matching are :
Willy Tarreau6a06a402007-07-15 20:15:28 +020010435
10436 eq : true if the tested value equals at least one value
10437 ge : true if the tested value is greater than or equal to at least one value
10438 gt : true if the tested value is greater than at least one value
10439 le : true if the tested value is less than or equal to at least one value
10440 lt : true if the tested value is less than at least one value
10441
Willy Tarreau0ba27502007-12-24 16:55:16 +010010442For instance, the following ACL matches any negative Content-Length header :
Willy Tarreau6a06a402007-07-15 20:15:28 +020010443
10444 acl negative-length hdr_val(content-length) lt 0
10445
Willy Tarreau62644772008-07-16 18:36:06 +020010446This one matches SSL versions between 3.0 and 3.1 (inclusive) :
10447
10448 acl sslv3 req_ssl_ver 3:3.1
10449
Willy Tarreau6a06a402007-07-15 20:15:28 +020010450
Willy Tarreau74ca5042013-06-11 23:12:07 +0200104517.1.3. Matching strings
10452-----------------------
10453
10454String matching applies to string or binary fetch methods, and exists in 6
10455different forms :
10456
10457 - exact match (-m str) : the extracted string must exactly match the
10458 patterns ;
10459
10460 - substring match (-m sub) : the patterns are looked up inside the
10461 extracted string, and the ACL matches if any of them is found inside ;
10462
10463 - prefix match (-m beg) : the patterns are compared with the beginning of
10464 the extracted string, and the ACL matches if any of them matches.
10465
10466 - suffix match (-m end) : the patterns are compared with the end of the
10467 extracted string, and the ACL matches if any of them matches.
10468
10469 - subdir match (-m sub) : the patterns are looked up inside the extracted
10470 string, delimited with slashes ("/"), and the ACL matches if any of them
10471 matches.
10472
10473 - domain match (-m dom) : the patterns are looked up inside the extracted
10474 string, delimited with dots ("."), and the ACL matches if any of them
10475 matches.
Willy Tarreau6a06a402007-07-15 20:15:28 +020010476
10477String matching applies to verbatim strings as they are passed, with the
10478exception of the backslash ("\") which makes it possible to escape some
10479characters such as the space. If the "-i" flag is passed before the first
10480string, then the matching will be performed ignoring the case. In order
10481to match the string "-i", either set it second, or pass the "--" flag
Willy Tarreau0ba27502007-12-24 16:55:16 +010010482before the first string. Same applies of course to match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +020010483
10484
Willy Tarreau74ca5042013-06-11 23:12:07 +0200104857.1.4. Matching regular expressions (regexes)
10486---------------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +020010487
10488Just like with string matching, regex matching applies to verbatim strings as
10489they are passed, with the exception of the backslash ("\") which makes it
10490possible to escape some characters such as the space. If the "-i" flag is
10491passed before the first regex, then the matching will be performed ignoring
10492the case. In order to match the string "-i", either set it second, or pass
Willy Tarreau0ba27502007-12-24 16:55:16 +010010493the "--" flag before the first string. Same principle applies of course to
10494match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +020010495
10496
Willy Tarreau74ca5042013-06-11 23:12:07 +0200104977.1.5. Matching arbitrary data blocks
10498-------------------------------------
10499
10500It is possible to match some extracted samples against a binary block which may
10501not safely be represented as a string. For this, the patterns must be passed as
10502a series of hexadecimal digits in an even number, when the match method is set
10503to binary. Each sequence of two digits will represent a byte. The hexadecimal
10504digits may be used upper or lower case.
10505
10506Example :
10507 # match "Hello\n" in the input stream (\x48 \x65 \x6c \x6c \x6f \x0a)
10508 acl hello payload(0,6) -m bin 48656c6c6f0a
10509
10510
105117.1.6. Matching IPv4 and IPv6 addresses
10512---------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +020010513
10514IPv4 addresses values can be specified either as plain addresses or with a
10515netmask appended, in which case the IPv4 address matches whenever it is
10516within the network. Plain addresses may also be replaced with a resolvable
Willy Tarreaud2a4aa22008-01-31 15:28:22 +010010517host name, but this practice is generally discouraged as it makes it more
Willy Tarreau0ba27502007-12-24 16:55:16 +010010518difficult to read and debug configurations. If hostnames are used, you should
10519at least ensure that they are present in /etc/hosts so that the configuration
10520does not depend on any random DNS match at the moment the configuration is
10521parsed.
Willy Tarreau6a06a402007-07-15 20:15:28 +020010522
Willy Tarreauceb4ac92012-04-28 00:41:46 +020010523IPv6 may be entered in their usual form, with or without a netmask appended.
10524Only bit counts are accepted for IPv6 netmasks. In order to avoid any risk of
10525trouble with randomly resolved IP addresses, host names are never allowed in
10526IPv6 patterns.
10527
10528HAProxy is also able to match IPv4 addresses with IPv6 addresses in the
10529following situations :
10530 - tested address is IPv4, pattern address is IPv4, the match applies
10531 in IPv4 using the supplied mask if any.
10532 - tested address is IPv6, pattern address is IPv6, the match applies
10533 in IPv6 using the supplied mask if any.
10534 - tested address is IPv6, pattern address is IPv4, the match applies in IPv4
10535 using the pattern's mask if the IPv6 address matches with 2002:IPV4::,
10536 ::IPV4 or ::ffff:IPV4, otherwise it fails.
10537 - tested address is IPv4, pattern address is IPv6, the IPv4 address is first
10538 converted to IPv6 by prefixing ::ffff: in front of it, then the match is
10539 applied in IPv6 using the supplied IPv6 mask.
10540
Willy Tarreau74ca5042013-06-11 23:12:07 +020010541
105427.2. Using ACLs to form conditions
10543----------------------------------
10544
10545Some actions are only performed upon a valid condition. A condition is a
10546combination of ACLs with operators. 3 operators are supported :
10547
10548 - AND (implicit)
10549 - OR (explicit with the "or" keyword or the "||" operator)
10550 - Negation with the exclamation mark ("!")
Willy Tarreau6a06a402007-07-15 20:15:28 +020010551
Willy Tarreau74ca5042013-06-11 23:12:07 +020010552A condition is formed as a disjunctive form:
Willy Tarreau6a06a402007-07-15 20:15:28 +020010553
Willy Tarreau74ca5042013-06-11 23:12:07 +020010554 [!]acl1 [!]acl2 ... [!]acln { or [!]acl1 [!]acl2 ... [!]acln } ...
Willy Tarreaubef91e72013-03-31 23:14:46 +020010555
Willy Tarreau74ca5042013-06-11 23:12:07 +020010556Such conditions are generally used after an "if" or "unless" statement,
10557indicating when the condition will trigger the action.
Willy Tarreaubef91e72013-03-31 23:14:46 +020010558
Willy Tarreau74ca5042013-06-11 23:12:07 +020010559For instance, to block HTTP requests to the "*" URL with methods other than
10560"OPTIONS", as well as POST requests without content-length, and GET or HEAD
10561requests with a content-length greater than 0, and finally every request which
10562is not either GET/HEAD/POST/OPTIONS !
10563
10564 acl missing_cl hdr_cnt(Content-length) eq 0
10565 block if HTTP_URL_STAR !METH_OPTIONS || METH_POST missing_cl
10566 block if METH_GET HTTP_CONTENT
10567 block unless METH_GET or METH_POST or METH_OPTIONS
10568
10569To select a different backend for requests to static contents on the "www" site
10570and to every request on the "img", "video", "download" and "ftp" hosts :
10571
10572 acl url_static path_beg /static /images /img /css
10573 acl url_static path_end .gif .png .jpg .css .js
10574 acl host_www hdr_beg(host) -i www
10575 acl host_static hdr_beg(host) -i img. video. download. ftp.
10576
10577 # now use backend "static" for all static-only hosts, and for static urls
10578 # of host "www". Use backend "www" for the rest.
10579 use_backend static if host_static or host_www url_static
10580 use_backend www if host_www
10581
10582It is also possible to form rules using "anonymous ACLs". Those are unnamed ACL
10583expressions that are built on the fly without needing to be declared. They must
10584be enclosed between braces, with a space before and after each brace (because
10585the braces must be seen as independent words). Example :
10586
10587 The following rule :
10588
10589 acl missing_cl hdr_cnt(Content-length) eq 0
10590 block if METH_POST missing_cl
10591
10592 Can also be written that way :
10593
10594 block if METH_POST { hdr_cnt(Content-length) eq 0 }
10595
10596It is generally not recommended to use this construct because it's a lot easier
10597to leave errors in the configuration when written that way. However, for very
10598simple rules matching only one source IP address for instance, it can make more
10599sense to use them than to declare ACLs with random names. Another example of
10600good use is the following :
10601
10602 With named ACLs :
10603
10604 acl site_dead nbsrv(dynamic) lt 2
10605 acl site_dead nbsrv(static) lt 2
10606 monitor fail if site_dead
10607
10608 With anonymous ACLs :
10609
10610 monitor fail if { nbsrv(dynamic) lt 2 } || { nbsrv(static) lt 2 }
10611
10612See section 4.2 for detailed help on the "block" and "use_backend" keywords.
10613
10614
106157.3. Fetching samples
10616---------------------
10617
10618Historically, sample fetch methods were only used to retrieve data to match
10619against patterns using ACLs. With the arrival of stick-tables, a new class of
10620sample fetch methods was created, most often sharing the same syntax as their
10621ACL counterpart. These sample fetch methods are also known as "fetches". As
10622of now, ACLs and fetches have converged. All ACL fetch methods have been made
10623available as fetch methods, and ACLs may use any sample fetch method as well.
10624
10625This section details all available sample fetch methods and their output type.
10626Some sample fetch methods have deprecated aliases that are used to maintain
10627compatibility with existing configurations. They are then explicitly marked as
10628deprecated and should not be used in new setups.
10629
10630The ACL derivatives are also indicated when available, with their respective
10631matching methods. These ones all have a well defined default pattern matching
10632method, so it is never necessary (though allowed) to pass the "-m" option to
10633indicate how the sample will be matched using ACLs.
10634
10635As indicated in the sample type versus matching compatibility matrix above,
10636when using a generic sample fetch method in an ACL, the "-m" option is
10637mandatory unless the sample type is one of boolean, integer, IPv4 or IPv6. When
10638the same keyword exists as an ACL keyword and as a standard fetch method, the
10639ACL engine will automatically pick the ACL-only one by default.
10640
10641Some of these keywords support one or multiple mandatory arguments, and one or
10642multiple optional arguments. These arguments are strongly typed and are checked
10643when the configuration is parsed so that there is no risk of running with an
10644incorrect argument (eg: an unresolved backend name). Fetch function arguments
10645are passed between parenthesis and are delimited by commas. When an argument
10646is optional, it will be indicated below between square brackets ('[ ]'). When
10647all arguments are optional, the parenthesis may be omitted.
10648
10649Thus, the syntax of a standard sample fetch method is one of the following :
10650 - name
10651 - name(arg1)
10652 - name(arg1,arg2)
10653
Thierry FOURNIER060762e2014-04-23 13:29:15 +020010654
106557.3.1. Converters
10656-----------------
10657
Willy Tarreaue6b11e42013-11-26 19:02:32 +010010658Sample fetch methods may be combined with transformations to be applied on top
10659of the fetched sample (also called "converters"). These combinations form what
10660is called "sample expressions" and the result is a "sample". Initially this
10661was only supported by "stick on" and "stick store-request" directives but this
10662has now be extended to all places where samples may be used (acls, log-format,
10663unique-id-format, add-header, ...).
10664
10665These transformations are enumerated as a series of specific keywords after the
10666sample fetch method. These keywords may equally be appended immediately after
10667the fetch keyword's argument, delimited by a comma. These keywords can also
10668support some arguments (eg: a netmask) which must be passed in parenthesis.
Willy Tarreau0ba27502007-12-24 16:55:16 +010010669
Willy Tarreau97707872015-01-27 15:12:13 +010010670A certain category of converters are bitwise and arithmetic operators which
10671support performing basic operations on integers. Some bitwise operations are
10672supported (and, or, xor, cpl) and some arithmetic operations are supported
10673(add, sub, mul, div, mod, neg). Some comparators are provided (odd, even, not,
10674bool) which make it possible to report a match without having to write an ACL.
10675
Willy Tarreau74ca5042013-06-11 23:12:07 +020010676The currently available list of transformation keywords include :
Willy Tarreau0ba27502007-12-24 16:55:16 +010010677
Willy Tarreau97707872015-01-27 15:12:13 +010010678add(<value>)
10679 Adds <value> to the input value of type unsigned integer, and returns the
10680 result as an unsigned integer.
10681
10682and(<value>)
10683 Performs a bitwise "AND" between <value> and the input value of type unsigned
10684 integer, and returns the result as an unsigned integer.
10685
Emeric Brun53d1a982014-04-30 18:21:37 +020010686base64
10687 Converts a binary input sample to a base64 string. It is used to log or
10688 transfer binary content in a way that can be reliably transferred (eg:
10689 an SSL ID can be copied in a header).
10690
Willy Tarreau97707872015-01-27 15:12:13 +010010691bool
10692 Returns a boolean TRUE if the input value of type unsigned integer is
10693 non-null, otherwise returns FALSE. Used in conjunction with and(), it can be
10694 used to report true/false for bit testing on input values (eg: verify the
10695 presence of a flag).
10696
Emeric Brun54c4ac82014-11-03 15:32:43 +010010697bytes(<offset>[,<length>])
10698 Extracts some bytes from an input binary sample. The result is a binary
10699 sample starting at an offset (in bytes) of the original sample and
10700 optionnaly truncated at the given length.
10701
Willy Tarreau97707872015-01-27 15:12:13 +010010702cpl
10703 Takes the input value of type unsigned integer, applies a twos-complement
10704 (flips all bits) and returns the result as an unsigned integer.
10705
Willy Tarreau80599772015-01-20 19:35:24 +010010706crc32([<avalanche>])
10707 Hashes a binary input sample into an unsigned 32-bit quantity using the CRC32
10708 hash function. Optionally, it is possible to apply a full avalanche hash
10709 function to the output if the optional <avalanche> argument equals 1. This
10710 converter uses the same functions as used by the various hash-based load
10711 balancing algorithms, so it will provide exactly the same results. It is
10712 provided for compatibility with other software which want a CRC32 to be
10713 computed on some input keys, so it follows the most common implementation as
10714 found in Ethernet, Gzip, PNG, etc... It is slower than the other algorithms
10715 but may provide a better or at least less predictable distribution. It must
10716 not be used for security purposes as a 32-bit hash is trivial to break. See
10717 also "djb2", "sdbm", "wt6" and the "hash-type" directive.
10718
Willy Tarreau97707872015-01-27 15:12:13 +010010719div(<value>)
10720 Divides the input value of type unsigned integer by <value>, and returns the
10721 result as an unsigned integer. If <value> is null, the largest unsigned
10722 integer is returned (typically 2^32-1).
10723
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020010724djb2([<avalanche>])
10725 Hashes a binary input sample into an unsigned 32-bit quantity using the DJB2
10726 hash function. Optionally, it is possible to apply a full avalanche hash
10727 function to the output if the optional <avalanche> argument equals 1. This
10728 converter uses the same functions as used by the various hash-based load
10729 balancing algorithms, so it will provide exactly the same results. It is
10730 mostly intended for debugging, but can be used as a stick-table entry to
10731 collect rough statistics. It must not be used for security purposes as a
Willy Tarreau80599772015-01-20 19:35:24 +010010732 32-bit hash is trivial to break. See also "crc32", "sdbm", "wt6" and the
10733 "hash-type" directive.
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020010734
Willy Tarreau97707872015-01-27 15:12:13 +010010735even
10736 Returns a boolean TRUE if the input value of type unsigned integer is even
10737 otherwise returns FALSE. It is functionally equivalent to "not,and(1),bool".
10738
Emeric Brunf399b0d2014-11-03 17:07:03 +010010739field(<index>,<delimiters>)
10740 Extracts the substring at the given index considering given delimiters from
10741 an input string. Indexes start at 1 and delimiters are a string formatted
10742 list of chars.
10743
Thierry FOURNIER060762e2014-04-23 13:29:15 +020010744hex
10745 Converts a binary input sample to an hex string containing two hex digits per
10746 input byte. It is used to log or transfer hex dumps of some binary input data
10747 in a way that can be reliably transferred (eg: an SSL ID can be copied in a
10748 header).
Thierry FOURNIER2f49d6d2014-03-12 15:01:52 +010010749
Thierry FOURNIER060762e2014-04-23 13:29:15 +020010750http_date([<offset>])
10751 Converts an integer supposed to contain a date since epoch to a string
10752 representing this date in a format suitable for use in HTTP header fields. If
10753 an offset value is specified, then it is a number of seconds that is added to
10754 the date before the conversion is operated. This is particularly useful to
10755 emit Date header fields, Expires values in responses when combined with a
10756 positive offset, or Last-Modified values when the offset is negative.
Willy Tarreau74ca5042013-06-11 23:12:07 +020010757
Willy Tarreaud9f316a2014-07-10 14:03:38 +020010758in_table(<table>)
10759 Uses the string representation of the input sample to perform a look up in
10760 the specified table. If the key is not found in the table, a boolean false
10761 is returned. Otherwise a boolean true is returned. This can be used to verify
10762 the presence of a certain key in a table tracking some elements (eg: whether
10763 or not a source IP address or an Authorization header was already seen).
10764
Willy Tarreauffcb2e42014-07-10 16:29:08 +020010765ipmask(<mask>)
10766 Apply a mask to an IPv4 address, and use the result for lookups and storage.
10767 This can be used to make all hosts within a certain mask to share the same
10768 table entries and as such use the same server. The mask can be passed in
10769 dotted form (eg: 255.255.255.0) or in CIDR form (eg: 24).
10770
Thierry FOURNIER317e1c42014-08-12 10:20:47 +020010771json([<input-code>])
10772 Escapes the input string and produces an ASCII ouput string ready to use as a
10773 JSON string. The converter tries to decode the input string according to the
10774 <input-code> parameter. It can be "ascii", "utf8", "utf8s", "utf8"" or
10775 "utf8ps". The "ascii" decoder never fails. The "utf8" decoder detects 3 types
10776 of errors:
10777 - bad UTF-8 sequence (lone continuation byte, bad number of continuation
10778 bytes, ...)
10779 - invalid range (the decoded value is within a UTF-8 prohibited range),
10780 - code overlong (the value is encoded with more bytes than necessary).
10781
10782 The UTF-8 JSON encoding can produce a "too long value" error when the UTF-8
10783 character is greater than 0xffff because the JSON string escape specification
10784 only authorizes 4 hex digits for the value encoding. The UTF-8 decoder exists
10785 in 4 variants designated by a combination of two suffix letters : "p" for
10786 "permissive" and "s" for "silently ignore". The behaviors of the decoders
10787 are :
10788 - "ascii" : never fails ;
10789 - "utf8" : fails on any detected errors ;
10790 - "utf8s" : never fails, but removes characters corresponding to errors ;
10791 - "utf8p" : accepts and fixes the overlong errors, but fails on any other
10792 error ;
10793 - "utf8ps" : never fails, accepts and fixes the overlong errors, but removes
10794 characters corresponding to the other errors.
10795
10796 This converter is particularly useful for building properly escaped JSON for
10797 logging to servers which consume JSON-formated traffic logs.
10798
10799 Example:
10800 capture request header user-agent len 150
10801 capture request header Host len 15
10802 log-format {"ip":"%[src]","user-agent":"%[capture.req.hdr(1),json]"}
10803
10804 Input request from client 127.0.0.1:
10805 GET / HTTP/1.0
10806 User-Agent: Very "Ugly" UA 1/2
10807
10808 Output log:
10809 {"ip":"127.0.0.1","user-agent":"Very \"Ugly\" UA 1\/2"}
10810
Thierry FOURNIER060762e2014-04-23 13:29:15 +020010811language(<value>[,<default>])
10812 Returns the value with the highest q-factor from a list as extracted from the
10813 "accept-language" header using "req.fhdr". Values with no q-factor have a
10814 q-factor of 1. Values with a q-factor of 0 are dropped. Only values which
10815 belong to the list of semi-colon delimited <values> will be considered. The
10816 argument <value> syntax is "lang[;lang[;lang[;...]]]". If no value matches the
10817 given list and a default value is provided, it is returned. Note that language
10818 names may have a variant after a dash ('-'). If this variant is present in the
10819 list, it will be matched, but if it is not, only the base language is checked.
10820 The match is case-sensitive, and the output string is always one of those
10821 provided in arguments. The ordering of arguments is meaningless, only the
10822 ordering of the values in the request counts, as the first value among
10823 multiple sharing the same q-factor is used.
Thierry FOURNIERad903512014-04-11 17:51:01 +020010824
Thierry FOURNIER060762e2014-04-23 13:29:15 +020010825 Example :
Thierry FOURNIERad903512014-04-11 17:51:01 +020010826
Thierry FOURNIER060762e2014-04-23 13:29:15 +020010827 # this configuration switches to the backend matching a
10828 # given language based on the request :
Thierry FOURNIERad903512014-04-11 17:51:01 +020010829
Thierry FOURNIER060762e2014-04-23 13:29:15 +020010830 acl es req.fhdr(accept-language),language(es;fr;en) -m str es
10831 acl fr req.fhdr(accept-language),language(es;fr;en) -m str fr
10832 acl en req.fhdr(accept-language),language(es;fr;en) -m str en
10833 use_backend spanish if es
10834 use_backend french if fr
10835 use_backend english if en
10836 default_backend choose_your_language
Thierry FOURNIERad903512014-04-11 17:51:01 +020010837
Willy Tarreauffcb2e42014-07-10 16:29:08 +020010838lower
10839 Convert a string sample to lower case. This can only be placed after a string
10840 sample fetch function or after a transformation keyword returning a string
10841 type. The result is of type string.
10842
Willy Tarreau0dbfdba2014-07-10 16:37:47 +020010843ltime(<format>[,<offset>])
10844 Converts an integer supposed to contain a date since epoch to a string
10845 representing this date in local time using a format defined by the <format>
10846 string using strftime(3). The purpose is to allow any date format to be used
10847 in logs. An optional <offset> in seconds may be applied to the input date
10848 (positive or negative). See the strftime() man page for the format supported
10849 by your operating system. See also the utime converter.
10850
10851 Example :
10852
10853 # Emit two colons, one with the local time and another with ip:port
10854 # Eg: 20140710162350 127.0.0.1:57325
10855 log-format %[date,ltime(%Y%m%d%H%M%S)]\ %ci:%cp
10856
Thierry FOURNIER060762e2014-04-23 13:29:15 +020010857map(<map_file>[,<default_value>])
10858map_<match_type>(<map_file>[,<default_value>])
10859map_<match_type>_<output_type>(<map_file>[,<default_value>])
10860 Search the input value from <map_file> using the <match_type> matching method,
10861 and return the associated value converted to the type <output_type>. If the
10862 input value cannot be found in the <map_file>, the converter returns the
10863 <default_value>. If the <default_value> is not set, the converter fails and
10864 acts as if no input value could be fetched. If the <match_type> is not set, it
10865 defaults to "str". Likewise, if the <output_type> is not set, it defaults to
10866 "str". For convenience, the "map" keyword is an alias for "map_str" and maps a
10867 string to another string.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010010868
Thierry FOURNIER060762e2014-04-23 13:29:15 +020010869 It is important to avoid overlapping between the keys : IP addresses and
10870 strings are stored in trees, so the first of the finest match will be used.
10871 Other keys are stored in lists, so the first matching occurrence will be used.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010010872
Thierry FOURNIER060762e2014-04-23 13:29:15 +020010873 The following array contains the list of all map functions avalaible sorted by
10874 input type, match type and output type.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010010875
Thierry FOURNIER060762e2014-04-23 13:29:15 +020010876 input type | match method | output type str | output type int | output type ip
10877 -----------+--------------+-----------------+-----------------+---------------
10878 str | str | map_str | map_str_int | map_str_ip
10879 -----------+--------------+-----------------+-----------------+---------------
Willy Tarreau787a4c02014-05-10 07:55:30 +020010880 str | beg | map_beg | map_beg_int | map_end_ip
10881 -----------+--------------+-----------------+-----------------+---------------
Thierry FOURNIER060762e2014-04-23 13:29:15 +020010882 str | sub | map_sub | map_sub_int | map_sub_ip
10883 -----------+--------------+-----------------+-----------------+---------------
10884 str | dir | map_dir | map_dir_int | map_dir_ip
10885 -----------+--------------+-----------------+-----------------+---------------
10886 str | dom | map_dom | map_dom_int | map_dom_ip
10887 -----------+--------------+-----------------+-----------------+---------------
10888 str | end | map_end | map_end_int | map_end_ip
10889 -----------+--------------+-----------------+-----------------+---------------
10890 str | reg | map_reg | map_reg_int | map_reg_ip
10891 -----------+--------------+-----------------+-----------------+---------------
10892 int | int | map_int | map_int_int | map_int_ip
10893 -----------+--------------+-----------------+-----------------+---------------
10894 ip | ip | map_ip | map_ip_int | map_ip_ip
10895 -----------+--------------+-----------------+-----------------+---------------
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010010896
Thierry FOURNIER060762e2014-04-23 13:29:15 +020010897 The file contains one key + value per line. Lines which start with '#' are
10898 ignored, just like empty lines. Leading tabs and spaces are stripped. The key
10899 is then the first "word" (series of non-space/tabs characters), and the value
10900 is what follows this series of space/tab till the end of the line excluding
10901 trailing spaces/tabs.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010010902
Thierry FOURNIER060762e2014-04-23 13:29:15 +020010903 Example :
10904
10905 # this is a comment and is ignored
10906 2.22.246.0/23 United Kingdom \n
10907 <-><-----------><--><------------><---->
10908 | | | | `- trailing spaces ignored
10909 | | | `---------- value
10910 | | `-------------------- middle spaces ignored
10911 | `---------------------------- key
10912 `------------------------------------ leading spaces ignored
10913
Willy Tarreau97707872015-01-27 15:12:13 +010010914mod(<value>)
10915 Divides the input value of type unsigned integer by <value>, and returns the
10916 remainder as an unsigned integer. If <value> is null, then zero is returned.
10917
10918mul(<value>)
10919 Multiplies the input value of type unsigned integer by <value>, and returns
10920 the product as an unsigned integer. In case of overflow, the higher bits are
10921 lost, leading to seemingly strange values.
10922
10923neg
10924 Takes the input value of type unsigned integer, computes the opposite value,
10925 and returns the remainder as an unsigned integer. 0 is identity. This
10926 operator is provided for reversed subtracts : in order to subtract the input
10927 from a constant, simply perform a "neg,add(value)".
10928
10929not
10930 Returns a boolean FALSE if the input value of type unsigned integer is
10931 non-null, otherwise returns TRUE. Used in conjunction with and(), it can be
10932 used to report true/false for bit testing on input values (eg: verify the
10933 absence of a flag).
10934
10935odd
10936 Returns a boolean TRUE if the input value of type unsigned integer is odd
10937 otherwise returns FALSE. It is functionally equivalent to "and(1),bool".
10938
10939or(<value>)
10940 Performs a bitwise "OR" between <value> and the input value of type unsigned
10941 integer, and returns the result as an unsigned integer.
10942
Willy Tarreauc4dc3502015-01-23 20:39:28 +010010943regsub(<regex>,<subst>[,<flags>])
Willy Tarreau7eda8492015-01-20 19:47:06 +010010944 Applies a regex-based substitution to the input string. It does the same
10945 operation as the well-known "sed" utility with "s/<regex>/<subst>/". By
10946 default it will replace in the input string the first occurrence of the
10947 largest part matching the regular expression <regex> with the substitution
10948 string <subst>. It is possible to replace all occurrences instead by adding
10949 the flag "g" in the third argument <flags>. It is also possible to make the
10950 regex case insensitive by adding the flag "i" in <flags>. Since <flags> is a
10951 string, it is made up from the concatenation of all desired flags. Thus if
10952 both "i" and "g" are desired, using "gi" or "ig" will have the same effect.
10953 It is important to note that due to the current limitations of the
10954 configuration parser, some characters such as closing parenthesis or comma
10955 are not possible to use in the arguments. The first use of this converter is
10956 to replace certain characters or sequence of characters with other ones.
10957
10958 Example :
10959
10960 # de-duplicate "/" in header "x-path".
10961 # input: x-path: /////a///b/c/xzxyz/
10962 # output: x-path: /a/b/c/xzxyz/
10963 http-request set-header x-path %[hdr(x-path),regsub(/+,/,g)]
10964
Thierry FOURNIER35ab2752015-05-28 13:22:03 +020010965capture-req(<id>)
10966 Capture the string entry in the request slot <id> and returns the entry as
10967 is. If the slot doesn't exist, the capture fails silently.
10968
10969 See also: "declare capture", "http-request capture",
10970 "http-response capture", "req.hdr.capture" and
10971 "res.hdr.capture" (sample fetches).
10972
10973capture-res(<id>)
10974 Capture the string entry in the response slot <id> and returns the entry as
10975 is. If the slot doesn't exist, the capture fails silently.
10976
10977 See also: "declare capture", "http-request capture",
10978 "http-response capture", "req.hdr.capture" and
10979 "res.hdr.capture" (sample fetches).
10980
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020010981sdbm([<avalanche>])
10982 Hashes a binary input sample into an unsigned 32-bit quantity using the SDBM
10983 hash function. Optionally, it is possible to apply a full avalanche hash
10984 function to the output if the optional <avalanche> argument equals 1. This
10985 converter uses the same functions as used by the various hash-based load
10986 balancing algorithms, so it will provide exactly the same results. It is
10987 mostly intended for debugging, but can be used as a stick-table entry to
10988 collect rough statistics. It must not be used for security purposes as a
Willy Tarreau80599772015-01-20 19:35:24 +010010989 32-bit hash is trivial to break. See also "crc32", "djb2", "wt6" and the
10990 "hash-type" directive.
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020010991
Willy Tarreau97707872015-01-27 15:12:13 +010010992sub(<value>)
10993 Subtracts <value> from the input value of type unsigned integer, and returns
10994 the result as an unsigned integer. Note: in order to subtract the input from
10995 a constant, simply perform a "neg,add(value)".
10996
Willy Tarreaud9f316a2014-07-10 14:03:38 +020010997table_bytes_in_rate(<table>)
10998 Uses the string representation of the input sample to perform a look up in
10999 the specified table. If the key is not found in the table, integer value zero
11000 is returned. Otherwise the converter returns the average client-to-server
11001 bytes rate associated with the input sample in the designated table, measured
11002 in amount of bytes over the period configured in the table. See also the
11003 sc_bytes_in_rate sample fetch keyword.
11004
11005
11006table_bytes_out_rate(<table>)
11007 Uses the string representation of the input sample to perform a look up in
11008 the specified table. If the key is not found in the table, integer value zero
11009 is returned. Otherwise the converter returns the average server-to-client
11010 bytes rate associated with the input sample in the designated table, measured
11011 in amount of bytes over the period configured in the table. See also the
11012 sc_bytes_out_rate sample fetch keyword.
11013
11014table_conn_cnt(<table>)
11015 Uses the string representation of the input sample to perform a look up in
11016 the specified table. If the key is not found in the table, integer value zero
11017 is returned. Otherwise the converter returns the cumulated amount of incoming
11018 connections associated with the input sample in the designated table. See
11019 also the sc_conn_cnt sample fetch keyword.
11020
11021table_conn_cur(<table>)
11022 Uses the string representation of the input sample to perform a look up in
11023 the specified table. If the key is not found in the table, integer value zero
11024 is returned. Otherwise the converter returns the current amount of concurrent
11025 tracked connections associated with the input sample in the designated table.
11026 See also the sc_conn_cur sample fetch keyword.
11027
11028table_conn_rate(<table>)
11029 Uses the string representation of the input sample to perform a look up in
11030 the specified table. If the key is not found in the table, integer value zero
11031 is returned. Otherwise the converter returns the average incoming connection
11032 rate associated with the input sample in the designated table. See also the
11033 sc_conn_rate sample fetch keyword.
11034
11035table_gpc0(<table>)
11036 Uses the string representation of the input sample to perform a look up in
11037 the specified table. If the key is not found in the table, integer value zero
11038 is returned. Otherwise the converter returns the current value of the first
11039 general purpose counter associated with the input sample in the designated
11040 table. See also the sc_get_gpc0 sample fetch keyword.
11041
11042table_gpc0_rate(<table>)
11043 Uses the string representation of the input sample to perform a look up in
11044 the specified table. If the key is not found in the table, integer value zero
11045 is returned. Otherwise the converter returns the frequency which the gpc0
11046 counter was incremented over the configured period in the table, associated
11047 with the input sample in the designated table. See also the sc_get_gpc0_rate
11048 sample fetch keyword.
11049
11050table_http_err_cnt(<table>)
11051 Uses the string representation of the input sample to perform a look up in
11052 the specified table. If the key is not found in the table, integer value zero
11053 is returned. Otherwise the converter returns the cumulated amount of HTTP
11054 errors associated with the input sample in the designated table. See also the
11055 sc_http_err_cnt sample fetch keyword.
11056
11057table_http_err_rate(<table>)
11058 Uses the string representation of the input sample to perform a look up in
11059 the specified table. If the key is not found in the table, integer value zero
11060 is returned. Otherwise the average rate of HTTP errors associated with the
11061 input sample in the designated table, measured in amount of errors over the
11062 period configured in the table. See also the sc_http_err_rate sample fetch
11063 keyword.
11064
11065table_http_req_cnt(<table>)
11066 Uses the string representation of the input sample to perform a look up in
11067 the specified table. If the key is not found in the table, integer value zero
11068 is returned. Otherwise the converter returns the cumulated amount of HTTP
11069 requests associated with the input sample in the designated table. See also
11070 the sc_http_req_cnt sample fetch keyword.
11071
11072table_http_req_rate(<table>)
11073 Uses the string representation of the input sample to perform a look up in
11074 the specified table. If the key is not found in the table, integer value zero
11075 is returned. Otherwise the average rate of HTTP requests associated with the
11076 input sample in the designated table, measured in amount of requests over the
11077 period configured in the table. See also the sc_http_req_rate sample fetch
11078 keyword.
11079
11080table_kbytes_in(<table>)
11081 Uses the string representation of the input sample to perform a look up in
11082 the specified table. If the key is not found in the table, integer value zero
11083 is returned. Otherwise the converter returns the cumulated amount of client-
11084 to-server data associated with the input sample in the designated table,
11085 measured in kilobytes. The test is currently performed on 32-bit integers,
11086 which limits values to 4 terabytes. See also the sc_kbytes_in sample fetch
11087 keyword.
11088
11089table_kbytes_out(<table>)
11090 Uses the string representation of the input sample to perform a look up in
11091 the specified table. If the key is not found in the table, integer value zero
11092 is returned. Otherwise the converter returns the cumulated amount of server-
11093 to-client data associated with the input sample in the designated table,
11094 measured in kilobytes. The test is currently performed on 32-bit integers,
11095 which limits values to 4 terabytes. See also the sc_kbytes_out sample fetch
11096 keyword.
11097
11098table_server_id(<table>)
11099 Uses the string representation of the input sample to perform a look up in
11100 the specified table. If the key is not found in the table, integer value zero
11101 is returned. Otherwise the converter returns the server ID associated with
11102 the input sample in the designated table. A server ID is associated to a
11103 sample by a "stick" rule when a connection to a server succeeds. A server ID
11104 zero means that no server is associated with this key.
11105
11106table_sess_cnt(<table>)
11107 Uses the string representation of the input sample to perform a look up in
11108 the specified table. If the key is not found in the table, integer value zero
11109 is returned. Otherwise the converter returns the cumulated amount of incoming
11110 sessions associated with the input sample in the designated table. Note that
11111 a session here refers to an incoming connection being accepted by the
11112 "tcp-request connection" rulesets. See also the sc_sess_cnt sample fetch
11113 keyword.
11114
11115table_sess_rate(<table>)
11116 Uses the string representation of the input sample to perform a look up in
11117 the specified table. If the key is not found in the table, integer value zero
11118 is returned. Otherwise the converter returns the average incoming session
11119 rate associated with the input sample in the designated table. Note that a
11120 session here refers to an incoming connection being accepted by the
11121 "tcp-request connection" rulesets. See also the sc_sess_rate sample fetch
11122 keyword.
11123
11124table_trackers(<table>)
11125 Uses the string representation of the input sample to perform a look up in
11126 the specified table. If the key is not found in the table, integer value zero
11127 is returned. Otherwise the converter returns the current amount of concurrent
11128 connections tracking the same key as the input sample in the designated
11129 table. It differs from table_conn_cur in that it does not rely on any stored
11130 information but on the table's reference count (the "use" value which is
11131 returned by "show table" on the CLI). This may sometimes be more suited for
11132 layer7 tracking. It can be used to tell a server how many concurrent
11133 connections there are from a given address for example. See also the
11134 sc_trackers sample fetch keyword.
11135
Willy Tarreauffcb2e42014-07-10 16:29:08 +020011136upper
11137 Convert a string sample to upper case. This can only be placed after a string
11138 sample fetch function or after a transformation keyword returning a string
11139 type. The result is of type string.
11140
Thierry FOURNIER82ff3c92015-05-07 15:46:20 +020011141url_dec
11142 Takes an url-encoded string provided as input and returns the decoded
11143 version as output. The input and the output are of type string.
11144
Willy Tarreau0dbfdba2014-07-10 16:37:47 +020011145utime(<format>[,<offset>])
11146 Converts an integer supposed to contain a date since epoch to a string
11147 representing this date in UTC time using a format defined by the <format>
11148 string using strftime(3). The purpose is to allow any date format to be used
11149 in logs. An optional <offset> in seconds may be applied to the input date
11150 (positive or negative). See the strftime() man page for the format supported
11151 by your operating system. See also the ltime converter.
11152
11153 Example :
11154
11155 # Emit two colons, one with the UTC time and another with ip:port
11156 # Eg: 20140710162350 127.0.0.1:57325
11157 log-format %[date,utime(%Y%m%d%H%M%S)]\ %ci:%cp
11158
Emeric Brunc9a0f6d2014-11-25 14:09:01 +010011159word(<index>,<delimiters>)
11160 Extracts the nth word considering given delimiters from an input string.
11161 Indexes start at 1 and delimiters are a string formatted list of chars.
11162
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020011163wt6([<avalanche>])
11164 Hashes a binary input sample into an unsigned 32-bit quantity using the WT6
11165 hash function. Optionally, it is possible to apply a full avalanche hash
11166 function to the output if the optional <avalanche> argument equals 1. This
11167 converter uses the same functions as used by the various hash-based load
11168 balancing algorithms, so it will provide exactly the same results. It is
11169 mostly intended for debugging, but can be used as a stick-table entry to
11170 collect rough statistics. It must not be used for security purposes as a
Willy Tarreau80599772015-01-20 19:35:24 +010011171 32-bit hash is trivial to break. See also "crc32", "djb2", "sdbm", and the
11172 "hash-type" directive.
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020011173
Willy Tarreau97707872015-01-27 15:12:13 +010011174xor(<value>)
11175 Performs a bitwise "XOR" (exclusive OR) between <value> and the input value
11176 of type unsigned integer, and returns the result as an unsigned integer.
11177
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010011178
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200111797.3.2. Fetching samples from internal states
Willy Tarreau74ca5042013-06-11 23:12:07 +020011180--------------------------------------------
11181
11182A first set of sample fetch methods applies to internal information which does
11183not even relate to any client information. These ones are sometimes used with
11184"monitor-fail" directives to report an internal status to external watchers.
11185The sample fetch methods described in this section are usable anywhere.
11186
11187always_false : boolean
11188 Always returns the boolean "false" value. It may be used with ACLs as a
11189 temporary replacement for another one when adjusting configurations.
11190
11191always_true : boolean
11192 Always returns the boolean "true" value. It may be used with ACLs as a
11193 temporary replacement for another one when adjusting configurations.
11194
11195avg_queue([<backend>]) : integer
Willy Tarreaud63335a2010-02-26 12:56:52 +010011196 Returns the total number of queued connections of the designated backend
Willy Tarreau74ca5042013-06-11 23:12:07 +020011197 divided by the number of active servers. The current backend is used if no
11198 backend is specified. This is very similar to "queue" except that the size of
11199 the farm is considered, in order to give a more accurate measurement of the
11200 time it may take for a new connection to be processed. The main usage is with
11201 ACL to return a sorry page to new users when it becomes certain they will get
11202 a degraded service, or to pass to the backend servers in a header so that
11203 they decide to work in degraded mode or to disable some functions to speed up
11204 the processing a bit. Note that in the event there would not be any active
11205 server anymore, twice the number of queued connections would be considered as
11206 the measured value. This is a fair estimate, as we expect one server to get
11207 back soon anyway, but we still prefer to send new traffic to another backend
11208 if in better shape. See also the "queue", "be_conn", and "be_sess_rate"
11209 sample fetches.
Krzysztof Piotr Oledzki346f76d2010-01-12 21:59:30 +010011210
Willy Tarreau74ca5042013-06-11 23:12:07 +020011211be_conn([<backend>]) : integer
Willy Tarreaua36af912009-10-10 12:02:45 +020011212 Applies to the number of currently established connections on the backend,
11213 possibly including the connection being evaluated. If no backend name is
11214 specified, the current one is used. But it is also possible to check another
11215 backend. It can be used to use a specific farm when the nominal one is full.
11216 See also the "fe_conn", "queue" and "be_sess_rate" criteria.
Willy Tarreau6a06a402007-07-15 20:15:28 +020011217
Willy Tarreau74ca5042013-06-11 23:12:07 +020011218be_sess_rate([<backend>]) : integer
11219 Returns an integer value corresponding to the sessions creation rate on the
11220 backend, in number of new sessions per second. This is used with ACLs to
11221 switch to an alternate backend when an expensive or fragile one reaches too
11222 high a session rate, or to limit abuse of service (eg. prevent sucking of an
11223 online dictionary). It can also be useful to add this element to logs using a
11224 log-format directive.
Willy Tarreaud63335a2010-02-26 12:56:52 +010011225
11226 Example :
11227 # Redirect to an error page if the dictionary is requested too often
11228 backend dynamic
11229 mode http
11230 acl being_scanned be_sess_rate gt 100
11231 redirect location /denied.html if being_scanned
Willy Tarreau0ba27502007-12-24 16:55:16 +010011232
Willy Tarreau74ca5042013-06-11 23:12:07 +020011233connslots([<backend>]) : integer
11234 Returns an integer value corresponding to the number of connection slots
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030011235 still available in the backend, by totaling the maximum amount of
Willy Tarreau74ca5042013-06-11 23:12:07 +020011236 connections on all servers and the maximum queue size. This is probably only
11237 used with ACLs.
Tait Clarridge7896d522012-12-05 21:39:31 -050011238
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080011239 The basic idea here is to be able to measure the number of connection "slots"
Willy Tarreau55165fe2009-05-10 12:02:55 +020011240 still available (connection + queue), so that anything beyond that (intended
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080011241 usage; see "use_backend" keyword) can be redirected to a different backend.
11242
Willy Tarreau55165fe2009-05-10 12:02:55 +020011243 'connslots' = number of available server connection slots, + number of
11244 available server queue slots.
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080011245
Willy Tarreaua36af912009-10-10 12:02:45 +020011246 Note that while "fe_conn" may be used, "connslots" comes in especially
Willy Tarreau55165fe2009-05-10 12:02:55 +020011247 useful when you have a case of traffic going to one single ip, splitting into
Willy Tarreau74ca5042013-06-11 23:12:07 +020011248 multiple backends (perhaps using ACLs to do name-based load balancing) and
Willy Tarreau55165fe2009-05-10 12:02:55 +020011249 you want to be able to differentiate between different backends, and their
11250 available "connslots". Also, whereas "nbsrv" only measures servers that are
Willy Tarreau74ca5042013-06-11 23:12:07 +020011251 actually *down*, this fetch is more fine-grained and looks into the number of
Willy Tarreaua36af912009-10-10 12:02:45 +020011252 available connection slots as well. See also "queue" and "avg_queue".
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080011253
Willy Tarreau55165fe2009-05-10 12:02:55 +020011254 OTHER CAVEATS AND NOTES: at this point in time, the code does not take care
11255 of dynamic connections. Also, if any of the server maxconn, or maxqueue is 0,
Willy Tarreau74ca5042013-06-11 23:12:07 +020011256 then this fetch clearly does not make sense, in which case the value returned
Willy Tarreau55165fe2009-05-10 12:02:55 +020011257 will be -1.
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080011258
Willy Tarreau6236d3a2013-07-25 14:28:25 +020011259date([<offset>]) : integer
11260 Returns the current date as the epoch (number of seconds since 01/01/1970).
11261 If an offset value is specified, then it is a number of seconds that is added
11262 to the current date before returning the value. This is particularly useful
11263 to compute relative dates, as both positive and negative offsets are allowed.
Willy Tarreau276fae92013-07-25 14:36:01 +020011264 It is useful combined with the http_date converter.
11265
11266 Example :
11267
11268 # set an expires header to now+1 hour in every response
11269 http-response set-header Expires %[date(3600),http_date]
Willy Tarreau6236d3a2013-07-25 14:28:25 +020011270
Willy Tarreau595ec542013-06-12 21:34:28 +020011271env(<name>) : string
11272 Returns a string containing the value of environment variable <name>. As a
11273 reminder, environment variables are per-process and are sampled when the
11274 process starts. This can be useful to pass some information to a next hop
11275 server, or with ACLs to take specific action when the process is started a
11276 certain way.
11277
11278 Examples :
11279 # Pass the Via header to next hop with the local hostname in it
11280 http-request add-header Via 1.1\ %[env(HOSTNAME)]
11281
11282 # reject cookie-less requests when the STOP environment variable is set
11283 http-request deny if !{ cook(SESSIONID) -m found } { env(STOP) -m found }
11284
Willy Tarreau74ca5042013-06-11 23:12:07 +020011285fe_conn([<frontend>]) : integer
11286 Returns the number of currently established connections on the frontend,
Willy Tarreaud63335a2010-02-26 12:56:52 +010011287 possibly including the connection being evaluated. If no frontend name is
11288 specified, the current one is used. But it is also possible to check another
Willy Tarreau74ca5042013-06-11 23:12:07 +020011289 frontend. It can be used to return a sorry page before hard-blocking, or to
11290 use a specific backend to drain new requests when the farm is considered
11291 full. This is mostly used with ACLs but can also be used to pass some
11292 statistics to servers in HTTP headers. See also the "dst_conn", "be_conn",
11293 "fe_sess_rate" fetches.
Willy Tarreaua36af912009-10-10 12:02:45 +020011294
Willy Tarreau74ca5042013-06-11 23:12:07 +020011295fe_sess_rate([<frontend>]) : integer
11296 Returns an integer value corresponding to the sessions creation rate on the
11297 frontend, in number of new sessions per second. This is used with ACLs to
11298 limit the incoming session rate to an acceptable range in order to prevent
11299 abuse of service at the earliest moment, for example when combined with other
11300 layer 4 ACLs in order to force the clients to wait a bit for the rate to go
11301 down below the limit. It can also be useful to add this element to logs using
11302 a log-format directive. See also the "rate-limit sessions" directive for use
11303 in frontends.
Willy Tarreau079ff0a2009-03-05 21:34:28 +010011304
11305 Example :
11306 # This frontend limits incoming mails to 10/s with a max of 100
11307 # concurrent connections. We accept any connection below 10/s, and
11308 # force excess clients to wait for 100 ms. Since clients are limited to
11309 # 100 max, there cannot be more than 10 incoming mails per second.
11310 frontend mail
11311 bind :25
11312 mode tcp
11313 maxconn 100
11314 acl too_fast fe_sess_rate ge 10
11315 tcp-request inspect-delay 100ms
11316 tcp-request content accept if ! too_fast
11317 tcp-request content accept if WAIT_END
Willy Tarreaud72758d2010-01-12 10:42:19 +010011318
Willy Tarreau0f30d262014-11-24 16:02:05 +010011319nbproc : integer
11320 Returns an integer value corresponding to the number of processes that were
11321 started (it equals the global "nbproc" setting). This is useful for logging
11322 and debugging purposes.
11323
Willy Tarreau74ca5042013-06-11 23:12:07 +020011324nbsrv([<backend>]) : integer
11325 Returns an integer value corresponding to the number of usable servers of
11326 either the current backend or the named backend. This is mostly used with
11327 ACLs but can also be useful when added to logs. This is normally used to
Willy Tarreaud63335a2010-02-26 12:56:52 +010011328 switch to an alternate backend when the number of servers is too low to
11329 to handle some load. It is useful to report a failure when combined with
11330 "monitor fail".
Willy Tarreau079ff0a2009-03-05 21:34:28 +010011331
Willy Tarreau0f30d262014-11-24 16:02:05 +010011332proc : integer
11333 Returns an integer value corresponding to the position of the process calling
11334 the function, between 1 and global.nbproc. This is useful for logging and
11335 debugging purposes.
11336
Willy Tarreau74ca5042013-06-11 23:12:07 +020011337queue([<backend>]) : integer
Willy Tarreaud63335a2010-02-26 12:56:52 +010011338 Returns the total number of queued connections of the designated backend,
11339 including all the connections in server queues. If no backend name is
11340 specified, the current one is used, but it is also possible to check another
Willy Tarreau74ca5042013-06-11 23:12:07 +020011341 one. This is useful with ACLs or to pass statistics to backend servers. This
11342 can be used to take actions when queuing goes above a known level, generally
11343 indicating a surge of traffic or a massive slowdown on the servers. One
11344 possible action could be to reject new users but still accept old ones. See
11345 also the "avg_queue", "be_conn", and "be_sess_rate" fetches.
11346
Willy Tarreau84310e22014-02-14 11:59:04 +010011347rand([<range>]) : integer
11348 Returns a random integer value within a range of <range> possible values,
11349 starting at zero. If the range is not specified, it defaults to 2^32, which
11350 gives numbers between 0 and 4294967295. It can be useful to pass some values
11351 needed to take some routing decisions for example, or just for debugging
11352 purposes. This random must not be used for security purposes.
11353
Willy Tarreau74ca5042013-06-11 23:12:07 +020011354srv_conn([<backend>/]<server>) : integer
11355 Returns an integer value corresponding to the number of currently established
11356 connections on the designated server, possibly including the connection being
11357 evaluated. If <backend> is omitted, then the server is looked up in the
11358 current backend. It can be used to use a specific farm when one server is
11359 full, or to inform the server about our view of the number of active
11360 connections with it. See also the "fe_conn", "be_conn" and "queue" fetch
11361 methods.
11362
11363srv_is_up([<backend>/]<server>) : boolean
11364 Returns true when the designated server is UP, and false when it is either
11365 DOWN or in maintenance mode. If <backend> is omitted, then the server is
11366 looked up in the current backend. It is mainly used to take action based on
11367 an external status reported via a health check (eg: a geographical site's
11368 availability). Another possible use which is more of a hack consists in
11369 using dummy servers as boolean variables that can be enabled or disabled from
11370 the CLI, so that rules depending on those ACLs can be tweaked in realtime.
11371
11372srv_sess_rate([<backend>/]<server>) : integer
11373 Returns an integer corresponding to the sessions creation rate on the
11374 designated server, in number of new sessions per second. If <backend> is
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030011375 omitted, then the server is looked up in the current backend. This is mostly
Willy Tarreau74ca5042013-06-11 23:12:07 +020011376 used with ACLs but can make sense with logs too. This is used to switch to an
11377 alternate backend when an expensive or fragile one reaches too high a session
11378 rate, or to limit abuse of service (eg. prevent latent requests from
11379 overloading servers).
11380
11381 Example :
11382 # Redirect to a separate back
11383 acl srv1_full srv_sess_rate(be1/srv1) gt 50
11384 acl srv2_full srv_sess_rate(be1/srv2) gt 50
11385 use_backend be2 if srv1_full or srv2_full
11386
Willy Tarreau0f30d262014-11-24 16:02:05 +010011387stopping : boolean
11388 Returns TRUE if the process calling the function is currently stopping. This
11389 can be useful for logging, or for relaxing certain checks or helping close
11390 certain connections upon graceful shutdown.
11391
Willy Tarreau74ca5042013-06-11 23:12:07 +020011392table_avl([<table>]) : integer
11393 Returns the total number of available entries in the current proxy's
11394 stick-table or in the designated stick-table. See also table_cnt.
11395
11396table_cnt([<table>]) : integer
11397 Returns the total number of entries currently in use in the current proxy's
11398 stick-table or in the designated stick-table. See also src_conn_cnt and
11399 table_avl for other entry counting methods.
11400
11401
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200114027.3.3. Fetching samples at Layer 4
Willy Tarreau74ca5042013-06-11 23:12:07 +020011403----------------------------------
11404
11405The layer 4 usually describes just the transport layer which in haproxy is
11406closest to the connection, where no content is yet made available. The fetch
11407methods described here are usable as low as the "tcp-request connection" rule
11408sets unless they require some future information. Those generally include
11409TCP/IP addresses and ports, as well as elements from stick-tables related to
Willy Tarreau4d4149c2013-07-23 19:33:46 +020011410the incoming connection. For retrieving a value from a sticky counters, the
11411counter number can be explicitly set as 0, 1, or 2 using the pre-defined
11412"sc0_", "sc1_", or "sc2_" prefix, or it can be specified as the first integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020011413argument when using the "sc_" prefix. An optional table may be specified with
11414the "sc*" form, in which case the currently tracked key will be looked up into
11415this alternate table instead of the table currently being tracked.
Willy Tarreau74ca5042013-06-11 23:12:07 +020011416
11417be_id : integer
11418 Returns an integer containing the current backend's id. It can be used in
11419 frontends with responses to check which backend processed the request.
11420
11421dst : ip
11422 This is the destination IPv4 address of the connection on the client side,
11423 which is the address the client connected to. It can be useful when running
11424 in transparent mode. It is of type IP and works on both IPv4 and IPv6 tables.
11425 On IPv6 tables, IPv4 address is mapped to its IPv6 equivalent, according to
11426 RFC 4291.
11427
11428dst_conn : integer
11429 Returns an integer value corresponding to the number of currently established
11430 connections on the same socket including the one being evaluated. It is
11431 normally used with ACLs but can as well be used to pass the information to
11432 servers in an HTTP header or in logs. It can be used to either return a sorry
11433 page before hard-blocking, or to use a specific backend to drain new requests
11434 when the socket is considered saturated. This offers the ability to assign
11435 different limits to different listening ports or addresses. See also the
11436 "fe_conn" and "be_conn" fetches.
Willy Tarreaud63335a2010-02-26 12:56:52 +010011437
Willy Tarreau74ca5042013-06-11 23:12:07 +020011438dst_port : integer
11439 Returns an integer value corresponding to the destination TCP port of the
11440 connection on the client side, which is the port the client connected to.
11441 This might be used when running in transparent mode, when assigning dynamic
11442 ports to some clients for a whole application session, to stick all users to
11443 a same server, or to pass the destination port information to a server using
11444 an HTTP header.
11445
11446fe_id : integer
11447 Returns an integer containing the current frontend's id. It can be used in
11448 backends to check from which backend it was called, or to stick all users
11449 coming via a same frontend to the same server.
11450
Cyril Bonté62ba8702014-04-22 23:52:25 +020011451sc_bytes_in_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020011452sc0_bytes_in_rate([<table>]) : integer
11453sc1_bytes_in_rate([<table>]) : integer
11454sc2_bytes_in_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020011455 Returns the average client-to-server bytes rate from the currently tracked
11456 counters, measured in amount of bytes over the period configured in the
11457 table. See also src_bytes_in_rate.
11458
Cyril Bonté62ba8702014-04-22 23:52:25 +020011459sc_bytes_out_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020011460sc0_bytes_out_rate([<table>]) : integer
11461sc1_bytes_out_rate([<table>]) : integer
11462sc2_bytes_out_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020011463 Returns the average server-to-client bytes rate from the currently tracked
11464 counters, measured in amount of bytes over the period configured in the
11465 table. See also src_bytes_out_rate.
11466
Cyril Bonté62ba8702014-04-22 23:52:25 +020011467sc_clr_gpc0(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020011468sc0_clr_gpc0([<table>]) : integer
11469sc1_clr_gpc0([<table>]) : integer
11470sc2_clr_gpc0([<table>]) : integer
Willy Tarreauf73cd112011-08-13 01:45:16 +020011471 Clears the first General Purpose Counter associated to the currently tracked
11472 counters, and returns its previous value. Before the first invocation, the
Willy Tarreau869948b2013-01-04 14:14:57 +010011473 stored value is zero, so first invocation will always return zero. This is
11474 typically used as a second ACL in an expression in order to mark a connection
11475 when a first ACL was verified :
Willy Tarreauf73cd112011-08-13 01:45:16 +020011476
11477 # block if 5 consecutive requests continue to come faster than 10 sess
11478 # per second, and reset the counter as soon as the traffic slows down.
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020011479 acl abuse sc0_http_req_rate gt 10
11480 acl kill sc0_inc_gpc0 gt 5
11481 acl save sc0_clr_gpc0 ge 0
Willy Tarreauf73cd112011-08-13 01:45:16 +020011482 tcp-request connection accept if !abuse save
11483 tcp-request connection reject if abuse kill
11484
Cyril Bonté62ba8702014-04-22 23:52:25 +020011485sc_conn_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020011486sc0_conn_cnt([<table>]) : integer
11487sc1_conn_cnt([<table>]) : integer
11488sc2_conn_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020011489 Returns the cumulated number of incoming connections from currently tracked
11490 counters. See also src_conn_cnt.
11491
Cyril Bonté62ba8702014-04-22 23:52:25 +020011492sc_conn_cur(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020011493sc0_conn_cur([<table>]) : integer
11494sc1_conn_cur([<table>]) : integer
11495sc2_conn_cur([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020011496 Returns the current amount of concurrent connections tracking the same
11497 tracked counters. This number is automatically incremented when tracking
11498 begins and decremented when tracking stops. See also src_conn_cur.
11499
Cyril Bonté62ba8702014-04-22 23:52:25 +020011500sc_conn_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020011501sc0_conn_rate([<table>]) : integer
11502sc1_conn_rate([<table>]) : integer
11503sc2_conn_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020011504 Returns the average connection rate from the currently tracked counters,
11505 measured in amount of connections over the period configured in the table.
11506 See also src_conn_rate.
11507
Cyril Bonté62ba8702014-04-22 23:52:25 +020011508sc_get_gpc0(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020011509sc0_get_gpc0([<table>]) : integer
11510sc1_get_gpc0([<table>]) : integer
11511sc2_get_gpc0([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020011512 Returns the value of the first General Purpose Counter associated to the
Willy Tarreau4d4149c2013-07-23 19:33:46 +020011513 currently tracked counters. See also src_get_gpc0 and sc/sc0/sc1/sc2_inc_gpc0.
Willy Tarreauba2ffd12013-05-29 15:54:14 +020011514
Cyril Bonté62ba8702014-04-22 23:52:25 +020011515sc_gpc0_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020011516sc0_gpc0_rate([<table>]) : integer
11517sc1_gpc0_rate([<table>]) : integer
11518sc2_gpc0_rate([<table>]) : integer
Willy Tarreauba2ffd12013-05-29 15:54:14 +020011519 Returns the average increment rate of the first General Purpose Counter
11520 associated to the currently tracked counters. It reports the frequency
11521 which the gpc0 counter was incremented over the configured period. See also
Willy Tarreau4d4149c2013-07-23 19:33:46 +020011522 src_gpc0_rate, sc/sc0/sc1/sc2_get_gpc0, and sc/sc0/sc1/sc2_inc_gpc0. Note
11523 that the "gpc0_rate" counter must be stored in the stick-table for a value to
11524 be returned, as "gpc0" only holds the event count.
Willy Tarreaue9656522010-08-17 15:40:09 +020011525
Cyril Bonté62ba8702014-04-22 23:52:25 +020011526sc_http_err_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020011527sc0_http_err_cnt([<table>]) : integer
11528sc1_http_err_cnt([<table>]) : integer
11529sc2_http_err_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020011530 Returns the cumulated number of HTTP errors from the currently tracked
11531 counters. This includes the both request errors and 4xx error responses.
11532 See also src_http_err_cnt.
11533
Cyril Bonté62ba8702014-04-22 23:52:25 +020011534sc_http_err_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020011535sc0_http_err_rate([<table>]) : integer
11536sc1_http_err_rate([<table>]) : integer
11537sc2_http_err_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020011538 Returns the average rate of HTTP errors from the currently tracked counters,
11539 measured in amount of errors over the period configured in the table. This
11540 includes the both request errors and 4xx error responses. See also
11541 src_http_err_rate.
11542
Cyril Bonté62ba8702014-04-22 23:52:25 +020011543sc_http_req_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020011544sc0_http_req_cnt([<table>]) : integer
11545sc1_http_req_cnt([<table>]) : integer
11546sc2_http_req_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020011547 Returns the cumulated number of HTTP requests from the currently tracked
11548 counters. This includes every started request, valid or not. See also
11549 src_http_req_cnt.
11550
Cyril Bonté62ba8702014-04-22 23:52:25 +020011551sc_http_req_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020011552sc0_http_req_rate([<table>]) : integer
11553sc1_http_req_rate([<table>]) : integer
11554sc2_http_req_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020011555 Returns the average rate of HTTP requests from the currently tracked
11556 counters, measured in amount of requests over the period configured in
11557 the table. This includes every started request, valid or not. See also
11558 src_http_req_rate.
11559
Cyril Bonté62ba8702014-04-22 23:52:25 +020011560sc_inc_gpc0(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020011561sc0_inc_gpc0([<table>]) : integer
11562sc1_inc_gpc0([<table>]) : integer
11563sc2_inc_gpc0([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020011564 Increments the first General Purpose Counter associated to the currently
Willy Tarreau869948b2013-01-04 14:14:57 +010011565 tracked counters, and returns its new value. Before the first invocation,
11566 the stored value is zero, so first invocation will increase it to 1 and will
11567 return 1. This is typically used as a second ACL in an expression in order
11568 to mark a connection when a first ACL was verified :
Willy Tarreaue9656522010-08-17 15:40:09 +020011569
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020011570 acl abuse sc0_http_req_rate gt 10
11571 acl kill sc0_inc_gpc0 gt 0
Willy Tarreaue9656522010-08-17 15:40:09 +020011572 tcp-request connection reject if abuse kill
11573
Cyril Bonté62ba8702014-04-22 23:52:25 +020011574sc_kbytes_in(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020011575sc0_kbytes_in([<table>]) : integer
11576sc1_kbytes_in([<table>]) : integer
11577sc2_kbytes_in([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020011578 Returns the total amount of client-to-server data from the currently tracked
11579 counters, measured in kilobytes. The test is currently performed on 32-bit
11580 integers, which limits values to 4 terabytes. See also src_kbytes_in.
Willy Tarreaue9656522010-08-17 15:40:09 +020011581
Cyril Bonté62ba8702014-04-22 23:52:25 +020011582sc_kbytes_out(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020011583sc0_kbytes_out([<table>]) : integer
11584sc1_kbytes_out([<table>]) : integer
11585sc2_kbytes_out([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020011586 Returns the total amount of server-to-client data from the currently tracked
11587 counters, measured in kilobytes. The test is currently performed on 32-bit
11588 integers, which limits values to 4 terabytes. See also src_kbytes_out.
Willy Tarreaue9656522010-08-17 15:40:09 +020011589
Cyril Bonté62ba8702014-04-22 23:52:25 +020011590sc_sess_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020011591sc0_sess_cnt([<table>]) : integer
11592sc1_sess_cnt([<table>]) : integer
11593sc2_sess_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020011594 Returns the cumulated number of incoming connections that were transformed
11595 into sessions, which means that they were accepted by a "tcp-request
11596 connection" rule, from the currently tracked counters. A backend may count
11597 more sessions than connections because each connection could result in many
Jamie Gloudonaaa21002012-08-25 00:18:33 -040011598 backend sessions if some HTTP keep-alive is performed over the connection
Willy Tarreaue9656522010-08-17 15:40:09 +020011599 with the client. See also src_sess_cnt.
11600
Cyril Bonté62ba8702014-04-22 23:52:25 +020011601sc_sess_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020011602sc0_sess_rate([<table>]) : integer
11603sc1_sess_rate([<table>]) : integer
11604sc2_sess_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020011605 Returns the average session rate from the currently tracked counters,
11606 measured in amount of sessions over the period configured in the table. A
11607 session is a connection that got past the early "tcp-request connection"
11608 rules. A backend may count more sessions than connections because each
11609 connection could result in many backend sessions if some HTTP keep-alive is
Jamie Gloudonaaa21002012-08-25 00:18:33 -040011610 performed over the connection with the client. See also src_sess_rate.
Willy Tarreaue9656522010-08-17 15:40:09 +020011611
Cyril Bonté62ba8702014-04-22 23:52:25 +020011612sc_tracked(<ctr>[,<table>]) : boolean
Willy Tarreau0f791d42013-07-23 19:56:43 +020011613sc0_tracked([<table>]) : boolean
11614sc1_tracked([<table>]) : boolean
11615sc2_tracked([<table>]) : boolean
Willy Tarreau6f1615f2013-06-03 15:15:22 +020011616 Returns true if the designated session counter is currently being tracked by
11617 the current session. This can be useful when deciding whether or not we want
11618 to set some values in a header passed to the server.
11619
Cyril Bonté62ba8702014-04-22 23:52:25 +020011620sc_trackers(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020011621sc0_trackers([<table>]) : integer
11622sc1_trackers([<table>]) : integer
11623sc2_trackers([<table>]) : integer
Willy Tarreau2406db42012-12-09 12:16:43 +010011624 Returns the current amount of concurrent connections tracking the same
11625 tracked counters. This number is automatically incremented when tracking
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020011626 begins and decremented when tracking stops. It differs from sc0_conn_cur in
Willy Tarreau2406db42012-12-09 12:16:43 +010011627 that it does not rely on any stored information but on the table's reference
11628 count (the "use" value which is returned by "show table" on the CLI). This
Willy Tarreau74ca5042013-06-11 23:12:07 +020011629 may sometimes be more suited for layer7 tracking. It can be used to tell a
11630 server how many concurrent connections there are from a given address for
11631 example.
Willy Tarreau2406db42012-12-09 12:16:43 +010011632
Willy Tarreau74ca5042013-06-11 23:12:07 +020011633so_id : integer
11634 Returns an integer containing the current listening socket's id. It is useful
11635 in frontends involving many "bind" lines, or to stick all users coming via a
11636 same socket to the same server.
Willy Tarreaud63335a2010-02-26 12:56:52 +010011637
Willy Tarreau74ca5042013-06-11 23:12:07 +020011638src : ip
11639 This is the source IPv4 address of the client of the session. It is of type
11640 IP and works on both IPv4 and IPv6 tables. On IPv6 tables, IPv4 addresses are
11641 mapped to their IPv6 equivalent, according to RFC 4291. Note that it is the
11642 TCP-level source address which is used, and not the address of a client
11643 behind a proxy. However if the "accept-proxy" bind directive is used, it can
11644 be the address of a client behind another PROXY-protocol compatible component
11645 for all rule sets except "tcp-request connection" which sees the real address.
Willy Tarreaud63335a2010-02-26 12:56:52 +010011646
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010011647 Example:
11648 # add an HTTP header in requests with the originating address' country
11649 http-request set-header X-Country %[src,map_ip(geoip.lst)]
11650
Willy Tarreau74ca5042013-06-11 23:12:07 +020011651src_bytes_in_rate([<table>]) : integer
11652 Returns the average bytes rate from the incoming connection's source address
11653 in the current proxy's stick-table or in the designated stick-table, measured
11654 in amount of bytes over the period configured in the table. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020011655 not found, zero is returned. See also sc/sc0/sc1/sc2_bytes_in_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020011656
Willy Tarreau74ca5042013-06-11 23:12:07 +020011657src_bytes_out_rate([<table>]) : integer
11658 Returns the average bytes rate to the incoming connection's source address in
11659 the current proxy's stick-table or in the designated stick-table, measured in
Willy Tarreauc9705a12010-07-27 20:05:50 +020011660 amount of bytes over the period configured in the table. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020011661 not found, zero is returned. See also sc/sc0/sc1/sc2_bytes_out_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020011662
Willy Tarreau74ca5042013-06-11 23:12:07 +020011663src_clr_gpc0([<table>]) : integer
11664 Clears the first General Purpose Counter associated to the incoming
11665 connection's source address in the current proxy's stick-table or in the
11666 designated stick-table, and returns its previous value. If the address is not
11667 found, an entry is created and 0 is returned. This is typically used as a
11668 second ACL in an expression in order to mark a connection when a first ACL
11669 was verified :
Willy Tarreauf73cd112011-08-13 01:45:16 +020011670
11671 # block if 5 consecutive requests continue to come faster than 10 sess
11672 # per second, and reset the counter as soon as the traffic slows down.
11673 acl abuse src_http_req_rate gt 10
11674 acl kill src_inc_gpc0 gt 5
Willy Tarreau869948b2013-01-04 14:14:57 +010011675 acl save src_clr_gpc0 ge 0
Willy Tarreauf73cd112011-08-13 01:45:16 +020011676 tcp-request connection accept if !abuse save
11677 tcp-request connection reject if abuse kill
11678
Willy Tarreau74ca5042013-06-11 23:12:07 +020011679src_conn_cnt([<table>]) : integer
Willy Tarreauc9705a12010-07-27 20:05:50 +020011680 Returns the cumulated number of connections initiated from the current
Willy Tarreau74ca5042013-06-11 23:12:07 +020011681 incoming connection's source address in the current proxy's stick-table or in
Willy Tarreauc9705a12010-07-27 20:05:50 +020011682 the designated stick-table. If the address is not found, zero is returned.
Willy Tarreau4d4149c2013-07-23 19:33:46 +020011683 See also sc/sc0/sc1/sc2_conn_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +020011684
Willy Tarreau74ca5042013-06-11 23:12:07 +020011685src_conn_cur([<table>]) : integer
Willy Tarreauc9705a12010-07-27 20:05:50 +020011686 Returns the current amount of concurrent connections initiated from the
Willy Tarreau74ca5042013-06-11 23:12:07 +020011687 current incoming connection's source address in the current proxy's
11688 stick-table or in the designated stick-table. If the address is not found,
Willy Tarreau4d4149c2013-07-23 19:33:46 +020011689 zero is returned. See also sc/sc0/sc1/sc2_conn_cur.
Willy Tarreauc9705a12010-07-27 20:05:50 +020011690
Willy Tarreau74ca5042013-06-11 23:12:07 +020011691src_conn_rate([<table>]) : integer
11692 Returns the average connection rate from the incoming connection's source
11693 address in the current proxy's stick-table or in the designated stick-table,
11694 measured in amount of connections over the period configured in the table. If
Willy Tarreau4d4149c2013-07-23 19:33:46 +020011695 the address is not found, zero is returned. See also sc/sc0/sc1/sc2_conn_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020011696
Willy Tarreau74ca5042013-06-11 23:12:07 +020011697src_get_gpc0([<table>]) : integer
Willy Tarreauc9705a12010-07-27 20:05:50 +020011698 Returns the value of the first General Purpose Counter associated to the
Willy Tarreau74ca5042013-06-11 23:12:07 +020011699 incoming connection's source address in the current proxy's stick-table or in
Willy Tarreauc9705a12010-07-27 20:05:50 +020011700 the designated stick-table. If the address is not found, zero is returned.
Willy Tarreau4d4149c2013-07-23 19:33:46 +020011701 See also sc/sc0/sc1/sc2_get_gpc0 and src_inc_gpc0.
Willy Tarreauc9705a12010-07-27 20:05:50 +020011702
Willy Tarreau74ca5042013-06-11 23:12:07 +020011703src_gpc0_rate([<table>]) : integer
Willy Tarreauba2ffd12013-05-29 15:54:14 +020011704 Returns the average increment rate of the first General Purpose Counter
Willy Tarreau74ca5042013-06-11 23:12:07 +020011705 associated to the incoming connection's source address in the current proxy's
Willy Tarreauba2ffd12013-05-29 15:54:14 +020011706 stick-table or in the designated stick-table. It reports the frequency
11707 which the gpc0 counter was incremented over the configured period. See also
Willy Tarreau4d4149c2013-07-23 19:33:46 +020011708 sc/sc0/sc1/sc2_gpc0_rate, src_get_gpc0, and sc/sc0/sc1/sc2_inc_gpc0. Note
11709 that the "gpc0_rate" counter must be stored in the stick-table for a value to
11710 be returned, as "gpc0" only holds the event count.
Willy Tarreauba2ffd12013-05-29 15:54:14 +020011711
Willy Tarreau74ca5042013-06-11 23:12:07 +020011712src_http_err_cnt([<table>]) : integer
11713 Returns the cumulated number of HTTP errors from the incoming connection's
11714 source address in the current proxy's stick-table or in the designated
Willy Tarreauc9705a12010-07-27 20:05:50 +020011715 stick-table. This includes the both request errors and 4xx error responses.
Willy Tarreau4d4149c2013-07-23 19:33:46 +020011716 See also sc/sc0/sc1/sc2_http_err_cnt. If the address is not found, zero is
Willy Tarreau74ca5042013-06-11 23:12:07 +020011717 returned.
Willy Tarreauc9705a12010-07-27 20:05:50 +020011718
Willy Tarreau74ca5042013-06-11 23:12:07 +020011719src_http_err_rate([<table>]) : integer
11720 Returns the average rate of HTTP errors from the incoming connection's source
11721 address in the current proxy's stick-table or in the designated stick-table,
11722 measured in amount of errors over the period configured in the table. This
11723 includes the both request errors and 4xx error responses. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020011724 not found, zero is returned. See also sc/sc0/sc1/sc2_http_err_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020011725
Willy Tarreau74ca5042013-06-11 23:12:07 +020011726src_http_req_cnt([<table>]) : integer
11727 Returns the cumulated number of HTTP requests from the incoming connection's
11728 source address in the current proxy's stick-table or in the designated stick-
11729 table. This includes every started request, valid or not. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020011730 not found, zero is returned. See also sc/sc0/sc1/sc2_http_req_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +020011731
Willy Tarreau74ca5042013-06-11 23:12:07 +020011732src_http_req_rate([<table>]) : integer
11733 Returns the average rate of HTTP requests from the incoming connection's
11734 source address in the current proxy's stick-table or in the designated stick-
11735 table, measured in amount of requests over the period configured in the
Willy Tarreauc9705a12010-07-27 20:05:50 +020011736 table. This includes every started request, valid or not. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020011737 not found, zero is returned. See also sc/sc0/sc1/sc2_http_req_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020011738
Willy Tarreau74ca5042013-06-11 23:12:07 +020011739src_inc_gpc0([<table>]) : integer
11740 Increments the first General Purpose Counter associated to the incoming
11741 connection's source address in the current proxy's stick-table or in the
11742 designated stick-table, and returns its new value. If the address is not
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020011743 found, an entry is created and 1 is returned. See also sc0/sc2/sc2_inc_gpc0.
Willy Tarreau74ca5042013-06-11 23:12:07 +020011744 This is typically used as a second ACL in an expression in order to mark a
11745 connection when a first ACL was verified :
Willy Tarreauc9705a12010-07-27 20:05:50 +020011746
11747 acl abuse src_http_req_rate gt 10
Willy Tarreau869948b2013-01-04 14:14:57 +010011748 acl kill src_inc_gpc0 gt 0
Willy Tarreaue9656522010-08-17 15:40:09 +020011749 tcp-request connection reject if abuse kill
Willy Tarreauc9705a12010-07-27 20:05:50 +020011750
Willy Tarreau74ca5042013-06-11 23:12:07 +020011751src_kbytes_in([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020011752 Returns the total amount of data received from the incoming connection's
11753 source address in the current proxy's stick-table or in the designated
11754 stick-table, measured in kilobytes. If the address is not found, zero is
11755 returned. The test is currently performed on 32-bit integers, which limits
11756 values to 4 terabytes. See also sc/sc0/sc1/sc2_kbytes_in.
Willy Tarreauc9705a12010-07-27 20:05:50 +020011757
Willy Tarreau74ca5042013-06-11 23:12:07 +020011758src_kbytes_out([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020011759 Returns the total amount of data sent to the incoming connection's source
11760 address in the current proxy's stick-table or in the designated stick-table,
11761 measured in kilobytes. If the address is not found, zero is returned. The
11762 test is currently performed on 32-bit integers, which limits values to 4
11763 terabytes. See also sc/sc0/sc1/sc2_kbytes_out.
Willy Tarreaua975b8f2010-06-05 19:13:27 +020011764
Willy Tarreau74ca5042013-06-11 23:12:07 +020011765src_port : integer
11766 Returns an integer value corresponding to the TCP source port of the
11767 connection on the client side, which is the port the client connected from.
11768 Usage of this function is very limited as modern protocols do not care much
11769 about source ports nowadays.
Willy Tarreau079ff0a2009-03-05 21:34:28 +010011770
Willy Tarreau74ca5042013-06-11 23:12:07 +020011771src_sess_cnt([<table>]) : integer
11772 Returns the cumulated number of connections initiated from the incoming
Willy Tarreauc9705a12010-07-27 20:05:50 +020011773 connection's source IPv4 address in the current proxy's stick-table or in the
11774 designated stick-table, that were transformed into sessions, which means that
11775 they were accepted by "tcp-request" rules. If the address is not found, zero
Willy Tarreau4d4149c2013-07-23 19:33:46 +020011776 is returned. See also sc/sc0/sc1/sc2_sess_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +020011777
Willy Tarreau74ca5042013-06-11 23:12:07 +020011778src_sess_rate([<table>]) : integer
11779 Returns the average session rate from the incoming connection's source
11780 address in the current proxy's stick-table or in the designated stick-table,
11781 measured in amount of sessions over the period configured in the table. A
11782 session is a connection that went past the early "tcp-request" rules. If the
Willy Tarreau4d4149c2013-07-23 19:33:46 +020011783 address is not found, zero is returned. See also sc/sc0/sc1/sc2_sess_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020011784
Willy Tarreau74ca5042013-06-11 23:12:07 +020011785src_updt_conn_cnt([<table>]) : integer
11786 Creates or updates the entry associated to the incoming connection's source
11787 address in the current proxy's stick-table or in the designated stick-table.
11788 This table must be configured to store the "conn_cnt" data type, otherwise
11789 the match will be ignored. The current count is incremented by one, and the
11790 expiration timer refreshed. The updated count is returned, so this match
11791 can't return zero. This was used to reject service abusers based on their
11792 source address. Note: it is recommended to use the more complete "track-sc*"
11793 actions in "tcp-request" rules instead.
Willy Tarreaua975b8f2010-06-05 19:13:27 +020011794
11795 Example :
11796 # This frontend limits incoming SSH connections to 3 per 10 second for
11797 # each source address, and rejects excess connections until a 10 second
11798 # silence is observed. At most 20 addresses are tracked.
11799 listen ssh
11800 bind :22
11801 mode tcp
11802 maxconn 100
Willy Tarreauc9705a12010-07-27 20:05:50 +020011803 stick-table type ip size 20 expire 10s store conn_cnt
Willy Tarreau74ca5042013-06-11 23:12:07 +020011804 tcp-request content reject if { src_updt_conn_cnt gt 3 }
Willy Tarreaua975b8f2010-06-05 19:13:27 +020011805 server local 127.0.0.1:22
11806
Willy Tarreau74ca5042013-06-11 23:12:07 +020011807srv_id : integer
11808 Returns an integer containing the server's id when processing the response.
11809 While it's almost only used with ACLs, it may be used for logging or
11810 debugging.
Hervé COMMOWICKdaa824e2011-08-05 12:09:44 +020011811
Hervé COMMOWICK35ed8012010-12-15 14:04:51 +010011812
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200118137.3.4. Fetching samples at Layer 5
Willy Tarreau74ca5042013-06-11 23:12:07 +020011814----------------------------------
Willy Tarreau0b1cd942010-05-16 22:18:27 +020011815
Willy Tarreau74ca5042013-06-11 23:12:07 +020011816The layer 5 usually describes just the session layer which in haproxy is
11817closest to the session once all the connection handshakes are finished, but
11818when no content is yet made available. The fetch methods described here are
11819usable as low as the "tcp-request content" rule sets unless they require some
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030011820future information. Those generally include the results of SSL negotiations.
Willy Tarreauc735a072011-03-29 00:57:02 +020011821
Emeric Brun645ae792014-04-30 14:21:06 +020011822ssl_bc : boolean
11823 Returns true when the back connection was made via an SSL/TLS transport
11824 layer and is locally deciphered. This means the outgoing connection was made
11825 other a server with the "ssl" option.
11826
11827ssl_bc_alg_keysize : integer
11828 Returns the symmetric cipher key size supported in bits when the outgoing
11829 connection was made over an SSL/TLS transport layer.
11830
11831ssl_bc_cipher : string
11832 Returns the name of the used cipher when the outgoing connection was made
11833 over an SSL/TLS transport layer.
11834
11835ssl_bc_protocol : string
11836 Returns the name of the used protocol when the outgoing connection was made
11837 over an SSL/TLS transport layer.
11838
Emeric Brunb73a9b02014-04-30 18:49:19 +020011839ssl_bc_unique_id : binary
Emeric Brun645ae792014-04-30 14:21:06 +020011840 When the outgoing connection was made over an SSL/TLS transport layer,
Emeric Brunb73a9b02014-04-30 18:49:19 +020011841 returns the TLS unique ID as defined in RFC5929 section 3. The unique id
11842 can be encoded to base64 using the converter: "ssl_bc_unique_id,base64".
Emeric Brun645ae792014-04-30 14:21:06 +020011843
11844ssl_bc_session_id : binary
11845 Returns the SSL ID of the back connection when the outgoing connection was
11846 made over an SSL/TLS transport layer. It is useful to log if we want to know
11847 if session was reused or not.
11848
11849ssl_bc_use_keysize : integer
11850 Returns the symmetric cipher key size used in bits when the outgoing
11851 connection was made over an SSL/TLS transport layer.
11852
Willy Tarreau74ca5042013-06-11 23:12:07 +020011853ssl_c_ca_err : integer
11854 When the incoming connection was made over an SSL/TLS transport layer,
11855 returns the ID of the first error detected during verification of the client
11856 certificate at depth > 0, or 0 if no error was encountered during this
11857 verification process. Please refer to your SSL library's documentation to
11858 find the exhaustive list of error codes.
Willy Tarreauc735a072011-03-29 00:57:02 +020011859
Willy Tarreau74ca5042013-06-11 23:12:07 +020011860ssl_c_ca_err_depth : integer
11861 When the incoming connection was made over an SSL/TLS transport layer,
11862 returns the depth in the CA chain of the first error detected during the
11863 verification of the client certificate. If no error is encountered, 0 is
11864 returned.
Willy Tarreau0ba27502007-12-24 16:55:16 +010011865
Emeric Brun43e79582014-10-29 19:03:26 +010011866ssl_c_der : binary
11867 Returns the DER formatted certificate presented by the client when the
11868 incoming connection was made over an SSL/TLS transport layer. When used for
11869 an ACL, the value(s) to match against can be passed in hexadecimal form.
11870
Willy Tarreau74ca5042013-06-11 23:12:07 +020011871ssl_c_err : integer
11872 When the incoming connection was made over an SSL/TLS transport layer,
11873 returns the ID of the first error detected during verification at depth 0, or
11874 0 if no error was encountered during this verification process. Please refer
11875 to your SSL library's documentation to find the exhaustive list of error
11876 codes.
Willy Tarreau62644772008-07-16 18:36:06 +020011877
Willy Tarreau74ca5042013-06-11 23:12:07 +020011878ssl_c_i_dn([<entry>[,<occ>]]) : string
11879 When the incoming connection was made over an SSL/TLS transport layer,
11880 returns the full distinguished name of the issuer of the certificate
11881 presented by the client when no <entry> is specified, or the value of the
11882 first given entry found from the beginning of the DN. If a positive/negative
11883 occurrence number is specified as the optional second argument, it returns
11884 the value of the nth given entry value from the beginning/end of the DN.
11885 For instance, "ssl_c_i_dn(OU,2)" the second organization unit, and
11886 "ssl_c_i_dn(CN)" retrieves the common name.
Willy Tarreau62644772008-07-16 18:36:06 +020011887
Willy Tarreau74ca5042013-06-11 23:12:07 +020011888ssl_c_key_alg : string
11889 Returns the name of the algorithm used to generate the key of the certificate
11890 presented by the client when the incoming connection was made over an SSL/TLS
11891 transport layer.
Willy Tarreau62644772008-07-16 18:36:06 +020011892
Willy Tarreau74ca5042013-06-11 23:12:07 +020011893ssl_c_notafter : string
11894 Returns the end date presented by the client as a formatted string
11895 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
11896 transport layer.
Emeric Brunbede3d02009-06-30 17:54:00 +020011897
Willy Tarreau74ca5042013-06-11 23:12:07 +020011898ssl_c_notbefore : string
11899 Returns the start date presented by the client as a formatted string
11900 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
11901 transport layer.
Willy Tarreaub6672b52011-12-12 17:23:41 +010011902
Willy Tarreau74ca5042013-06-11 23:12:07 +020011903ssl_c_s_dn([<entry>[,<occ>]]) : string
11904 When the incoming connection was made over an SSL/TLS transport layer,
11905 returns the full distinguished name of the subject of the certificate
11906 presented by the client when no <entry> is specified, or the value of the
11907 first given entry found from the beginning of the DN. If a positive/negative
11908 occurrence number is specified as the optional second argument, it returns
11909 the value of the nth given entry value from the beginning/end of the DN.
11910 For instance, "ssl_c_s_dn(OU,2)" the second organization unit, and
11911 "ssl_c_s_dn(CN)" retrieves the common name.
Willy Tarreaub6672b52011-12-12 17:23:41 +010011912
Willy Tarreau74ca5042013-06-11 23:12:07 +020011913ssl_c_serial : binary
11914 Returns the serial of the certificate presented by the client when the
11915 incoming connection was made over an SSL/TLS transport layer. When used for
11916 an ACL, the value(s) to match against can be passed in hexadecimal form.
Emeric Brun2525b6b2012-10-18 15:59:43 +020011917
Willy Tarreau74ca5042013-06-11 23:12:07 +020011918ssl_c_sha1 : binary
11919 Returns the SHA-1 fingerprint of the certificate presented by the client when
11920 the incoming connection was made over an SSL/TLS transport layer. This can be
11921 used to stick a client to a server, or to pass this information to a server.
Willy Tarreau2d0caa32014-07-02 19:01:22 +020011922 Note that the output is binary, so if you want to pass that signature to the
11923 server, you need to encode it in hex or base64, such as in the example below:
11924
11925 http-request set-header X-SSL-Client-SHA1 %[ssl_c_sha1,hex]
Emeric Brun2525b6b2012-10-18 15:59:43 +020011926
Willy Tarreau74ca5042013-06-11 23:12:07 +020011927ssl_c_sig_alg : string
11928 Returns the name of the algorithm used to sign the certificate presented by
11929 the client when the incoming connection was made over an SSL/TLS transport
11930 layer.
Emeric Brun87855892012-10-17 17:39:35 +020011931
Willy Tarreau74ca5042013-06-11 23:12:07 +020011932ssl_c_used : boolean
11933 Returns true if current SSL session uses a client certificate even if current
11934 connection uses SSL session resumption. See also "ssl_fc_has_crt".
Emeric Brun7f56e742012-10-19 18:15:40 +020011935
Willy Tarreau74ca5042013-06-11 23:12:07 +020011936ssl_c_verify : integer
11937 Returns the verify result error ID when the incoming connection was made over
11938 an SSL/TLS transport layer, otherwise zero if no error is encountered. Please
11939 refer to your SSL library's documentation for an exhaustive list of error
11940 codes.
Emeric Brunce5ad802012-10-22 14:11:22 +020011941
Willy Tarreau74ca5042013-06-11 23:12:07 +020011942ssl_c_version : integer
11943 Returns the version of the certificate presented by the client when the
11944 incoming connection was made over an SSL/TLS transport layer.
Emeric Brunce5ad802012-10-22 14:11:22 +020011945
Emeric Brun43e79582014-10-29 19:03:26 +010011946ssl_f_der : binary
11947 Returns the DER formatted certificate presented by the frontend when the
11948 incoming connection was made over an SSL/TLS transport layer. When used for
11949 an ACL, the value(s) to match against can be passed in hexadecimal form.
11950
Willy Tarreau74ca5042013-06-11 23:12:07 +020011951ssl_f_i_dn([<entry>[,<occ>]]) : string
11952 When the incoming connection was made over an SSL/TLS transport layer,
11953 returns the full distinguished name of the issuer of the certificate
11954 presented by the frontend when no <entry> is specified, or the value of the
11955 first given entry found from the beginning of the DN. If a positive/negative
Emeric Brun87855892012-10-17 17:39:35 +020011956 occurrence number is specified as the optional second argument, it returns
Willy Tarreau74ca5042013-06-11 23:12:07 +020011957 the value of the nth given entry value from the beginning/end of the DN.
11958 For instance, "ssl_f_i_dn(OU,2)" the second organization unit, and
11959 "ssl_f_i_dn(CN)" retrieves the common name.
Emeric Brun87855892012-10-17 17:39:35 +020011960
Willy Tarreau74ca5042013-06-11 23:12:07 +020011961ssl_f_key_alg : string
11962 Returns the name of the algorithm used to generate the key of the certificate
11963 presented by the frontend when the incoming connection was made over an
11964 SSL/TLS transport layer.
Emeric Brun7f56e742012-10-19 18:15:40 +020011965
Willy Tarreau74ca5042013-06-11 23:12:07 +020011966ssl_f_notafter : string
11967 Returns the end date presented by the frontend as a formatted string
11968 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
11969 transport layer.
Emeric Brun2525b6b2012-10-18 15:59:43 +020011970
Willy Tarreau74ca5042013-06-11 23:12:07 +020011971ssl_f_notbefore : string
11972 Returns the start date presented by the frontend as a formatted string
11973 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
11974 transport layer.
Emeric Brun87855892012-10-17 17:39:35 +020011975
Willy Tarreau74ca5042013-06-11 23:12:07 +020011976ssl_f_s_dn([<entry>[,<occ>]]) : string
11977 When the incoming connection was made over an SSL/TLS transport layer,
11978 returns the full distinguished name of the subject of the certificate
11979 presented by the frontend when no <entry> is specified, or the value of the
11980 first given entry found from the beginning of the DN. If a positive/negative
11981 occurrence number is specified as the optional second argument, it returns
11982 the value of the nth given entry value from the beginning/end of the DN.
11983 For instance, "ssl_f_s_dn(OU,2)" the second organization unit, and
11984 "ssl_f_s_dn(CN)" retrieves the common name.
Emeric Brunce5ad802012-10-22 14:11:22 +020011985
Willy Tarreau74ca5042013-06-11 23:12:07 +020011986ssl_f_serial : binary
11987 Returns the serial of the certificate presented by the frontend when the
11988 incoming connection was made over an SSL/TLS transport layer. When used for
11989 an ACL, the value(s) to match against can be passed in hexadecimal form.
Emeric Brun87855892012-10-17 17:39:35 +020011990
Emeric Brun55f4fa82014-04-30 17:11:25 +020011991ssl_f_sha1 : binary
11992 Returns the SHA-1 fingerprint of the certificate presented by the frontend
11993 when the incoming connection was made over an SSL/TLS transport layer. This
11994 can be used to know which certificate was chosen using SNI.
11995
Willy Tarreau74ca5042013-06-11 23:12:07 +020011996ssl_f_sig_alg : string
11997 Returns the name of the algorithm used to sign the certificate presented by
11998 the frontend when the incoming connection was made over an SSL/TLS transport
11999 layer.
Emeric Brun7f56e742012-10-19 18:15:40 +020012000
Willy Tarreau74ca5042013-06-11 23:12:07 +020012001ssl_f_version : integer
12002 Returns the version of the certificate presented by the frontend when the
12003 incoming connection was made over an SSL/TLS transport layer.
12004
12005ssl_fc : boolean
Emeric Brun2525b6b2012-10-18 15:59:43 +020012006 Returns true when the front connection was made via an SSL/TLS transport
12007 layer and is locally deciphered. This means it has matched a socket declared
12008 with a "bind" line having the "ssl" option.
12009
Willy Tarreau74ca5042013-06-11 23:12:07 +020012010 Example :
12011 # This passes "X-Proto: https" to servers when client connects over SSL
12012 listen http-https
12013 bind :80
12014 bind :443 ssl crt /etc/haproxy.pem
12015 http-request add-header X-Proto https if { ssl_fc }
12016
12017ssl_fc_alg_keysize : integer
12018 Returns the symmetric cipher key size supported in bits when the incoming
12019 connection was made over an SSL/TLS transport layer.
12020
12021ssl_fc_alpn : string
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030012022 This extracts the Application Layer Protocol Negotiation field from an
Willy Tarreau74ca5042013-06-11 23:12:07 +020012023 incoming connection made via a TLS transport layer and locally deciphered by
12024 haproxy. The result is a string containing the protocol name advertised by
12025 the client. The SSL library must have been built with support for TLS
12026 extensions enabled (check haproxy -vv). Note that the TLS ALPN extension is
12027 not advertised unless the "alpn" keyword on the "bind" line specifies a
12028 protocol list. Also, nothing forces the client to pick a protocol from this
12029 list, any other one may be requested. The TLS ALPN extension is meant to
12030 replace the TLS NPN extension. See also "ssl_fc_npn".
12031
Willy Tarreau74ca5042013-06-11 23:12:07 +020012032ssl_fc_cipher : string
12033 Returns the name of the used cipher when the incoming connection was made
12034 over an SSL/TLS transport layer.
Willy Tarreauab861d32013-04-02 02:30:41 +020012035
Willy Tarreau74ca5042013-06-11 23:12:07 +020012036ssl_fc_has_crt : boolean
Emeric Brun2525b6b2012-10-18 15:59:43 +020012037 Returns true if a client certificate is present in an incoming connection over
12038 SSL/TLS transport layer. Useful if 'verify' statement is set to 'optional'.
Emeric Brun9143d372012-12-20 15:44:16 +010012039 Note: on SSL session resumption with Session ID or TLS ticket, client
12040 certificate is not present in the current connection but may be retrieved
12041 from the cache or the ticket. So prefer "ssl_c_used" if you want to check if
12042 current SSL session uses a client certificate.
Emeric Brun2525b6b2012-10-18 15:59:43 +020012043
Willy Tarreau74ca5042013-06-11 23:12:07 +020012044ssl_fc_has_sni : boolean
12045 This checks for the presence of a Server Name Indication TLS extension (SNI)
Willy Tarreauf7bc57c2012-10-03 00:19:48 +020012046 in an incoming connection was made over an SSL/TLS transport layer. Returns
12047 true when the incoming connection presents a TLS SNI field. This requires
12048 that the SSL library is build with support for TLS extensions enabled (check
12049 haproxy -vv).
Willy Tarreau7875d092012-09-10 08:20:03 +020012050
Nenad Merdanovic26ea8222015-05-18 02:28:57 +020012051ssl_fc_is_resumed: boolean
12052 Returns true if the SSL/TLS session has been resumed through the use of
12053 SSL session cache or TLS tickets.
12054
Willy Tarreau74ca5042013-06-11 23:12:07 +020012055ssl_fc_npn : string
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030012056 This extracts the Next Protocol Negotiation field from an incoming connection
Willy Tarreau74ca5042013-06-11 23:12:07 +020012057 made via a TLS transport layer and locally deciphered by haproxy. The result
12058 is a string containing the protocol name advertised by the client. The SSL
12059 library must have been built with support for TLS extensions enabled (check
12060 haproxy -vv). Note that the TLS NPN extension is not advertised unless the
12061 "npn" keyword on the "bind" line specifies a protocol list. Also, nothing
12062 forces the client to pick a protocol from this list, any other one may be
12063 requested. Please note that the TLS NPN extension was replaced with ALPN.
Willy Tarreaua33c6542012-10-15 13:19:06 +020012064
Willy Tarreau74ca5042013-06-11 23:12:07 +020012065ssl_fc_protocol : string
12066 Returns the name of the used protocol when the incoming connection was made
12067 over an SSL/TLS transport layer.
Willy Tarreau7875d092012-09-10 08:20:03 +020012068
Emeric Brunb73a9b02014-04-30 18:49:19 +020012069ssl_fc_unique_id : binary
David Sc1ad52e2014-04-08 18:48:47 -040012070 When the incoming connection was made over an SSL/TLS transport layer,
Emeric Brunb73a9b02014-04-30 18:49:19 +020012071 returns the TLS unique ID as defined in RFC5929 section 3. The unique id
12072 can be encoded to base64 using the converter: "ssl_bc_unique_id,base64".
David Sc1ad52e2014-04-08 18:48:47 -040012073
Willy Tarreau74ca5042013-06-11 23:12:07 +020012074ssl_fc_session_id : binary
12075 Returns the SSL ID of the front connection when the incoming connection was
12076 made over an SSL/TLS transport layer. It is useful to stick a given client to
12077 a server. It is important to note that some browsers refresh their session ID
12078 every few minutes.
Willy Tarreau7875d092012-09-10 08:20:03 +020012079
Willy Tarreau74ca5042013-06-11 23:12:07 +020012080ssl_fc_sni : string
12081 This extracts the Server Name Indication TLS extension (SNI) field from an
12082 incoming connection made via an SSL/TLS transport layer and locally
12083 deciphered by haproxy. The result (when present) typically is a string
12084 matching the HTTPS host name (253 chars or less). The SSL library must have
12085 been built with support for TLS extensions enabled (check haproxy -vv).
12086
12087 This fetch is different from "req_ssl_sni" above in that it applies to the
12088 connection being deciphered by haproxy and not to SSL contents being blindly
12089 forwarded. See also "ssl_fc_sni_end" and "ssl_fc_sni_reg" below. This
Cyril Bonté9c1eb1e2012-10-09 22:45:34 +020012090 requires that the SSL library is build with support for TLS extensions
12091 enabled (check haproxy -vv).
Willy Tarreau62644772008-07-16 18:36:06 +020012092
Willy Tarreau74ca5042013-06-11 23:12:07 +020012093 ACL derivatives :
Willy Tarreau74ca5042013-06-11 23:12:07 +020012094 ssl_fc_sni_end : suffix match
12095 ssl_fc_sni_reg : regex match
Emeric Brun589fcad2012-10-16 14:13:26 +020012096
Willy Tarreau74ca5042013-06-11 23:12:07 +020012097ssl_fc_use_keysize : integer
12098 Returns the symmetric cipher key size used in bits when the incoming
12099 connection was made over an SSL/TLS transport layer.
Willy Tarreaub6fb4202008-07-20 11:18:28 +020012100
Willy Tarreaub6fb4202008-07-20 11:18:28 +020012101
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200121027.3.5. Fetching samples from buffer contents (Layer 6)
Willy Tarreau74ca5042013-06-11 23:12:07 +020012103------------------------------------------------------
Willy Tarreaub6fb4202008-07-20 11:18:28 +020012104
Willy Tarreau74ca5042013-06-11 23:12:07 +020012105Fetching samples from buffer contents is a bit different from the previous
12106sample fetches above because the sampled data are ephemeral. These data can
12107only be used when they're available and will be lost when they're forwarded.
12108For this reason, samples fetched from buffer contents during a request cannot
12109be used in a response for example. Even while the data are being fetched, they
12110can change. Sometimes it is necessary to set some delays or combine multiple
12111sample fetch methods to ensure that the expected data are complete and usable,
12112for example through TCP request content inspection. Please see the "tcp-request
12113content" keyword for more detailed information on the subject.
Willy Tarreau62644772008-07-16 18:36:06 +020012114
Willy Tarreau74ca5042013-06-11 23:12:07 +020012115payload(<offset>,<length>) : binary (deprecated)
12116 This is an alias for "req.payload" when used in the context of a request (eg:
12117 "stick on", "stick match"), and for "res.payload" when used in the context of
12118 a response such as in "stick store response".
Willy Tarreau0ba27502007-12-24 16:55:16 +010012119
Willy Tarreau74ca5042013-06-11 23:12:07 +020012120payload_lv(<offset1>,<length>[,<offset2>]) : binary (deprecated)
12121 This is an alias for "req.payload_lv" when used in the context of a request
12122 (eg: "stick on", "stick match"), and for "res.payload_lv" when used in the
12123 context of a response such as in "stick store response".
Willy Tarreau0ba27502007-12-24 16:55:16 +010012124
Willy Tarreau74ca5042013-06-11 23:12:07 +020012125req.len : integer
12126req_len : integer (deprecated)
12127 Returns an integer value corresponding to the number of bytes present in the
12128 request buffer. This is mostly used in ACL. It is important to understand
12129 that this test does not return false as long as the buffer is changing. This
12130 means that a check with equality to zero will almost always immediately match
12131 at the beginning of the session, while a test for more data will wait for
12132 that data to come in and return false only when haproxy is certain that no
12133 more data will come in. This test was designed to be used with TCP request
12134 content inspection.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020012135
Willy Tarreau74ca5042013-06-11 23:12:07 +020012136req.payload(<offset>,<length>) : binary
12137 This extracts a binary block of <length> bytes and starting at byte <offset>
Willy Tarreau00f00842013-08-02 11:07:32 +020012138 in the request buffer. As a special case, if the <length> argument is zero,
12139 the the whole buffer from <offset> to the end is extracted. This can be used
12140 with ACLs in order to check for the presence of some content in a buffer at
12141 any location.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020012142
Willy Tarreau74ca5042013-06-11 23:12:07 +020012143 ACL alternatives :
12144 payload(<offset>,<length>) : hex binary match
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020012145
Willy Tarreau74ca5042013-06-11 23:12:07 +020012146req.payload_lv(<offset1>,<length>[,<offset2>]) : binary
12147 This extracts a binary block whose size is specified at <offset1> for <length>
12148 bytes, and which starts at <offset2> if specified or just after the length in
12149 the request buffer. The <offset2> parameter also supports relative offsets if
12150 prepended with a '+' or '-' sign.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020012151
Willy Tarreau74ca5042013-06-11 23:12:07 +020012152 ACL alternatives :
12153 payload_lv(<offset1>,<length>[,<offset2>]) : hex binary match
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020012154
Willy Tarreau74ca5042013-06-11 23:12:07 +020012155 Example : please consult the example from the "stick store-response" keyword.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020012156
Willy Tarreau74ca5042013-06-11 23:12:07 +020012157req.proto_http : boolean
12158req_proto_http : boolean (deprecated)
12159 Returns true when data in the request buffer look like HTTP and correctly
12160 parses as such. It is the same parser as the common HTTP request parser which
12161 is used so there should be no surprises. The test does not match until the
12162 request is complete, failed or timed out. This test may be used to report the
12163 protocol in TCP logs, but the biggest use is to block TCP request analysis
12164 until a complete HTTP request is present in the buffer, for example to track
12165 a header.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020012166
Willy Tarreau74ca5042013-06-11 23:12:07 +020012167 Example:
12168 # track request counts per "base" (concatenation of Host+URL)
12169 tcp-request inspect-delay 10s
12170 tcp-request content reject if !HTTP
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020012171 tcp-request content track-sc0 base table req-rate
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020012172
Willy Tarreau74ca5042013-06-11 23:12:07 +020012173req.rdp_cookie([<name>]) : string
12174rdp_cookie([<name>]) : string (deprecated)
12175 When the request buffer looks like the RDP protocol, extracts the RDP cookie
12176 <name>, or any cookie if unspecified. The parser only checks for the first
12177 cookie, as illustrated in the RDP protocol specification. The cookie name is
12178 case insensitive. Generally the "MSTS" cookie name will be used, as it can
12179 contain the user name of the client connecting to the server if properly
12180 configured on the client. The "MSTSHASH" cookie is often used as well for
12181 session stickiness to servers.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020012182
Willy Tarreau74ca5042013-06-11 23:12:07 +020012183 This differs from "balance rdp-cookie" in that any balancing algorithm may be
12184 used and thus the distribution of clients to backend servers is not linked to
12185 a hash of the RDP cookie. It is envisaged that using a balancing algorithm
12186 such as "balance roundrobin" or "balance leastconn" will lead to a more even
12187 distribution of clients to backend servers than the hash used by "balance
12188 rdp-cookie".
Willy Tarreau04aa6a92012-04-06 18:57:55 +020012189
Willy Tarreau74ca5042013-06-11 23:12:07 +020012190 ACL derivatives :
12191 req_rdp_cookie([<name>]) : exact string match
Willy Tarreau04aa6a92012-04-06 18:57:55 +020012192
Willy Tarreau74ca5042013-06-11 23:12:07 +020012193 Example :
12194 listen tse-farm
12195 bind 0.0.0.0:3389
12196 # wait up to 5s for an RDP cookie in the request
12197 tcp-request inspect-delay 5s
12198 tcp-request content accept if RDP_COOKIE
12199 # apply RDP cookie persistence
12200 persist rdp-cookie
12201 # Persist based on the mstshash cookie
12202 # This is only useful makes sense if
12203 # balance rdp-cookie is not used
12204 stick-table type string size 204800
12205 stick on req.rdp_cookie(mstshash)
12206 server srv1 1.1.1.1:3389
12207 server srv1 1.1.1.2:3389
Willy Tarreau04aa6a92012-04-06 18:57:55 +020012208
Willy Tarreau74ca5042013-06-11 23:12:07 +020012209 See also : "balance rdp-cookie", "persist rdp-cookie", "tcp-request" and the
12210 "req_rdp_cookie" ACL.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020012211
Willy Tarreau74ca5042013-06-11 23:12:07 +020012212req.rdp_cookie_cnt([name]) : integer
12213rdp_cookie_cnt([name]) : integer (deprecated)
12214 Tries to parse the request buffer as RDP protocol, then returns an integer
12215 corresponding to the number of RDP cookies found. If an optional cookie name
12216 is passed, only cookies matching this name are considered. This is mostly
12217 used in ACL.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020012218
Willy Tarreau74ca5042013-06-11 23:12:07 +020012219 ACL derivatives :
12220 req_rdp_cookie_cnt([<name>]) : integer match
Willy Tarreau04aa6a92012-04-06 18:57:55 +020012221
Willy Tarreau74ca5042013-06-11 23:12:07 +020012222req.ssl_hello_type : integer
12223req_ssl_hello_type : integer (deprecated)
12224 Returns an integer value containing the type of the SSL hello message found
12225 in the request buffer if the buffer contains data that parse as a complete
12226 SSL (v3 or superior) client hello message. Note that this only applies to raw
12227 contents found in the request buffer and not to contents deciphered via an
12228 SSL data layer, so this will not work with "bind" lines having the "ssl"
12229 option. This is mostly used in ACL to detect presence of an SSL hello message
12230 that is supposed to contain an SSL session ID usable for stickiness.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020012231
Willy Tarreau74ca5042013-06-11 23:12:07 +020012232req.ssl_sni : string
12233req_ssl_sni : string (deprecated)
12234 Returns a string containing the value of the Server Name TLS extension sent
12235 by a client in a TLS stream passing through the request buffer if the buffer
12236 contains data that parse as a complete SSL (v3 or superior) client hello
12237 message. Note that this only applies to raw contents found in the request
12238 buffer and not to contents deciphered via an SSL data layer, so this will not
12239 work with "bind" lines having the "ssl" option. SNI normally contains the
12240 name of the host the client tries to connect to (for recent browsers). SNI is
12241 useful for allowing or denying access to certain hosts when SSL/TLS is used
12242 by the client. This test was designed to be used with TCP request content
12243 inspection. If content switching is needed, it is recommended to first wait
12244 for a complete client hello (type 1), like in the example below. See also
12245 "ssl_fc_sni".
Willy Tarreau04aa6a92012-04-06 18:57:55 +020012246
Willy Tarreau74ca5042013-06-11 23:12:07 +020012247 ACL derivatives :
12248 req_ssl_sni : exact string match
Willy Tarreau04aa6a92012-04-06 18:57:55 +020012249
Willy Tarreau74ca5042013-06-11 23:12:07 +020012250 Examples :
12251 # Wait for a client hello for at most 5 seconds
12252 tcp-request inspect-delay 5s
12253 tcp-request content accept if { req_ssl_hello_type 1 }
12254 use_backend bk_allow if { req_ssl_sni -f allowed_sites }
12255 default_backend bk_sorry_page
Willy Tarreau04aa6a92012-04-06 18:57:55 +020012256
Willy Tarreau74ca5042013-06-11 23:12:07 +020012257res.ssl_hello_type : integer
12258rep_ssl_hello_type : integer (deprecated)
12259 Returns an integer value containing the type of the SSL hello message found
12260 in the response buffer if the buffer contains data that parses as a complete
12261 SSL (v3 or superior) hello message. Note that this only applies to raw
12262 contents found in the response buffer and not to contents deciphered via an
12263 SSL data layer, so this will not work with "server" lines having the "ssl"
12264 option. This is mostly used in ACL to detect presence of an SSL hello message
12265 that is supposed to contain an SSL session ID usable for stickiness.
Willy Tarreau51539362012-05-08 12:46:28 +020012266
Willy Tarreau74ca5042013-06-11 23:12:07 +020012267req.ssl_ver : integer
12268req_ssl_ver : integer (deprecated)
12269 Returns an integer value containing the version of the SSL/TLS protocol of a
12270 stream present in the request buffer. Both SSLv2 hello messages and SSLv3
12271 messages are supported. TLSv1 is announced as SSL version 3.1. The value is
12272 composed of the major version multiplied by 65536, added to the minor
12273 version. Note that this only applies to raw contents found in the request
12274 buffer and not to contents deciphered via an SSL data layer, so this will not
12275 work with "bind" lines having the "ssl" option. The ACL version of the test
12276 matches against a decimal notation in the form MAJOR.MINOR (eg: 3.1). This
12277 fetch is mostly used in ACL.
Willy Tarreaud63335a2010-02-26 12:56:52 +010012278
Willy Tarreau74ca5042013-06-11 23:12:07 +020012279 ACL derivatives :
12280 req_ssl_ver : decimal match
Willy Tarreaud63335a2010-02-26 12:56:52 +010012281
Willy Tarreau47e8eba2013-09-11 23:28:46 +020012282res.len : integer
12283 Returns an integer value corresponding to the number of bytes present in the
12284 response buffer. This is mostly used in ACL. It is important to understand
12285 that this test does not return false as long as the buffer is changing. This
12286 means that a check with equality to zero will almost always immediately match
12287 at the beginning of the session, while a test for more data will wait for
12288 that data to come in and return false only when haproxy is certain that no
12289 more data will come in. This test was designed to be used with TCP response
12290 content inspection.
12291
Willy Tarreau74ca5042013-06-11 23:12:07 +020012292res.payload(<offset>,<length>) : binary
12293 This extracts a binary block of <length> bytes and starting at byte <offset>
Willy Tarreau00f00842013-08-02 11:07:32 +020012294 in the response buffer. As a special case, if the <length> argument is zero,
12295 the the whole buffer from <offset> to the end is extracted. This can be used
12296 with ACLs in order to check for the presence of some content in a buffer at
12297 any location.
Willy Tarreaud63335a2010-02-26 12:56:52 +010012298
Willy Tarreau74ca5042013-06-11 23:12:07 +020012299res.payload_lv(<offset1>,<length>[,<offset2>]) : binary
12300 This extracts a binary block whose size is specified at <offset1> for <length>
12301 bytes, and which starts at <offset2> if specified or just after the length in
12302 the response buffer. The <offset2> parameter also supports relative offsets
12303 if prepended with a '+' or '-' sign.
Willy Tarreaud63335a2010-02-26 12:56:52 +010012304
Willy Tarreau74ca5042013-06-11 23:12:07 +020012305 Example : please consult the example from the "stick store-response" keyword.
Willy Tarreaud63335a2010-02-26 12:56:52 +010012306
Willy Tarreau74ca5042013-06-11 23:12:07 +020012307wait_end : boolean
12308 This fetch either returns true when the inspection period is over, or does
12309 not fetch. It is only used in ACLs, in conjunction with content analysis to
12310 avoid returning a wrong verdict early. It may also be used to delay some
12311 actions, such as a delayed reject for some special addresses. Since it either
12312 stops the rules evaluation or immediately returns true, it is recommended to
12313 use this acl as the last one in a rule. Please note that the default ACL
12314 "WAIT_END" is always usable without prior declaration. This test was designed
12315 to be used with TCP request content inspection.
Willy Tarreaud63335a2010-02-26 12:56:52 +010012316
Willy Tarreau74ca5042013-06-11 23:12:07 +020012317 Examples :
12318 # delay every incoming request by 2 seconds
12319 tcp-request inspect-delay 2s
12320 tcp-request content accept if WAIT_END
Willy Tarreaud63335a2010-02-26 12:56:52 +010012321
Willy Tarreau74ca5042013-06-11 23:12:07 +020012322 # don't immediately tell bad guys they are rejected
12323 tcp-request inspect-delay 10s
12324 acl goodguys src 10.0.0.0/24
12325 acl badguys src 10.0.1.0/24
12326 tcp-request content accept if goodguys
12327 tcp-request content reject if badguys WAIT_END
12328 tcp-request content reject
12329
12330
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200123317.3.6. Fetching HTTP samples (Layer 7)
Willy Tarreau74ca5042013-06-11 23:12:07 +020012332--------------------------------------
12333
12334It is possible to fetch samples from HTTP contents, requests and responses.
12335This application layer is also called layer 7. It is only possible to fetch the
12336data in this section when a full HTTP request or response has been parsed from
12337its respective request or response buffer. This is always the case with all
12338HTTP specific rules and for sections running with "mode http". When using TCP
12339content inspection, it may be necessary to support an inspection delay in order
12340to let the request or response come in first. These fetches may require a bit
12341more CPU resources than the layer 4 ones, but not much since the request and
12342response are indexed.
12343
12344base : string
12345 This returns the concatenation of the first Host header and the path part of
12346 the request, which starts at the first slash and ends before the question
12347 mark. It can be useful in virtual hosted environments to detect URL abuses as
12348 well as to improve shared caches efficiency. Using this with a limited size
12349 stick table also allows one to collect statistics about most commonly
12350 requested objects by host/path. With ACLs it can allow simple content
12351 switching rules involving the host and the path at the same time, such as
12352 "www.example.com/favicon.ico". See also "path" and "uri".
12353
12354 ACL derivatives :
12355 base : exact string match
12356 base_beg : prefix match
12357 base_dir : subdir match
12358 base_dom : domain match
12359 base_end : suffix match
12360 base_len : length match
12361 base_reg : regex match
12362 base_sub : substring match
12363
12364base32 : integer
12365 This returns a 32-bit hash of the value returned by the "base" fetch method
12366 above. This is useful to track per-URL activity on high traffic sites without
12367 having to store all URLs. Instead a shorter hash is stored, saving a lot of
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020012368 memory. The output type is an unsigned integer. The hash function used is
12369 SDBM with full avalanche on the output. Technically, base32 is exactly equal
12370 to "base,sdbm(1)".
Willy Tarreau74ca5042013-06-11 23:12:07 +020012371
12372base32+src : binary
12373 This returns the concatenation of the base32 fetch above and the src fetch
12374 below. The resulting type is of type binary, with a size of 8 or 20 bytes
12375 depending on the source address family. This can be used to track per-IP,
12376 per-URL counters.
12377
William Lallemand65ad6e12014-01-31 15:08:02 +010012378capture.req.hdr(<idx>) : string
12379 This extracts the content of the header captured by the "capture request
12380 header", idx is the position of the capture keyword in the configuration.
12381 The first entry is an index of 0. See also: "capture request header".
12382
12383capture.req.method : string
12384 This extracts the METHOD of an HTTP request. It can be used in both request
12385 and response. Unlike "method", it can be used in both request and response
12386 because it's allocated.
12387
12388capture.req.uri : string
12389 This extracts the request's URI, which starts at the first slash and ends
12390 before the first space in the request (without the host part). Unlike "path"
12391 and "url", it can be used in both request and response because it's
12392 allocated.
12393
Willy Tarreau3c1b5ec2014-04-24 23:41:57 +020012394capture.req.ver : string
12395 This extracts the request's HTTP version and returns either "HTTP/1.0" or
12396 "HTTP/1.1". Unlike "req.ver", it can be used in both request, response, and
12397 logs because it relies on a persistent flag.
12398
William Lallemand65ad6e12014-01-31 15:08:02 +010012399capture.res.hdr(<idx>) : string
12400 This extracts the content of the header captured by the "capture response
12401 header", idx is the position of the capture keyword in the configuration.
12402 The first entry is an index of 0.
12403 See also: "capture response header"
12404
Willy Tarreau3c1b5ec2014-04-24 23:41:57 +020012405capture.res.ver : string
12406 This extracts the response's HTTP version and returns either "HTTP/1.0" or
12407 "HTTP/1.1". Unlike "res.ver", it can be used in logs because it relies on a
12408 persistent flag.
12409
Willy Tarreaua5910cc2015-05-02 00:46:08 +020012410req.body : binary
12411 This returns the HTTP request's available body as a block of data. It
12412 requires that the request body has been buffered made available using
12413 "option http-buffer-request". In case of chunked-encoded body, currently only
12414 the first chunk is analyzed.
12415
Thierry FOURNIER9826c772015-05-20 15:50:54 +020012416req.body_param([<name>) : string
12417 This fetch assumes that the body of the POST request is url-encoded. The user
12418 can check if the "content-type" contains the value
12419 "application/x-www-form-urlencoded". This extracts the first occurrence of the
12420 parameter <name> in the body, which ends before '&'. The parameter name is
12421 case-sensitive. If no name is given, any parameter will match, and the first
12422 one will be returned. The result is a string corresponding to the value of the
12423 parameter <name> as presented in the request body (no URL decoding is
12424 performed). Note that the ACL version of this fetch iterates over multiple
12425 parameters and will iteratively report all parameters values if no name is
12426 given.
12427
Willy Tarreaua5910cc2015-05-02 00:46:08 +020012428req.body_len : integer
12429 This returns the length of the HTTP request's available body in bytes. It may
12430 be lower than the advertised length if the body is larger than the buffer. It
12431 requires that the request body has been buffered made available using
12432 "option http-buffer-request".
12433
12434req.body_size : integer
12435 This returns the advertised length of the HTTP request's body in bytes. It
12436 will represent the advertised Content-Length header, or the size of the first
12437 chunk in case of chunked encoding. In order to parse the chunks, it requires
12438 that the request body has been buffered made available using
12439 "option http-buffer-request".
12440
Willy Tarreau74ca5042013-06-11 23:12:07 +020012441req.cook([<name>]) : string
12442cook([<name>]) : string (deprecated)
12443 This extracts the last occurrence of the cookie name <name> on a "Cookie"
12444 header line from the request, and returns its value as string. If no name is
12445 specified, the first cookie value is returned. When used with ACLs, all
12446 matching cookies are evaluated. Spaces around the name and the value are
12447 ignored as requested by the Cookie header specification (RFC6265). The cookie
12448 name is case-sensitive. Empty cookies are valid, so an empty cookie may very
12449 well return an empty value if it is present. Use the "found" match to detect
12450 presence. Use the res.cook() variant for response cookies sent by the server.
12451
12452 ACL derivatives :
12453 cook([<name>]) : exact string match
12454 cook_beg([<name>]) : prefix match
12455 cook_dir([<name>]) : subdir match
12456 cook_dom([<name>]) : domain match
12457 cook_end([<name>]) : suffix match
12458 cook_len([<name>]) : length match
12459 cook_reg([<name>]) : regex match
12460 cook_sub([<name>]) : substring match
Willy Tarreaud63335a2010-02-26 12:56:52 +010012461
Willy Tarreau74ca5042013-06-11 23:12:07 +020012462req.cook_cnt([<name>]) : integer
12463cook_cnt([<name>]) : integer (deprecated)
12464 Returns an integer value representing the number of occurrences of the cookie
12465 <name> in the request, or all cookies if <name> is not specified.
Willy Tarreaud63335a2010-02-26 12:56:52 +010012466
Willy Tarreau74ca5042013-06-11 23:12:07 +020012467req.cook_val([<name>]) : integer
12468cook_val([<name>]) : integer (deprecated)
12469 This extracts the last occurrence of the cookie name <name> on a "Cookie"
12470 header line from the request, and converts its value to an integer which is
12471 returned. If no name is specified, the first cookie value is returned. When
12472 used in ACLs, all matching names are iterated over until a value matches.
Willy Tarreau0e698542011-09-16 08:32:32 +020012473
Willy Tarreau74ca5042013-06-11 23:12:07 +020012474cookie([<name>]) : string (deprecated)
12475 This extracts the last occurrence of the cookie name <name> on a "Cookie"
12476 header line from the request, or a "Set-Cookie" header from the response, and
12477 returns its value as a string. A typical use is to get multiple clients
12478 sharing a same profile use the same server. This can be similar to what
12479 "appsession" does with the "request-learn" statement, but with support for
12480 multi-peer synchronization and state keeping across restarts. If no name is
12481 specified, the first cookie value is returned. This fetch should not be used
12482 anymore and should be replaced by req.cook() or res.cook() instead as it
12483 ambiguously uses the direction based on the context where it is used.
12484 See also : "appsession".
Willy Tarreaud63335a2010-02-26 12:56:52 +010012485
Willy Tarreau74ca5042013-06-11 23:12:07 +020012486hdr([<name>[,<occ>]]) : string
12487 This is equivalent to req.hdr() when used on requests, and to res.hdr() when
12488 used on responses. Please refer to these respective fetches for more details.
12489 In case of doubt about the fetch direction, please use the explicit ones.
12490 Note that contrary to the hdr() sample fetch method, the hdr_* ACL keywords
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030012491 unambiguously apply to the request headers.
Willy Tarreaud63335a2010-02-26 12:56:52 +010012492
Willy Tarreau74ca5042013-06-11 23:12:07 +020012493req.fhdr(<name>[,<occ>]) : string
12494 This extracts the last occurrence of header <name> in an HTTP request. When
12495 used from an ACL, all occurrences are iterated over until a match is found.
12496 Optionally, a specific occurrence might be specified as a position number.
12497 Positive values indicate a position from the first occurrence, with 1 being
12498 the first one. Negative values indicate positions relative to the last one,
12499 with -1 being the last one. It differs from req.hdr() in that any commas
12500 present in the value are returned and are not used as delimiters. This is
12501 sometimes useful with headers such as User-Agent.
Willy Tarreaud63335a2010-02-26 12:56:52 +010012502
Willy Tarreau74ca5042013-06-11 23:12:07 +020012503req.fhdr_cnt([<name>]) : integer
12504 Returns an integer value representing the number of occurrences of request
12505 header field name <name>, or the total number of header fields if <name> is
12506 not specified. Contrary to its req.hdr_cnt() cousin, this function returns
12507 the number of full line headers and does not stop on commas.
Willy Tarreaud63335a2010-02-26 12:56:52 +010012508
Willy Tarreau74ca5042013-06-11 23:12:07 +020012509req.hdr([<name>[,<occ>]]) : string
12510 This extracts the last occurrence of header <name> in an HTTP request. When
12511 used from an ACL, all occurrences are iterated over until a match is found.
12512 Optionally, a specific occurrence might be specified as a position number.
12513 Positive values indicate a position from the first occurrence, with 1 being
12514 the first one. Negative values indicate positions relative to the last one,
12515 with -1 being the last one. A typical use is with the X-Forwarded-For header
12516 once converted to IP, associated with an IP stick-table. The function
12517 considers any comma as a delimiter for distinct values. If full-line headers
12518 are desired instead, use req.fhdr(). Please carefully check RFC2616 to know
12519 how certain headers are supposed to be parsed. Also, some of them are case
12520 insensitive (eg: Connection).
Willy Tarreaud63335a2010-02-26 12:56:52 +010012521
Willy Tarreau74ca5042013-06-11 23:12:07 +020012522 ACL derivatives :
12523 hdr([<name>[,<occ>]]) : exact string match
12524 hdr_beg([<name>[,<occ>]]) : prefix match
12525 hdr_dir([<name>[,<occ>]]) : subdir match
12526 hdr_dom([<name>[,<occ>]]) : domain match
12527 hdr_end([<name>[,<occ>]]) : suffix match
12528 hdr_len([<name>[,<occ>]]) : length match
12529 hdr_reg([<name>[,<occ>]]) : regex match
12530 hdr_sub([<name>[,<occ>]]) : substring match
12531
12532req.hdr_cnt([<name>]) : integer
12533hdr_cnt([<header>]) : integer (deprecated)
12534 Returns an integer value representing the number of occurrences of request
12535 header field name <name>, or the total number of header field values if
12536 <name> is not specified. It is important to remember that one header line may
12537 count as several headers if it has several values. The function considers any
12538 comma as a delimiter for distinct values. If full-line headers are desired
12539 instead, req.fhdr_cnt() should be used instead. With ACLs, it can be used to
12540 detect presence, absence or abuse of a specific header, as well as to block
12541 request smuggling attacks by rejecting requests which contain more than one
12542 of certain headers. See "req.hdr" for more information on header matching.
12543
12544req.hdr_ip([<name>[,<occ>]]) : ip
12545hdr_ip([<name>[,<occ>]]) : ip (deprecated)
12546 This extracts the last occurrence of header <name> in an HTTP request,
12547 converts it to an IPv4 or IPv6 address and returns this address. When used
12548 with ACLs, all occurrences are checked, and if <name> is omitted, every value
12549 of every header is checked. Optionally, a specific occurrence might be
12550 specified as a position number. Positive values indicate a position from the
12551 first occurrence, with 1 being the first one. Negative values indicate
12552 positions relative to the last one, with -1 being the last one. A typical use
12553 is with the X-Forwarded-For and X-Client-IP headers.
12554
12555req.hdr_val([<name>[,<occ>]]) : integer
12556hdr_val([<name>[,<occ>]]) : integer (deprecated)
12557 This extracts the last occurrence of header <name> in an HTTP request, and
12558 converts it to an integer value. When used with ACLs, all occurrences are
12559 checked, and if <name> is omitted, every value of every header is checked.
12560 Optionally, a specific occurrence might be specified as a position number.
12561 Positive values indicate a position from the first occurrence, with 1 being
12562 the first one. Negative values indicate positions relative to the last one,
12563 with -1 being the last one. A typical use is with the X-Forwarded-For header.
12564
12565http_auth(<userlist>) : boolean
12566 Returns a boolean indicating whether the authentication data received from
12567 the client match a username & password stored in the specified userlist. This
12568 fetch function is not really useful outside of ACLs. Currently only http
12569 basic auth is supported.
12570
Thierry FOURNIER9eec0a62014-01-22 18:38:02 +010012571http_auth_group(<userlist>) : string
12572 Returns a string corresponding to the user name found in the authentication
12573 data received from the client if both the user name and password are valid
12574 according to the specified userlist. The main purpose is to use it in ACLs
12575 where it is then checked whether the user belongs to any group within a list.
Willy Tarreau74ca5042013-06-11 23:12:07 +020012576 This fetch function is not really useful outside of ACLs. Currently only http
12577 basic auth is supported.
12578
12579 ACL derivatives :
Thierry FOURNIER9eec0a62014-01-22 18:38:02 +010012580 http_auth_group(<userlist>) : group ...
12581 Returns true when the user extracted from the request and whose password is
12582 valid according to the specified userlist belongs to at least one of the
12583 groups.
Willy Tarreau74ca5042013-06-11 23:12:07 +020012584
12585http_first_req : boolean
Willy Tarreau7f18e522010-10-22 20:04:13 +020012586 Returns true when the request being processed is the first one of the
12587 connection. This can be used to add or remove headers that may be missing
Willy Tarreau74ca5042013-06-11 23:12:07 +020012588 from some requests when a request is not the first one, or to help grouping
12589 requests in the logs.
Willy Tarreau7f18e522010-10-22 20:04:13 +020012590
Willy Tarreau74ca5042013-06-11 23:12:07 +020012591method : integer + string
12592 Returns an integer value corresponding to the method in the HTTP request. For
12593 example, "GET" equals 1 (check sources to establish the matching). Value 9
12594 means "other method" and may be converted to a string extracted from the
12595 stream. This should not be used directly as a sample, this is only meant to
12596 be used from ACLs, which transparently convert methods from patterns to these
12597 integer + string values. Some predefined ACL already check for most common
12598 methods.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012599
Willy Tarreau74ca5042013-06-11 23:12:07 +020012600 ACL derivatives :
12601 method : case insensitive method match
Willy Tarreau6a06a402007-07-15 20:15:28 +020012602
Willy Tarreau74ca5042013-06-11 23:12:07 +020012603 Example :
12604 # only accept GET and HEAD requests
12605 acl valid_method method GET HEAD
12606 http-request deny if ! valid_method
Willy Tarreau6a06a402007-07-15 20:15:28 +020012607
Willy Tarreau74ca5042013-06-11 23:12:07 +020012608path : string
12609 This extracts the request's URL path, which starts at the first slash and
12610 ends before the question mark (without the host part). A typical use is with
12611 prefetch-capable caches, and with portals which need to aggregate multiple
12612 information from databases and keep them in caches. Note that with outgoing
12613 caches, it would be wiser to use "url" instead. With ACLs, it's typically
12614 used to match exact file names (eg: "/login.php"), or directory parts using
12615 the derivative forms. See also the "url" and "base" fetch methods.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012616
Willy Tarreau74ca5042013-06-11 23:12:07 +020012617 ACL derivatives :
12618 path : exact string match
12619 path_beg : prefix match
12620 path_dir : subdir match
12621 path_dom : domain match
12622 path_end : suffix match
12623 path_len : length match
12624 path_reg : regex match
12625 path_sub : substring match
Willy Tarreau6a06a402007-07-15 20:15:28 +020012626
Willy Tarreau49ad95c2015-01-19 15:06:26 +010012627query : string
12628 This extracts the request's query string, which starts after the first
12629 question mark. If no question mark is present, this fetch returns nothing. If
12630 a question mark is present but nothing follows, it returns an empty string.
12631 This means it's possible to easily know whether a query string is present
12632 using the "found" matching method. This fetch is the completemnt of "path"
12633 which stops before the question mark.
12634
Willy Tarreaueb27ec72015-02-20 13:55:29 +010012635req.hdr_names([<delim>]) : string
12636 This builds a string made from the concatenation of all header names as they
12637 appear in the request when the rule is evaluated. The default delimiter is
12638 the comma (',') but it may be overridden as an optional argument <delim>. In
12639 this case, only the first character of <delim> is considered.
12640
Willy Tarreau74ca5042013-06-11 23:12:07 +020012641req.ver : string
12642req_ver : string (deprecated)
12643 Returns the version string from the HTTP request, for example "1.1". This can
12644 be useful for logs, but is mostly there for ACL. Some predefined ACL already
12645 check for versions 1.0 and 1.1.
Willy Tarreaud63335a2010-02-26 12:56:52 +010012646
Willy Tarreau74ca5042013-06-11 23:12:07 +020012647 ACL derivatives :
12648 req_ver : exact string match
Willy Tarreau0e698542011-09-16 08:32:32 +020012649
Willy Tarreau74ca5042013-06-11 23:12:07 +020012650res.comp : boolean
12651 Returns the boolean "true" value if the response has been compressed by
12652 HAProxy, otherwise returns boolean "false". This may be used to add
12653 information in the logs.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012654
Willy Tarreau74ca5042013-06-11 23:12:07 +020012655res.comp_algo : string
12656 Returns a string containing the name of the algorithm used if the response
12657 was compressed by HAProxy, for example : "deflate". This may be used to add
12658 some information in the logs.
Willy Tarreaud63335a2010-02-26 12:56:52 +010012659
Willy Tarreau74ca5042013-06-11 23:12:07 +020012660res.cook([<name>]) : string
12661scook([<name>]) : string (deprecated)
12662 This extracts the last occurrence of the cookie name <name> on a "Set-Cookie"
12663 header line from the response, and returns its value as string. If no name is
12664 specified, the first cookie value is returned.
Willy Tarreau0ce3aa02012-04-25 18:46:33 +020012665
Willy Tarreau74ca5042013-06-11 23:12:07 +020012666 ACL derivatives :
12667 scook([<name>] : exact string match
Willy Tarreau0ce3aa02012-04-25 18:46:33 +020012668
Willy Tarreau74ca5042013-06-11 23:12:07 +020012669res.cook_cnt([<name>]) : integer
12670scook_cnt([<name>]) : integer (deprecated)
12671 Returns an integer value representing the number of occurrences of the cookie
12672 <name> in the response, or all cookies if <name> is not specified. This is
12673 mostly useful when combined with ACLs to detect suspicious responses.
Willy Tarreaud63335a2010-02-26 12:56:52 +010012674
Willy Tarreau74ca5042013-06-11 23:12:07 +020012675res.cook_val([<name>]) : integer
12676scook_val([<name>]) : integer (deprecated)
12677 This extracts the last occurrence of the cookie name <name> on a "Set-Cookie"
12678 header line from the response, and converts its value to an integer which is
12679 returned. If no name is specified, the first cookie value is returned.
Willy Tarreaud63335a2010-02-26 12:56:52 +010012680
Willy Tarreau74ca5042013-06-11 23:12:07 +020012681res.fhdr([<name>[,<occ>]]) : string
12682 This extracts the last occurrence of header <name> in an HTTP response, or of
12683 the last header if no <name> is specified. Optionally, a specific occurrence
12684 might be specified as a position number. Positive values indicate a position
12685 from the first occurrence, with 1 being the first one. Negative values
12686 indicate positions relative to the last one, with -1 being the last one. It
12687 differs from res.hdr() in that any commas present in the value are returned
12688 and are not used as delimiters. If this is not desired, the res.hdr() fetch
12689 should be used instead. This is sometimes useful with headers such as Date or
12690 Expires.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012691
Willy Tarreau74ca5042013-06-11 23:12:07 +020012692res.fhdr_cnt([<name>]) : integer
12693 Returns an integer value representing the number of occurrences of response
12694 header field name <name>, or the total number of header fields if <name> is
12695 not specified. Contrary to its res.hdr_cnt() cousin, this function returns
12696 the number of full line headers and does not stop on commas. If this is not
12697 desired, the res.hdr_cnt() fetch should be used instead.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012698
Willy Tarreau74ca5042013-06-11 23:12:07 +020012699res.hdr([<name>[,<occ>]]) : string
12700shdr([<name>[,<occ>]]) : string (deprecated)
12701 This extracts the last occurrence of header <name> in an HTTP response, or of
12702 the last header if no <name> is specified. Optionally, a specific occurrence
12703 might be specified as a position number. Positive values indicate a position
12704 from the first occurrence, with 1 being the first one. Negative values
12705 indicate positions relative to the last one, with -1 being the last one. This
12706 can be useful to learn some data into a stick-table. The function considers
12707 any comma as a delimiter for distinct values. If this is not desired, the
12708 res.fhdr() fetch should be used instead.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012709
Willy Tarreau74ca5042013-06-11 23:12:07 +020012710 ACL derivatives :
12711 shdr([<name>[,<occ>]]) : exact string match
12712 shdr_beg([<name>[,<occ>]]) : prefix match
12713 shdr_dir([<name>[,<occ>]]) : subdir match
12714 shdr_dom([<name>[,<occ>]]) : domain match
12715 shdr_end([<name>[,<occ>]]) : suffix match
12716 shdr_len([<name>[,<occ>]]) : length match
12717 shdr_reg([<name>[,<occ>]]) : regex match
12718 shdr_sub([<name>[,<occ>]]) : substring match
12719
12720res.hdr_cnt([<name>]) : integer
12721shdr_cnt([<name>]) : integer (deprecated)
12722 Returns an integer value representing the number of occurrences of response
12723 header field name <name>, or the total number of header fields if <name> is
12724 not specified. The function considers any comma as a delimiter for distinct
12725 values. If this is not desired, the res.fhdr_cnt() fetch should be used
12726 instead.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012727
Willy Tarreau74ca5042013-06-11 23:12:07 +020012728res.hdr_ip([<name>[,<occ>]]) : ip
12729shdr_ip([<name>[,<occ>]]) : ip (deprecated)
12730 This extracts the last occurrence of header <name> in an HTTP response,
12731 convert it to an IPv4 or IPv6 address and returns this address. Optionally, a
12732 specific occurrence might be specified as a position number. Positive values
12733 indicate a position from the first occurrence, with 1 being the first one.
12734 Negative values indicate positions relative to the last one, with -1 being
12735 the last one. This can be useful to learn some data into a stick table.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012736
Willy Tarreaueb27ec72015-02-20 13:55:29 +010012737res.hdr_names([<delim>]) : string
12738 This builds a string made from the concatenation of all header names as they
12739 appear in the response when the rule is evaluated. The default delimiter is
12740 the comma (',') but it may be overridden as an optional argument <delim>. In
12741 this case, only the first character of <delim> is considered.
12742
Willy Tarreau74ca5042013-06-11 23:12:07 +020012743res.hdr_val([<name>[,<occ>]]) : integer
12744shdr_val([<name>[,<occ>]]) : integer (deprecated)
12745 This extracts the last occurrence of header <name> in an HTTP response, and
12746 converts it to an integer value. Optionally, a specific occurrence might be
12747 specified as a position number. Positive values indicate a position from the
12748 first occurrence, with 1 being the first one. Negative values indicate
12749 positions relative to the last one, with -1 being the last one. This can be
12750 useful to learn some data into a stick table.
Alexandre Cassen5eb1a902007-11-29 15:43:32 +010012751
Willy Tarreau74ca5042013-06-11 23:12:07 +020012752res.ver : string
12753resp_ver : string (deprecated)
12754 Returns the version string from the HTTP response, for example "1.1". This
12755 can be useful for logs, but is mostly there for ACL.
Willy Tarreau0e698542011-09-16 08:32:32 +020012756
Willy Tarreau74ca5042013-06-11 23:12:07 +020012757 ACL derivatives :
12758 resp_ver : exact string match
Alexandre Cassen5eb1a902007-11-29 15:43:32 +010012759
Willy Tarreau74ca5042013-06-11 23:12:07 +020012760set-cookie([<name>]) : string (deprecated)
12761 This extracts the last occurrence of the cookie name <name> on a "Set-Cookie"
12762 header line from the response and uses the corresponding value to match. This
12763 can be comparable to what "appsession" does with default options, but with
12764 support for multi-peer synchronization and state keeping across restarts.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +010012765
Willy Tarreau74ca5042013-06-11 23:12:07 +020012766 This fetch function is deprecated and has been superseded by the "res.cook"
12767 fetch. This keyword will disappear soon.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +010012768
Willy Tarreau74ca5042013-06-11 23:12:07 +020012769 See also : "appsession"
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020012770
Willy Tarreau74ca5042013-06-11 23:12:07 +020012771status : integer
12772 Returns an integer containing the HTTP status code in the HTTP response, for
12773 example, 302. It is mostly used within ACLs and integer ranges, for example,
12774 to remove any Location header if the response is not a 3xx.
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020012775
Willy Tarreau74ca5042013-06-11 23:12:07 +020012776url : string
12777 This extracts the request's URL as presented in the request. A typical use is
12778 with prefetch-capable caches, and with portals which need to aggregate
12779 multiple information from databases and keep them in caches. With ACLs, using
12780 "path" is preferred over using "url", because clients may send a full URL as
12781 is normally done with proxies. The only real use is to match "*" which does
12782 not match in "path", and for which there is already a predefined ACL. See
12783 also "path" and "base".
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020012784
Willy Tarreau74ca5042013-06-11 23:12:07 +020012785 ACL derivatives :
12786 url : exact string match
12787 url_beg : prefix match
12788 url_dir : subdir match
12789 url_dom : domain match
12790 url_end : suffix match
12791 url_len : length match
12792 url_reg : regex match
12793 url_sub : substring match
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020012794
Willy Tarreau74ca5042013-06-11 23:12:07 +020012795url_ip : ip
12796 This extracts the IP address from the request's URL when the host part is
12797 presented as an IP address. Its use is very limited. For instance, a
12798 monitoring system might use this field as an alternative for the source IP in
12799 order to test what path a given source address would follow, or to force an
12800 entry in a table for a given source address. With ACLs it can be used to
12801 restrict access to certain systems through a proxy, for example when combined
12802 with option "http_proxy".
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020012803
Willy Tarreau74ca5042013-06-11 23:12:07 +020012804url_port : integer
12805 This extracts the port part from the request's URL. Note that if the port is
12806 not specified in the request, port 80 is assumed. With ACLs it can be used to
12807 restrict access to certain systems through a proxy, for example when combined
12808 with option "http_proxy".
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020012809
Willy Tarreau1ede1da2015-05-07 16:06:18 +020012810urlp([<name>[,<delim>]]) : string
12811url_param([<name>[,<delim>]]) : string
Willy Tarreau74ca5042013-06-11 23:12:07 +020012812 This extracts the first occurrence of the parameter <name> in the query
12813 string, which begins after either '?' or <delim>, and which ends before '&',
Willy Tarreau1ede1da2015-05-07 16:06:18 +020012814 ';' or <delim>. The parameter name is case-sensitive. If no name is given,
12815 any parameter will match, and the first one will be returned. The result is
12816 a string corresponding to the value of the parameter <name> as presented in
12817 the request (no URL decoding is performed). This can be used for session
Willy Tarreau74ca5042013-06-11 23:12:07 +020012818 stickiness based on a client ID, to extract an application cookie passed as a
12819 URL parameter, or in ACLs to apply some checks. Note that the ACL version of
Willy Tarreau1ede1da2015-05-07 16:06:18 +020012820 this fetch iterates over multiple parameters and will iteratively report all
12821 parameters values if no name is given
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020012822
Willy Tarreau74ca5042013-06-11 23:12:07 +020012823 ACL derivatives :
12824 urlp(<name>[,<delim>]) : exact string match
12825 urlp_beg(<name>[,<delim>]) : prefix match
12826 urlp_dir(<name>[,<delim>]) : subdir match
12827 urlp_dom(<name>[,<delim>]) : domain match
12828 urlp_end(<name>[,<delim>]) : suffix match
12829 urlp_len(<name>[,<delim>]) : length match
12830 urlp_reg(<name>[,<delim>]) : regex match
12831 urlp_sub(<name>[,<delim>]) : substring match
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020012832
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020012833
Willy Tarreau74ca5042013-06-11 23:12:07 +020012834 Example :
12835 # match http://example.com/foo?PHPSESSIONID=some_id
12836 stick on urlp(PHPSESSIONID)
12837 # match http://example.com/foo;JSESSIONID=some_id
12838 stick on urlp(JSESSIONID,;)
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020012839
Willy Tarreau1ede1da2015-05-07 16:06:18 +020012840urlp_val([<name>[,<delim>])] : integer
Willy Tarreau74ca5042013-06-11 23:12:07 +020012841 See "urlp" above. This one extracts the URL parameter <name> in the request
12842 and converts it to an integer value. This can be used for session stickiness
12843 based on a user ID for example, or with ACLs to match a page number or price.
Willy Tarreaua9fddca2012-07-31 07:51:48 +020012844
Willy Tarreau198a7442008-01-17 12:05:32 +010012845
Willy Tarreau74ca5042013-06-11 23:12:07 +0200128467.4. Pre-defined ACLs
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012847---------------------
Willy Tarreauced27012008-01-17 20:35:34 +010012848
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012849Some predefined ACLs are hard-coded so that they do not have to be declared in
12850every frontend which needs them. They all have their names in upper case in
Patrick Mézard2382ad62010-05-09 10:43:32 +020012851order to avoid confusion. Their equivalence is provided below.
Willy Tarreauced27012008-01-17 20:35:34 +010012852
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012853ACL name Equivalent to Usage
12854---------------+-----------------------------+---------------------------------
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012855FALSE always_false never match
Willy Tarreau2492d5b2009-07-11 00:06:00 +020012856HTTP req_proto_http match if protocol is valid HTTP
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012857HTTP_1.0 req_ver 1.0 match HTTP version 1.0
12858HTTP_1.1 req_ver 1.1 match HTTP version 1.1
Willy Tarreaud63335a2010-02-26 12:56:52 +010012859HTTP_CONTENT hdr_val(content-length) gt 0 match an existing content-length
12860HTTP_URL_ABS url_reg ^[^/:]*:// match absolute URL with scheme
12861HTTP_URL_SLASH url_beg / match URL beginning with "/"
12862HTTP_URL_STAR url * match URL equal to "*"
12863LOCALHOST src 127.0.0.1/8 match connection from local host
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012864METH_CONNECT method CONNECT match HTTP CONNECT method
12865METH_GET method GET HEAD match HTTP GET or HEAD method
12866METH_HEAD method HEAD match HTTP HEAD method
12867METH_OPTIONS method OPTIONS match HTTP OPTIONS method
12868METH_POST method POST match HTTP POST method
12869METH_TRACE method TRACE match HTTP TRACE method
Emeric Brunbede3d02009-06-30 17:54:00 +020012870RDP_COOKIE req_rdp_cookie_cnt gt 0 match presence of an RDP cookie
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012871REQ_CONTENT req_len gt 0 match data in the request buffer
Willy Tarreaud63335a2010-02-26 12:56:52 +010012872TRUE always_true always match
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012873WAIT_END wait_end wait for end of content analysis
12874---------------+-----------------------------+---------------------------------
Willy Tarreauced27012008-01-17 20:35:34 +010012875
Willy Tarreaub937b7e2010-01-12 15:27:54 +010012876
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200128778. Logging
12878----------
Willy Tarreau844e3c52008-01-11 16:28:18 +010012879
Willy Tarreaucc6c8912009-02-22 10:53:55 +010012880One of HAProxy's strong points certainly lies is its precise logs. It probably
12881provides the finest level of information available for such a product, which is
12882very important for troubleshooting complex environments. Standard information
12883provided in logs include client ports, TCP/HTTP state timers, precise session
12884state at termination and precise termination cause, information about decisions
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010012885to direct traffic to a server, and of course the ability to capture arbitrary
Willy Tarreaucc6c8912009-02-22 10:53:55 +010012886headers.
12887
12888In order to improve administrators reactivity, it offers a great transparency
12889about encountered problems, both internal and external, and it is possible to
12890send logs to different sources at the same time with different level filters :
12891
12892 - global process-level logs (system errors, start/stop, etc..)
12893 - per-instance system and internal errors (lack of resource, bugs, ...)
12894 - per-instance external troubles (servers up/down, max connections)
12895 - per-instance activity (client connections), either at the establishment or
12896 at the termination.
12897
12898The ability to distribute different levels of logs to different log servers
12899allow several production teams to interact and to fix their problems as soon
12900as possible. For example, the system team might monitor system-wide errors,
12901while the application team might be monitoring the up/down for their servers in
12902real time, and the security team might analyze the activity logs with one hour
12903delay.
12904
12905
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200129068.1. Log levels
12907---------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010012908
Simon Hormandf791f52011-05-29 15:01:10 +090012909TCP and HTTP connections can be logged with information such as the date, time,
Willy Tarreaucc6c8912009-02-22 10:53:55 +010012910source IP address, destination address, connection duration, response times,
Simon Hormandf791f52011-05-29 15:01:10 +090012911HTTP request, HTTP return code, number of bytes transmitted, conditions
12912in which the session ended, and even exchanged cookies values. For example
12913track a particular user's problems. All messages may be sent to up to two
12914syslog servers. Check the "log" keyword in section 4.2 for more information
12915about log facilities.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010012916
12917
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200129188.2. Log formats
12919----------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010012920
William Lallemand48940402012-01-30 16:47:22 +010012921HAProxy supports 5 log formats. Several fields are common between these formats
Simon Hormandf791f52011-05-29 15:01:10 +090012922and will be detailed in the following sections. A few of them may vary
12923slightly with the configuration, due to indicators specific to certain
12924options. The supported formats are as follows :
Willy Tarreaucc6c8912009-02-22 10:53:55 +010012925
12926 - the default format, which is very basic and very rarely used. It only
12927 provides very basic information about the incoming connection at the moment
12928 it is accepted : source IP:port, destination IP:port, and frontend-name.
12929 This mode will eventually disappear so it will not be described to great
12930 extents.
12931
12932 - the TCP format, which is more advanced. This format is enabled when "option
12933 tcplog" is set on the frontend. HAProxy will then usually wait for the
12934 connection to terminate before logging. This format provides much richer
12935 information, such as timers, connection counts, queue size, etc... This
12936 format is recommended for pure TCP proxies.
12937
12938 - the HTTP format, which is the most advanced for HTTP proxying. This format
12939 is enabled when "option httplog" is set on the frontend. It provides the
12940 same information as the TCP format with some HTTP-specific fields such as
12941 the request, the status code, and captures of headers and cookies. This
12942 format is recommended for HTTP proxies.
12943
Emeric Brun3a058f32009-06-30 18:26:00 +020012944 - the CLF HTTP format, which is equivalent to the HTTP format, but with the
12945 fields arranged in the same order as the CLF format. In this mode, all
12946 timers, captures, flags, etc... appear one per field after the end of the
12947 common fields, in the same order they appear in the standard HTTP format.
12948
William Lallemand48940402012-01-30 16:47:22 +010012949 - the custom log format, allows you to make your own log line.
12950
Willy Tarreaucc6c8912009-02-22 10:53:55 +010012951Next sections will go deeper into details for each of these formats. Format
12952specification will be performed on a "field" basis. Unless stated otherwise, a
12953field is a portion of text delimited by any number of spaces. Since syslog
12954servers are susceptible of inserting fields at the beginning of a line, it is
12955always assumed that the first field is the one containing the process name and
12956identifier.
12957
12958Note : Since log lines may be quite long, the log examples in sections below
12959 might be broken into multiple lines. The example log lines will be
12960 prefixed with 3 closing angle brackets ('>>>') and each time a log is
12961 broken into multiple lines, each non-final line will end with a
12962 backslash ('\') and the next line will start indented by two characters.
12963
12964
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200129658.2.1. Default log format
12966-------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010012967
12968This format is used when no specific option is set. The log is emitted as soon
12969as the connection is accepted. One should note that this currently is the only
12970format which logs the request's destination IP and ports.
12971
12972 Example :
12973 listen www
12974 mode http
12975 log global
12976 server srv1 127.0.0.1:8000
12977
12978 >>> Feb 6 12:12:09 localhost \
12979 haproxy[14385]: Connect from 10.0.1.2:33312 to 10.0.3.31:8012 \
12980 (www/HTTP)
12981
12982 Field Format Extract from the example above
12983 1 process_name '[' pid ']:' haproxy[14385]:
12984 2 'Connect from' Connect from
12985 3 source_ip ':' source_port 10.0.1.2:33312
12986 4 'to' to
12987 5 destination_ip ':' destination_port 10.0.3.31:8012
12988 6 '(' frontend_name '/' mode ')' (www/HTTP)
12989
12990Detailed fields description :
12991 - "source_ip" is the IP address of the client which initiated the connection.
12992 - "source_port" is the TCP port of the client which initiated the connection.
12993 - "destination_ip" is the IP address the client connected to.
12994 - "destination_port" is the TCP port the client connected to.
12995 - "frontend_name" is the name of the frontend (or listener) which received
12996 and processed the connection.
12997 - "mode is the mode the frontend is operating (TCP or HTTP).
12998
Willy Tarreauceb24bc2010-11-09 12:46:41 +010012999In case of a UNIX socket, the source and destination addresses are marked as
13000"unix:" and the ports reflect the internal ID of the socket which accepted the
13001connection (the same ID as reported in the stats).
13002
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013003It is advised not to use this deprecated format for newer installations as it
13004will eventually disappear.
13005
13006
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200130078.2.2. TCP log format
13008---------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013009
13010The TCP format is used when "option tcplog" is specified in the frontend, and
13011is the recommended format for pure TCP proxies. It provides a lot of precious
13012information for troubleshooting. Since this format includes timers and byte
13013counts, the log is normally emitted at the end of the session. It can be
13014emitted earlier if "option logasap" is specified, which makes sense in most
13015environments with long sessions such as remote terminals. Sessions which match
13016the "monitor" rules are never logged. It is also possible not to emit logs for
13017sessions for which no data were exchanged between the client and the server, by
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020013018specifying "option dontlognull" in the frontend. Successful connections will
13019not be logged if "option dontlog-normal" is specified in the frontend. A few
13020fields may slightly vary depending on some configuration options, those are
13021marked with a star ('*') after the field name below.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013022
13023 Example :
13024 frontend fnt
13025 mode tcp
13026 option tcplog
13027 log global
13028 default_backend bck
13029
13030 backend bck
13031 server srv1 127.0.0.1:8000
13032
13033 >>> Feb 6 12:12:56 localhost \
13034 haproxy[14387]: 10.0.1.2:33313 [06/Feb/2009:12:12:51.443] fnt \
13035 bck/srv1 0/0/5007 212 -- 0/0/0/0/3 0/0
13036
13037 Field Format Extract from the example above
13038 1 process_name '[' pid ']:' haproxy[14387]:
13039 2 client_ip ':' client_port 10.0.1.2:33313
13040 3 '[' accept_date ']' [06/Feb/2009:12:12:51.443]
13041 4 frontend_name fnt
13042 5 backend_name '/' server_name bck/srv1
13043 6 Tw '/' Tc '/' Tt* 0/0/5007
13044 7 bytes_read* 212
13045 8 termination_state --
13046 9 actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 0/0/0/0/3
13047 10 srv_queue '/' backend_queue 0/0
13048
13049Detailed fields description :
13050 - "client_ip" is the IP address of the client which initiated the TCP
Willy Tarreauceb24bc2010-11-09 12:46:41 +010013051 connection to haproxy. If the connection was accepted on a UNIX socket
13052 instead, the IP address would be replaced with the word "unix". Note that
13053 when the connection is accepted on a socket configured with "accept-proxy"
13054 and the PROXY protocol is correctly used, then the logs will reflect the
13055 forwarded connection's information.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013056
13057 - "client_port" is the TCP port of the client which initiated the connection.
Willy Tarreauceb24bc2010-11-09 12:46:41 +010013058 If the connection was accepted on a UNIX socket instead, the port would be
13059 replaced with the ID of the accepting socket, which is also reported in the
13060 stats interface.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013061
13062 - "accept_date" is the exact date when the connection was received by haproxy
13063 (which might be very slightly different from the date observed on the
13064 network if there was some queuing in the system's backlog). This is usually
13065 the same date which may appear in any upstream firewall's log.
13066
13067 - "frontend_name" is the name of the frontend (or listener) which received
13068 and processed the connection.
13069
13070 - "backend_name" is the name of the backend (or listener) which was selected
13071 to manage the connection to the server. This will be the same as the
13072 frontend if no switching rule has been applied, which is common for TCP
13073 applications.
13074
13075 - "server_name" is the name of the last server to which the connection was
13076 sent, which might differ from the first one if there were connection errors
13077 and a redispatch occurred. Note that this server belongs to the backend
13078 which processed the request. If the connection was aborted before reaching
13079 a server, "<NOSRV>" is indicated instead of a server name.
13080
13081 - "Tw" is the total time in milliseconds spent waiting in the various queues.
13082 It can be "-1" if the connection was aborted before reaching the queue.
13083 See "Timers" below for more details.
13084
13085 - "Tc" is the total time in milliseconds spent waiting for the connection to
13086 establish to the final server, including retries. It can be "-1" if the
13087 connection was aborted before a connection could be established. See
13088 "Timers" below for more details.
13089
13090 - "Tt" is the total time in milliseconds elapsed between the accept and the
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030013091 last close. It covers all possible processing. There is one exception, if
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013092 "option logasap" was specified, then the time counting stops at the moment
13093 the log is emitted. In this case, a '+' sign is prepended before the value,
13094 indicating that the final one will be larger. See "Timers" below for more
13095 details.
13096
13097 - "bytes_read" is the total number of bytes transmitted from the server to
13098 the client when the log is emitted. If "option logasap" is specified, the
13099 this value will be prefixed with a '+' sign indicating that the final one
13100 may be larger. Please note that this value is a 64-bit counter, so log
13101 analysis tools must be able to handle it without overflowing.
13102
13103 - "termination_state" is the condition the session was in when the session
13104 ended. This indicates the session state, which side caused the end of
13105 session to happen, and for what reason (timeout, error, ...). The normal
13106 flags should be "--", indicating the session was closed by either end with
13107 no data remaining in buffers. See below "Session state at disconnection"
13108 for more details.
13109
13110 - "actconn" is the total number of concurrent connections on the process when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040013111 the session was logged. It is useful to detect when some per-process system
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013112 limits have been reached. For instance, if actconn is close to 512 when
13113 multiple connection errors occur, chances are high that the system limits
13114 the process to use a maximum of 1024 file descriptors and that all of them
Willy Tarreauc57f0e22009-05-10 13:12:33 +020013115 are used. See section 3 "Global parameters" to find how to tune the system.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013116
13117 - "feconn" is the total number of concurrent connections on the frontend when
13118 the session was logged. It is useful to estimate the amount of resource
13119 required to sustain high loads, and to detect when the frontend's "maxconn"
13120 has been reached. Most often when this value increases by huge jumps, it is
13121 because there is congestion on the backend servers, but sometimes it can be
13122 caused by a denial of service attack.
13123
13124 - "beconn" is the total number of concurrent connections handled by the
13125 backend when the session was logged. It includes the total number of
13126 concurrent connections active on servers as well as the number of
13127 connections pending in queues. It is useful to estimate the amount of
13128 additional servers needed to support high loads for a given application.
13129 Most often when this value increases by huge jumps, it is because there is
13130 congestion on the backend servers, but sometimes it can be caused by a
13131 denial of service attack.
13132
13133 - "srv_conn" is the total number of concurrent connections still active on
13134 the server when the session was logged. It can never exceed the server's
13135 configured "maxconn" parameter. If this value is very often close or equal
13136 to the server's "maxconn", it means that traffic regulation is involved a
13137 lot, meaning that either the server's maxconn value is too low, or that
13138 there aren't enough servers to process the load with an optimal response
13139 time. When only one of the server's "srv_conn" is high, it usually means
13140 that this server has some trouble causing the connections to take longer to
13141 be processed than on other servers.
13142
13143 - "retries" is the number of connection retries experienced by this session
13144 when trying to connect to the server. It must normally be zero, unless a
13145 server is being stopped at the same moment the connection was attempted.
13146 Frequent retries generally indicate either a network problem between
13147 haproxy and the server, or a misconfigured system backlog on the server
13148 preventing new connections from being queued. This field may optionally be
13149 prefixed with a '+' sign, indicating that the session has experienced a
13150 redispatch after the maximal retry count has been reached on the initial
13151 server. In this case, the server name appearing in the log is the one the
13152 connection was redispatched to, and not the first one, though both may
13153 sometimes be the same in case of hashing for instance. So as a general rule
13154 of thumb, when a '+' is present in front of the retry count, this count
13155 should not be attributed to the logged server.
13156
13157 - "srv_queue" is the total number of requests which were processed before
13158 this one in the server queue. It is zero when the request has not gone
13159 through the server queue. It makes it possible to estimate the approximate
13160 server's response time by dividing the time spent in queue by the number of
13161 requests in the queue. It is worth noting that if a session experiences a
13162 redispatch and passes through two server queues, their positions will be
13163 cumulated. A request should not pass through both the server queue and the
13164 backend queue unless a redispatch occurs.
13165
13166 - "backend_queue" is the total number of requests which were processed before
13167 this one in the backend's global queue. It is zero when the request has not
13168 gone through the global queue. It makes it possible to estimate the average
13169 queue length, which easily translates into a number of missing servers when
13170 divided by a server's "maxconn" parameter. It is worth noting that if a
13171 session experiences a redispatch, it may pass twice in the backend's queue,
13172 and then both positions will be cumulated. A request should not pass
13173 through both the server queue and the backend queue unless a redispatch
13174 occurs.
13175
13176
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200131778.2.3. HTTP log format
13178----------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013179
13180The HTTP format is the most complete and the best suited for HTTP proxies. It
13181is enabled by when "option httplog" is specified in the frontend. It provides
13182the same level of information as the TCP format with additional features which
13183are specific to the HTTP protocol. Just like the TCP format, the log is usually
13184emitted at the end of the session, unless "option logasap" is specified, which
13185generally only makes sense for download sites. A session which matches the
13186"monitor" rules will never logged. It is also possible not to log sessions for
13187which no data were sent by the client by specifying "option dontlognull" in the
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020013188frontend. Successful connections will not be logged if "option dontlog-normal"
13189is specified in the frontend.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013190
13191Most fields are shared with the TCP log, some being different. A few fields may
13192slightly vary depending on some configuration options. Those ones are marked
13193with a star ('*') after the field name below.
13194
13195 Example :
13196 frontend http-in
13197 mode http
13198 option httplog
13199 log global
13200 default_backend bck
13201
13202 backend static
13203 server srv1 127.0.0.1:8000
13204
13205 >>> Feb 6 12:14:14 localhost \
13206 haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
13207 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 +010013208 {} "GET /index.html HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013209
13210 Field Format Extract from the example above
13211 1 process_name '[' pid ']:' haproxy[14389]:
13212 2 client_ip ':' client_port 10.0.1.2:33317
13213 3 '[' accept_date ']' [06/Feb/2009:12:14:14.655]
13214 4 frontend_name http-in
13215 5 backend_name '/' server_name static/srv1
13216 6 Tq '/' Tw '/' Tc '/' Tr '/' Tt* 10/0/30/69/109
13217 7 status_code 200
13218 8 bytes_read* 2750
13219 9 captured_request_cookie -
13220 10 captured_response_cookie -
13221 11 termination_state ----
13222 12 actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 1/1/1/1/0
13223 13 srv_queue '/' backend_queue 0/0
13224 14 '{' captured_request_headers* '}' {haproxy.1wt.eu}
13225 15 '{' captured_response_headers* '}' {}
13226 16 '"' http_request '"' "GET /index.html HTTP/1.1"
Willy Tarreaud72758d2010-01-12 10:42:19 +010013227
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013228
13229Detailed fields description :
13230 - "client_ip" is the IP address of the client which initiated the TCP
Willy Tarreauceb24bc2010-11-09 12:46:41 +010013231 connection to haproxy. If the connection was accepted on a UNIX socket
13232 instead, the IP address would be replaced with the word "unix". Note that
13233 when the connection is accepted on a socket configured with "accept-proxy"
13234 and the PROXY protocol is correctly used, then the logs will reflect the
13235 forwarded connection's information.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013236
13237 - "client_port" is the TCP port of the client which initiated the connection.
Willy Tarreauceb24bc2010-11-09 12:46:41 +010013238 If the connection was accepted on a UNIX socket instead, the port would be
13239 replaced with the ID of the accepting socket, which is also reported in the
13240 stats interface.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013241
13242 - "accept_date" is the exact date when the TCP connection was received by
13243 haproxy (which might be very slightly different from the date observed on
13244 the network if there was some queuing in the system's backlog). This is
13245 usually the same date which may appear in any upstream firewall's log. This
13246 does not depend on the fact that the client has sent the request or not.
13247
13248 - "frontend_name" is the name of the frontend (or listener) which received
13249 and processed the connection.
13250
13251 - "backend_name" is the name of the backend (or listener) which was selected
13252 to manage the connection to the server. This will be the same as the
13253 frontend if no switching rule has been applied.
13254
13255 - "server_name" is the name of the last server to which the connection was
13256 sent, which might differ from the first one if there were connection errors
13257 and a redispatch occurred. Note that this server belongs to the backend
13258 which processed the request. If the request was aborted before reaching a
13259 server, "<NOSRV>" is indicated instead of a server name. If the request was
13260 intercepted by the stats subsystem, "<STATS>" is indicated instead.
13261
13262 - "Tq" is the total time in milliseconds spent waiting for the client to send
13263 a full HTTP request, not counting data. It can be "-1" if the connection
13264 was aborted before a complete request could be received. It should always
13265 be very small because a request generally fits in one single packet. Large
13266 times here generally indicate network trouble between the client and
13267 haproxy. See "Timers" below for more details.
13268
13269 - "Tw" is the total time in milliseconds spent waiting in the various queues.
13270 It can be "-1" if the connection was aborted before reaching the queue.
13271 See "Timers" below for more details.
13272
13273 - "Tc" is the total time in milliseconds spent waiting for the connection to
13274 establish to the final server, including retries. It can be "-1" if the
13275 request was aborted before a connection could be established. See "Timers"
13276 below for more details.
13277
13278 - "Tr" is the total time in milliseconds spent waiting for the server to send
13279 a full HTTP response, not counting data. It can be "-1" if the request was
13280 aborted before a complete response could be received. It generally matches
13281 the server's processing time for the request, though it may be altered by
13282 the amount of data sent by the client to the server. Large times here on
13283 "GET" requests generally indicate an overloaded server. See "Timers" below
13284 for more details.
13285
13286 - "Tt" is the total time in milliseconds elapsed between the accept and the
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030013287 last close. It covers all possible processing. There is one exception, if
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013288 "option logasap" was specified, then the time counting stops at the moment
13289 the log is emitted. In this case, a '+' sign is prepended before the value,
13290 indicating that the final one will be larger. See "Timers" below for more
13291 details.
13292
13293 - "status_code" is the HTTP status code returned to the client. This status
13294 is generally set by the server, but it might also be set by haproxy when
13295 the server cannot be reached or when its response is blocked by haproxy.
13296
13297 - "bytes_read" is the total number of bytes transmitted to the client when
13298 the log is emitted. This does include HTTP headers. If "option logasap" is
13299 specified, the this value will be prefixed with a '+' sign indicating that
13300 the final one may be larger. Please note that this value is a 64-bit
13301 counter, so log analysis tools must be able to handle it without
13302 overflowing.
13303
13304 - "captured_request_cookie" is an optional "name=value" entry indicating that
13305 the client had this cookie in the request. The cookie name and its maximum
13306 length are defined by the "capture cookie" statement in the frontend
13307 configuration. The field is a single dash ('-') when the option is not
13308 set. Only one cookie may be captured, it is generally used to track session
13309 ID exchanges between a client and a server to detect session crossing
13310 between clients due to application bugs. For more details, please consult
13311 the section "Capturing HTTP headers and cookies" below.
13312
13313 - "captured_response_cookie" is an optional "name=value" entry indicating
13314 that the server has returned a cookie with its response. The cookie name
13315 and its maximum length are defined by the "capture cookie" statement in the
13316 frontend configuration. The field is a single dash ('-') when the option is
13317 not set. Only one cookie may be captured, it is generally used to track
13318 session ID exchanges between a client and a server to detect session
13319 crossing between clients due to application bugs. For more details, please
13320 consult the section "Capturing HTTP headers and cookies" below.
13321
13322 - "termination_state" is the condition the session was in when the session
13323 ended. This indicates the session state, which side caused the end of
13324 session to happen, for what reason (timeout, error, ...), just like in TCP
13325 logs, and information about persistence operations on cookies in the last
13326 two characters. The normal flags should begin with "--", indicating the
13327 session was closed by either end with no data remaining in buffers. See
13328 below "Session state at disconnection" for more details.
13329
13330 - "actconn" is the total number of concurrent connections on the process when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040013331 the session was logged. It is useful to detect when some per-process system
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013332 limits have been reached. For instance, if actconn is close to 512 or 1024
13333 when multiple connection errors occur, chances are high that the system
13334 limits the process to use a maximum of 1024 file descriptors and that all
Willy Tarreauc57f0e22009-05-10 13:12:33 +020013335 of them are used. See section 3 "Global parameters" to find how to tune the
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013336 system.
13337
13338 - "feconn" is the total number of concurrent connections on the frontend when
13339 the session was logged. It is useful to estimate the amount of resource
13340 required to sustain high loads, and to detect when the frontend's "maxconn"
13341 has been reached. Most often when this value increases by huge jumps, it is
13342 because there is congestion on the backend servers, but sometimes it can be
13343 caused by a denial of service attack.
13344
13345 - "beconn" is the total number of concurrent connections handled by the
13346 backend when the session was logged. It includes the total number of
13347 concurrent connections active on servers as well as the number of
13348 connections pending in queues. It is useful to estimate the amount of
13349 additional servers needed to support high loads for a given application.
13350 Most often when this value increases by huge jumps, it is because there is
13351 congestion on the backend servers, but sometimes it can be caused by a
13352 denial of service attack.
13353
13354 - "srv_conn" is the total number of concurrent connections still active on
13355 the server when the session was logged. It can never exceed the server's
13356 configured "maxconn" parameter. If this value is very often close or equal
13357 to the server's "maxconn", it means that traffic regulation is involved a
13358 lot, meaning that either the server's maxconn value is too low, or that
13359 there aren't enough servers to process the load with an optimal response
13360 time. When only one of the server's "srv_conn" is high, it usually means
13361 that this server has some trouble causing the requests to take longer to be
13362 processed than on other servers.
13363
13364 - "retries" is the number of connection retries experienced by this session
13365 when trying to connect to the server. It must normally be zero, unless a
13366 server is being stopped at the same moment the connection was attempted.
13367 Frequent retries generally indicate either a network problem between
13368 haproxy and the server, or a misconfigured system backlog on the server
13369 preventing new connections from being queued. This field may optionally be
13370 prefixed with a '+' sign, indicating that the session has experienced a
13371 redispatch after the maximal retry count has been reached on the initial
13372 server. In this case, the server name appearing in the log is the one the
13373 connection was redispatched to, and not the first one, though both may
13374 sometimes be the same in case of hashing for instance. So as a general rule
13375 of thumb, when a '+' is present in front of the retry count, this count
13376 should not be attributed to the logged server.
13377
13378 - "srv_queue" is the total number of requests which were processed before
13379 this one in the server queue. It is zero when the request has not gone
13380 through the server queue. It makes it possible to estimate the approximate
13381 server's response time by dividing the time spent in queue by the number of
13382 requests in the queue. It is worth noting that if a session experiences a
13383 redispatch and passes through two server queues, their positions will be
13384 cumulated. A request should not pass through both the server queue and the
13385 backend queue unless a redispatch occurs.
13386
13387 - "backend_queue" is the total number of requests which were processed before
13388 this one in the backend's global queue. It is zero when the request has not
13389 gone through the global queue. It makes it possible to estimate the average
13390 queue length, which easily translates into a number of missing servers when
13391 divided by a server's "maxconn" parameter. It is worth noting that if a
13392 session experiences a redispatch, it may pass twice in the backend's queue,
13393 and then both positions will be cumulated. A request should not pass
13394 through both the server queue and the backend queue unless a redispatch
13395 occurs.
13396
13397 - "captured_request_headers" is a list of headers captured in the request due
13398 to the presence of the "capture request header" statement in the frontend.
13399 Multiple headers can be captured, they will be delimited by a vertical bar
13400 ('|'). When no capture is enabled, the braces do not appear, causing a
13401 shift of remaining fields. It is important to note that this field may
13402 contain spaces, and that using it requires a smarter log parser than when
13403 it's not used. Please consult the section "Capturing HTTP headers and
13404 cookies" below for more details.
13405
13406 - "captured_response_headers" is a list of headers captured in the response
13407 due to the presence of the "capture response header" statement in the
13408 frontend. Multiple headers can be captured, they will be delimited by a
13409 vertical bar ('|'). When no capture is enabled, the braces do not appear,
13410 causing a shift of remaining fields. It is important to note that this
13411 field may contain spaces, and that using it requires a smarter log parser
13412 than when it's not used. Please consult the section "Capturing HTTP headers
13413 and cookies" below for more details.
13414
13415 - "http_request" is the complete HTTP request line, including the method,
13416 request and HTTP version string. Non-printable characters are encoded (see
13417 below the section "Non-printable characters"). This is always the last
13418 field, and it is always delimited by quotes and is the only one which can
13419 contain quotes. If new fields are added to the log format, they will be
13420 added before this field. This field might be truncated if the request is
13421 huge and does not fit in the standard syslog buffer (1024 characters). This
13422 is the reason why this field must always remain the last one.
13423
13424
Cyril Bontédc4d9032012-04-08 21:57:39 +0200134258.2.4. Custom log format
13426------------------------
William Lallemand48940402012-01-30 16:47:22 +010013427
Willy Tarreau2beef582012-12-20 17:22:52 +010013428The directive log-format allows you to customize the logs in http mode and tcp
William Lallemandbddd4fd2012-02-27 11:23:10 +010013429mode. It takes a string as argument.
William Lallemand48940402012-01-30 16:47:22 +010013430
13431HAproxy understands some log format variables. % precedes log format variables.
13432Variables can take arguments using braces ('{}'), and multiple arguments are
13433separated by commas within the braces. Flags may be added or removed by
13434prefixing them with a '+' or '-' sign.
13435
13436Special variable "%o" may be used to propagate its flags to all other
13437variables on the same format string. This is particularly handy with quoted
13438string formats ("Q").
13439
Willy Tarreauc8368452012-12-21 00:09:23 +010013440If a variable is named between square brackets ('[' .. ']') then it is used
Willy Tarreaube722a22014-06-13 16:31:59 +020013441as a sample expression rule (see section 7.3). This it useful to add some
Willy Tarreauc8368452012-12-21 00:09:23 +010013442less common information such as the client's SSL certificate's DN, or to log
13443the key that would be used to store an entry into a stick table.
13444
William Lallemand48940402012-01-30 16:47:22 +010013445Note: spaces must be escaped. A space character is considered as a separator.
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030013446In order to emit a verbatim '%', it must be preceded by another '%' resulting
Willy Tarreau06d97f92013-12-02 17:45:48 +010013447in '%%'. HAProxy will automatically merge consecutive separators.
William Lallemand48940402012-01-30 16:47:22 +010013448
13449Flags are :
13450 * Q: quote a string
Jamie Gloudonaaa21002012-08-25 00:18:33 -040013451 * X: hexadecimal representation (IPs, Ports, %Ts, %rt, %pid)
William Lallemand48940402012-01-30 16:47:22 +010013452
13453 Example:
13454
13455 log-format %T\ %t\ Some\ Text
13456 log-format %{+Q}o\ %t\ %s\ %{-Q}r
13457
13458At the moment, the default HTTP format is defined this way :
13459
Willy Tarreau2beef582012-12-20 17:22:52 +010013460 log-format %ci:%cp\ [%t]\ %ft\ %b/%s\ %Tq/%Tw/%Tc/%Tr/%Tt\ %ST\ %B\ %CC\ \
13461 %CS\ %tsc\ %ac/%fc/%bc/%sc/%rc\ %sq/%bq\ %hr\ %hs\ %{+Q}r
William Lallemand48940402012-01-30 16:47:22 +010013462
William Lallemandbddd4fd2012-02-27 11:23:10 +010013463the default CLF format is defined this way :
William Lallemand48940402012-01-30 16:47:22 +010013464
Willy Tarreau2beef582012-12-20 17:22:52 +010013465 log-format %{+Q}o\ %{-Q}ci\ -\ -\ [%T]\ %r\ %ST\ %B\ \"\"\ \"\"\ %cp\ \
Willy Tarreau773d65f2012-10-12 14:56:11 +020013466 %ms\ %ft\ %b\ %s\ \%Tq\ %Tw\ %Tc\ %Tr\ %Tt\ %tsc\ %ac\ %fc\ \
Willy Tarreau2beef582012-12-20 17:22:52 +010013467 %bc\ %sc\ %rc\ %sq\ %bq\ %CC\ %CS\ \%hrl\ %hsl
William Lallemand48940402012-01-30 16:47:22 +010013468
William Lallemandbddd4fd2012-02-27 11:23:10 +010013469and the default TCP format is defined this way :
13470
Willy Tarreau2beef582012-12-20 17:22:52 +010013471 log-format %ci:%cp\ [%t]\ %ft\ %b/%s\ %Tw/%Tc/%Tt\ %B\ %ts\ \
William Lallemandbddd4fd2012-02-27 11:23:10 +010013472 %ac/%fc/%bc/%sc/%rc\ %sq/%bq
13473
William Lallemand48940402012-01-30 16:47:22 +010013474Please refer to the table below for currently defined variables :
13475
William Lallemandbddd4fd2012-02-27 11:23:10 +010013476 +---+------+-----------------------------------------------+-------------+
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020013477 | R | var | field name (8.2.2 and 8.2.3 for description) | type |
William Lallemandbddd4fd2012-02-27 11:23:10 +010013478 +---+------+-----------------------------------------------+-------------+
13479 | | %o | special variable, apply flags on all next var | |
13480 +---+------+-----------------------------------------------+-------------+
Willy Tarreau2beef582012-12-20 17:22:52 +010013481 | | %B | bytes_read (from server to client) | numeric |
13482 | H | %CC | captured_request_cookie | string |
13483 | H | %CS | captured_response_cookie | string |
William Lallemand5f232402012-04-05 18:02:55 +020013484 | | %H | hostname | string |
Andrew Hayworth0ebc55f2015-04-27 21:37:03 +000013485 | H | %HM | HTTP method (ex: POST) | string |
13486 | H | %HP | HTTP request URI without query string (path) | string |
13487 | H | %HU | HTTP request URI (ex: /foo?bar=baz) | string |
13488 | H | %HV | HTTP version (ex: HTTP/1.0) | string |
William Lallemanda73203e2012-03-12 12:48:57 +010013489 | | %ID | unique-id | string |
Willy Tarreau4bf99632014-06-13 12:21:40 +020013490 | | %ST | status_code | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020013491 | | %T | gmt_date_time | date |
William Lallemandbddd4fd2012-02-27 11:23:10 +010013492 | | %Tc | Tc | numeric |
Yuxans Yao4e25b012012-10-19 10:36:09 +080013493 | | %Tl | local_date_time | date |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020013494 | H | %Tq | Tq | numeric |
13495 | H | %Tr | Tr | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020013496 | | %Ts | timestamp | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010013497 | | %Tt | Tt | numeric |
13498 | | %Tw | Tw | numeric |
Willy Tarreau2beef582012-12-20 17:22:52 +010013499 | | %U | bytes_uploaded (from client to server) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010013500 | | %ac | actconn | numeric |
13501 | | %b | backend_name | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010013502 | | %bc | beconn (backend concurrent connections) | numeric |
13503 | | %bi | backend_source_ip (connecting address) | IP |
13504 | | %bp | backend_source_port (connecting address) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010013505 | | %bq | backend_queue | numeric |
Willy Tarreau2beef582012-12-20 17:22:52 +010013506 | | %ci | client_ip (accepted address) | IP |
13507 | | %cp | client_port (accepted address) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010013508 | | %f | frontend_name | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010013509 | | %fc | feconn (frontend concurrent connections) | numeric |
13510 | | %fi | frontend_ip (accepting address) | IP |
13511 | | %fp | frontend_port (accepting address) | numeric |
Willy Tarreau773d65f2012-10-12 14:56:11 +020013512 | | %ft | frontend_name_transport ('~' suffix for SSL) | string |
Willy Tarreau7346acb2014-08-28 15:03:15 +020013513 | | %lc | frontend_log_counter | numeric |
Willy Tarreaud9ed3d22014-06-13 12:23:06 +020013514 | | %hr | captured_request_headers default style | string |
13515 | | %hrl | captured_request_headers CLF style | string list |
13516 | | %hs | captured_response_headers default style | string |
13517 | | %hsl | captured_response_headers CLF style | string list |
William Lallemandbddd4fd2012-02-27 11:23:10 +010013518 | | %ms | accept date milliseconds | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020013519 | | %pid | PID | numeric |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020013520 | H | %r | http_request | string |
William Lallemandbddd4fd2012-02-27 11:23:10 +010013521 | | %rc | retries | numeric |
Willy Tarreau1f0da242014-01-25 11:01:50 +010013522 | | %rt | request_counter (HTTP req or TCP session) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010013523 | | %s | server_name | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010013524 | | %sc | srv_conn (server concurrent connections) | numeric |
13525 | | %si | server_IP (target address) | IP |
13526 | | %sp | server_port (target address) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010013527 | | %sq | srv_queue | numeric |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020013528 | S | %sslc| ssl_ciphers (ex: AES-SHA) | string |
13529 | S | %sslv| ssl_version (ex: TLSv1) | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010013530 | | %t | date_time (with millisecond resolution) | date |
William Lallemandbddd4fd2012-02-27 11:23:10 +010013531 | | %ts | termination_state | string |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020013532 | H | %tsc | termination_state with cookie status | string |
William Lallemandbddd4fd2012-02-27 11:23:10 +010013533 +---+------+-----------------------------------------------+-------------+
William Lallemand48940402012-01-30 16:47:22 +010013534
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020013535 R = Restrictions : H = mode http only ; S = SSL only
William Lallemand48940402012-01-30 16:47:22 +010013536
Willy Tarreau5f51e1a2012-12-03 18:40:10 +010013537
135388.2.5. Error log format
13539-----------------------
13540
13541When an incoming connection fails due to an SSL handshake or an invalid PROXY
13542protocol header, haproxy will log the event using a shorter, fixed line format.
13543By default, logs are emitted at the LOG_INFO level, unless the option
13544"log-separate-errors" is set in the backend, in which case the LOG_ERR level
13545will be used. Connections on which no data are exchanged (eg: probes) are not
13546logged if the "dontlognull" option is set.
13547
13548The format looks like this :
13549
13550 >>> Dec 3 18:27:14 localhost \
13551 haproxy[6103]: 127.0.0.1:56059 [03/Dec/2012:17:35:10.380] frt/f1: \
13552 Connection error during SSL handshake
13553
13554 Field Format Extract from the example above
13555 1 process_name '[' pid ']:' haproxy[6103]:
13556 2 client_ip ':' client_port 127.0.0.1:56059
13557 3 '[' accept_date ']' [03/Dec/2012:17:35:10.380]
13558 4 frontend_name "/" bind_name ":" frt/f1:
13559 5 message Connection error during SSL handshake
13560
13561These fields just provide minimal information to help debugging connection
13562failures.
13563
13564
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200135658.3. Advanced logging options
13566-----------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013567
13568Some advanced logging options are often looked for but are not easy to find out
13569just by looking at the various options. Here is an entry point for the few
13570options which can enable better logging. Please refer to the keywords reference
13571for more information about their usage.
13572
13573
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200135748.3.1. Disabling logging of external tests
13575------------------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013576
13577It is quite common to have some monitoring tools perform health checks on
13578haproxy. Sometimes it will be a layer 3 load-balancer such as LVS or any
13579commercial load-balancer, and sometimes it will simply be a more complete
13580monitoring system such as Nagios. When the tests are very frequent, users often
13581ask how to disable logging for those checks. There are three possibilities :
13582
13583 - if connections come from everywhere and are just TCP probes, it is often
13584 desired to simply disable logging of connections without data exchange, by
13585 setting "option dontlognull" in the frontend. It also disables logging of
13586 port scans, which may or may not be desired.
13587
13588 - if the connection come from a known source network, use "monitor-net" to
13589 declare this network as monitoring only. Any host in this network will then
13590 only be able to perform health checks, and their requests will not be
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030013591 logged. This is generally appropriate to designate a list of equipment
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013592 such as other load-balancers.
13593
13594 - if the tests are performed on a known URI, use "monitor-uri" to declare
13595 this URI as dedicated to monitoring. Any host sending this request will
13596 only get the result of a health-check, and the request will not be logged.
13597
13598
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200135998.3.2. Logging before waiting for the session to terminate
13600----------------------------------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013601
13602The problem with logging at end of connection is that you have no clue about
13603what is happening during very long sessions, such as remote terminal sessions
13604or large file downloads. This problem can be worked around by specifying
13605"option logasap" in the frontend. Haproxy will then log as soon as possible,
13606just before data transfer begins. This means that in case of TCP, it will still
13607log the connection status to the server, and in case of HTTP, it will log just
13608after processing the server headers. In this case, the number of bytes reported
13609is the number of header bytes sent to the client. In order to avoid confusion
13610with normal logs, the total time field and the number of bytes are prefixed
13611with a '+' sign which means that real numbers are certainly larger.
13612
13613
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200136148.3.3. Raising log level upon errors
13615------------------------------------
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020013616
13617Sometimes it is more convenient to separate normal traffic from errors logs,
13618for instance in order to ease error monitoring from log files. When the option
13619"log-separate-errors" is used, connections which experience errors, timeouts,
13620retries, redispatches or HTTP status codes 5xx will see their syslog level
13621raised from "info" to "err". This will help a syslog daemon store the log in
13622a separate file. It is very important to keep the errors in the normal traffic
13623file too, so that log ordering is not altered. You should also be careful if
13624you already have configured your syslog daemon to store all logs higher than
13625"notice" in an "admin" file, because the "err" level is higher than "notice".
13626
13627
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200136288.3.4. Disabling logging of successful connections
13629--------------------------------------------------
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020013630
13631Although this may sound strange at first, some large sites have to deal with
13632multiple thousands of logs per second and are experiencing difficulties keeping
13633them intact for a long time or detecting errors within them. If the option
13634"dontlog-normal" is set on the frontend, all normal connections will not be
13635logged. In this regard, a normal connection is defined as one without any
13636error, timeout, retry nor redispatch. In HTTP, the status code is checked too,
13637and a response with a status 5xx is not considered normal and will be logged
13638too. Of course, doing is is really discouraged as it will remove most of the
13639useful information from the logs. Do this only if you have no other
13640alternative.
13641
13642
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200136438.4. Timing events
13644------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013645
13646Timers provide a great help in troubleshooting network problems. All values are
13647reported in milliseconds (ms). These timers should be used in conjunction with
13648the session termination flags. In TCP mode with "option tcplog" set on the
13649frontend, 3 control points are reported under the form "Tw/Tc/Tt", and in HTTP
13650mode, 5 control points are reported under the form "Tq/Tw/Tc/Tr/Tt" :
13651
13652 - Tq: total time to get the client request (HTTP mode only). It's the time
13653 elapsed between the moment the client connection was accepted and the
13654 moment the proxy received the last HTTP header. The value "-1" indicates
13655 that the end of headers (empty line) has never been seen. This happens when
13656 the client closes prematurely or times out.
13657
13658 - Tw: total time spent in the queues waiting for a connection slot. It
13659 accounts for backend queue as well as the server queues, and depends on the
13660 queue size, and the time needed for the server to complete previous
13661 requests. The value "-1" means that the request was killed before reaching
13662 the queue, which is generally what happens with invalid or denied requests.
13663
13664 - Tc: total time to establish the TCP connection to the server. It's the time
13665 elapsed between the moment the proxy sent the connection request, and the
13666 moment it was acknowledged by the server, or between the TCP SYN packet and
13667 the matching SYN/ACK packet in return. The value "-1" means that the
13668 connection never established.
13669
13670 - Tr: server response time (HTTP mode only). It's the time elapsed between
13671 the moment the TCP connection was established to the server and the moment
13672 the server sent its complete response headers. It purely shows its request
13673 processing time, without the network overhead due to the data transmission.
13674 It is worth noting that when the client has data to send to the server, for
13675 instance during a POST request, the time already runs, and this can distort
13676 apparent response time. For this reason, it's generally wise not to trust
13677 too much this field for POST requests initiated from clients behind an
13678 untrusted network. A value of "-1" here means that the last the response
13679 header (empty line) was never seen, most likely because the server timeout
13680 stroke before the server managed to process the request.
13681
13682 - Tt: total session duration time, between the moment the proxy accepted it
13683 and the moment both ends were closed. The exception is when the "logasap"
13684 option is specified. In this case, it only equals (Tq+Tw+Tc+Tr), and is
13685 prefixed with a '+' sign. From this field, we can deduce "Td", the data
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030013686 transmission time, by subtracting other timers when valid :
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013687
13688 Td = Tt - (Tq + Tw + Tc + Tr)
13689
13690 Timers with "-1" values have to be excluded from this equation. In TCP
13691 mode, "Tq" and "Tr" have to be excluded too. Note that "Tt" can never be
13692 negative.
13693
13694These timers provide precious indications on trouble causes. Since the TCP
13695protocol defines retransmit delays of 3, 6, 12... seconds, we know for sure
13696that timers close to multiples of 3s are nearly always related to lost packets
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010013697due to network problems (wires, negotiation, congestion). Moreover, if "Tt" is
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013698close to a timeout value specified in the configuration, it often means that a
13699session has been aborted on timeout.
13700
13701Most common cases :
13702
13703 - If "Tq" is close to 3000, a packet has probably been lost between the
13704 client and the proxy. This is very rare on local networks but might happen
13705 when clients are on far remote networks and send large requests. It may
13706 happen that values larger than usual appear here without any network cause.
13707 Sometimes, during an attack or just after a resource starvation has ended,
13708 haproxy may accept thousands of connections in a few milliseconds. The time
13709 spent accepting these connections will inevitably slightly delay processing
13710 of other connections, and it can happen that request times in the order of
13711 a few tens of milliseconds are measured after a few thousands of new
Patrick Mezard105faca2010-06-12 17:02:46 +020013712 connections have been accepted at once. Setting "option http-server-close"
13713 may display larger request times since "Tq" also measures the time spent
13714 waiting for additional requests.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013715
13716 - If "Tc" is close to 3000, a packet has probably been lost between the
13717 server and the proxy during the server connection phase. This value should
13718 always be very low, such as 1 ms on local networks and less than a few tens
13719 of ms on remote networks.
13720
Willy Tarreau55165fe2009-05-10 12:02:55 +020013721 - If "Tr" is nearly always lower than 3000 except some rare values which seem
13722 to be the average majored by 3000, there are probably some packets lost
13723 between the proxy and the server.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013724
13725 - If "Tt" is large even for small byte counts, it generally is because
13726 neither the client nor the server decides to close the connection, for
13727 instance because both have agreed on a keep-alive connection mode. In order
13728 to solve this issue, it will be needed to specify "option httpclose" on
13729 either the frontend or the backend. If the problem persists, it means that
13730 the server ignores the "close" connection mode and expects the client to
13731 close. Then it will be required to use "option forceclose". Having the
13732 smallest possible 'Tt' is important when connection regulation is used with
13733 the "maxconn" option on the servers, since no new connection will be sent
13734 to the server until another one is released.
13735
13736Other noticeable HTTP log cases ('xx' means any value to be ignored) :
13737
13738 Tq/Tw/Tc/Tr/+Tt The "option logasap" is present on the frontend and the log
13739 was emitted before the data phase. All the timers are valid
13740 except "Tt" which is shorter than reality.
13741
13742 -1/xx/xx/xx/Tt The client was not able to send a complete request in time
13743 or it aborted too early. Check the session termination flags
13744 then "timeout http-request" and "timeout client" settings.
13745
13746 Tq/-1/xx/xx/Tt It was not possible to process the request, maybe because
13747 servers were out of order, because the request was invalid
13748 or forbidden by ACL rules. Check the session termination
13749 flags.
13750
13751 Tq/Tw/-1/xx/Tt The connection could not establish on the server. Either it
13752 actively refused it or it timed out after Tt-(Tq+Tw) ms.
13753 Check the session termination flags, then check the
13754 "timeout connect" setting. Note that the tarpit action might
13755 return similar-looking patterns, with "Tw" equal to the time
13756 the client connection was maintained open.
13757
13758 Tq/Tw/Tc/-1/Tt The server has accepted the connection but did not return
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030013759 a complete response in time, or it closed its connection
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013760 unexpectedly after Tt-(Tq+Tw+Tc) ms. Check the session
13761 termination flags, then check the "timeout server" setting.
13762
13763
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200137648.5. Session state at disconnection
13765-----------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013766
13767TCP and HTTP logs provide a session termination indicator in the
13768"termination_state" field, just before the number of active connections. It is
137692-characters long in TCP mode, and is extended to 4 characters in HTTP mode,
13770each of which has a special meaning :
13771
13772 - On the first character, a code reporting the first event which caused the
13773 session to terminate :
13774
13775 C : the TCP session was unexpectedly aborted by the client.
13776
13777 S : the TCP session was unexpectedly aborted by the server, or the
13778 server explicitly refused it.
13779
13780 P : the session was prematurely aborted by the proxy, because of a
13781 connection limit enforcement, because a DENY filter was matched,
13782 because of a security check which detected and blocked a dangerous
13783 error in server response which might have caused information leak
Willy Tarreau570f2212013-06-10 16:42:09 +020013784 (eg: cacheable cookie).
13785
13786 L : the session was locally processed by haproxy and was not passed to
13787 a server. This is what happens for stats and redirects.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013788
13789 R : a resource on the proxy has been exhausted (memory, sockets, source
13790 ports, ...). Usually, this appears during the connection phase, and
13791 system logs should contain a copy of the precise error. If this
13792 happens, it must be considered as a very serious anomaly which
13793 should be fixed as soon as possible by any means.
13794
13795 I : an internal error was identified by the proxy during a self-check.
13796 This should NEVER happen, and you are encouraged to report any log
13797 containing this, because this would almost certainly be a bug. It
13798 would be wise to preventively restart the process after such an
13799 event too, in case it would be caused by memory corruption.
13800
Simon Horman752dc4a2011-06-21 14:34:59 +090013801 D : the session was killed by haproxy because the server was detected
13802 as down and was configured to kill all connections when going down.
13803
Justin Karnegeseb2c24a2012-05-24 15:28:52 -070013804 U : the session was killed by haproxy on this backup server because an
13805 active server was detected as up and was configured to kill all
13806 backup connections when going up.
13807
Willy Tarreaua2a64e92011-09-07 23:01:56 +020013808 K : the session was actively killed by an admin operating on haproxy.
13809
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013810 c : the client-side timeout expired while waiting for the client to
13811 send or receive data.
13812
13813 s : the server-side timeout expired while waiting for the server to
13814 send or receive data.
13815
13816 - : normal session completion, both the client and the server closed
13817 with nothing left in the buffers.
13818
13819 - on the second character, the TCP or HTTP session state when it was closed :
13820
Willy Tarreauf7b30a92010-12-06 22:59:17 +010013821 R : the proxy was waiting for a complete, valid REQUEST from the client
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013822 (HTTP mode only). Nothing was sent to any server.
13823
13824 Q : the proxy was waiting in the QUEUE for a connection slot. This can
13825 only happen when servers have a 'maxconn' parameter set. It can
13826 also happen in the global queue after a redispatch consecutive to
13827 a failed attempt to connect to a dying server. If no redispatch is
13828 reported, then no connection attempt was made to any server.
13829
13830 C : the proxy was waiting for the CONNECTION to establish on the
13831 server. The server might at most have noticed a connection attempt.
13832
13833 H : the proxy was waiting for complete, valid response HEADERS from the
13834 server (HTTP only).
13835
13836 D : the session was in the DATA phase.
13837
13838 L : the proxy was still transmitting LAST data to the client while the
13839 server had already finished. This one is very rare as it can only
13840 happen when the client dies while receiving the last packets.
13841
13842 T : the request was tarpitted. It has been held open with the client
13843 during the whole "timeout tarpit" duration or until the client
13844 closed, both of which will be reported in the "Tw" timer.
13845
13846 - : normal session completion after end of data transfer.
13847
13848 - the third character tells whether the persistence cookie was provided by
13849 the client (only in HTTP mode) :
13850
13851 N : the client provided NO cookie. This is usually the case for new
13852 visitors, so counting the number of occurrences of this flag in the
13853 logs generally indicate a valid trend for the site frequentation.
13854
13855 I : the client provided an INVALID cookie matching no known server.
13856 This might be caused by a recent configuration change, mixed
Cyril Bontéa8e7bbc2010-04-25 22:29:29 +020013857 cookies between HTTP/HTTPS sites, persistence conditionally
13858 ignored, or an attack.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013859
13860 D : the client provided a cookie designating a server which was DOWN,
13861 so either "option persist" was used and the client was sent to
13862 this server, or it was not set and the client was redispatched to
13863 another server.
13864
Willy Tarreau996a92c2010-10-13 19:30:47 +020013865 V : the client provided a VALID cookie, and was sent to the associated
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013866 server.
13867
Willy Tarreau996a92c2010-10-13 19:30:47 +020013868 E : the client provided a valid cookie, but with a last date which was
13869 older than what is allowed by the "maxidle" cookie parameter, so
13870 the cookie is consider EXPIRED and is ignored. The request will be
13871 redispatched just as if there was no cookie.
13872
13873 O : the client provided a valid cookie, but with a first date which was
13874 older than what is allowed by the "maxlife" cookie parameter, so
13875 the cookie is consider too OLD and is ignored. The request will be
13876 redispatched just as if there was no cookie.
13877
Willy Tarreauc89ccb62012-04-05 21:18:22 +020013878 U : a cookie was present but was not used to select the server because
13879 some other server selection mechanism was used instead (typically a
13880 "use-server" rule).
13881
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013882 - : does not apply (no cookie set in configuration).
13883
13884 - the last character reports what operations were performed on the persistence
13885 cookie returned by the server (only in HTTP mode) :
13886
13887 N : NO cookie was provided by the server, and none was inserted either.
13888
13889 I : no cookie was provided by the server, and the proxy INSERTED one.
13890 Note that in "cookie insert" mode, if the server provides a cookie,
13891 it will still be overwritten and reported as "I" here.
13892
Willy Tarreau996a92c2010-10-13 19:30:47 +020013893 U : the proxy UPDATED the last date in the cookie that was presented by
13894 the client. This can only happen in insert mode with "maxidle". It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030013895 happens every time there is activity at a different date than the
Willy Tarreau996a92c2010-10-13 19:30:47 +020013896 date indicated in the cookie. If any other change happens, such as
13897 a redispatch, then the cookie will be marked as inserted instead.
13898
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013899 P : a cookie was PROVIDED by the server and transmitted as-is.
13900
13901 R : the cookie provided by the server was REWRITTEN by the proxy, which
13902 happens in "cookie rewrite" or "cookie prefix" modes.
13903
13904 D : the cookie provided by the server was DELETED by the proxy.
13905
13906 - : does not apply (no cookie set in configuration).
13907
Willy Tarreau996a92c2010-10-13 19:30:47 +020013908The combination of the two first flags gives a lot of information about what
13909was happening when the session terminated, and why it did terminate. It can be
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013910helpful to detect server saturation, network troubles, local system resource
13911starvation, attacks, etc...
13912
13913The most common termination flags combinations are indicated below. They are
13914alphabetically sorted, with the lowercase set just after the upper case for
13915easier finding and understanding.
13916
13917 Flags Reason
13918
13919 -- Normal termination.
13920
13921 CC The client aborted before the connection could be established to the
13922 server. This can happen when haproxy tries to connect to a recently
13923 dead (or unchecked) server, and the client aborts while haproxy is
13924 waiting for the server to respond or for "timeout connect" to expire.
13925
13926 CD The client unexpectedly aborted during data transfer. This can be
13927 caused by a browser crash, by an intermediate equipment between the
13928 client and haproxy which decided to actively break the connection,
13929 by network routing issues between the client and haproxy, or by a
13930 keep-alive session between the server and the client terminated first
13931 by the client.
Willy Tarreaud72758d2010-01-12 10:42:19 +010013932
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013933 cD The client did not send nor acknowledge any data for as long as the
13934 "timeout client" delay. This is often caused by network failures on
Cyril Bontédc4d9032012-04-08 21:57:39 +020013935 the client side, or the client simply leaving the net uncleanly.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013936
13937 CH The client aborted while waiting for the server to start responding.
13938 It might be the server taking too long to respond or the client
13939 clicking the 'Stop' button too fast.
13940
13941 cH The "timeout client" stroke while waiting for client data during a
13942 POST request. This is sometimes caused by too large TCP MSS values
13943 for PPPoE networks which cannot transport full-sized packets. It can
13944 also happen when client timeout is smaller than server timeout and
13945 the server takes too long to respond.
13946
13947 CQ The client aborted while its session was queued, waiting for a server
13948 with enough empty slots to accept it. It might be that either all the
13949 servers were saturated or that the assigned server was taking too
13950 long a time to respond.
13951
13952 CR The client aborted before sending a full HTTP request. Most likely
13953 the request was typed by hand using a telnet client, and aborted
13954 too early. The HTTP status code is likely a 400 here. Sometimes this
13955 might also be caused by an IDS killing the connection between haproxy
Willy Tarreau0f228a02015-05-01 15:37:53 +020013956 and the client. "option http-ignore-probes" can be used to ignore
13957 connections without any data transfer.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013958
13959 cR The "timeout http-request" stroke before the client sent a full HTTP
13960 request. This is sometimes caused by too large TCP MSS values on the
13961 client side for PPPoE networks which cannot transport full-sized
13962 packets, or by clients sending requests by hand and not typing fast
13963 enough, or forgetting to enter the empty line at the end of the
Willy Tarreau2705a612014-05-23 17:38:34 +020013964 request. The HTTP status code is likely a 408 here. Note: recently,
Willy Tarreau0f228a02015-05-01 15:37:53 +020013965 some browsers started to implement a "pre-connect" feature consisting
13966 in speculatively connecting to some recently visited web sites just
13967 in case the user would like to visit them. This results in many
13968 connections being established to web sites, which end up in 408
13969 Request Timeout if the timeout strikes first, or 400 Bad Request when
13970 the browser decides to close them first. These ones pollute the log
13971 and feed the error counters. Some versions of some browsers have even
13972 been reported to display the error code. It is possible to work
13973 around the undesirable effects of this behaviour by adding "option
13974 http-ignore-probes" in the frontend, resulting in connections with
13975 zero data transfer to be totally ignored. This will definitely hide
13976 the errors of people experiencing connectivity issues though.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013977
13978 CT The client aborted while its session was tarpitted. It is important to
13979 check if this happens on valid requests, in order to be sure that no
Willy Tarreau55165fe2009-05-10 12:02:55 +020013980 wrong tarpit rules have been written. If a lot of them happen, it
13981 might make sense to lower the "timeout tarpit" value to something
13982 closer to the average reported "Tw" timer, in order not to consume
13983 resources for just a few attackers.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013984
Willy Tarreau570f2212013-06-10 16:42:09 +020013985 LR The request was intercepted and locally handled by haproxy. Generally
13986 it means that this was a redirect or a stats request.
13987
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010013988 SC The server or an equipment between it and haproxy explicitly refused
Willy Tarreaucc6c8912009-02-22 10:53:55 +010013989 the TCP connection (the proxy received a TCP RST or an ICMP message
13990 in return). Under some circumstances, it can also be the network
13991 stack telling the proxy that the server is unreachable (eg: no route,
13992 or no ARP response on local network). When this happens in HTTP mode,
13993 the status code is likely a 502 or 503 here.
13994
13995 sC The "timeout connect" stroke before a connection to the server could
13996 complete. When this happens in HTTP mode, the status code is likely a
13997 503 or 504 here.
13998
13999 SD The connection to the server died with an error during the data
14000 transfer. This usually means that haproxy has received an RST from
14001 the server or an ICMP message from an intermediate equipment while
14002 exchanging data with the server. This can be caused by a server crash
14003 or by a network issue on an intermediate equipment.
14004
14005 sD The server did not send nor acknowledge any data for as long as the
14006 "timeout server" setting during the data phase. This is often caused
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010014007 by too short timeouts on L4 equipments before the server (firewalls,
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014008 load-balancers, ...), as well as keep-alive sessions maintained
14009 between the client and the server expiring first on haproxy.
14010
14011 SH The server aborted before sending its full HTTP response headers, or
14012 it crashed while processing the request. Since a server aborting at
14013 this moment is very rare, it would be wise to inspect its logs to
14014 control whether it crashed and why. The logged request may indicate a
14015 small set of faulty requests, demonstrating bugs in the application.
14016 Sometimes this might also be caused by an IDS killing the connection
14017 between haproxy and the server.
14018
14019 sH The "timeout server" stroke before the server could return its
14020 response headers. This is the most common anomaly, indicating too
14021 long transactions, probably caused by server or database saturation.
14022 The immediate workaround consists in increasing the "timeout server"
14023 setting, but it is important to keep in mind that the user experience
14024 will suffer from these long response times. The only long term
14025 solution is to fix the application.
14026
14027 sQ The session spent too much time in queue and has been expired. See
14028 the "timeout queue" and "timeout connect" settings to find out how to
14029 fix this if it happens too often. If it often happens massively in
14030 short periods, it may indicate general problems on the affected
14031 servers due to I/O or database congestion, or saturation caused by
14032 external attacks.
14033
14034 PC The proxy refused to establish a connection to the server because the
14035 process' socket limit has been reached while attempting to connect.
Cyril Bontédc4d9032012-04-08 21:57:39 +020014036 The global "maxconn" parameter may be increased in the configuration
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014037 so that it does not happen anymore. This status is very rare and
14038 might happen when the global "ulimit-n" parameter is forced by hand.
14039
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010014040 PD The proxy blocked an incorrectly formatted chunked encoded message in
14041 a request or a response, after the server has emitted its headers. In
14042 most cases, this will indicate an invalid message from the server to
Willy Tarreauf3a3e132013-08-31 08:16:26 +020014043 the client. Haproxy supports chunk sizes of up to 2GB - 1 (2147483647
14044 bytes). Any larger size will be considered as an error.
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010014045
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014046 PH The proxy blocked the server's response, because it was invalid,
14047 incomplete, dangerous (cache control), or matched a security filter.
14048 In any case, an HTTP 502 error is sent to the client. One possible
14049 cause for this error is an invalid syntax in an HTTP header name
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010014050 containing unauthorized characters. It is also possible but quite
14051 rare, that the proxy blocked a chunked-encoding request from the
14052 client due to an invalid syntax, before the server responded. In this
14053 case, an HTTP 400 error is sent to the client and reported in the
14054 logs.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014055
14056 PR The proxy blocked the client's HTTP request, either because of an
14057 invalid HTTP syntax, in which case it returned an HTTP 400 error to
14058 the client, or because a deny filter matched, in which case it
14059 returned an HTTP 403 error.
14060
14061 PT The proxy blocked the client's request and has tarpitted its
14062 connection before returning it a 500 server error. Nothing was sent
14063 to the server. The connection was maintained open for as long as
14064 reported by the "Tw" timer field.
14065
14066 RC A local resource has been exhausted (memory, sockets, source ports)
14067 preventing the connection to the server from establishing. The error
14068 logs will tell precisely what was missing. This is very rare and can
14069 only be solved by proper system tuning.
14070
Willy Tarreau996a92c2010-10-13 19:30:47 +020014071The combination of the two last flags gives a lot of information about how
14072persistence was handled by the client, the server and by haproxy. This is very
14073important to troubleshoot disconnections, when users complain they have to
14074re-authenticate. The commonly encountered flags are :
14075
14076 -- Persistence cookie is not enabled.
14077
14078 NN No cookie was provided by the client, none was inserted in the
14079 response. For instance, this can be in insert mode with "postonly"
14080 set on a GET request.
14081
14082 II A cookie designating an invalid server was provided by the client,
14083 a valid one was inserted in the response. This typically happens when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040014084 a "server" entry is removed from the configuration, since its cookie
Willy Tarreau996a92c2010-10-13 19:30:47 +020014085 value can be presented by a client when no other server knows it.
14086
14087 NI No cookie was provided by the client, one was inserted in the
14088 response. This typically happens for first requests from every user
14089 in "insert" mode, which makes it an easy way to count real users.
14090
14091 VN A cookie was provided by the client, none was inserted in the
14092 response. This happens for most responses for which the client has
14093 already got a cookie.
14094
14095 VU A cookie was provided by the client, with a last visit date which is
14096 not completely up-to-date, so an updated cookie was provided in
14097 response. This can also happen if there was no date at all, or if
14098 there was a date but the "maxidle" parameter was not set, so that the
14099 cookie can be switched to unlimited time.
14100
14101 EI A cookie was provided by the client, with a last visit date which is
14102 too old for the "maxidle" parameter, so the cookie was ignored and a
14103 new cookie was inserted in the response.
14104
14105 OI A cookie was provided by the client, with a first visit date which is
14106 too old for the "maxlife" parameter, so the cookie was ignored and a
14107 new cookie was inserted in the response.
14108
14109 DI The server designated by the cookie was down, a new server was
14110 selected and a new cookie was emitted in the response.
14111
14112 VI The server designated by the cookie was not marked dead but could not
14113 be reached. A redispatch happened and selected another one, which was
14114 then advertised in the response.
14115
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014116
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200141178.6. Non-printable characters
14118-----------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014119
14120In order not to cause trouble to log analysis tools or terminals during log
14121consulting, non-printable characters are not sent as-is into log files, but are
14122converted to the two-digits hexadecimal representation of their ASCII code,
14123prefixed by the character '#'. The only characters that can be logged without
14124being escaped are comprised between 32 and 126 (inclusive). Obviously, the
14125escape character '#' itself is also encoded to avoid any ambiguity ("#23"). It
14126is the same for the character '"' which becomes "#22", as well as '{', '|' and
14127'}' when logging headers.
14128
14129Note that the space character (' ') is not encoded in headers, which can cause
14130issues for tools relying on space count to locate fields. A typical header
14131containing spaces is "User-Agent".
14132
14133Last, it has been observed that some syslog daemons such as syslog-ng escape
14134the quote ('"') with a backslash ('\'). The reverse operation can safely be
14135performed since no quote may appear anywhere else in the logs.
14136
14137
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200141388.7. Capturing HTTP cookies
14139---------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014140
14141Cookie capture simplifies the tracking a complete user session. This can be
14142achieved using the "capture cookie" statement in the frontend. Please refer to
Willy Tarreauc57f0e22009-05-10 13:12:33 +020014143section 4.2 for more details. Only one cookie can be captured, and the same
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014144cookie will simultaneously be checked in the request ("Cookie:" header) and in
14145the response ("Set-Cookie:" header). The respective values will be reported in
14146the HTTP logs at the "captured_request_cookie" and "captured_response_cookie"
Willy Tarreauc57f0e22009-05-10 13:12:33 +020014147locations (see section 8.2.3 about HTTP log format). When either cookie is
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014148not seen, a dash ('-') replaces the value. This way, it's easy to detect when a
14149user switches to a new session for example, because the server will reassign it
14150a new cookie. It is also possible to detect if a server unexpectedly sets a
14151wrong cookie to a client, leading to session crossing.
14152
14153 Examples :
14154 # capture the first cookie whose name starts with "ASPSESSION"
14155 capture cookie ASPSESSION len 32
14156
14157 # capture the first cookie whose name is exactly "vgnvisitor"
14158 capture cookie vgnvisitor= len 32
14159
14160
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200141618.8. Capturing HTTP headers
14162---------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014163
14164Header captures are useful to track unique request identifiers set by an upper
14165proxy, virtual host names, user-agents, POST content-length, referrers, etc. In
14166the response, one can search for information about the response length, how the
14167server asked the cache to behave, or an object location during a redirection.
14168
14169Header captures are performed using the "capture request header" and "capture
14170response header" statements in the frontend. Please consult their definition in
Willy Tarreauc57f0e22009-05-10 13:12:33 +020014171section 4.2 for more details.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014172
14173It is possible to include both request headers and response headers at the same
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010014174time. Non-existent headers are logged as empty strings, and if one header
14175appears more than once, only its last occurrence will be logged. Request headers
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014176are grouped within braces '{' and '}' in the same order as they were declared,
14177and delimited with a vertical bar '|' without any space. Response headers
14178follow the same representation, but are displayed after a space following the
14179request headers block. These blocks are displayed just before the HTTP request
14180in the logs.
14181
Willy Tarreaud9ed3d22014-06-13 12:23:06 +020014182As a special case, it is possible to specify an HTTP header capture in a TCP
14183frontend. The purpose is to enable logging of headers which will be parsed in
14184an HTTP backend if the request is then switched to this HTTP backend.
14185
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014186 Example :
14187 # This instance chains to the outgoing proxy
14188 listen proxy-out
14189 mode http
14190 option httplog
14191 option logasap
14192 log global
14193 server cache1 192.168.1.1:3128
14194
14195 # log the name of the virtual server
14196 capture request header Host len 20
14197
14198 # log the amount of data uploaded during a POST
14199 capture request header Content-Length len 10
14200
14201 # log the beginning of the referrer
14202 capture request header Referer len 20
14203
14204 # server name (useful for outgoing proxies only)
14205 capture response header Server len 20
14206
14207 # logging the content-length is useful with "option logasap"
14208 capture response header Content-Length len 10
14209
14210 # log the expected cache behaviour on the response
14211 capture response header Cache-Control len 8
14212
14213 # the Via header will report the next proxy's name
14214 capture response header Via len 20
14215
14216 # log the URL location during a redirection
14217 capture response header Location len 20
14218
14219 >>> Aug 9 20:26:09 localhost \
14220 haproxy[2022]: 127.0.0.1:34014 [09/Aug/2004:20:26:09] proxy-out \
14221 proxy-out/cache1 0/0/0/162/+162 200 +350 - - ---- 0/0/0/0/0 0/0 \
14222 {fr.adserver.yahoo.co||http://fr.f416.mail.} {|864|private||} \
14223 "GET http://fr.adserver.yahoo.com/"
14224
14225 >>> Aug 9 20:30:46 localhost \
14226 haproxy[2022]: 127.0.0.1:34020 [09/Aug/2004:20:30:46] proxy-out \
14227 proxy-out/cache1 0/0/0/182/+182 200 +279 - - ---- 0/0/0/0/0 0/0 \
14228 {w.ods.org||} {Formilux/0.1.8|3495|||} \
Willy Tarreaud72758d2010-01-12 10:42:19 +010014229 "GET http://trafic.1wt.eu/ HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014230
14231 >>> Aug 9 20:30:46 localhost \
14232 haproxy[2022]: 127.0.0.1:34028 [09/Aug/2004:20:30:46] proxy-out \
14233 proxy-out/cache1 0/0/2/126/+128 301 +223 - - ---- 0/0/0/0/0 0/0 \
14234 {www.sytadin.equipement.gouv.fr||http://trafic.1wt.eu/} \
14235 {Apache|230|||http://www.sytadin.} \
Willy Tarreaud72758d2010-01-12 10:42:19 +010014236 "GET http://www.sytadin.equipement.gouv.fr/ HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014237
14238
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200142398.9. Examples of logs
14240---------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014241
14242These are real-world examples of logs accompanied with an explanation. Some of
14243them have been made up by hand. The syslog part has been removed for better
14244reading. Their sole purpose is to explain how to decipher them.
14245
14246 >>> haproxy[674]: 127.0.0.1:33318 [15/Oct/2003:08:31:57.130] px-http \
14247 px-http/srv1 6559/0/7/147/6723 200 243 - - ---- 5/3/3/1/0 0/0 \
14248 "HEAD / HTTP/1.0"
14249
14250 => long request (6.5s) entered by hand through 'telnet'. The server replied
14251 in 147 ms, and the session ended normally ('----')
14252
14253 >>> haproxy[674]: 127.0.0.1:33319 [15/Oct/2003:08:31:57.149] px-http \
14254 px-http/srv1 6559/1230/7/147/6870 200 243 - - ---- 324/239/239/99/0 \
14255 0/9 "HEAD / HTTP/1.0"
14256
14257 => Idem, but the request was queued in the global queue behind 9 other
14258 requests, and waited there for 1230 ms.
14259
14260 >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.654] px-http \
14261 px-http/srv1 9/0/7/14/+30 200 +243 - - ---- 3/3/3/1/0 0/0 \
14262 "GET /image.iso HTTP/1.0"
14263
14264 => request for a long data transfer. The "logasap" option was specified, so
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010014265 the log was produced just before transferring data. The server replied in
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014266 14 ms, 243 bytes of headers were sent to the client, and total time from
14267 accept to first data byte is 30 ms.
14268
14269 >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.925] px-http \
14270 px-http/srv1 9/0/7/14/30 502 243 - - PH-- 3/2/2/0/0 0/0 \
14271 "GET /cgi-bin/bug.cgi? HTTP/1.0"
14272
14273 => the proxy blocked a server response either because of an "rspdeny" or
14274 "rspideny" filter, or because the response was improperly formatted and
Willy Tarreau3c92c5f2011-08-28 09:45:47 +020014275 not HTTP-compliant, or because it blocked sensitive information which
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014276 risked being cached. In this case, the response is replaced with a "502
14277 bad gateway". The flags ("PH--") tell us that it was haproxy who decided
14278 to return the 502 and not the server.
14279
14280 >>> haproxy[18113]: 127.0.0.1:34548 [15/Oct/2003:15:18:55.798] px-http \
Willy Tarreaud72758d2010-01-12 10:42:19 +010014281 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 +010014282
14283 => the client never completed its request and aborted itself ("C---") after
14284 8.5s, while the proxy was waiting for the request headers ("-R--").
14285 Nothing was sent to any server.
14286
14287 >>> haproxy[18113]: 127.0.0.1:34549 [15/Oct/2003:15:19:06.103] px-http \
14288 px-http/<NOSRV> -1/-1/-1/-1/50001 408 0 - - cR-- 2/2/2/0/0 0/0 ""
14289
14290 => The client never completed its request, which was aborted by the
14291 time-out ("c---") after 50s, while the proxy was waiting for the request
14292 headers ("-R--"). Nothing was sent to any server, but the proxy could
14293 send a 408 return code to the client.
14294
14295 >>> haproxy[18989]: 127.0.0.1:34550 [15/Oct/2003:15:24:28.312] px-tcp \
14296 px-tcp/srv1 0/0/5007 0 cD 0/0/0/0/0 0/0
14297
14298 => This log was produced with "option tcplog". The client timed out after
14299 5 seconds ("c----").
14300
14301 >>> haproxy[18989]: 10.0.0.1:34552 [15/Oct/2003:15:26:31.462] px-http \
14302 px-http/srv1 3183/-1/-1/-1/11215 503 0 - - SC-- 205/202/202/115/3 \
Willy Tarreaud72758d2010-01-12 10:42:19 +010014303 0/0 "HEAD / HTTP/1.0"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014304
14305 => The request took 3s to complete (probably a network problem), and the
Willy Tarreauc57f0e22009-05-10 13:12:33 +020014306 connection to the server failed ('SC--') after 4 attempts of 2 seconds
Willy Tarreaucc6c8912009-02-22 10:53:55 +010014307 (config says 'retries 3'), and no redispatch (otherwise we would have
14308 seen "/+3"). Status code 503 was returned to the client. There were 115
14309 connections on this server, 202 connections on this proxy, and 205 on
14310 the global process. It is possible that the server refused the
14311 connection because of too many already established.
Willy Tarreau844e3c52008-01-11 16:28:18 +010014312
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010014313
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200143149. Statistics and monitoring
14315----------------------------
14316
14317It is possible to query HAProxy about its status. The most commonly used
14318mechanism is the HTTP statistics page. This page also exposes an alternative
14319CSV output format for monitoring tools. The same format is provided on the
14320Unix socket.
14321
14322
143239.1. CSV format
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010014324---------------
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +010014325
Willy Tarreau7f062c42009-03-05 18:43:00 +010014326The statistics may be consulted either from the unix socket or from the HTTP
Willy Tarreaua3310dc2014-06-16 15:43:21 +020014327page. Both means provide a CSV format whose fields follow. The first line
14328begins with a sharp ('#') and has one word per comma-delimited field which
14329represents the title of the column. All other lines starting at the second one
14330use a classical CSV format using a comma as the delimiter, and the double quote
14331('"') as an optional text delimiter, but only if the enclosed text is ambiguous
14332(if it contains a quote or a comma). The double-quote character ('"') in the
14333text is doubled ('""'), which is the format that most tools recognize. Please
14334do not insert any column before these ones in order not to break tools which
14335use hard-coded column positions.
Willy Tarreau7f062c42009-03-05 18:43:00 +010014336
James Westbyebe62d62014-07-08 10:14:57 -040014337In brackets after each field name are the types which may have a value for
14338that field. The types are L (Listeners), F (Frontends), B (Backends), and
14339S (Servers).
14340
14341 0. pxname [LFBS]: proxy name
14342 1. svname [LFBS]: service name (FRONTEND for frontend, BACKEND for backend,
14343 any name for server/listener)
14344 2. qcur [..BS]: current queued requests. For the backend this reports the
14345 number queued without a server assigned.
14346 3. qmax [..BS]: max value of qcur
14347 4. scur [LFBS]: current sessions
14348 5. smax [LFBS]: max sessions
14349 6. slim [LFBS]: configured session limit
14350 7. stot [LFBS]: cumulative number of connections
14351 8. bin [LFBS]: bytes in
14352 9. bout [LFBS]: bytes out
14353 10. dreq [LFB.]: requests denied because of security concerns.
14354 - For tcp this is because of a matched tcp-request content rule.
14355 - For http this is because of a matched http-request or tarpit rule.
14356 11. dresp [LFBS]: responses denied because of security concerns.
14357 - For http this is because of a matched http-request rule, or
14358 "option checkcache".
14359 12. ereq [LF..]: request errors. Some of the possible causes are:
14360 - early termination from the client, before the request has been sent.
14361 - read error from the client
14362 - client timeout
14363 - client closed connection
14364 - various bad requests from the client.
14365 - request was tarpitted.
14366 13. econ [..BS]: number of requests that encountered an error trying to
14367 connect to a backend server. The backend stat is the sum of the stat
14368 for all servers of that backend, plus any connection errors not
14369 associated with a particular server (such as the backend having no
14370 active servers).
14371 14. eresp [..BS]: response errors. srv_abrt will be counted here also.
14372 Some other errors are:
14373 - write error on the client socket (won't be counted for the server stat)
14374 - failure applying filters to the response.
14375 15. wretr [..BS]: number of times a connection to a server was retried.
14376 16. wredis [..BS]: number of times a request was redispatched to another
14377 server. The server value counts the number of times that server was
14378 switched away from.
14379 17. status [LFBS]: status (UP/DOWN/NOLB/MAINT/MAINT(via)...)
Pavlos Parissis1f673c72015-05-02 20:30:44 +020014380 18. weight [..BS]: total weight (backend), server weight (server)
14381 19. act [..BS]: number of active servers (backend), server is active (server)
14382 20. bck [..BS]: number of backup servers (backend), server is backup (server)
James Westbyebe62d62014-07-08 10:14:57 -040014383 21. chkfail [...S]: number of failed checks. (Only counts checks failed when
14384 the server is up.)
14385 22. chkdown [..BS]: number of UP->DOWN transitions. The backend counter counts
14386 transitions to the whole backend being down, rather than the sum of the
14387 counters for each server.
14388 23. lastchg [..BS]: number of seconds since the last UP<->DOWN transition
14389 24. downtime [..BS]: total downtime (in seconds). The value for the backend
14390 is the downtime for the whole backend, not the sum of the server downtime.
14391 25. qlimit [...S]: configured maxqueue for the server, or nothing in the
14392 value is 0 (default, meaning no limit)
14393 26. pid [LFBS]: process id (0 for first instance, 1 for second, ...)
14394 27. iid [LFBS]: unique proxy id
14395 28. sid [L..S]: server id (unique inside a proxy)
14396 29. throttle [...S]: current throttle percentage for the server, when
14397 slowstart is active, or no value if not in slowstart.
14398 30. lbtot [..BS]: total number of times a server was selected, either for new
14399 sessions, or when re-dispatching. The server counter is the number
14400 of times that server was selected.
14401 31. tracked [...S]: id of proxy/server if tracking is enabled.
14402 32. type [LFBS]: (0=frontend, 1=backend, 2=server, 3=socket/listener)
14403 33. rate [.FBS]: number of sessions per second over last elapsed second
14404 34. rate_lim [.F..]: configured limit on new sessions per second
14405 35. rate_max [.FBS]: max number of new sessions per second
14406 36. check_status [...S]: status of last health check, one of:
Cyril Bontéf0c60612010-02-06 14:44:47 +010014407 UNK -> unknown
14408 INI -> initializing
14409 SOCKERR -> socket error
14410 L4OK -> check passed on layer 4, no upper layers testing enabled
Jason Harvey83104802015-04-16 11:13:21 -080014411 L4TOUT -> layer 1-4 timeout
Cyril Bontéf0c60612010-02-06 14:44:47 +010014412 L4CON -> layer 1-4 connection problem, for example
14413 "Connection refused" (tcp rst) or "No route to host" (icmp)
14414 L6OK -> check passed on layer 6
14415 L6TOUT -> layer 6 (SSL) timeout
14416 L6RSP -> layer 6 invalid response - protocol error
14417 L7OK -> check passed on layer 7
14418 L7OKC -> check conditionally passed on layer 7, for example 404 with
14419 disable-on-404
14420 L7TOUT -> layer 7 (HTTP/SMTP) timeout
14421 L7RSP -> layer 7 invalid response - protocol error
14422 L7STS -> layer 7 response error, for example HTTP 5xx
James Westbyebe62d62014-07-08 10:14:57 -040014423 37. check_code [...S]: layer5-7 code, if available
14424 38. check_duration [...S]: time in ms took to finish last health check
14425 39. hrsp_1xx [.FBS]: http responses with 1xx code
14426 40. hrsp_2xx [.FBS]: http responses with 2xx code
14427 41. hrsp_3xx [.FBS]: http responses with 3xx code
14428 42. hrsp_4xx [.FBS]: http responses with 4xx code
14429 43. hrsp_5xx [.FBS]: http responses with 5xx code
14430 44. hrsp_other [.FBS]: http responses with other codes (protocol error)
14431 45. hanafail [...S]: failed health checks details
14432 46. req_rate [.F..]: HTTP requests per second over last elapsed second
14433 47. req_rate_max [.F..]: max number of HTTP requests per second observed
14434 48. req_tot [.F..]: total number of HTTP requests received
14435 49. cli_abrt [..BS]: number of data transfers aborted by the client
14436 50. srv_abrt [..BS]: number of data transfers aborted by the server
14437 (inc. in eresp)
14438 51. comp_in [.FB.]: number of HTTP response bytes fed to the compressor
14439 52. comp_out [.FB.]: number of HTTP response bytes emitted by the compressor
14440 53. comp_byp [.FB.]: number of bytes that bypassed the HTTP compressor
14441 (CPU/BW limit)
14442 54. comp_rsp [.FB.]: number of HTTP responses that were compressed
14443 55. lastsess [..BS]: number of seconds since last session assigned to
14444 server/backend
14445 56. last_chk [...S]: last health check contents or textual error
14446 57. last_agt [...S]: last agent check contents or textual error
14447 58. qtime [..BS]: the average queue time in ms over the 1024 last requests
14448 59. ctime [..BS]: the average connect time in ms over the 1024 last requests
14449 60. rtime [..BS]: the average response time in ms over the 1024 last requests
14450 (0 for TCP)
14451 61. ttime [..BS]: the average total session time in ms over the 1024 last
14452 requests
Willy Tarreau844e3c52008-01-11 16:28:18 +010014453
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010014454
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200144559.2. Unix Socket commands
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010014456-------------------------
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +010014457
Willy Tarreau468f4932013-08-01 16:50:16 +020014458The stats socket is not enabled by default. In order to enable it, it is
14459necessary to add one line in the global section of the haproxy configuration.
14460A second line is recommended to set a larger timeout, always appreciated when
14461issuing commands by hand :
14462
14463 global
14464 stats socket /var/run/haproxy.sock mode 600 level admin
14465 stats timeout 2m
14466
14467It is also possible to add multiple instances of the stats socket by repeating
14468the line, and make them listen to a TCP port instead of a UNIX socket. This is
14469never done by default because this is dangerous, but can be handy in some
14470situations :
14471
14472 global
14473 stats socket /var/run/haproxy.sock mode 600 level admin
14474 stats socket ipv4@192.168.0.1:9999 level admin
14475 stats timeout 2m
14476
14477To access the socket, an external utility such as "socat" is required. Socat is a
14478swiss-army knife to connect anything to anything. We use it to connect terminals
14479to the socket, or a couple of stdin/stdout pipes to it for scripts. The two main
14480syntaxes we'll use are the following :
14481
14482 # socat /var/run/haproxy.sock stdio
14483 # socat /var/run/haproxy.sock readline
14484
14485The first one is used with scripts. It is possible to send the output of a
14486script to haproxy, and pass haproxy's output to another script. That's useful
14487for retrieving counters or attack traces for example.
14488
14489The second one is only useful for issuing commands by hand. It has the benefit
14490that the terminal is handled by the readline library which supports line
14491editing and history, which is very convenient when issuing repeated commands
14492(eg: watch a counter).
14493
14494The socket supports two operation modes :
14495 - interactive
14496 - non-interactive
14497
14498The non-interactive mode is the default when socat connects to the socket. In
14499this mode, a single line may be sent. It is processed as a whole, responses are
14500sent back, and the connection closes after the end of the response. This is the
14501mode that scripts and monitoring tools use. It is possible to send multiple
14502commands in this mode, they need to be delimited by a semi-colon (';'). For
14503example :
14504
14505 # echo "show info;show stat;show table" | socat /var/run/haproxy stdio
14506
14507The interactive mode displays a prompt ('>') and waits for commands to be
14508entered on the line, then processes them, and displays the prompt again to wait
14509for a new command. This mode is entered via the "prompt" command which must be
14510sent on the first line in non-interactive mode. The mode is a flip switch, if
14511"prompt" is sent in interactive mode, it is disabled and the connection closes
14512after processing the last command of the same line.
14513
14514For this reason, when debugging by hand, it's quite common to start with the
14515"prompt" command :
14516
14517 # socat /var/run/haproxy readline
14518 prompt
14519 > show info
14520 ...
14521 >
14522
14523Since multiple commands may be issued at once, haproxy uses the empty line as a
14524delimiter to mark an end of output for each command, and takes care of ensuring
14525that no command can emit an empty line on output. A script can thus easily
14526parse the output even when multiple commands were pipelined on a single line.
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010014527
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020014528It is important to understand that when multiple haproxy processes are started
14529on the same sockets, any process may pick up the request and will output its
14530own stats.
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010014531
Willy Tarreau468f4932013-08-01 16:50:16 +020014532The list of commands currently supported on the stats socket is provided below.
14533If an unknown command is sent, haproxy displays the usage message which reminds
14534all supported commands. Some commands support a more complex syntax, generally
14535it will explain what part of the command is invalid when this happens.
14536
Thierry FOURNIERd32079e2014-01-29 20:02:04 +010014537add acl <acl> <pattern>
Thierry FOURNIER65ce6132014-03-20 11:42:45 +010014538 Add an entry into the acl <acl>. <acl> is the #<id> or the <file> returned by
14539 "show acl". This command does not verify if the entry already exists. This
14540 command cannot be used if the reference <acl> is a file also used with a map.
14541 In this case, you must use the command "add map" in place of "add acl".
Thierry FOURNIERd32079e2014-01-29 20:02:04 +010014542
Thierry FOURNIERc0e0d7b2013-12-11 16:55:52 +010014543add map <map> <key> <value>
14544 Add an entry into the map <map> to associate the value <value> to the key
14545 <key>. This command does not verify if the entry already exists. It is
Thierry FOURNIERd32079e2014-01-29 20:02:04 +010014546 mainly used to fill a map after a clear operation. Note that if the reference
14547 <map> is a file and is shared with a map, this map will contain also a new
14548 pattern entry.
Thierry FOURNIERc0e0d7b2013-12-11 16:55:52 +010014549
Willy Tarreaud63335a2010-02-26 12:56:52 +010014550clear counters
14551 Clear the max values of the statistics counters in each proxy (frontend &
14552 backend) and in each server. The cumulated counters are not affected. This
14553 can be used to get clean counters after an incident, without having to
14554 restart nor to clear traffic counters. This command is restricted and can
14555 only be issued on sockets configured for levels "operator" or "admin".
14556
14557clear counters all
14558 Clear all statistics counters in each proxy (frontend & backend) and in each
14559 server. This has the same effect as restarting. This command is restricted
14560 and can only be issued on sockets configured for level "admin".
14561
Thierry FOURNIERd32079e2014-01-29 20:02:04 +010014562clear acl <acl>
Thierry FOURNIER65ce6132014-03-20 11:42:45 +010014563 Remove all entries from the acl <acl>. <acl> is the #<id> or the <file>
14564 returned by "show acl". Note that if the reference <acl> is a file and is
14565 shared with a map, this map will be also cleared.
Thierry FOURNIERd32079e2014-01-29 20:02:04 +010014566
Thierry FOURNIERc0e0d7b2013-12-11 16:55:52 +010014567clear map <map>
Thierry FOURNIER65ce6132014-03-20 11:42:45 +010014568 Remove all entries from the map <map>. <map> is the #<id> or the <file>
14569 returned by "show map". Note that if the reference <map> is a file and is
14570 shared with a acl, this acl will be also cleared.
Thierry FOURNIERc0e0d7b2013-12-11 16:55:52 +010014571
Simon Hormanc88b8872011-06-15 15:18:49 +090014572clear table <table> [ data.<type> <operator> <value> ] | [ key <key> ]
14573 Remove entries from the stick-table <table>.
14574
14575 This is typically used to unblock some users complaining they have been
14576 abusively denied access to a service, but this can also be used to clear some
14577 stickiness entries matching a server that is going to be replaced (see "show
14578 table" below for details). Note that sometimes, removal of an entry will be
14579 refused because it is currently tracked by a session. Retrying a few seconds
14580 later after the session ends is usual enough.
14581
14582 In the case where no options arguments are given all entries will be removed.
14583
14584 When the "data." form is used entries matching a filter applied using the
14585 stored data (see "stick-table" in section 4.2) are removed. A stored data
14586 type must be specified in <type>, and this data type must be stored in the
14587 table otherwise an error is reported. The data is compared according to
14588 <operator> with the 64-bit integer <value>. Operators are the same as with
14589 the ACLs :
14590
14591 - eq : match entries whose data is equal to this value
14592 - ne : match entries whose data is not equal to this value
14593 - le : match entries whose data is less than or equal to this value
14594 - ge : match entries whose data is greater than or equal to this value
14595 - lt : match entries whose data is less than this value
14596 - gt : match entries whose data is greater than this value
14597
14598 When the key form is used the entry <key> is removed. The key must be of the
Simon Horman619e3cc2011-06-15 15:18:52 +090014599 same type as the table, which currently is limited to IPv4, IPv6, integer and
14600 string.
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020014601
14602 Example :
Willy Tarreau62a36c42010-08-17 15:53:10 +020014603 $ echo "show table http_proxy" | socat stdio /tmp/sock1
Emeric Brun7c6b82e2010-09-24 16:34:28 +020014604 >>> # table: http_proxy, type: ip, size:204800, used:2
Willy Tarreau62a36c42010-08-17 15:53:10 +020014605 >>> 0x80e6a4c: key=127.0.0.1 use=0 exp=3594729 gpc0=0 conn_rate(30000)=1 \
14606 bytes_out_rate(60000)=187
14607 >>> 0x80e6a80: key=127.0.0.2 use=0 exp=3594740 gpc0=1 conn_rate(30000)=10 \
14608 bytes_out_rate(60000)=191
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020014609
14610 $ echo "clear table http_proxy key 127.0.0.1" | socat stdio /tmp/sock1
14611
14612 $ echo "show table http_proxy" | socat stdio /tmp/sock1
Emeric Brun7c6b82e2010-09-24 16:34:28 +020014613 >>> # table: http_proxy, type: ip, size:204800, used:1
Willy Tarreau62a36c42010-08-17 15:53:10 +020014614 >>> 0x80e6a80: key=127.0.0.2 use=0 exp=3594740 gpc0=1 conn_rate(30000)=10 \
14615 bytes_out_rate(60000)=191
Simon Hormanc88b8872011-06-15 15:18:49 +090014616 $ echo "clear table http_proxy data.gpc0 eq 1" | socat stdio /tmp/sock1
14617 $ echo "show table http_proxy" | socat stdio /tmp/sock1
14618 >>> # table: http_proxy, type: ip, size:204800, used:1
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020014619
Thierry FOURNIERd32079e2014-01-29 20:02:04 +010014620del acl <acl> [<key>|#<ref>]
14621 Delete all the acl entries from the acl <acl> corresponding to the key <key>.
Thierry FOURNIER65ce6132014-03-20 11:42:45 +010014622 <acl> is the #<id> or the <file> returned by "show acl". If the <ref> is used,
14623 this command delete only the listed reference. The reference can be found with
14624 listing the content of the acl. Note that if the reference <acl> is a file and
14625 is shared with a map, the entry will be also deleted in the map.
Thierry FOURNIERd32079e2014-01-29 20:02:04 +010014626
14627del map <map> [<key>|#<ref>]
Thierry FOURNIER0b90f312014-01-29 20:40:18 +010014628 Delete all the map entries from the map <map> corresponding to the key <key>.
Thierry FOURNIER65ce6132014-03-20 11:42:45 +010014629 <map> is the #<id> or the <file> returned by "show map". If the <ref> is used,
14630 this command delete only the listed reference. The reference can be found with
14631 listing the content of the map. Note that if the reference <map> is a file and
14632 is shared with a acl, the entry will be also deleted in the map.
Thierry FOURNIER0b90f312014-01-29 20:40:18 +010014633
14634disable agent <backend>/<server>
Simon Horman671b6f02013-11-25 10:46:39 +090014635 Mark the auxiliary agent check as temporarily stopped.
14636
14637 In the case where an agent check is being run as a auxiliary check, due
14638 to the agent-check parameter of a server directive, new checks are only
14639 initialised when the agent is in the enabled. Thus, disable agent will
14640 prevent any new agent checks from begin initiated until the agent
14641 re-enabled using enable agent.
14642
14643 When an agent is disabled the processing of an auxiliary agent check that
14644 was initiated while the agent was set as enabled is as follows: All
14645 results that would alter the weight, specifically "drain" or a weight
14646 returned by the agent, are ignored. The processing of agent check is
14647 otherwise unchanged.
14648
14649 The motivation for this feature is to allow the weight changing effects
14650 of the agent checks to be paused to allow the weight of a server to be
14651 configured using set weight without being overridden by the agent.
14652
14653 This command is restricted and can only be issued on sockets configured for
14654 level "admin".
14655
Willy Tarreau532a4502011-09-07 22:37:44 +020014656disable frontend <frontend>
14657 Mark the frontend as temporarily stopped. This corresponds to the mode which
14658 is used during a soft restart : the frontend releases the port but can be
14659 enabled again if needed. This should be used with care as some non-Linux OSes
14660 are unable to enable it back. This is intended to be used in environments
14661 where stopping a proxy is not even imaginable but a misconfigured proxy must
14662 be fixed. That way it's possible to release the port and bind it into another
14663 process to restore operations. The frontend will appear with status "STOP"
14664 on the stats page.
14665
14666 The frontend may be specified either by its name or by its numeric ID,
14667 prefixed with a sharp ('#').
14668
14669 This command is restricted and can only be issued on sockets configured for
14670 level "admin".
14671
Willy Tarreau9b5aecd2014-05-23 11:53:10 +020014672disable health <backend>/<server>
14673 Mark the primary health check as temporarily stopped. This will disable
14674 sending of health checks, and the last health check result will be ignored.
14675 The server will be in unchecked state and considered UP unless an auxiliary
14676 agent check forces it down.
14677
14678 This command is restricted and can only be issued on sockets configured for
14679 level "admin".
14680
Willy Tarreaud63335a2010-02-26 12:56:52 +010014681disable server <backend>/<server>
14682 Mark the server DOWN for maintenance. In this mode, no more checks will be
14683 performed on the server until it leaves maintenance.
14684 If the server is tracked by other servers, those servers will be set to DOWN
14685 during the maintenance.
14686
14687 In the statistics page, a server DOWN for maintenance will appear with a
14688 "MAINT" status, its tracking servers with the "MAINT(via)" one.
14689
14690 Both the backend and the server may be specified either by their name or by
Willy Tarreauf5f31922011-08-02 11:32:07 +020014691 their numeric ID, prefixed with a sharp ('#').
Willy Tarreaud63335a2010-02-26 12:56:52 +010014692
14693 This command is restricted and can only be issued on sockets configured for
14694 level "admin".
14695
Simon Horman671b6f02013-11-25 10:46:39 +090014696enable agent <backend>/<server>
14697 Resume auxiliary agent check that was temporarily stopped.
14698
14699 See "disable agent" for details of the effect of temporarily starting
14700 and stopping an auxiliary agent.
14701
14702 This command is restricted and can only be issued on sockets configured for
14703 level "admin".
14704
Willy Tarreau532a4502011-09-07 22:37:44 +020014705enable frontend <frontend>
14706 Resume a frontend which was temporarily stopped. It is possible that some of
14707 the listening ports won't be able to bind anymore (eg: if another process
14708 took them since the 'disable frontend' operation). If this happens, an error
14709 is displayed. Some operating systems might not be able to resume a frontend
14710 which was disabled.
14711
14712 The frontend may be specified either by its name or by its numeric ID,
14713 prefixed with a sharp ('#').
14714
14715 This command is restricted and can only be issued on sockets configured for
14716 level "admin".
14717
Willy Tarreau9b5aecd2014-05-23 11:53:10 +020014718enable health <backend>/<server>
14719 Resume a primary health check that was temporarily stopped. This will enable
14720 sending of health checks again. Please see "disable health" for details.
14721
14722 This command is restricted and can only be issued on sockets configured for
14723 level "admin".
14724
Willy Tarreaud63335a2010-02-26 12:56:52 +010014725enable server <backend>/<server>
14726 If the server was previously marked as DOWN for maintenance, this marks the
14727 server UP and checks are re-enabled.
14728
14729 Both the backend and the server may be specified either by their name or by
Willy Tarreauf5f31922011-08-02 11:32:07 +020014730 their numeric ID, prefixed with a sharp ('#').
Willy Tarreaud63335a2010-02-26 12:56:52 +010014731
14732 This command is restricted and can only be issued on sockets configured for
14733 level "admin".
14734
Thierry FOURNIER5b16df72014-02-26 18:07:38 +010014735get map <map> <value>
Thierry FOURNIER65ce6132014-03-20 11:42:45 +010014736get acl <acl> <value>
14737 Lookup the value <value> in the map <map> or in the ACL <acl>. <map> or <acl>
14738 are the #<id> or the <file> returned by "show map" or "show acl". This command
14739 returns all the matching patterns associated with this map. This is useful for
14740 debugging maps and ACLs. The output format is composed by one line par
14741 matching type. Each line is composed by space-delimited series of words.
Thierry FOURNIER5b16df72014-02-26 18:07:38 +010014742
14743 The first two words are:
14744
14745 <match method>: The match method applied. It can be "found", "bool",
14746 "int", "ip", "bin", "len", "str", "beg", "sub", "dir",
14747 "dom", "end" or "reg".
14748
14749 <match result>: The result. Can be "match" or "no-match".
14750
14751 The following words are returned only if the pattern matches an entry.
14752
14753 <index type>: "tree" or "list". The internal lookup algorithm.
14754
14755 <case>: "case-insensitive" or "case-sensitive". The
14756 interpretation of the case.
14757
14758 <entry matched>: match="<entry>". Return the matched pattern. It is
14759 useful with regular expressions.
14760
14761 The two last word are used to show the returned value and its type. With the
14762 "acl" case, the pattern doesn't exist.
14763
14764 return=nothing: No return because there are no "map".
14765 return="<value>": The value returned in the string format.
14766 return=cannot-display: The value cannot be converted as string.
14767
14768 type="<type>": The type of the returned sample.
14769
Willy Tarreaud63335a2010-02-26 12:56:52 +010014770get weight <backend>/<server>
14771 Report the current weight and the initial weight of server <server> in
14772 backend <backend> or an error if either doesn't exist. The initial weight is
14773 the one that appears in the configuration file. Both are normally equal
14774 unless the current weight has been changed. Both the backend and the server
14775 may be specified either by their name or by their numeric ID, prefixed with a
Willy Tarreauf5f31922011-08-02 11:32:07 +020014776 sharp ('#').
Willy Tarreaud63335a2010-02-26 12:56:52 +010014777
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020014778help
14779 Print the list of known keywords and their basic usage. The same help screen
14780 is also displayed for unknown commands.
Willy Tarreau3dfe6cd2008-12-07 22:29:48 +010014781
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020014782prompt
14783 Toggle the prompt at the beginning of the line and enter or leave interactive
14784 mode. In interactive mode, the connection is not closed after a command
14785 completes. Instead, the prompt will appear again, indicating the user that
14786 the interpreter is waiting for a new command. The prompt consists in a right
14787 angle bracket followed by a space "> ". This mode is particularly convenient
14788 when one wants to periodically check information such as stats or errors.
14789 It is also a good idea to enter interactive mode before issuing a "help"
14790 command.
14791
14792quit
14793 Close the connection when in interactive mode.
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +010014794
Thierry FOURNIERd32079e2014-01-29 20:02:04 +010014795set map <map> [<key>|#<ref>] <value>
Thierry FOURNIER65ce6132014-03-20 11:42:45 +010014796 Modify the value corresponding to each key <key> in a map <map>. <map> is the
14797 #<id> or <file> returned by "show map". If the <ref> is used in place of
14798 <key>, only the entry pointed by <ref> is changed. The new value is <value>.
Thierry FOURNIERc0e0d7b2013-12-11 16:55:52 +010014799
Willy Tarreau2a0f4d22011-08-02 11:49:05 +020014800set maxconn frontend <frontend> <value>
Willy Tarreau3c7a79d2012-09-26 21:07:15 +020014801 Dynamically change the specified frontend's maxconn setting. Any positive
14802 value is allowed including zero, but setting values larger than the global
14803 maxconn does not make much sense. If the limit is increased and connections
14804 were pending, they will immediately be accepted. If it is lowered to a value
14805 below the current number of connections, new connections acceptation will be
Willy Tarreau2a0f4d22011-08-02 11:49:05 +020014806 delayed until the threshold is reached. The frontend might be specified by
14807 either its name or its numeric ID prefixed with a sharp ('#').
14808
Willy Tarreau91886b62011-09-07 14:38:31 +020014809set maxconn global <maxconn>
14810 Dynamically change the global maxconn setting within the range defined by the
14811 initial global maxconn setting. If it is increased and connections were
14812 pending, they will immediately be accepted. If it is lowered to a value below
14813 the current number of connections, new connections acceptation will be
14814 delayed until the threshold is reached. A value of zero restores the initial
14815 setting.
14816
Willy Tarreauf5b22872011-09-07 16:13:44 +020014817set rate-limit connections global <value>
14818 Change the process-wide connection rate limit, which is set by the global
14819 'maxconnrate' setting. A value of zero disables the limitation. This limit
14820 applies to all frontends and the change has an immediate effect. The value
14821 is passed in number of connections per second.
14822
William Lallemandd85f9172012-11-09 17:05:39 +010014823set rate-limit http-compression global <value>
14824 Change the maximum input compression rate, which is set by the global
14825 'maxcomprate' setting. A value of zero disables the limitation. The value is
William Lallemand096f5542012-11-19 17:26:05 +010014826 passed in number of kilobytes per second. The value is available in the "show
14827 info" on the line "CompressBpsRateLim" in bytes.
William Lallemandd85f9172012-11-09 17:05:39 +010014828
Willy Tarreau93e7c002013-10-07 18:51:07 +020014829set rate-limit sessions global <value>
14830 Change the process-wide session rate limit, which is set by the global
14831 'maxsessrate' setting. A value of zero disables the limitation. This limit
14832 applies to all frontends and the change has an immediate effect. The value
14833 is passed in number of sessions per second.
14834
Willy Tarreaue43d5322013-10-07 20:01:52 +020014835set rate-limit ssl-sessions global <value>
14836 Change the process-wide SSL session rate limit, which is set by the global
14837 'maxsslrate' setting. A value of zero disables the limitation. This limit
14838 applies to all frontends and the change has an immediate effect. The value
14839 is passed in number of sessions per second sent to the SSL stack. It applies
14840 before the handshake in order to protect the stack against handshake abuses.
14841
Willy Tarreau2a4b70f2014-05-22 18:42:35 +020014842set server <backend>/<server> agent [ up | down ]
14843 Force a server's agent to a new state. This can be useful to immediately
14844 switch a server's state regardless of some slow agent checks for example.
14845 Note that the change is propagated to tracking servers if any.
14846
14847set server <backend>/<server> health [ up | stopping | down ]
14848 Force a server's health to a new state. This can be useful to immediately
14849 switch a server's state regardless of some slow health checks for example.
14850 Note that the change is propagated to tracking servers if any.
14851
14852set server <backend>/<server> state [ ready | drain | maint ]
14853 Force a server's administrative state to a new state. This can be useful to
14854 disable load balancing and/or any traffic to a server. Setting the state to
14855 "ready" puts the server in normal mode, and the command is the equivalent of
14856 the "enable server" command. Setting the state to "maint" disables any traffic
14857 to the server as well as any health checks. This is the equivalent of the
14858 "disable server" command. Setting the mode to "drain" only removes the server
14859 from load balancing but still allows it to be checked and to accept new
14860 persistent connections. Changes are propagated to tracking servers if any.
14861
14862set server <backend>/<server> weight <weight>[%]
14863 Change a server's weight to the value passed in argument. This is the exact
14864 equivalent of the "set weight" command below.
14865
Emeric Brun4147b2e2014-06-16 18:36:30 +020014866set ssl ocsp-response <response>
14867 This command is used to update an OCSP Response for a certificate (see "crt"
14868 on "bind" lines). Same controls are performed as during the initial loading of
14869 the response. The <response> must be passed as a base64 encoded string of the
14870 DER encoded response from the OCSP server.
14871
14872 Example:
14873 openssl ocsp -issuer issuer.pem -cert server.pem \
14874 -host ocsp.issuer.com:80 -respout resp.der
14875 echo "set ssl ocsp-response $(base64 -w 10000 resp.der)" | \
14876 socat stdio /var/run/haproxy.stat
14877
Nenad Merdanovicc6985f02015-05-09 08:46:02 +020014878set ssl tls-key <id> <tlskey>
14879 Set the next TLS key for the <id> listener to <tlskey>. This key becomes the
14880 ultimate key, while the penultimate one is used for encryption (others just
14881 decrypt). The oldest TLS key present is overwritten. <id> is either a numeric
14882 #<id> or <file> returned by "show tls-keys". <tlskey> is a base64 encoded 48
14883 bit TLS ticket key (ex. openssl rand -base64 48).
14884
Willy Tarreau47060b62013-08-01 21:11:42 +020014885set table <table> key <key> [data.<data_type> <value>]*
Willy Tarreau654694e2012-06-07 01:03:16 +020014886 Create or update a stick-table entry in the table. If the key is not present,
14887 an entry is inserted. See stick-table in section 4.2 to find all possible
14888 values for <data_type>. The most likely use consists in dynamically entering
14889 entries for source IP addresses, with a flag in gpc0 to dynamically block an
Willy Tarreau47060b62013-08-01 21:11:42 +020014890 IP address or affect its quality of service. It is possible to pass multiple
14891 data_types in a single call.
Willy Tarreau654694e2012-06-07 01:03:16 +020014892
Willy Tarreaud63335a2010-02-26 12:56:52 +010014893set timeout cli <delay>
14894 Change the CLI interface timeout for current connection. This can be useful
14895 during long debugging sessions where the user needs to constantly inspect
14896 some indicators without being disconnected. The delay is passed in seconds.
14897
14898set weight <backend>/<server> <weight>[%]
14899 Change a server's weight to the value passed in argument. If the value ends
14900 with the '%' sign, then the new weight will be relative to the initially
Simon Horman58b5d292013-02-12 10:45:52 +090014901 configured weight. Absolute weights are permitted between 0 and 256.
14902 Relative weights must be positive with the resulting absolute weight is
14903 capped at 256. Servers which are part of a farm running a static
14904 load-balancing algorithm have stricter limitations because the weight
14905 cannot change once set. Thus for these servers, the only accepted values
14906 are 0 and 100% (or 0 and the initial weight). Changes take effect
14907 immediately, though certain LB algorithms require a certain amount of
14908 requests to consider changes. A typical usage of this command is to
14909 disable a server during an update by setting its weight to zero, then to
14910 enable it again after the update by setting it back to 100%. This command
14911 is restricted and can only be issued on sockets configured for level
14912 "admin". Both the backend and the server may be specified either by their
14913 name or by their numeric ID, prefixed with a sharp ('#').
Willy Tarreaud63335a2010-02-26 12:56:52 +010014914
Willy Tarreaue0c8a1a2009-03-04 16:33:10 +010014915show errors [<iid>]
14916 Dump last known request and response errors collected by frontends and
14917 backends. If <iid> is specified, the limit the dump to errors concerning
Willy Tarreau6162db22009-10-10 17:13:00 +020014918 either frontend or backend whose ID is <iid>. This command is restricted
14919 and can only be issued on sockets configured for levels "operator" or
14920 "admin".
Willy Tarreaue0c8a1a2009-03-04 16:33:10 +010014921
14922 The errors which may be collected are the last request and response errors
14923 caused by protocol violations, often due to invalid characters in header
14924 names. The report precisely indicates what exact character violated the
14925 protocol. Other important information such as the exact date the error was
14926 detected, frontend and backend names, the server name (when known), the
14927 internal session ID and the source address which has initiated the session
14928 are reported too.
14929
14930 All characters are returned, and non-printable characters are encoded. The
14931 most common ones (\t = 9, \n = 10, \r = 13 and \e = 27) are encoded as one
14932 letter following a backslash. The backslash itself is encoded as '\\' to
14933 avoid confusion. Other non-printable characters are encoded '\xNN' where
14934 NN is the two-digits hexadecimal representation of the character's ASCII
14935 code.
14936
14937 Lines are prefixed with the position of their first character, starting at 0
14938 for the beginning of the buffer. At most one input line is printed per line,
14939 and large lines will be broken into multiple consecutive output lines so that
14940 the output never goes beyond 79 characters wide. It is easy to detect if a
14941 line was broken, because it will not end with '\n' and the next line's offset
14942 will be followed by a '+' sign, indicating it is a continuation of previous
14943 line.
14944
14945 Example :
Willy Tarreau62a36c42010-08-17 15:53:10 +020014946 $ echo "show errors" | socat stdio /tmp/sock1
14947 >>> [04/Mar/2009:15:46:56.081] backend http-in (#2) : invalid response
Willy Tarreaue0c8a1a2009-03-04 16:33:10 +010014948 src 127.0.0.1, session #54, frontend fe-eth0 (#1), server s2 (#1)
14949 response length 213 bytes, error at position 23:
14950
14951 00000 HTTP/1.0 200 OK\r\n
14952 00017 header/bizarre:blah\r\n
14953 00038 Location: blah\r\n
14954 00054 Long-line: this is a very long line which should b
14955 00104+ e broken into multiple lines on the output buffer,
14956 00154+ otherwise it would be too large to print in a ter
14957 00204+ minal\r\n
14958 00211 \r\n
14959
Willy Tarreauc57f0e22009-05-10 13:12:33 +020014960 In the example above, we see that the backend "http-in" which has internal
Willy Tarreaue0c8a1a2009-03-04 16:33:10 +010014961 ID 2 has blocked an invalid response from its server s2 which has internal
14962 ID 1. The request was on session 54 initiated by source 127.0.0.1 and
14963 received by frontend fe-eth0 whose ID is 1. The total response length was
14964 213 bytes when the error was detected, and the error was at byte 23. This
14965 is the slash ('/') in header name "header/bizarre", which is not a valid
14966 HTTP character for a header name.
Krzysztof Piotr Oledzki2c6962c2008-03-02 02:42:14 +010014967
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020014968show info
14969 Dump info about haproxy status on current process.
14970
Thierry FOURNIERc0e0d7b2013-12-11 16:55:52 +010014971show map [<map>]
14972 Dump info about map converters. Without argument, the list of all available
Thierry FOURNIER65ce6132014-03-20 11:42:45 +010014973 maps is returned. If a <map> is specified, its contents are dumped. <map> is
14974 the #<id> or <file>. The first column is a unique identifier. It can be used
14975 as reference for the operation "del map" and "set map". The second column is
14976 the pattern and the third column is the sample if available. The data returned
14977 are not directly a list of available maps, but are the list of all patterns
14978 composing any map. Many of these patterns can be shared with ACL.
Thierry FOURNIERd32079e2014-01-29 20:02:04 +010014979
14980show acl [<acl>]
14981 Dump info about acl converters. Without argument, the list of all available
Thierry FOURNIER65ce6132014-03-20 11:42:45 +010014982 acls is returned. If a <acl> is specified, its contents are dumped. <acl> if
14983 the #<id> or <file>. The dump format is the same than the map even for the
14984 sample value. The data returned are not a list of available ACL, but are the
14985 list of all patterns composing any ACL. Many of these patterns can be shared
14986 with maps.
Thierry FOURNIERc0e0d7b2013-12-11 16:55:52 +010014987
Willy Tarreau12833bb2014-01-28 16:49:56 +010014988show pools
14989 Dump the status of internal memory pools. This is useful to track memory
14990 usage when suspecting a memory leak for example. It does exactly the same
14991 as the SIGQUIT when running in foreground except that it does not flush
14992 the pools.
14993
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020014994show sess
14995 Dump all known sessions. Avoid doing this on slow connections as this can
Willy Tarreau6162db22009-10-10 17:13:00 +020014996 be huge. This command is restricted and can only be issued on sockets
14997 configured for levels "operator" or "admin".
14998
Willy Tarreau66dc20a2010-03-05 17:53:32 +010014999show sess <id>
15000 Display a lot of internal information about the specified session identifier.
15001 This identifier is the first field at the beginning of the lines in the dumps
15002 of "show sess" (it corresponds to the session pointer). Those information are
15003 useless to most users but may be used by haproxy developers to troubleshoot a
15004 complex bug. The output format is intentionally not documented so that it can
Olivierce31e6e2014-09-05 18:49:10 +020015005 freely evolve depending on demands. You may find a description of all fields
15006 returned in src/dumpstats.c
15007
15008 The special id "all" dumps the states of all sessions, which must be avoided
15009 as much as possible as it is highly CPU intensive and can take a lot of time.
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020015010
15011show stat [<iid> <type> <sid>]
15012 Dump statistics in the CSV format. By passing <id>, <type> and <sid>, it is
15013 possible to dump only selected items :
15014 - <iid> is a proxy ID, -1 to dump everything
15015 - <type> selects the type of dumpable objects : 1 for frontends, 2 for
15016 backends, 4 for servers, -1 for everything. These values can be ORed,
15017 for example:
15018 1 + 2 = 3 -> frontend + backend.
15019 1 + 2 + 4 = 7 -> frontend + backend + server.
15020 - <sid> is a server ID, -1 to dump everything from the selected proxy.
15021
15022 Example :
Willy Tarreau62a36c42010-08-17 15:53:10 +020015023 $ echo "show info;show stat" | socat stdio unix-connect:/tmp/sock1
15024 >>> Name: HAProxy
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020015025 Version: 1.4-dev2-49
15026 Release_date: 2009/09/23
15027 Nbproc: 1
15028 Process_num: 1
15029 (...)
15030
15031 # pxname,svname,qcur,qmax,scur,smax,slim,stot,bin,bout,dreq, (...)
15032 stats,FRONTEND,,,0,0,1000,0,0,0,0,0,0,,,,,OPEN,,,,,,,,,1,1,0, (...)
15033 stats,BACKEND,0,0,0,0,1000,0,0,0,0,0,,0,0,0,0,UP,0,0,0,,0,250,(...)
15034 (...)
15035 www1,BACKEND,0,0,0,0,1000,0,0,0,0,0,,0,0,0,0,UP,1,1,0,,0,250, (...)
15036
15037 $
15038
15039 Here, two commands have been issued at once. That way it's easy to find
15040 which process the stats apply to in multi-process mode. Notice the empty
15041 line after the information output which marks the end of the first block.
15042 A similar empty line appears at the end of the second block (stats) so that
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010015043 the reader knows the output has not been truncated.
Willy Tarreau9a42c0d2009-09-22 19:31:03 +020015044
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020015045show table
15046 Dump general information on all known stick-tables. Their name is returned
15047 (the name of the proxy which holds them), their type (currently zero, always
15048 IP), their size in maximum possible number of entries, and the number of
15049 entries currently in use.
15050
15051 Example :
Willy Tarreau62a36c42010-08-17 15:53:10 +020015052 $ echo "show table" | socat stdio /tmp/sock1
Simon Horman64b28d02011-08-13 08:03:50 +090015053 >>> # table: front_pub, type: ip, size:204800, used:171454
15054 >>> # table: back_rdp, type: ip, size:204800, used:0
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020015055
Simon Horman17bce342011-06-15 15:18:47 +090015056show table <name> [ data.<type> <operator> <value> ] | [ key <key> ]
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020015057 Dump contents of stick-table <name>. In this mode, a first line of generic
15058 information about the table is reported as with "show table", then all
15059 entries are dumped. Since this can be quite heavy, it is possible to specify
Simon Horman17bce342011-06-15 15:18:47 +090015060 a filter in order to specify what entries to display.
15061
15062 When the "data." form is used the filter applies to the stored data (see
15063 "stick-table" in section 4.2). A stored data type must be specified
15064 in <type>, and this data type must be stored in the table otherwise an
15065 error is reported. The data is compared according to <operator> with the
15066 64-bit integer <value>. Operators are the same as with the ACLs :
15067
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020015068 - eq : match entries whose data is equal to this value
15069 - ne : match entries whose data is not equal to this value
15070 - le : match entries whose data is less than or equal to this value
15071 - ge : match entries whose data is greater than or equal to this value
15072 - lt : match entries whose data is less than this value
15073 - gt : match entries whose data is greater than this value
15074
Simon Hormanc88b8872011-06-15 15:18:49 +090015075
15076 When the key form is used the entry <key> is shown. The key must be of the
Simon Horman619e3cc2011-06-15 15:18:52 +090015077 same type as the table, which currently is limited to IPv4, IPv6, integer,
15078 and string.
Simon Horman17bce342011-06-15 15:18:47 +090015079
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020015080 Example :
Willy Tarreau62a36c42010-08-17 15:53:10 +020015081 $ echo "show table http_proxy" | socat stdio /tmp/sock1
Simon Horman64b28d02011-08-13 08:03:50 +090015082 >>> # table: http_proxy, type: ip, size:204800, used:2
Willy Tarreau62a36c42010-08-17 15:53:10 +020015083 >>> 0x80e6a4c: key=127.0.0.1 use=0 exp=3594729 gpc0=0 conn_rate(30000)=1 \
15084 bytes_out_rate(60000)=187
15085 >>> 0x80e6a80: key=127.0.0.2 use=0 exp=3594740 gpc0=1 conn_rate(30000)=10 \
15086 bytes_out_rate(60000)=191
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020015087
Willy Tarreau62a36c42010-08-17 15:53:10 +020015088 $ echo "show table http_proxy data.gpc0 gt 0" | socat stdio /tmp/sock1
Simon Horman64b28d02011-08-13 08:03:50 +090015089 >>> # table: http_proxy, type: ip, size:204800, used:2
Willy Tarreau62a36c42010-08-17 15:53:10 +020015090 >>> 0x80e6a80: key=127.0.0.2 use=0 exp=3594740 gpc0=1 conn_rate(30000)=10 \
15091 bytes_out_rate(60000)=191
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020015092
Willy Tarreau62a36c42010-08-17 15:53:10 +020015093 $ echo "show table http_proxy data.conn_rate gt 5" | \
15094 socat stdio /tmp/sock1
Simon Horman64b28d02011-08-13 08:03:50 +090015095 >>> # table: http_proxy, type: ip, size:204800, used:2
Willy Tarreau62a36c42010-08-17 15:53:10 +020015096 >>> 0x80e6a80: key=127.0.0.2 use=0 exp=3594740 gpc0=1 conn_rate(30000)=10 \
15097 bytes_out_rate(60000)=191
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020015098
Simon Horman17bce342011-06-15 15:18:47 +090015099 $ echo "show table http_proxy key 127.0.0.2" | \
15100 socat stdio /tmp/sock1
Simon Horman64b28d02011-08-13 08:03:50 +090015101 >>> # table: http_proxy, type: ip, size:204800, used:2
Simon Horman17bce342011-06-15 15:18:47 +090015102 >>> 0x80e6a80: key=127.0.0.2 use=0 exp=3594740 gpc0=1 conn_rate(30000)=10 \
15103 bytes_out_rate(60000)=191
15104
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020015105 When the data criterion applies to a dynamic value dependent on time such as
15106 a bytes rate, the value is dynamically computed during the evaluation of the
15107 entry in order to decide whether it has to be dumped or not. This means that
15108 such a filter could match for some time then not match anymore because as
15109 time goes, the average event rate drops.
15110
15111 It is possible to use this to extract lists of IP addresses abusing the
15112 service, in order to monitor them or even blacklist them in a firewall.
15113 Example :
Willy Tarreau62a36c42010-08-17 15:53:10 +020015114 $ echo "show table http_proxy data.gpc0 gt 0" \
15115 | socat stdio /tmp/sock1 \
Willy Tarreau88bc4ec2010-08-01 07:58:48 +020015116 | fgrep 'key=' | cut -d' ' -f2 | cut -d= -f2 > abusers-ip.txt
15117 ( or | awk '/key/{ print a[split($2,a,"=")]; }' )
Krzysztof Piotr Oledzki719e7262009-10-04 15:02:46 +020015118
Nenad Merdanovicc6985f02015-05-09 08:46:02 +020015119show tls-keys
15120 Dump all loaded TLS ticket keys. The TLS ticket key reference ID and the
15121 file from which the keys have been loaded is shown. Both of those can be
15122 used to update the TLS keys using "set ssl tls-key".
15123
Willy Tarreau532a4502011-09-07 22:37:44 +020015124shutdown frontend <frontend>
15125 Completely delete the specified frontend. All the ports it was bound to will
15126 be released. It will not be possible to enable the frontend anymore after
15127 this operation. This is intended to be used in environments where stopping a
15128 proxy is not even imaginable but a misconfigured proxy must be fixed. That
15129 way it's possible to release the port and bind it into another process to
15130 restore operations. The frontend will not appear at all on the stats page
15131 once it is terminated.
15132
15133 The frontend may be specified either by its name or by its numeric ID,
15134 prefixed with a sharp ('#').
15135
15136 This command is restricted and can only be issued on sockets configured for
15137 level "admin".
15138
Willy Tarreaua295edc2011-09-07 23:21:03 +020015139shutdown session <id>
15140 Immediately terminate the session matching the specified session identifier.
15141 This identifier is the first field at the beginning of the lines in the dumps
15142 of "show sess" (it corresponds to the session pointer). This can be used to
15143 terminate a long-running session without waiting for a timeout or when an
15144 endless transfer is ongoing. Such terminated sessions are reported with a 'K'
15145 flag in the logs.
15146
Cyril Bontée63a1eb2014-07-12 18:22:42 +020015147shutdown sessions server <backend>/<server>
Willy Tarreau52b2d222011-09-07 23:48:48 +020015148 Immediately terminate all the sessions attached to the specified server. This
15149 can be used to terminate long-running sessions after a server is put into
15150 maintenance mode, for instance. Such terminated sessions are reported with a
15151 'K' flag in the logs.
15152
Willy Tarreau0ba27502007-12-24 16:55:16 +010015153/*
15154 * Local variables:
15155 * fill-column: 79
15156 * End:
15157 */