blob: 6a4afb455ddc036b40e56c2db36cd292ee963daf [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 Tarreau0e658fb2016-11-25 16:55:50 +01005 version 1.8
Willy Tarreau6a06a402007-07-15 20:15:28 +02006 willy tarreau
Willy Tarreaucfe14662017-11-19 09:55:29 +01007 2017/11/19
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
Cyril Bonté307ee1e2015-09-28 23:16:06 +0200533.6. Mailers
Willy Tarreauc57f0e22009-05-10 13:12:33 +020054
554. Proxies
564.1. Proxy keywords matrix
574.2. Alphabetically sorted keywords reference
58
Willy Tarreau086fbf52012-09-24 20:34:51 +0200595. Bind and Server options
605.1. Bind options
615.2. Server and default-server options
Baptiste Assmann1fa66662015-04-14 00:28:47 +0200625.3. Server DNS resolution
635.3.1. Global overview
645.3.2. The resolvers section
Willy Tarreauc57f0e22009-05-10 13:12:33 +020065
666. HTTP header manipulation
67
Willy Tarreau74ca5042013-06-11 23:12:07 +0200687. Using ACLs and fetching samples
697.1. ACL basics
707.1.1. Matching booleans
717.1.2. Matching integers
727.1.3. Matching strings
737.1.4. Matching regular expressions (regexes)
747.1.5. Matching arbitrary data blocks
757.1.6. Matching IPv4 and IPv6 addresses
767.2. Using ACLs to form conditions
777.3. Fetching samples
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200787.3.1. Converters
797.3.2. Fetching samples from internal states
807.3.3. Fetching samples at Layer 4
817.3.4. Fetching samples at Layer 5
827.3.5. Fetching samples from buffer contents (Layer 6)
837.3.6. Fetching HTTP samples (Layer 7)
Willy Tarreau74ca5042013-06-11 23:12:07 +0200847.4. Pre-defined ACLs
Willy Tarreauc57f0e22009-05-10 13:12:33 +020085
868. Logging
878.1. Log levels
888.2. Log formats
898.2.1. Default log format
908.2.2. TCP log format
918.2.3. HTTP log format
William Lallemand48940402012-01-30 16:47:22 +0100928.2.4. Custom log format
Willy Tarreau5f51e1a2012-12-03 18:40:10 +0100938.2.5. Error log format
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200948.3. Advanced logging options
958.3.1. Disabling logging of external tests
968.3.2. Logging before waiting for the session to terminate
978.3.3. Raising log level upon errors
988.3.4. Disabling logging of successful connections
998.4. Timing events
1008.5. Session state at disconnection
1018.6. Non-printable characters
1028.7. Capturing HTTP cookies
1038.8. Capturing HTTP headers
1048.9. Examples of logs
105
Christopher Fauletc3fe5332016-04-07 15:30:10 +02001069. Supported filters
1079.1. Trace
1089.2. HTTP compression
Christopher Fauletf7e4e7e2016-10-27 22:29:49 +02001099.3. Stream Processing Offload Engine (SPOE)
Christopher Fauletc3fe5332016-04-07 15:30:10 +0200110
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200111
1121. Quick reminder about HTTP
113----------------------------
114
115When haproxy is running in HTTP mode, both the request and the response are
116fully analyzed and indexed, thus it becomes possible to build matching criteria
117on almost anything found in the contents.
118
119However, it is important to understand how HTTP requests and responses are
120formed, and how HAProxy decomposes them. It will then become easier to write
121correct rules and to debug existing configurations.
122
123
1241.1. The HTTP transaction model
125-------------------------------
126
127The HTTP protocol is transaction-driven. This means that each request will lead
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +0100128to one and only one response. Traditionally, a TCP connection is established
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200129from the client to the server, a request is sent by the client on the
130connection, the server responds and the connection is closed. A new request
131will involve a new connection :
132
133 [CON1] [REQ1] ... [RESP1] [CLO1] [CON2] [REQ2] ... [RESP2] [CLO2] ...
134
135In this mode, called the "HTTP close" mode, there are as many connection
136establishments as there are HTTP transactions. Since the connection is closed
137by the server after the response, the client does not need to know the content
138length.
139
140Due to the transactional nature of the protocol, it was possible to improve it
141to avoid closing a connection between two subsequent transactions. In this mode
142however, it is mandatory that the server indicates the content length for each
143response so that the client does not wait indefinitely. For this, a special
144header is used: "Content-length". This mode is called the "keep-alive" mode :
145
146 [CON] [REQ1] ... [RESP1] [REQ2] ... [RESP2] [CLO] ...
147
148Its advantages are a reduced latency between transactions, and less processing
149power required on the server side. It is generally better than the close mode,
150but not always because the clients often limit their concurrent connections to
Patrick Mezard9ec2ec42010-06-12 17:02:45 +0200151a smaller value.
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200152
153A last improvement in the communications is the pipelining mode. It still uses
154keep-alive, but the client does not wait for the first response to send the
155second request. This is useful for fetching large number of images composing a
156page :
157
158 [CON] [REQ1] [REQ2] ... [RESP1] [RESP2] [CLO] ...
159
160This can obviously have a tremendous benefit on performance because the network
161latency is eliminated between subsequent requests. Many HTTP agents do not
162correctly support pipelining since there is no way to associate a response with
163the corresponding request in HTTP. For this reason, it is mandatory for the
Cyril Bonté78caf842010-03-10 22:41:43 +0100164server to reply in the exact same order as the requests were received.
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200165
Willy Tarreau70dffda2014-01-30 03:07:23 +0100166By default HAProxy operates in keep-alive mode with regards to persistent
167connections: for each connection it processes each request and response, and
168leaves the connection idle on both sides between the end of a response and the
169start of a new request.
Patrick Mezard9ec2ec42010-06-12 17:02:45 +0200170
Willy Tarreau70dffda2014-01-30 03:07:23 +0100171HAProxy supports 5 connection modes :
172 - keep alive : all requests and responses are processed (default)
173 - tunnel : only the first request and response are processed,
174 everything else is forwarded with no analysis.
175 - passive close : tunnel with "Connection: close" added in both directions.
176 - server close : the server-facing connection is closed after the response.
177 - forced close : the connection is actively closed after end of response.
178
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200179
1801.2. HTTP request
181-----------------
182
183First, let's consider this HTTP request :
184
185 Line Contents
Willy Tarreaud72758d2010-01-12 10:42:19 +0100186 number
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200187 1 GET /serv/login.php?lang=en&profile=2 HTTP/1.1
188 2 Host: www.mydomain.com
189 3 User-agent: my small browser
190 4 Accept: image/jpeg, image/gif
191 5 Accept: image/png
192
193
1941.2.1. The Request line
195-----------------------
196
197Line 1 is the "request line". It is always composed of 3 fields :
198
199 - a METHOD : GET
200 - a URI : /serv/login.php?lang=en&profile=2
201 - a version tag : HTTP/1.1
202
203All of them are delimited by what the standard calls LWS (linear white spaces),
204which are commonly spaces, but can also be tabs or line feeds/carriage returns
205followed by spaces/tabs. The method itself cannot contain any colon (':') and
206is limited to alphabetic letters. All those various combinations make it
207desirable that HAProxy performs the splitting itself rather than leaving it to
208the user to write a complex or inaccurate regular expression.
209
210The URI itself can have several forms :
211
212 - A "relative URI" :
213
214 /serv/login.php?lang=en&profile=2
215
216 It is a complete URL without the host part. This is generally what is
217 received by servers, reverse proxies and transparent proxies.
218
219 - An "absolute URI", also called a "URL" :
220
221 http://192.168.0.12:8080/serv/login.php?lang=en&profile=2
222
223 It is composed of a "scheme" (the protocol name followed by '://'), a host
224 name or address, optionally a colon (':') followed by a port number, then
225 a relative URI beginning at the first slash ('/') after the address part.
226 This is generally what proxies receive, but a server supporting HTTP/1.1
227 must accept this form too.
228
229 - a star ('*') : this form is only accepted in association with the OPTIONS
230 method and is not relayable. It is used to inquiry a next hop's
231 capabilities.
Willy Tarreaud72758d2010-01-12 10:42:19 +0100232
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200233 - an address:port combination : 192.168.0.12:80
234 This is used with the CONNECT method, which is used to establish TCP
235 tunnels through HTTP proxies, generally for HTTPS, but sometimes for
236 other protocols too.
237
238In a relative URI, two sub-parts are identified. The part before the question
239mark is called the "path". It is typically the relative path to static objects
240on the server. The part after the question mark is called the "query string".
241It is mostly used with GET requests sent to dynamic scripts and is very
242specific to the language, framework or application in use.
243
244
2451.2.2. The request headers
246--------------------------
247
248The headers start at the second line. They are composed of a name at the
249beginning of the line, immediately followed by a colon (':'). Traditionally,
250an LWS is added after the colon but that's not required. Then come the values.
251Multiple identical headers may be folded into one single line, delimiting the
252values with commas, provided that their order is respected. This is commonly
253encountered in the "Cookie:" field. A header may span over multiple lines if
254the subsequent lines begin with an LWS. In the example in 1.2, lines 4 and 5
255define a total of 3 values for the "Accept:" header.
256
257Contrary to a common mis-conception, header names are not case-sensitive, and
258their values are not either if they refer to other header names (such as the
259"Connection:" header).
260
261The end of the headers is indicated by the first empty line. People often say
262that it's a double line feed, which is not exact, even if a double line feed
263is one valid form of empty line.
264
265Fortunately, HAProxy takes care of all these complex combinations when indexing
266headers, checking values and counting them, so there is no reason to worry
267about the way they could be written, but it is important not to accuse an
268application of being buggy if it does unusual, valid things.
269
270Important note:
Lukas Tribus23953682017-04-28 13:24:30 +0000271 As suggested by RFC7231, HAProxy normalizes headers by replacing line breaks
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200272 in the middle of headers by LWS in order to join multi-line headers. This
273 is necessary for proper analysis and helps less capable HTTP parsers to work
274 correctly and not to be fooled by such complex constructs.
275
276
2771.3. HTTP response
278------------------
279
280An HTTP response looks very much like an HTTP request. Both are called HTTP
281messages. Let's consider this HTTP response :
282
283 Line Contents
Willy Tarreaud72758d2010-01-12 10:42:19 +0100284 number
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200285 1 HTTP/1.1 200 OK
286 2 Content-length: 350
287 3 Content-Type: text/html
288
Willy Tarreau816b9792009-09-15 21:25:21 +0200289As a special case, HTTP supports so called "Informational responses" as status
290codes 1xx. These messages are special in that they don't convey any part of the
291response, they're just used as sort of a signaling message to ask a client to
Willy Tarreau5843d1a2010-02-01 15:13:32 +0100292continue to post its request for instance. In the case of a status 100 response
293the requested information will be carried by the next non-100 response message
294following the informational one. This implies that multiple responses may be
295sent to a single request, and that this only works when keep-alive is enabled
296(1xx messages are HTTP/1.1 only). HAProxy handles these messages and is able to
297correctly forward and skip them, and only process the next non-100 response. As
298such, these messages are neither logged nor transformed, unless explicitly
299state otherwise. Status 101 messages indicate that the protocol is changing
300over the same connection and that haproxy must switch to tunnel mode, just as
301if a CONNECT had occurred. Then the Upgrade header would contain additional
302information about the type of protocol the connection is switching to.
Willy Tarreau816b9792009-09-15 21:25:21 +0200303
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200304
3051.3.1. The Response line
306------------------------
307
308Line 1 is the "response line". It is always composed of 3 fields :
309
310 - a version tag : HTTP/1.1
311 - a status code : 200
312 - a reason : OK
313
314The status code is always 3-digit. The first digit indicates a general status :
Willy Tarreau816b9792009-09-15 21:25:21 +0200315 - 1xx = informational message to be skipped (eg: 100, 101)
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200316 - 2xx = OK, content is following (eg: 200, 206)
317 - 3xx = OK, no content following (eg: 302, 304)
318 - 4xx = error caused by the client (eg: 401, 403, 404)
319 - 5xx = error caused by the server (eg: 500, 502, 503)
320
Lukas Tribus23953682017-04-28 13:24:30 +0000321Please refer to RFC7231 for the detailed meaning of all such codes. The
Willy Tarreaud72758d2010-01-12 10:42:19 +0100322"reason" field is just a hint, but is not parsed by clients. Anything can be
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200323found there, but it's a common practice to respect the well-established
324messages. It can be composed of one or multiple words, such as "OK", "Found",
325or "Authentication Required".
326
327Haproxy may emit the following status codes by itself :
328
329 Code When / reason
330 200 access to stats page, and when replying to monitoring requests
331 301 when performing a redirection, depending on the configured code
332 302 when performing a redirection, depending on the configured code
333 303 when performing a redirection, depending on the configured code
Willy Tarreaub67fdc42013-03-29 19:28:11 +0100334 307 when performing a redirection, depending on the configured code
335 308 when performing a redirection, depending on the configured code
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200336 400 for an invalid or too large request
337 401 when an authentication is required to perform the action (when
338 accessing the stats page)
339 403 when a request is forbidden by a "block" ACL or "reqdeny" filter
340 408 when the request timeout strikes before the request is complete
341 500 when haproxy encounters an unrecoverable internal error, such as a
342 memory allocation failure, which should never happen
343 502 when the server returns an empty, invalid or incomplete response, or
344 when an "rspdeny" filter blocks the response.
345 503 when no server was available to handle the request, or in response to
346 monitoring requests which match the "monitor fail" condition
347 504 when the response timeout strikes before the server responds
348
349The error 4xx and 5xx codes above may be customized (see "errorloc" in section
3504.2).
351
352
3531.3.2. The response headers
354---------------------------
355
356Response headers work exactly like request headers, and as such, HAProxy uses
357the same parsing function for both. Please refer to paragraph 1.2.2 for more
358details.
359
360
3612. Configuring HAProxy
362----------------------
363
3642.1. Configuration file format
365------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +0200366
367HAProxy's configuration process involves 3 major sources of parameters :
368
369 - the arguments from the command-line, which always take precedence
370 - the "global" section, which sets process-wide parameters
371 - the proxies sections which can take form of "defaults", "listen",
372 "frontend" and "backend".
373
Willy Tarreau0ba27502007-12-24 16:55:16 +0100374The configuration file syntax consists in lines beginning with a keyword
375referenced in this manual, optionally followed by one or several parameters
William Lallemandf9873ba2015-05-05 17:37:14 +0200376delimited by spaces.
Willy Tarreau0ba27502007-12-24 16:55:16 +0100377
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200378
William Lallemandf9873ba2015-05-05 17:37:14 +02003792.2. Quoting and escaping
380-------------------------
381
382HAProxy's configuration introduces a quoting and escaping system similar to
383many programming languages. The configuration file supports 3 types: escaping
384with a backslash, weak quoting with double quotes, and strong quoting with
385single quotes.
386
387If spaces have to be entered in strings, then they must be escaped by preceding
388them by a backslash ('\') or by quoting them. Backslashes also have to be
389escaped by doubling or strong quoting them.
390
391Escaping is achieved by preceding a special character by a backslash ('\'):
392
393 \ to mark a space and differentiate it from a delimiter
394 \# to mark a hash and differentiate it from a comment
395 \\ to use a backslash
396 \' to use a single quote and differentiate it from strong quoting
397 \" to use a double quote and differentiate it from weak quoting
398
399Weak quoting is achieved by using double quotes (""). Weak quoting prevents
400the interpretation of:
401
402 space as a parameter separator
403 ' single quote as a strong quoting delimiter
404 # hash as a comment start
405
William Lallemandb2f07452015-05-12 14:27:13 +0200406Weak quoting permits the interpretation of variables, if you want to use a non
407-interpreted dollar within a double quoted string, you should escape it with a
408backslash ("\$"), it does not work outside weak quoting.
409
410Interpretation of escaping and special characters are not prevented by weak
William Lallemandf9873ba2015-05-05 17:37:14 +0200411quoting.
412
413Strong quoting is achieved by using single quotes (''). Inside single quotes,
414nothing is interpreted, it's the efficient way to quote regexes.
415
416Quoted and escaped strings are replaced in memory by their interpreted
417equivalent, it allows you to perform concatenation.
418
419 Example:
420 # those are equivalents:
421 log-format %{+Q}o\ %t\ %s\ %{-Q}r
422 log-format "%{+Q}o %t %s %{-Q}r"
423 log-format '%{+Q}o %t %s %{-Q}r'
424 log-format "%{+Q}o %t"' %s %{-Q}r'
425 log-format "%{+Q}o %t"' %s'\ %{-Q}r
426
427 # those are equivalents:
428 reqrep "^([^\ :]*)\ /static/(.*)" \1\ /\2
429 reqrep "^([^ :]*)\ /static/(.*)" '\1 /\2'
430 reqrep "^([^ :]*)\ /static/(.*)" "\1 /\2"
431 reqrep "^([^ :]*)\ /static/(.*)" "\1\ /\2"
432
433
William Lallemandb2f07452015-05-12 14:27:13 +02004342.3. Environment variables
435--------------------------
436
437HAProxy's configuration supports environment variables. Those variables are
438interpreted only within double quotes. Variables are expanded during the
439configuration parsing. Variable names must be preceded by a dollar ("$") and
440optionally enclosed with braces ("{}") similarly to what is done in Bourne
441shell. Variable names can contain alphanumerical characters or the character
442underscore ("_") but should not start with a digit.
443
444 Example:
445
446 bind "fd@${FD_APP1}"
447
448 log "${LOCAL_SYSLOG}:514" local0 notice # send to local server
449
450 user "$HAPROXY_USER"
451
452
4532.4. Time format
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200454----------------
455
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +0100456Some parameters involve values representing time, such as timeouts. These
Willy Tarreau0ba27502007-12-24 16:55:16 +0100457values are generally expressed in milliseconds (unless explicitly stated
458otherwise) but may be expressed in any other unit by suffixing the unit to the
459numeric value. It is important to consider this because it will not be repeated
460for every keyword. Supported units are :
461
462 - us : microseconds. 1 microsecond = 1/1000000 second
463 - ms : milliseconds. 1 millisecond = 1/1000 second. This is the default.
464 - s : seconds. 1s = 1000ms
465 - m : minutes. 1m = 60s = 60000ms
466 - h : hours. 1h = 60m = 3600s = 3600000ms
467 - d : days. 1d = 24h = 1440m = 86400s = 86400000ms
468
469
Lukas Tribusaa83a312017-03-21 09:25:09 +00004702.5. Examples
Patrick Mezard35da19c2010-06-12 17:02:47 +0200471-------------
472
473 # Simple configuration for an HTTP proxy listening on port 80 on all
474 # interfaces and forwarding requests to a single backend "servers" with a
475 # single server "server1" listening on 127.0.0.1:8000
476 global
477 daemon
478 maxconn 256
479
480 defaults
481 mode http
482 timeout connect 5000ms
483 timeout client 50000ms
484 timeout server 50000ms
485
486 frontend http-in
487 bind *:80
488 default_backend servers
489
490 backend servers
491 server server1 127.0.0.1:8000 maxconn 32
492
493
494 # The same configuration defined with a single listen block. Shorter but
495 # less expressive, especially in HTTP mode.
496 global
497 daemon
498 maxconn 256
499
500 defaults
501 mode http
502 timeout connect 5000ms
503 timeout client 50000ms
504 timeout server 50000ms
505
506 listen http-in
507 bind *:80
508 server server1 127.0.0.1:8000 maxconn 32
509
510
511Assuming haproxy is in $PATH, test these configurations in a shell with:
512
Willy Tarreauccb289d2010-12-11 20:19:38 +0100513 $ sudo haproxy -f configuration.conf -c
Patrick Mezard35da19c2010-06-12 17:02:47 +0200514
515
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005163. Global parameters
Willy Tarreau6a06a402007-07-15 20:15:28 +0200517--------------------
518
519Parameters in the "global" section are process-wide and often OS-specific. They
520are generally set once for all and do not need being changed once correct. Some
521of them have command-line equivalents.
522
523The following keywords are supported in the "global" section :
524
525 * Process management and security
Emeric Brunc8e8d122012-10-02 18:42:10 +0200526 - ca-base
Willy Tarreau6a06a402007-07-15 20:15:28 +0200527 - chroot
Emeric Brunc8e8d122012-10-02 18:42:10 +0200528 - crt-base
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200529 - cpu-map
Willy Tarreau6a06a402007-07-15 20:15:28 +0200530 - daemon
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200531 - description
532 - deviceatlas-json-file
533 - deviceatlas-log-level
534 - deviceatlas-separator
535 - deviceatlas-properties-cookie
Simon Horman98637e52014-06-20 12:30:16 +0900536 - external-check
Willy Tarreau6a06a402007-07-15 20:15:28 +0200537 - gid
538 - group
Cyril Bonté203ec5a2017-03-23 22:44:13 +0100539 - hard-stop-after
Willy Tarreau6a06a402007-07-15 20:15:28 +0200540 - log
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200541 - log-tag
Joe Williamsdf5b38f2010-12-29 17:05:48 +0100542 - log-send-hostname
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200543 - lua-load
Willy Tarreau6a06a402007-07-15 20:15:28 +0200544 - nbproc
Christopher Fauletbe0faa22017-08-29 15:37:10 +0200545 - nbthread
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200546 - node
Willy Tarreau6a06a402007-07-15 20:15:28 +0200547 - pidfile
Willy Tarreau1d549722016-02-16 12:41:57 +0100548 - presetenv
549 - resetenv
Willy Tarreau6a06a402007-07-15 20:15:28 +0200550 - uid
551 - ulimit-n
552 - user
Willy Tarreau1d549722016-02-16 12:41:57 +0100553 - setenv
Willy Tarreaufbee7132007-10-18 13:53:22 +0200554 - stats
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200555 - ssl-default-bind-ciphers
556 - ssl-default-bind-options
557 - ssl-default-server-ciphers
558 - ssl-default-server-options
559 - ssl-dh-param-file
Emeric Brun850efd52014-01-29 12:24:34 +0100560 - ssl-server-verify
Christopher Faulet62519022017-10-16 15:49:32 +0200561 - thread-map
Willy Tarreauceb24bc2010-11-09 12:46:41 +0100562 - unix-bind
Willy Tarreau1d549722016-02-16 12:41:57 +0100563 - unsetenv
Thomas Holmesdb04f192015-05-18 13:21:39 +0100564 - 51degrees-data-file
565 - 51degrees-property-name-list
Dragan Dosen93b38d92015-06-29 16:43:25 +0200566 - 51degrees-property-separator
Dragan Dosenae6d39a2015-06-29 16:43:27 +0200567 - 51degrees-cache-size
scientiamobiled0027ed2016-11-04 10:55:08 +0100568 - wurfl-data-file
569 - wurfl-information-list
570 - wurfl-information-list-separator
571 - wurfl-engine-mode
572 - wurfl-cache-size
573 - wurfl-useragent-priority
Willy Tarreaud72758d2010-01-12 10:42:19 +0100574
Willy Tarreau6a06a402007-07-15 20:15:28 +0200575 * Performance tuning
Willy Tarreau1746eec2014-04-25 10:46:47 +0200576 - max-spread-checks
Willy Tarreau6a06a402007-07-15 20:15:28 +0200577 - maxconn
Willy Tarreau81c25d02011-09-07 15:17:21 +0200578 - maxconnrate
William Lallemandd85f9172012-11-09 17:05:39 +0100579 - maxcomprate
William Lallemand072a2bf2012-11-20 17:01:01 +0100580 - maxcompcpuusage
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100581 - maxpipes
Willy Tarreau93e7c002013-10-07 18:51:07 +0200582 - maxsessrate
Willy Tarreau403edff2012-09-06 11:58:37 +0200583 - maxsslconn
Willy Tarreaue43d5322013-10-07 20:01:52 +0200584 - maxsslrate
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200585 - maxzlibmem
Willy Tarreau6a06a402007-07-15 20:15:28 +0200586 - noepoll
587 - nokqueue
588 - nopoll
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100589 - nosplice
Jarno Huuskonen0e82b922014-04-12 18:22:19 +0300590 - nogetaddrinfo
Lukas Tribusa0bcbdc2016-09-12 21:42:20 +0000591 - noreuseport
Willy Tarreaufe255b72007-10-14 23:09:26 +0200592 - spread-checks
Baptiste Assmann5626f482015-08-23 10:00:10 +0200593 - server-state-base
Baptiste Assmannef1f0fc2015-08-23 10:06:39 +0200594 - server-state-file
Grant Zhang872f9c22017-01-21 01:10:18 +0000595 - ssl-engine
Grant Zhangfa6c7ee2017-01-14 01:42:15 +0000596 - ssl-mode-async
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200597 - tune.buffers.limit
598 - tune.buffers.reserve
Willy Tarreau27a674e2009-08-17 07:23:33 +0200599 - tune.bufsize
Willy Tarreau43961d52010-10-04 20:39:20 +0200600 - tune.chksize
William Lallemandf3747832012-11-09 12:33:10 +0100601 - tune.comp.maxlevel
Willy Tarreaufe20e5b2017-07-27 11:42:14 +0200602 - tune.h2.header-table-size
Willy Tarreaue6baec02017-07-27 11:45:11 +0200603 - tune.h2.initial-window-size
Willy Tarreau5242ef82017-07-27 11:47:28 +0200604 - tune.h2.max-concurrent-streams
Willy Tarreau193b8c62012-11-22 00:17:38 +0100605 - tune.http.cookielen
Stéphane Cottin23e9e932017-05-18 08:58:41 +0200606 - tune.http.logurilen
Willy Tarreauac1932d2011-10-24 19:14:41 +0200607 - tune.http.maxhdr
Willy Tarreau7e312732014-02-12 16:35:14 +0100608 - tune.idletimer
Thierry FOURNIER90da1912015-03-05 11:17:06 +0100609 - tune.lua.forced-yield
Willy Tarreau32f61e22015-03-18 17:54:59 +0100610 - tune.lua.maxmem
Thierry FOURNIER90da1912015-03-05 11:17:06 +0100611 - tune.lua.session-timeout
612 - tune.lua.task-timeout
Thierry FOURNIER7dd784b2015-10-01 14:49:33 +0200613 - tune.lua.service-timeout
Willy Tarreaua0250ba2008-01-06 11:22:57 +0100614 - tune.maxaccept
615 - tune.maxpollevents
Willy Tarreau27a674e2009-08-17 07:23:33 +0200616 - tune.maxrewrite
Willy Tarreauf3045d22015-04-29 16:24:50 +0200617 - tune.pattern.cache-size
Willy Tarreaubd9a0a72011-10-23 21:14:29 +0200618 - tune.pipesize
Willy Tarreaue803de22010-01-21 17:43:04 +0100619 - tune.rcvbuf.client
620 - tune.rcvbuf.server
Willy Tarreaub22fc302015-12-14 12:04:35 +0100621 - tune.recv_enough
Willy Tarreaue803de22010-01-21 17:43:04 +0100622 - tune.sndbuf.client
623 - tune.sndbuf.server
Willy Tarreau6ec58db2012-11-16 16:32:15 +0100624 - tune.ssl.cachesize
Willy Tarreaubfd59462013-02-21 07:46:09 +0100625 - tune.ssl.lifetime
Emeric Brun8dc60392014-05-09 13:52:00 +0200626 - tune.ssl.force-private-cache
Willy Tarreaubfd59462013-02-21 07:46:09 +0100627 - tune.ssl.maxrecord
Remi Gacognef46cd6e2014-06-12 14:58:40 +0200628 - tune.ssl.default-dh-param
Christopher Faulet31af49d2015-06-09 17:29:50 +0200629 - tune.ssl.ssl-ctx-cache-size
Thierry FOURNIER5bf77322017-02-25 12:45:22 +0100630 - tune.ssl.capture-cipherlist-size
Thierry FOURNIER4834bc72015-06-06 19:29:07 +0200631 - tune.vars.global-max-size
Christopher Fauletff2613e2016-11-09 11:36:17 +0100632 - tune.vars.proc-max-size
Thierry FOURNIER4834bc72015-06-06 19:29:07 +0200633 - tune.vars.reqres-max-size
634 - tune.vars.sess-max-size
635 - tune.vars.txn-max-size
William Lallemanda509e4c2012-11-07 16:54:34 +0100636 - tune.zlib.memlevel
637 - tune.zlib.windowsize
Willy Tarreaud72758d2010-01-12 10:42:19 +0100638
Willy Tarreau6a06a402007-07-15 20:15:28 +0200639 * Debugging
640 - debug
641 - quiet
Willy Tarreau6a06a402007-07-15 20:15:28 +0200642
643
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006443.1. Process management and security
Willy Tarreau6a06a402007-07-15 20:15:28 +0200645------------------------------------
646
Emeric Brunc8e8d122012-10-02 18:42:10 +0200647ca-base <dir>
648 Assigns a default directory to fetch SSL CA certificates and CRLs from when a
Emeric Brunfd33a262012-10-11 16:28:27 +0200649 relative path is used with "ca-file" or "crl-file" directives. Absolute
650 locations specified in "ca-file" and "crl-file" prevail and ignore "ca-base".
Emeric Brunc8e8d122012-10-02 18:42:10 +0200651
Willy Tarreau6a06a402007-07-15 20:15:28 +0200652chroot <jail dir>
653 Changes current directory to <jail dir> and performs a chroot() there before
654 dropping privileges. This increases the security level in case an unknown
655 vulnerability would be exploited, since it would make it very hard for the
656 attacker to exploit the system. This only works when the process is started
657 with superuser privileges. It is important to ensure that <jail_dir> is both
658 empty and unwritable to anyone.
Willy Tarreaud72758d2010-01-12 10:42:19 +0100659
Christopher Fauletff4121f2017-11-22 16:38:49 +0100660cpu-map [auto:]<"all"|"odd"|"even"|process_num[-[process_num]]> <cpu-set>...
Willy Tarreaufc6c0322012-11-16 16:12:27 +0100661 On Linux 2.6 and above, it is possible to bind a process to a specific CPU
662 set. This means that the process will never run on other CPUs. The "cpu-map"
663 directive specifies CPU sets for process sets. The first argument is the
Willy Tarreaua9db57e2013-01-18 11:29:29 +0100664 process number to bind. This process must have a number between 1 and 32 or
665 64, depending on the machine's word size, and any process IDs above nbproc
Christopher Faulet1dcb9cb2017-11-22 10:24:40 +0100666 are ignored. It is possible to specify a range with two such number delimited
667 by a dash ('-'). It also is possible to specify all processes at once using
668 "all", only odd numbers using "odd" or even numbers using "even", just like
669 with the "bind-process" directive. The second and forthcoming arguments are
670 CPU sets. Each CPU set is either a unique number between 0 and 31 or 63 or a
671 range with two such numbers delimited by a dash ('-'). Multiple CPU numbers
672 or ranges may be specified, and the processes will be allowed to bind to all
673 of them. Obviously, multiple "cpu-map" directives may be specified. Each
674 "cpu-map" directive will replace the previous ones when they overlap.
Willy Tarreaufc6c0322012-11-16 16:12:27 +0100675
Christopher Fauletff4121f2017-11-22 16:38:49 +0100676 Ranges can be partially defined. The higher bound can be omitted. In such
677 case, it is replaced by the corresponding maximum value, 32 or 64 depending
678 on the machine's word size.
679
680 Examples:
681 cpu-map 1- 0- # will be replaced by "cpu-map 1-64 0-63"
682 # or "cpu-map 1-32 0-31" depending on the machine's
683 # word size.
684
Christopher Faulet26028f62017-11-22 15:01:51 +0100685 The prefix "auto:" can be added before the process set to let HAProxy
686 automatically bind a process to a CPU by incrementing process and CPU
687 sets. To be valid, both sets must have the same size. No matter the
688 declaration order of the CPU sets, it will be bound from the lower to the
689 higher bound.
690
691 Examples:
692 # all these lines bind the process 1 to the cpu 0, the process 2 to cpu 1
693 # and so on.
694 cpu-map auto:1-4 0-3
695 cpu-map auto:1-4 0-1 2-3
696 cpu-map auto:1-4 3 2 1 0
697
698 # bind each process to exaclty one CPU using all/odd/even keyword
699 cpu-map auto:all 0-63
700 cpu-map auto:even 0-31
701 cpu-map auto:odd 32-63
702
703 # invalid cpu-map because process and CPU sets have different sizes.
704 cpu-map auto:1-4 0 # invalid
705 cpu-map auto:1 0-3 # invalid
706
Emeric Brunc8e8d122012-10-02 18:42:10 +0200707crt-base <dir>
708 Assigns a default directory to fetch SSL certificates from when a relative
709 path is used with "crtfile" directives. Absolute locations specified after
710 "crtfile" prevail and ignore "crt-base".
711
Willy Tarreau6a06a402007-07-15 20:15:28 +0200712daemon
713 Makes the process fork into background. This is the recommended mode of
714 operation. It is equivalent to the command line "-D" argument. It can be
Lukas Tribusf46bf952017-11-21 12:39:34 +0100715 disabled by the command line "-db" argument. This option is ignored in
716 systemd mode.
Willy Tarreau6a06a402007-07-15 20:15:28 +0200717
David Carlier8167f302015-06-01 13:50:06 +0200718deviceatlas-json-file <path>
719 Sets the path of the DeviceAtlas JSON data file to be loaded by the API.
720 The path must be a valid JSON data file and accessible by Haproxy process.
721
722deviceatlas-log-level <value>
723 Sets the level of informations returned by the API. This directive is
724 optional and set to 0 by default if not set.
725
726deviceatlas-separator <char>
727 Sets the character separator for the API properties results. This directive
728 is optional and set to | by default if not set.
729
Cyril Bonté0306c4a2015-10-26 22:37:38 +0100730deviceatlas-properties-cookie <name>
Cyril Bonté307ee1e2015-09-28 23:16:06 +0200731 Sets the client cookie's name used for the detection if the DeviceAtlas
732 Client-side component was used during the request. This directive is optional
733 and set to DAPROPS by default if not set.
David Carlier29b3ca32015-09-25 14:09:21 +0100734
Simon Horman98637e52014-06-20 12:30:16 +0900735external-check
736 Allows the use of an external agent to perform health checks.
737 This is disabled by default as a security precaution.
738 See "option external-check".
739
Willy Tarreau6a06a402007-07-15 20:15:28 +0200740gid <number>
741 Changes the process' group ID to <number>. It is recommended that the group
742 ID is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
743 be started with a user belonging to this group, or with superuser privileges.
Michael Schererab012dd2013-01-12 18:35:19 +0100744 Note that if haproxy is started from a user having supplementary groups, it
745 will only be able to drop these groups if started with superuser privileges.
Willy Tarreau6a06a402007-07-15 20:15:28 +0200746 See also "group" and "uid".
Willy Tarreaud72758d2010-01-12 10:42:19 +0100747
Cyril Bonté203ec5a2017-03-23 22:44:13 +0100748hard-stop-after <time>
749 Defines the maximum time allowed to perform a clean soft-stop.
750
751 Arguments :
752 <time> is the maximum time (by default in milliseconds) for which the
753 instance will remain alive when a soft-stop is received via the
754 SIGUSR1 signal.
755
756 This may be used to ensure that the instance will quit even if connections
757 remain opened during a soft-stop (for example with long timeouts for a proxy
758 in tcp mode). It applies both in TCP and HTTP mode.
759
760 Example:
761 global
762 hard-stop-after 30s
763
Willy Tarreau6a06a402007-07-15 20:15:28 +0200764group <group name>
765 Similar to "gid" but uses the GID of group name <group name> from /etc/group.
766 See also "gid" and "user".
Willy Tarreaud72758d2010-01-12 10:42:19 +0100767
Dragan Dosen7ad31542015-09-28 17:16:47 +0200768log <address> [len <length>] [format <format>] <facility> [max level [min level]]
Willy Tarreau6a06a402007-07-15 20:15:28 +0200769 Adds a global syslog server. Up to two global servers can be defined. They
770 will receive logs for startups and exits, as well as all logs from proxies
Robert Tsai81ae1952007-12-05 10:47:29 +0100771 configured with "log global".
772
773 <address> can be one of:
774
Willy Tarreau2769aa02007-12-27 18:26:09 +0100775 - An IPv4 address optionally followed by a colon and a UDP port. If
Robert Tsai81ae1952007-12-05 10:47:29 +0100776 no port is specified, 514 is used by default (the standard syslog
777 port).
778
David du Colombier24bb5f52011-03-17 10:40:23 +0100779 - An IPv6 address followed by a colon and optionally a UDP port. If
780 no port is specified, 514 is used by default (the standard syslog
781 port).
782
Robert Tsai81ae1952007-12-05 10:47:29 +0100783 - A filesystem path to a UNIX domain socket, keeping in mind
784 considerations for chroot (be sure the path is accessible inside
785 the chroot) and uid/gid (be sure the path is appropriately
786 writeable).
787
William Lallemandb2f07452015-05-12 14:27:13 +0200788 You may want to reference some environment variables in the address
789 parameter, see section 2.3 about environment variables.
Willy Tarreaudad36a32013-03-11 01:20:04 +0100790
Willy Tarreau18324f52014-06-27 18:10:07 +0200791 <length> is an optional maximum line length. Log lines larger than this value
792 will be truncated before being sent. The reason is that syslog
793 servers act differently on log line length. All servers support the
794 default value of 1024, but some servers simply drop larger lines
795 while others do log them. If a server supports long lines, it may
796 make sense to set this value here in order to avoid truncating long
797 lines. Similarly, if a server drops long lines, it is preferable to
798 truncate them before sending them. Accepted values are 80 to 65535
799 inclusive. The default value of 1024 is generally fine for all
800 standard usages. Some specific cases of long captures or
Stéphane Cottin23e9e932017-05-18 08:58:41 +0200801 JSON-formated logs may require larger values. You may also need to
802 increase "tune.http.logurilen" if your request uris are truncated.
Willy Tarreau18324f52014-06-27 18:10:07 +0200803
Dragan Dosen7ad31542015-09-28 17:16:47 +0200804 <format> is the log format used when generating syslog messages. It may be
805 one of the following :
806
807 rfc3164 The RFC3164 syslog message format. This is the default.
808 (https://tools.ietf.org/html/rfc3164)
809
810 rfc5424 The RFC5424 syslog message format.
811 (https://tools.ietf.org/html/rfc5424)
812
Robert Tsai81ae1952007-12-05 10:47:29 +0100813 <facility> must be one of the 24 standard syslog facilities :
Willy Tarreau6a06a402007-07-15 20:15:28 +0200814
815 kern user mail daemon auth syslog lpr news
816 uucp cron auth2 ftp ntp audit alert cron2
817 local0 local1 local2 local3 local4 local5 local6 local7
818
819 An optional level can be specified to filter outgoing messages. By default,
Willy Tarreauf7edefa2009-05-10 17:20:05 +0200820 all messages are sent. If a maximum level is specified, only messages with a
821 severity at least as important as this level will be sent. An optional minimum
822 level can be specified. If it is set, logs emitted with a more severe level
823 than this one will be capped to this level. This is used to avoid sending
824 "emerg" messages on all terminals on some default syslog configurations.
825 Eight levels are known :
Willy Tarreau6a06a402007-07-15 20:15:28 +0200826
Cyril Bontédc4d9032012-04-08 21:57:39 +0200827 emerg alert crit err warning notice info debug
Willy Tarreau6a06a402007-07-15 20:15:28 +0200828
Joe Williamsdf5b38f2010-12-29 17:05:48 +0100829log-send-hostname [<string>]
830 Sets the hostname field in the syslog header. If optional "string" parameter
831 is set the header is set to the string contents, otherwise uses the hostname
832 of the system. Generally used if one is not relaying logs through an
833 intermediate syslog server or for simply customizing the hostname printed in
834 the logs.
835
Kevinm48936af2010-12-22 16:08:21 +0000836log-tag <string>
837 Sets the tag field in the syslog header to this string. It defaults to the
838 program name as launched from the command line, which usually is "haproxy".
839 Sometimes it can be useful to differentiate between multiple processes
Willy Tarreau094af4e2015-01-07 15:03:42 +0100840 running on the same host. See also the per-proxy "log-tag" directive.
Kevinm48936af2010-12-22 16:08:21 +0000841
Thierry FOURNIER90da1912015-03-05 11:17:06 +0100842lua-load <file>
843 This global directive loads and executes a Lua file. This directive can be
844 used multiple times.
845
William Lallemande202b1e2017-06-01 17:38:56 +0200846master-worker [exit-on-failure]
847 Master-worker mode. It is equivalent to the command line "-W" argument.
848 This mode will launch a "master" which will monitor the "workers". Using
849 this mode, you can reload HAProxy directly by sending a SIGUSR2 signal to
850 the master. The master-worker mode is compatible either with the foreground
851 or daemon mode. It is recommended to use this mode with multiprocess and
852 systemd.
853 The "exit-on-failure" option allows the master to kill every workers and
854 exit when one of the current workers died. It is convenient to combine this
855 option with Restart=on-failure in a systemd unit file in order to relaunch
856 the whole process.
857
858 See alors "-W" in the management guide.
859
Willy Tarreau6a06a402007-07-15 20:15:28 +0200860nbproc <number>
861 Creates <number> processes when going daemon. This requires the "daemon"
862 mode. By default, only one process is created, which is the recommended mode
863 of operation. For systems limited to small sets of file descriptors per
864 process, it may be needed to fork multiple daemons. USING MULTIPLE PROCESSES
865 IS HARDER TO DEBUG AND IS REALLY DISCOURAGED. See also "daemon".
866
Christopher Fauletbe0faa22017-08-29 15:37:10 +0200867nbthread <number>
868 This setting is only available when support for threads was built in. It
869 creates <number> threads for each created processes. It means if HAProxy is
870 started in foreground, it only creates <number> threads for the first
871 process. FOR NOW, THREADS SUPPORT IN HAPROXY IS HIGHLY EXPERIMENTAL AND IT
872 MUST BE ENABLED WITH CAUTION AND AT YOUR OWN RISK. See also "nbproc".
873
Willy Tarreau6a06a402007-07-15 20:15:28 +0200874pidfile <pidfile>
875 Writes pids of all daemons into file <pidfile>. This option is equivalent to
876 the "-p" command line argument. The file must be accessible to the user
877 starting the process. See also "daemon".
878
Willy Tarreau1d549722016-02-16 12:41:57 +0100879presetenv <name> <value>
880 Sets environment variable <name> to value <value>. If the variable exists, it
881 is NOT overwritten. The changes immediately take effect so that the next line
882 in the configuration file sees the new value. See also "setenv", "resetenv",
883 and "unsetenv".
884
885resetenv [<name> ...]
886 Removes all environment variables except the ones specified in argument. It
887 allows to use a clean controlled environment before setting new values with
888 setenv or unsetenv. Please note that some internal functions may make use of
889 some environment variables, such as time manipulation functions, but also
890 OpenSSL or even external checks. This must be used with extreme care and only
891 after complete validation. The changes immediately take effect so that the
892 next line in the configuration file sees the new environment. See also
893 "setenv", "presetenv", and "unsetenv".
894
Christopher Fauletff4121f2017-11-22 16:38:49 +0100895stats bind-process [ all | odd | even | <process_num>[-[process_num>]] ] ...
Willy Tarreau35b7b162012-10-22 23:17:18 +0200896 Limits the stats socket to a certain set of processes numbers. By default the
897 stats socket is bound to all processes, causing a warning to be emitted when
898 nbproc is greater than 1 because there is no way to select the target process
899 when connecting. However, by using this setting, it becomes possible to pin
900 the stats socket to a specific set of processes, typically the first one. The
901 warning will automatically be disabled when this setting is used, whatever
Willy Tarreaua9db57e2013-01-18 11:29:29 +0100902 the number of processes used. The maximum process ID depends on the machine's
Christopher Fauletff4121f2017-11-22 16:38:49 +0100903 word size (32 or 64). Ranges can be partially defined. The higher bound can
904 be omitted. In such case, it is replaced by the corresponding maximum
905 value. A better option consists in using the "process" setting of the "stats
906 socket" line to force the process on each line.
Willy Tarreau35b7b162012-10-22 23:17:18 +0200907
Baptiste Assmann5626f482015-08-23 10:00:10 +0200908server-state-base <directory>
909 Specifies the directory prefix to be prepended in front of all servers state
Baptiste Assmann01c6cc32015-08-23 11:45:29 +0200910 file names which do not start with a '/'. See also "server-state-file",
911 "load-server-state-from-file" and "server-state-file-name".
Baptiste Assmannef1f0fc2015-08-23 10:06:39 +0200912
913server-state-file <file>
914 Specifies the path to the file containing state of servers. If the path starts
915 with a slash ('/'), it is considered absolute, otherwise it is considered
916 relative to the directory specified using "server-state-base" (if set) or to
917 the current directory. Before reloading HAProxy, it is possible to save the
918 servers' current state using the stats command "show servers state". The
919 output of this command must be written in the file pointed by <file>. When
920 starting up, before handling traffic, HAProxy will read, load and apply state
921 for each server found in the file and available in its current running
Baptiste Assmann01c6cc32015-08-23 11:45:29 +0200922 configuration. See also "server-state-base" and "show servers state",
923 "load-server-state-from-file" and "server-state-file-name"
Baptiste Assmann5626f482015-08-23 10:00:10 +0200924
Willy Tarreau1d549722016-02-16 12:41:57 +0100925setenv <name> <value>
926 Sets environment variable <name> to value <value>. If the variable exists, it
927 is overwritten. The changes immediately take effect so that the next line in
928 the configuration file sees the new value. See also "presetenv", "resetenv",
929 and "unsetenv".
930
Willy Tarreau610f04b2014-02-13 11:36:41 +0100931ssl-default-bind-ciphers <ciphers>
932 This setting is only available when support for OpenSSL was built in. It sets
933 the default string describing the list of cipher algorithms ("cipher suite")
Jarno Huuskonen0e82b922014-04-12 18:22:19 +0300934 that are negotiated during the SSL/TLS handshake for all "bind" lines which
Willy Tarreau610f04b2014-02-13 11:36:41 +0100935 do not explicitly define theirs. The format of the string is defined in
936 "man 1 ciphers" from OpenSSL man pages, and can be for instance a string such
937 as "AES:ALL:!aNULL:!eNULL:+RC4:@STRENGTH" (without quotes). Please check the
938 "bind" keyword for more information.
939
Emeric Brun2c86cbf2014-10-30 15:56:50 +0100940ssl-default-bind-options [<option>]...
941 This setting is only available when support for OpenSSL was built in. It sets
942 default ssl-options to force on all "bind" lines. Please check the "bind"
943 keyword to see available options.
944
945 Example:
946 global
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +0200947 ssl-default-bind-options ssl-min-ver TLSv1.0 no-tls-tickets
Emeric Brun2c86cbf2014-10-30 15:56:50 +0100948
Willy Tarreau610f04b2014-02-13 11:36:41 +0100949ssl-default-server-ciphers <ciphers>
950 This setting is only available when support for OpenSSL was built in. It
951 sets the default string describing the list of cipher algorithms that are
Jarno Huuskonen0e82b922014-04-12 18:22:19 +0300952 negotiated during the SSL/TLS handshake with the server, for all "server"
Willy Tarreau610f04b2014-02-13 11:36:41 +0100953 lines which do not explicitly define theirs. The format of the string is
954 defined in "man 1 ciphers". Please check the "server" keyword for more
955 information.
956
Emeric Brun2c86cbf2014-10-30 15:56:50 +0100957ssl-default-server-options [<option>]...
958 This setting is only available when support for OpenSSL was built in. It sets
959 default ssl-options to force on all "server" lines. Please check the "server"
960 keyword to see available options.
961
Remi Gacogne47783ef2015-05-29 15:53:22 +0200962ssl-dh-param-file <file>
963 This setting is only available when support for OpenSSL was built in. It sets
964 the default DH parameters that are used during the SSL/TLS handshake when
965 ephemeral Diffie-Hellman (DHE) key exchange is used, for all "bind" lines
966 which do not explicitely define theirs. It will be overridden by custom DH
967 parameters found in a bind certificate file if any. If custom DH parameters
Cyril Bonté307ee1e2015-09-28 23:16:06 +0200968 are not specified either by using ssl-dh-param-file or by setting them
969 directly in the certificate file, pre-generated DH parameters of the size
970 specified by tune.ssl.default-dh-param will be used. Custom parameters are
971 known to be more secure and therefore their use is recommended.
Remi Gacogne47783ef2015-05-29 15:53:22 +0200972 Custom DH parameters may be generated by using the OpenSSL command
973 "openssl dhparam <size>", where size should be at least 2048, as 1024-bit DH
974 parameters should not be considered secure anymore.
975
Emeric Brun850efd52014-01-29 12:24:34 +0100976ssl-server-verify [none|required]
977 The default behavior for SSL verify on servers side. If specified to 'none',
978 servers certificates are not verified. The default is 'required' except if
979 forced using cmdline option '-dV'.
980
Christopher Faulet62519022017-10-16 15:49:32 +0200981
982thread-map <"all"|"odd"|"even"|process_num> <"all"|"odd"|"even"|thread_num> <cpu-set>...
983 This setting is only available when support for threads was built in. It
984 binds a thread to a specific CPU set. The process must be specified to allow
985 different mapping for different processes. For details about the arguments,
986 see "cpu-map" directive. A thread will be bound on the intersection of its
987 mapping and the one of the process on which it is attached. If the
988 intersection is null, no specific bind will be set for the thread.
989
Willy Tarreauabb175f2012-09-24 12:43:26 +0200990stats socket [<address:port>|<path>] [param*]
991 Binds a UNIX socket to <path> or a TCPv4/v6 address to <address:port>.
992 Connections to this socket will return various statistics outputs and even
993 allow some commands to be issued to change some runtime settings. Please
Willy Tarreau1af20c72017-06-23 16:01:14 +0200994 consult section 9.3 "Unix Socket commands" of Management Guide for more
Kevin Decherf949c7202015-10-13 23:26:44 +0200995 details.
Willy Tarreau6162db22009-10-10 17:13:00 +0200996
Willy Tarreauabb175f2012-09-24 12:43:26 +0200997 All parameters supported by "bind" lines are supported, for instance to
998 restrict access to some users or their access rights. Please consult
999 section 5.1 for more information.
Willy Tarreaufbee7132007-10-18 13:53:22 +02001000
1001stats timeout <timeout, in milliseconds>
1002 The default timeout on the stats socket is set to 10 seconds. It is possible
1003 to change this value with "stats timeout". The value must be passed in
Willy Tarreaubefdff12007-12-02 22:27:38 +01001004 milliseconds, or be suffixed by a time unit among { us, ms, s, m, h, d }.
Willy Tarreaufbee7132007-10-18 13:53:22 +02001005
1006stats maxconn <connections>
1007 By default, the stats socket is limited to 10 concurrent connections. It is
1008 possible to change this value with "stats maxconn".
1009
Willy Tarreau6a06a402007-07-15 20:15:28 +02001010uid <number>
1011 Changes the process' user ID to <number>. It is recommended that the user ID
1012 is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
1013 be started with superuser privileges in order to be able to switch to another
1014 one. See also "gid" and "user".
1015
1016ulimit-n <number>
1017 Sets the maximum number of per-process file-descriptors to <number>. By
1018 default, it is automatically computed, so it is recommended not to use this
1019 option.
1020
Willy Tarreauceb24bc2010-11-09 12:46:41 +01001021unix-bind [ prefix <prefix> ] [ mode <mode> ] [ user <user> ] [ uid <uid> ]
1022 [ group <group> ] [ gid <gid> ]
1023
1024 Fixes common settings to UNIX listening sockets declared in "bind" statements.
1025 This is mainly used to simplify declaration of those UNIX sockets and reduce
1026 the risk of errors, since those settings are most commonly required but are
1027 also process-specific. The <prefix> setting can be used to force all socket
1028 path to be relative to that directory. This might be needed to access another
1029 component's chroot. Note that those paths are resolved before haproxy chroots
1030 itself, so they are absolute. The <mode>, <user>, <uid>, <group> and <gid>
1031 all have the same meaning as their homonyms used by the "bind" statement. If
1032 both are specified, the "bind" statement has priority, meaning that the
1033 "unix-bind" settings may be seen as process-wide default settings.
1034
Willy Tarreau1d549722016-02-16 12:41:57 +01001035unsetenv [<name> ...]
1036 Removes environment variables specified in arguments. This can be useful to
1037 hide some sensitive information that are occasionally inherited from the
1038 user's environment during some operations. Variables which did not exist are
1039 silently ignored so that after the operation, it is certain that none of
1040 these variables remain. The changes immediately take effect so that the next
1041 line in the configuration file will not see these variables. See also
1042 "setenv", "presetenv", and "resetenv".
1043
Willy Tarreau6a06a402007-07-15 20:15:28 +02001044user <user name>
1045 Similar to "uid" but uses the UID of user name <user name> from /etc/passwd.
1046 See also "uid" and "group".
1047
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +02001048node <name>
1049 Only letters, digits, hyphen and underscore are allowed, like in DNS names.
1050
1051 This statement is useful in HA configurations where two or more processes or
1052 servers share the same IP address. By setting a different node-name on all
1053 nodes, it becomes easy to immediately spot what server is handling the
1054 traffic.
1055
1056description <text>
1057 Add a text that describes the instance.
1058
1059 Please note that it is required to escape certain characters (# for example)
1060 and this text is inserted into a html page so you should avoid using
1061 "<" and ">" characters.
1062
Thomas Holmesdb04f192015-05-18 13:21:39 +0100106351degrees-data-file <file path>
1064 The path of the 51Degrees data file to provide device detection services. The
1065 file should be unzipped and accessible by HAProxy with relevavnt permissions.
1066
Dragan Dosenae6d39a2015-06-29 16:43:27 +02001067 Please note that this option is only available when haproxy has been
Thomas Holmesdb04f192015-05-18 13:21:39 +01001068 compiled with USE_51DEGREES.
1069
Ben Shillitof25e8e52016-12-02 14:25:37 +0000107051degrees-property-name-list [<string> ...]
Thomas Holmesdb04f192015-05-18 13:21:39 +01001071 A list of 51Degrees property names to be load from the dataset. A full list
1072 of names is available on the 51Degrees website:
1073 https://51degrees.com/resources/property-dictionary
1074
Dragan Dosenae6d39a2015-06-29 16:43:27 +02001075 Please note that this option is only available when haproxy has been
Thomas Holmesdb04f192015-05-18 13:21:39 +01001076 compiled with USE_51DEGREES.
1077
Dragan Dosen93b38d92015-06-29 16:43:25 +0200107851degrees-property-separator <char>
Thomas Holmesdb04f192015-05-18 13:21:39 +01001079 A char that will be appended to every property value in a response header
1080 containing 51Degrees results. If not set that will be set as ','.
1081
Dragan Dosenae6d39a2015-06-29 16:43:27 +02001082 Please note that this option is only available when haproxy has been
1083 compiled with USE_51DEGREES.
1084
108551degrees-cache-size <number>
1086 Sets the size of the 51Degrees converter cache to <number> entries. This
1087 is an LRU cache which reminds previous device detections and their results.
1088 By default, this cache is disabled.
1089
1090 Please note that this option is only available when haproxy has been
Thomas Holmesdb04f192015-05-18 13:21:39 +01001091 compiled with USE_51DEGREES.
1092
scientiamobiled0027ed2016-11-04 10:55:08 +01001093wurfl-data-file <file path>
1094 The path of the WURFL data file to provide device detection services. The
1095 file should be accessible by HAProxy with relevant permissions.
1096
1097 Please note that this option is only available when haproxy has been compiled
1098 with USE_WURFL=1.
1099
1100wurfl-information-list [<capability>]*
1101 A space-delimited list of WURFL capabilities, virtual capabilities, property
1102 names we plan to use in injected headers. A full list of capability and
1103 virtual capability names is available on the Scientiamobile website :
1104
1105 https://www.scientiamobile.com/wurflCapability
1106
1107 Valid WURFL properties are:
1108 - wurfl_id Contains the device ID of the matched device.
1109
1110 - wurfl_root_id Contains the device root ID of the matched
1111 device.
1112
1113 - wurfl_isdevroot Tells if the matched device is a root device.
1114 Possible values are "TRUE" or "FALSE".
1115
1116 - wurfl_useragent The original useragent coming with this
1117 particular web request.
1118
1119 - wurfl_api_version Contains a string representing the currently
1120 used Libwurfl API version.
1121
1122 - wurfl_engine_target Contains a string representing the currently
1123 set WURFL Engine Target. Possible values are
1124 "HIGH_ACCURACY", "HIGH_PERFORMANCE", "INVALID".
1125
1126 - wurfl_info A string containing information on the parsed
1127 wurfl.xml and its full path.
1128
1129 - wurfl_last_load_time Contains the UNIX timestamp of the last time
1130 WURFL has been loaded successfully.
1131
1132 - wurfl_normalized_useragent The normalized useragent.
1133
1134 - wurfl_useragent_priority The user agent priority used by WURFL.
1135
1136 Please note that this option is only available when haproxy has been compiled
1137 with USE_WURFL=1.
1138
1139wurfl-information-list-separator <char>
1140 A char that will be used to separate values in a response header containing
1141 WURFL results. If not set that a comma (',') will be used by default.
1142
1143 Please note that this option is only available when haproxy has been compiled
1144 with USE_WURFL=1.
1145
1146wurfl-patch-file [<file path>]
1147 A list of WURFL patch file paths. Note that patches are loaded during startup
1148 thus before the chroot.
1149
1150 Please note that this option is only available when haproxy has been compiled
1151 with USE_WURFL=1.
1152
1153wurfl-engine-mode { accuracy | performance }
1154 Sets the WURFL engine target. You can choose between 'accuracy' or
1155 'performance' targets. In performance mode, desktop web browser detection is
1156 done programmatically without referencing the WURFL data. As a result, most
1157 desktop web browsers are returned as generic_web_browser WURFL ID for
1158 performance. If either performance or accuracy are not defined, performance
1159 mode is enabled by default.
1160
1161 Please note that this option is only available when haproxy has been compiled
1162 with USE_WURFL=1.
1163
1164wurfl-cache-size <U>[,<D>]
1165 Sets the WURFL caching strategy. Here <U> is the Useragent cache size, and
1166 <D> is the internal device cache size. There are three possibilities here :
1167 - "0" : no cache is used.
1168 - <U> : the Single LRU cache is used, the size is expressed in elements.
1169 - <U>,<D> : the Double LRU cache is used, both sizes are in elements. This is
1170 the highest performing option.
1171
1172 Please note that this option is only available when haproxy has been compiled
1173 with USE_WURFL=1.
1174
1175wurfl-useragent-priority { plain | sideloaded_browser }
1176 Tells WURFL if it should prioritize use of the plain user agent ('plain')
1177 over the default sideloaded browser user agent ('sideloaded_browser').
1178
1179 Please note that this option is only available when haproxy has been compiled
1180 with USE_WURFL=1.
1181
Willy Tarreau6a06a402007-07-15 20:15:28 +02001182
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011833.2. Performance tuning
Willy Tarreau6a06a402007-07-15 20:15:28 +02001184-----------------------
1185
Willy Tarreau1746eec2014-04-25 10:46:47 +02001186max-spread-checks <delay in milliseconds>
1187 By default, haproxy tries to spread the start of health checks across the
1188 smallest health check interval of all the servers in a farm. The principle is
1189 to avoid hammering services running on the same server. But when using large
1190 check intervals (10 seconds or more), the last servers in the farm take some
1191 time before starting to be tested, which can be a problem. This parameter is
1192 used to enforce an upper bound on delay between the first and the last check,
1193 even if the servers' check intervals are larger. When servers run with
1194 shorter intervals, their intervals will be respected though.
1195
Willy Tarreau6a06a402007-07-15 20:15:28 +02001196maxconn <number>
1197 Sets the maximum per-process number of concurrent connections to <number>. It
1198 is equivalent to the command-line argument "-n". Proxies will stop accepting
1199 connections when this limit is reached. The "ulimit-n" parameter is
Willy Tarreau8274e102014-06-19 15:31:25 +02001200 automatically adjusted according to this value. See also "ulimit-n". Note:
1201 the "select" poller cannot reliably use more than 1024 file descriptors on
1202 some platforms. If your platform only supports select and reports "select
1203 FAILED" on startup, you need to reduce maxconn until it works (slightly
Willy Tarreaud0256482015-01-15 21:45:22 +01001204 below 500 in general). If this value is not set, it will default to the value
1205 set in DEFAULT_MAXCONN at build time (reported in haproxy -vv) if no memory
1206 limit is enforced, or will be computed based on the memory limit, the buffer
1207 size, memory allocated to compression, SSL cache size, and use or not of SSL
1208 and the associated maxsslconn (which can also be automatic).
Willy Tarreau6a06a402007-07-15 20:15:28 +02001209
Willy Tarreau81c25d02011-09-07 15:17:21 +02001210maxconnrate <number>
1211 Sets the maximum per-process number of connections per second to <number>.
1212 Proxies will stop accepting connections when this limit is reached. It can be
1213 used to limit the global capacity regardless of each frontend capacity. It is
1214 important to note that this can only be used as a service protection measure,
1215 as there will not necessarily be a fair share between frontends when the
1216 limit is reached, so it's a good idea to also limit each frontend to some
1217 value close to its expected share. Also, lowering tune.maxaccept can improve
1218 fairness.
1219
William Lallemandd85f9172012-11-09 17:05:39 +01001220maxcomprate <number>
1221 Sets the maximum per-process input compression rate to <number> kilobytes
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001222 per second. For each session, if the maximum is reached, the compression
William Lallemandd85f9172012-11-09 17:05:39 +01001223 level will be decreased during the session. If the maximum is reached at the
1224 beginning of a session, the session will not compress at all. If the maximum
1225 is not reached, the compression level will be increased up to
1226 tune.comp.maxlevel. A value of zero means there is no limit, this is the
1227 default value.
1228
William Lallemand072a2bf2012-11-20 17:01:01 +01001229maxcompcpuusage <number>
1230 Sets the maximum CPU usage HAProxy can reach before stopping the compression
1231 for new requests or decreasing the compression level of current requests.
1232 It works like 'maxcomprate' but measures CPU usage instead of incoming data
1233 bandwidth. The value is expressed in percent of the CPU used by haproxy. In
1234 case of multiple processes (nbproc > 1), each process manages its individual
1235 usage. A value of 100 disable the limit. The default value is 100. Setting
1236 a lower value will prevent the compression work from slowing the whole
1237 process down and from introducing high latencies.
1238
Willy Tarreauff4f82d2009-02-06 11:28:13 +01001239maxpipes <number>
1240 Sets the maximum per-process number of pipes to <number>. Currently, pipes
1241 are only used by kernel-based tcp splicing. Since a pipe contains two file
1242 descriptors, the "ulimit-n" value will be increased accordingly. The default
1243 value is maxconn/4, which seems to be more than enough for most heavy usages.
1244 The splice code dynamically allocates and releases pipes, and can fall back
1245 to standard copy, so setting this value too low may only impact performance.
1246
Willy Tarreau93e7c002013-10-07 18:51:07 +02001247maxsessrate <number>
1248 Sets the maximum per-process number of sessions per second to <number>.
1249 Proxies will stop accepting connections when this limit is reached. It can be
1250 used to limit the global capacity regardless of each frontend capacity. It is
1251 important to note that this can only be used as a service protection measure,
1252 as there will not necessarily be a fair share between frontends when the
1253 limit is reached, so it's a good idea to also limit each frontend to some
1254 value close to its expected share. Also, lowering tune.maxaccept can improve
1255 fairness.
1256
Willy Tarreau403edff2012-09-06 11:58:37 +02001257maxsslconn <number>
1258 Sets the maximum per-process number of concurrent SSL connections to
1259 <number>. By default there is no SSL-specific limit, which means that the
1260 global maxconn setting will apply to all connections. Setting this limit
1261 avoids having openssl use too much memory and crash when malloc returns NULL
1262 (since it unfortunately does not reliably check for such conditions). Note
1263 that the limit applies both to incoming and outgoing connections, so one
1264 connection which is deciphered then ciphered accounts for 2 SSL connections.
Willy Tarreaud0256482015-01-15 21:45:22 +01001265 If this value is not set, but a memory limit is enforced, this value will be
1266 automatically computed based on the memory limit, maxconn, the buffer size,
1267 memory allocated to compression, SSL cache size, and use of SSL in either
1268 frontends, backends or both. If neither maxconn nor maxsslconn are specified
1269 when there is a memory limit, haproxy will automatically adjust these values
1270 so that 100% of the connections can be made over SSL with no risk, and will
1271 consider the sides where it is enabled (frontend, backend, both).
Willy Tarreau403edff2012-09-06 11:58:37 +02001272
Willy Tarreaue43d5322013-10-07 20:01:52 +02001273maxsslrate <number>
1274 Sets the maximum per-process number of SSL sessions per second to <number>.
1275 SSL listeners will stop accepting connections when this limit is reached. It
1276 can be used to limit the global SSL CPU usage regardless of each frontend
1277 capacity. It is important to note that this can only be used as a service
1278 protection measure, as there will not necessarily be a fair share between
1279 frontends when the limit is reached, so it's a good idea to also limit each
1280 frontend to some value close to its expected share. It is also important to
1281 note that the sessions are accounted before they enter the SSL stack and not
1282 after, which also protects the stack against bad handshakes. Also, lowering
1283 tune.maxaccept can improve fairness.
1284
William Lallemand9d5f5482012-11-07 16:12:57 +01001285maxzlibmem <number>
1286 Sets the maximum amount of RAM in megabytes per process usable by the zlib.
1287 When the maximum amount is reached, future sessions will not compress as long
1288 as RAM is unavailable. When sets to 0, there is no limit.
William Lallemande3a7d992012-11-20 11:25:20 +01001289 The default value is 0. The value is available in bytes on the UNIX socket
1290 with "show info" on the line "MaxZlibMemUsage", the memory used by zlib is
1291 "ZlibMemUsage" in bytes.
1292
Willy Tarreau6a06a402007-07-15 20:15:28 +02001293noepoll
1294 Disables the use of the "epoll" event polling system on Linux. It is
1295 equivalent to the command-line argument "-de". The next polling system
Willy Tarreaue9f49e72012-11-11 17:42:00 +01001296 used will generally be "poll". See also "nopoll".
Willy Tarreau6a06a402007-07-15 20:15:28 +02001297
1298nokqueue
1299 Disables the use of the "kqueue" event polling system on BSD. It is
1300 equivalent to the command-line argument "-dk". The next polling system
1301 used will generally be "poll". See also "nopoll".
1302
1303nopoll
1304 Disables the use of the "poll" event polling system. It is equivalent to the
1305 command-line argument "-dp". The next polling system used will be "select".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001306 It should never be needed to disable "poll" since it's available on all
Willy Tarreaue9f49e72012-11-11 17:42:00 +01001307 platforms supported by HAProxy. See also "nokqueue" and "noepoll".
Willy Tarreau6a06a402007-07-15 20:15:28 +02001308
Willy Tarreauff4f82d2009-02-06 11:28:13 +01001309nosplice
1310 Disables the use of kernel tcp splicing between sockets on Linux. It is
1311 equivalent to the command line argument "-dS". Data will then be copied
1312 using conventional and more portable recv/send calls. Kernel tcp splicing is
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001313 limited to some very recent instances of kernel 2.6. Most versions between
Willy Tarreauff4f82d2009-02-06 11:28:13 +01001314 2.6.25 and 2.6.28 are buggy and will forward corrupted data, so they must not
1315 be used. This option makes it easier to globally disable kernel splicing in
1316 case of doubt. See also "option splice-auto", "option splice-request" and
1317 "option splice-response".
1318
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001319nogetaddrinfo
1320 Disables the use of getaddrinfo(3) for name resolving. It is equivalent to
1321 the command line argument "-dG". Deprecated gethostbyname(3) will be used.
1322
Lukas Tribusa0bcbdc2016-09-12 21:42:20 +00001323noreuseport
1324 Disables the use of SO_REUSEPORT - see socket(7). It is equivalent to the
1325 command line argument "-dR".
1326
Willy Tarreaufe255b72007-10-14 23:09:26 +02001327spread-checks <0..50, in percent>
Simon Hormand60d6912013-11-25 10:46:36 +09001328 Sometimes it is desirable to avoid sending agent and health checks to
1329 servers at exact intervals, for instance when many logical servers are
1330 located on the same physical server. With the help of this parameter, it
1331 becomes possible to add some randomness in the check interval between 0
1332 and +/- 50%. A value between 2 and 5 seems to show good results. The
1333 default value remains at 0.
Willy Tarreaufe255b72007-10-14 23:09:26 +02001334
Grant Zhang872f9c22017-01-21 01:10:18 +00001335ssl-engine <name> [algo <comma-seperated list of algorithms>]
1336 Sets the OpenSSL engine to <name>. List of valid values for <name> may be
1337 obtained using the command "openssl engine". This statement may be used
1338 multiple times, it will simply enable multiple crypto engines. Referencing an
1339 unsupported engine will prevent haproxy from starting. Note that many engines
1340 will lead to lower HTTPS performance than pure software with recent
1341 processors. The optional command "algo" sets the default algorithms an ENGINE
1342 will supply using the OPENSSL function ENGINE_set_default_string(). A value
1343 of "ALL" uses the engine for all cryptographic operations. If no list of
1344 algo is specified then the value of "ALL" is used. A comma-seperated list
1345 of different algorithms may be specified, including: RSA, DSA, DH, EC, RAND,
1346 CIPHERS, DIGESTS, PKEY, PKEY_CRYPTO, PKEY_ASN1. This is the same format that
1347 openssl configuration file uses:
1348 https://www.openssl.org/docs/man1.0.2/apps/config.html
1349
Grant Zhangfa6c7ee2017-01-14 01:42:15 +00001350ssl-mode-async
1351 Adds SSL_MODE_ASYNC mode to the SSL context. This enables asynchronous TLS
Emeric Brun3854e012017-05-17 20:42:48 +02001352 I/O operations if asynchronous capable SSL engines are used. The current
Emeric Brunb5e42a82017-06-06 12:35:14 +00001353 implementation supports a maximum of 32 engines. The Openssl ASYNC API
1354 doesn't support moving read/write buffers and is not compliant with
1355 haproxy's buffer management. So the asynchronous mode is disabled on
1356 read/write operations (it is only enabled during initial and reneg
1357 handshakes).
Grant Zhangfa6c7ee2017-01-14 01:42:15 +00001358
Willy Tarreau33cb0652014-12-23 22:52:37 +01001359tune.buffers.limit <number>
1360 Sets a hard limit on the number of buffers which may be allocated per process.
1361 The default value is zero which means unlimited. The minimum non-zero value
1362 will always be greater than "tune.buffers.reserve" and should ideally always
1363 be about twice as large. Forcing this value can be particularly useful to
1364 limit the amount of memory a process may take, while retaining a sane
1365 behaviour. When this limit is reached, sessions which need a buffer wait for
1366 another one to be released by another session. Since buffers are dynamically
1367 allocated and released, the waiting time is very short and not perceptible
1368 provided that limits remain reasonable. In fact sometimes reducing the limit
1369 may even increase performance by increasing the CPU cache's efficiency. Tests
1370 have shown good results on average HTTP traffic with a limit to 1/10 of the
1371 expected global maxconn setting, which also significantly reduces memory
1372 usage. The memory savings come from the fact that a number of connections
1373 will not allocate 2*tune.bufsize. It is best not to touch this value unless
1374 advised to do so by an haproxy core developer.
1375
Willy Tarreau1058ae72014-12-23 22:40:40 +01001376tune.buffers.reserve <number>
1377 Sets the number of buffers which are pre-allocated and reserved for use only
1378 during memory shortage conditions resulting in failed memory allocations. The
1379 minimum value is 2 and is also the default. There is no reason a user would
1380 want to change this value, it's mostly aimed at haproxy core developers.
1381
Willy Tarreau27a674e2009-08-17 07:23:33 +02001382tune.bufsize <number>
1383 Sets the buffer size to this size (in bytes). Lower values allow more
1384 sessions to coexist in the same amount of RAM, and higher values allow some
1385 applications with very large cookies to work. The default value is 16384 and
1386 can be changed at build time. It is strongly recommended not to change this
1387 from the default value, as very low values will break some services such as
1388 statistics, and values larger than default size will increase memory usage,
1389 possibly causing the system to run out of memory. At least the global maxconn
Willy Tarreau45a66cc2017-11-24 11:28:00 +01001390 parameter should be decreased by the same factor as this one is increased. In
1391 addition, use of HTTP/2 mandates that this value must be 16384 or more. If an
1392 HTTP request is larger than (tune.bufsize - tune.maxrewrite), haproxy will
Dmitry Sivachenkof6f4f7b2012-10-21 18:10:25 +04001393 return HTTP 400 (Bad Request) error. Similarly if an HTTP response is larger
1394 than this size, haproxy will return HTTP 502 (Bad Gateway).
Willy Tarreau27a674e2009-08-17 07:23:33 +02001395
Willy Tarreau43961d52010-10-04 20:39:20 +02001396tune.chksize <number>
1397 Sets the check buffer size to this size (in bytes). Higher values may help
1398 find string or regex patterns in very large pages, though doing so may imply
1399 more memory and CPU usage. The default value is 16384 and can be changed at
1400 build time. It is not recommended to change this value, but to use better
1401 checks whenever possible.
1402
William Lallemandf3747832012-11-09 12:33:10 +01001403tune.comp.maxlevel <number>
1404 Sets the maximum compression level. The compression level affects CPU
1405 usage during compression. This value affects CPU usage during compression.
1406 Each session using compression initializes the compression algorithm with
1407 this value. The default value is 1.
1408
Willy Tarreaufe20e5b2017-07-27 11:42:14 +02001409tune.h2.header-table-size <number>
1410 Sets the HTTP/2 dynamic header table size. It defaults to 4096 bytes and
1411 cannot be larger than 65536 bytes. A larger value may help certain clients
1412 send more compact requests, depending on their capabilities. This amount of
1413 memory is consumed for each HTTP/2 connection. It is recommended not to
1414 change it.
1415
Willy Tarreaue6baec02017-07-27 11:45:11 +02001416tune.h2.initial-window-size <number>
1417 Sets the HTTP/2 initial window size, which is the number of bytes the client
1418 can upload before waiting for an acknowledgement from haproxy. This setting
1419 only affects payload contents (ie: the body of POST requests), not headers.
1420 The default value is 65535, which roughly allows up to 5 Mbps of upload
1421 bandwidth per client over a network showing a 100 ms ping time, or 500 Mbps
1422 over a 1-ms local network. It can make sense to increase this value to allow
1423 faster uploads, or to reduce it to increase fairness when dealing with many
1424 clients. It doesn't affect resource usage.
1425
Willy Tarreau5242ef82017-07-27 11:47:28 +02001426tune.h2.max-concurrent-streams <number>
1427 Sets the HTTP/2 maximum number of concurrent streams per connection (ie the
1428 number of outstanding requests on a single connection). The default value is
1429 100. A larger one may slightly improve page load time for complex sites when
1430 visited over high latency networks, but increases the amount of resources a
1431 single client may allocate. A value of zero disables the limit so a single
1432 client may create as many streams as allocatable by haproxy. It is highly
1433 recommended not to change this value.
1434
Willy Tarreau193b8c62012-11-22 00:17:38 +01001435tune.http.cookielen <number>
1436 Sets the maximum length of captured cookies. This is the maximum value that
1437 the "capture cookie xxx len yyy" will be allowed to take, and any upper value
1438 will automatically be truncated to this one. It is important not to set too
1439 high a value because all cookie captures still allocate this size whatever
1440 their configured value (they share a same pool). This value is per request
1441 per response, so the memory allocated is twice this value per connection.
1442 When not specified, the limit is set to 63 characters. It is recommended not
1443 to change this value.
1444
Stéphane Cottin23e9e932017-05-18 08:58:41 +02001445tune.http.logurilen <number>
1446 Sets the maximum length of request uri in logs. This prevent to truncate long
1447 requests uris with valuable query strings in log lines. This is not related
1448 to syslog limits. If you increase this limit, you may also increase the
1449 'log ... len yyyy' parameter. Your syslog deamon may also need specific
1450 configuration directives too.
1451 The default value is 1024.
1452
Willy Tarreauac1932d2011-10-24 19:14:41 +02001453tune.http.maxhdr <number>
1454 Sets the maximum number of headers in a request. When a request comes with a
1455 number of headers greater than this value (including the first line), it is
1456 rejected with a "400 Bad Request" status code. Similarly, too large responses
1457 are blocked with "502 Bad Gateway". The default value is 101, which is enough
1458 for all usages, considering that the widely deployed Apache server uses the
1459 same limit. It can be useful to push this limit further to temporarily allow
Christopher Faulet50174f32017-06-21 16:31:35 +02001460 a buggy application to work by the time it gets fixed. The accepted range is
1461 1..32767. Keep in mind that each new header consumes 32bits of memory for
1462 each session, so don't push this limit too high.
Willy Tarreauac1932d2011-10-24 19:14:41 +02001463
Willy Tarreau7e312732014-02-12 16:35:14 +01001464tune.idletimer <timeout>
1465 Sets the duration after which haproxy will consider that an empty buffer is
1466 probably associated with an idle stream. This is used to optimally adjust
1467 some packet sizes while forwarding large and small data alternatively. The
1468 decision to use splice() or to send large buffers in SSL is modulated by this
1469 parameter. The value is in milliseconds between 0 and 65535. A value of zero
1470 means that haproxy will not try to detect idle streams. The default is 1000,
1471 which seems to correctly detect end user pauses (eg: read a page before
1472 clicking). There should be not reason for changing this value. Please check
1473 tune.ssl.maxrecord below.
1474
Thierry FOURNIER90da1912015-03-05 11:17:06 +01001475tune.lua.forced-yield <number>
1476 This directive forces the Lua engine to execute a yield each <number> of
Tim Düsterhus4896c442016-11-29 02:15:19 +01001477 instructions executed. This permits interrupting a long script and allows the
Thierry FOURNIER90da1912015-03-05 11:17:06 +01001478 HAProxy scheduler to process other tasks like accepting connections or
1479 forwarding traffic. The default value is 10000 instructions. If HAProxy often
1480 executes some Lua code but more reactivity is required, this value can be
1481 lowered. If the Lua code is quite long and its result is absolutely required
1482 to process the data, the <number> can be increased.
1483
Willy Tarreau32f61e22015-03-18 17:54:59 +01001484tune.lua.maxmem
1485 Sets the maximum amount of RAM in megabytes per process usable by Lua. By
1486 default it is zero which means unlimited. It is important to set a limit to
1487 ensure that a bug in a script will not result in the system running out of
1488 memory.
1489
Thierry FOURNIER90da1912015-03-05 11:17:06 +01001490tune.lua.session-timeout <timeout>
1491 This is the execution timeout for the Lua sessions. This is useful for
Thierry FOURNIER7dd784b2015-10-01 14:49:33 +02001492 preventing infinite loops or spending too much time in Lua. This timeout
1493 counts only the pure Lua runtime. If the Lua does a sleep, the sleep is
1494 not taked in account. The default timeout is 4s.
Thierry FOURNIER90da1912015-03-05 11:17:06 +01001495
1496tune.lua.task-timeout <timeout>
1497 Purpose is the same as "tune.lua.session-timeout", but this timeout is
1498 dedicated to the tasks. By default, this timeout isn't set because a task may
1499 remain alive during of the lifetime of HAProxy. For example, a task used to
1500 check servers.
1501
Thierry FOURNIER7dd784b2015-10-01 14:49:33 +02001502tune.lua.service-timeout <timeout>
1503 This is the execution timeout for the Lua services. This is useful for
1504 preventing infinite loops or spending too much time in Lua. This timeout
1505 counts only the pure Lua runtime. If the Lua does a sleep, the sleep is
1506 not taked in account. The default timeout is 4s.
1507
Willy Tarreaua0250ba2008-01-06 11:22:57 +01001508tune.maxaccept <number>
Willy Tarreau16a21472012-11-19 12:39:59 +01001509 Sets the maximum number of consecutive connections a process may accept in a
1510 row before switching to other work. In single process mode, higher numbers
1511 give better performance at high connection rates. However in multi-process
1512 modes, keeping a bit of fairness between processes generally is better to
1513 increase performance. This value applies individually to each listener, so
1514 that the number of processes a listener is bound to is taken into account.
1515 This value defaults to 64. In multi-process mode, it is divided by twice
1516 the number of processes the listener is bound to. Setting this value to -1
1517 completely disables the limitation. It should normally not be needed to tweak
1518 this value.
Willy Tarreaua0250ba2008-01-06 11:22:57 +01001519
1520tune.maxpollevents <number>
1521 Sets the maximum amount of events that can be processed at once in a call to
1522 the polling system. The default value is adapted to the operating system. It
1523 has been noticed that reducing it below 200 tends to slightly decrease
1524 latency at the expense of network bandwidth, and increasing it above 200
1525 tends to trade latency for slightly increased bandwidth.
1526
Willy Tarreau27a674e2009-08-17 07:23:33 +02001527tune.maxrewrite <number>
1528 Sets the reserved buffer space to this size in bytes. The reserved space is
1529 used for header rewriting or appending. The first reads on sockets will never
1530 fill more than bufsize-maxrewrite. Historically it has defaulted to half of
1531 bufsize, though that does not make much sense since there are rarely large
1532 numbers of headers to add. Setting it too high prevents processing of large
1533 requests or responses. Setting it too low prevents addition of new headers
1534 to already large requests or to POST requests. It is generally wise to set it
1535 to about 1024. It is automatically readjusted to half of bufsize if it is
1536 larger than that. This means you don't have to worry about it when changing
1537 bufsize.
1538
Willy Tarreauf3045d22015-04-29 16:24:50 +02001539tune.pattern.cache-size <number>
1540 Sets the size of the pattern lookup cache to <number> entries. This is an LRU
1541 cache which reminds previous lookups and their results. It is used by ACLs
1542 and maps on slow pattern lookups, namely the ones using the "sub", "reg",
1543 "dir", "dom", "end", "bin" match methods as well as the case-insensitive
1544 strings. It applies to pattern expressions which means that it will be able
1545 to memorize the result of a lookup among all the patterns specified on a
1546 configuration line (including all those loaded from files). It automatically
1547 invalidates entries which are updated using HTTP actions or on the CLI. The
1548 default cache size is set to 10000 entries, which limits its footprint to
1549 about 5 MB on 32-bit systems and 8 MB on 64-bit systems. There is a very low
1550 risk of collision in this cache, which is in the order of the size of the
1551 cache divided by 2^64. Typically, at 10000 requests per second with the
1552 default cache size of 10000 entries, there's 1% chance that a brute force
1553 attack could cause a single collision after 60 years, or 0.1% after 6 years.
1554 This is considered much lower than the risk of a memory corruption caused by
1555 aging components. If this is not acceptable, the cache can be disabled by
1556 setting this parameter to 0.
1557
Willy Tarreaubd9a0a72011-10-23 21:14:29 +02001558tune.pipesize <number>
1559 Sets the kernel pipe buffer size to this size (in bytes). By default, pipes
1560 are the default size for the system. But sometimes when using TCP splicing,
1561 it can improve performance to increase pipe sizes, especially if it is
1562 suspected that pipes are not filled and that many calls to splice() are
1563 performed. This has an impact on the kernel's memory footprint, so this must
1564 not be changed if impacts are not understood.
1565
Willy Tarreaue803de22010-01-21 17:43:04 +01001566tune.rcvbuf.client <number>
1567tune.rcvbuf.server <number>
1568 Forces the kernel socket receive buffer size on the client or the server side
1569 to the specified value in bytes. This value applies to all TCP/HTTP frontends
1570 and backends. It should normally never be set, and the default size (0) lets
1571 the kernel autotune this value depending on the amount of available memory.
1572 However it can sometimes help to set it to very low values (eg: 4096) in
1573 order to save kernel memory by preventing it from buffering too large amounts
1574 of received data. Lower values will significantly increase CPU usage though.
1575
Willy Tarreaub22fc302015-12-14 12:04:35 +01001576tune.recv_enough <number>
1577 Haproxy uses some hints to detect that a short read indicates the end of the
1578 socket buffers. One of them is that a read returns more than <recv_enough>
1579 bytes, which defaults to 10136 (7 segments of 1448 each). This default value
1580 may be changed by this setting to better deal with workloads involving lots
1581 of short messages such as telnet or SSH sessions.
1582
Willy Tarreaue803de22010-01-21 17:43:04 +01001583tune.sndbuf.client <number>
1584tune.sndbuf.server <number>
1585 Forces the kernel socket send buffer size on the client or the server side to
1586 the specified value in bytes. This value applies to all TCP/HTTP frontends
1587 and backends. It should normally never be set, and the default size (0) lets
1588 the kernel autotune this value depending on the amount of available memory.
1589 However it can sometimes help to set it to very low values (eg: 4096) in
1590 order to save kernel memory by preventing it from buffering too large amounts
1591 of received data. Lower values will significantly increase CPU usage though.
1592 Another use case is to prevent write timeouts with extremely slow clients due
1593 to the kernel waiting for a large part of the buffer to be read before
1594 notifying haproxy again.
1595
Willy Tarreau6ec58db2012-11-16 16:32:15 +01001596tune.ssl.cachesize <number>
Emeric Brunaf9619d2012-11-28 18:47:52 +01001597 Sets the size of the global SSL session cache, in a number of blocks. A block
1598 is large enough to contain an encoded session without peer certificate.
1599 An encoded session with peer certificate is stored in multiple blocks
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001600 depending on the size of the peer certificate. A block uses approximately
Emeric Brunaf9619d2012-11-28 18:47:52 +01001601 200 bytes of memory. The default value may be forced at build time, otherwise
1602 defaults to 20000. When the cache is full, the most idle entries are purged
1603 and reassigned. Higher values reduce the occurrence of such a purge, hence
1604 the number of CPU-intensive SSL handshakes by ensuring that all users keep
1605 their session as long as possible. All entries are pre-allocated upon startup
Emeric Brun22890a12012-12-28 14:41:32 +01001606 and are shared between all processes if "nbproc" is greater than 1. Setting
1607 this value to 0 disables the SSL session cache.
Willy Tarreau6ec58db2012-11-16 16:32:15 +01001608
Emeric Brun8dc60392014-05-09 13:52:00 +02001609tune.ssl.force-private-cache
1610 This boolean disables SSL session cache sharing between all processes. It
1611 should normally not be used since it will force many renegotiations due to
1612 clients hitting a random process. But it may be required on some operating
1613 systems where none of the SSL cache synchronization method may be used. In
1614 this case, adding a first layer of hash-based load balancing before the SSL
1615 layer might limit the impact of the lack of session sharing.
1616
Emeric Brun4f65bff2012-11-16 15:11:00 +01001617tune.ssl.lifetime <timeout>
1618 Sets how long a cached SSL session may remain valid. This time is expressed
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001619 in seconds and defaults to 300 (5 min). It is important to understand that it
Emeric Brun4f65bff2012-11-16 15:11:00 +01001620 does not guarantee that sessions will last that long, because if the cache is
1621 full, the longest idle sessions will be purged despite their configured
1622 lifetime. The real usefulness of this setting is to prevent sessions from
1623 being used for too long.
1624
Willy Tarreaubfd59462013-02-21 07:46:09 +01001625tune.ssl.maxrecord <number>
1626 Sets the maximum amount of bytes passed to SSL_write() at a time. Default
1627 value 0 means there is no limit. Over SSL/TLS, the client can decipher the
1628 data only once it has received a full record. With large records, it means
1629 that clients might have to download up to 16kB of data before starting to
1630 process them. Limiting the value can improve page load times on browsers
1631 located over high latency or low bandwidth networks. It is suggested to find
1632 optimal values which fit into 1 or 2 TCP segments (generally 1448 bytes over
1633 Ethernet with TCP timestamps enabled, or 1460 when timestamps are disabled),
1634 keeping in mind that SSL/TLS add some overhead. Typical values of 1419 and
1635 2859 gave good results during tests. Use "strace -e trace=write" to find the
Willy Tarreau7e312732014-02-12 16:35:14 +01001636 best value. Haproxy will automatically switch to this setting after an idle
1637 stream has been detected (see tune.idletimer above).
Willy Tarreaubfd59462013-02-21 07:46:09 +01001638
Remi Gacognef46cd6e2014-06-12 14:58:40 +02001639tune.ssl.default-dh-param <number>
1640 Sets the maximum size of the Diffie-Hellman parameters used for generating
1641 the ephemeral/temporary Diffie-Hellman key in case of DHE key exchange. The
1642 final size will try to match the size of the server's RSA (or DSA) key (e.g,
1643 a 2048 bits temporary DH key for a 2048 bits RSA key), but will not exceed
1644 this maximum value. Default value if 1024. Only 1024 or higher values are
1645 allowed. Higher values will increase the CPU load, and values greater than
1646 1024 bits are not supported by Java 7 and earlier clients. This value is not
Remi Gacogne47783ef2015-05-29 15:53:22 +02001647 used if static Diffie-Hellman parameters are supplied either directly
1648 in the certificate file or by using the ssl-dh-param-file parameter.
Remi Gacognef46cd6e2014-06-12 14:58:40 +02001649
Christopher Faulet31af49d2015-06-09 17:29:50 +02001650tune.ssl.ssl-ctx-cache-size <number>
1651 Sets the size of the cache used to store generated certificates to <number>
1652 entries. This is a LRU cache. Because generating a SSL certificate
1653 dynamically is expensive, they are cached. The default cache size is set to
1654 1000 entries.
1655
Thierry FOURNIER5bf77322017-02-25 12:45:22 +01001656tune.ssl.capture-cipherlist-size <number>
1657 Sets the maximum size of the buffer used for capturing client-hello cipher
1658 list. If the value is 0 (default value) the capture is disabled, otherwise
1659 a buffer is allocated for each SSL/TLS connection.
1660
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02001661tune.vars.global-max-size <size>
Christopher Fauletff2613e2016-11-09 11:36:17 +01001662tune.vars.proc-max-size <size>
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02001663tune.vars.reqres-max-size <size>
1664tune.vars.sess-max-size <size>
1665tune.vars.txn-max-size <size>
Christopher Fauletff2613e2016-11-09 11:36:17 +01001666 These five tunes help to manage the maximum amount of memory used by the
1667 variables system. "global" limits the overall amount of memory available for
1668 all scopes. "proc" limits the memory for the process scope, "sess" limits the
1669 memory for the session scope, "txn" for the transaction scope, and "reqres"
1670 limits the memory for each request or response processing.
1671 Memory accounting is hierarchical, meaning more coarse grained limits include
1672 the finer grained ones: "proc" includes "sess", "sess" includes "txn", and
1673 "txn" includes "reqres".
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02001674
Daniel Schneller0b547052016-03-21 20:46:57 +01001675 For example, when "tune.vars.sess-max-size" is limited to 100,
1676 "tune.vars.txn-max-size" and "tune.vars.reqres-max-size" cannot exceed
1677 100 either. If we create a variable "txn.var" that contains 100 bytes,
1678 all available space is consumed.
1679 Notice that exceeding the limits at runtime will not result in an error
1680 message, but values might be cut off or corrupted. So make sure to accurately
1681 plan for the amount of space needed to store all your variables.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02001682
William Lallemanda509e4c2012-11-07 16:54:34 +01001683tune.zlib.memlevel <number>
1684 Sets the memLevel parameter in zlib initialization for each session. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001685 defines how much memory should be allocated for the internal compression
William Lallemanda509e4c2012-11-07 16:54:34 +01001686 state. A value of 1 uses minimum memory but is slow and reduces compression
1687 ratio, a value of 9 uses maximum memory for optimal speed. Can be a value
1688 between 1 and 9. The default value is 8.
1689
1690tune.zlib.windowsize <number>
1691 Sets the window size (the size of the history buffer) as a parameter of the
1692 zlib initialization for each session. Larger values of this parameter result
1693 in better compression at the expense of memory usage. Can be a value between
1694 8 and 15. The default value is 15.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001695
Willy Tarreauc57f0e22009-05-10 13:12:33 +020016963.3. Debugging
1697--------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02001698
1699debug
1700 Enables debug mode which dumps to stdout all exchanges, and disables forking
1701 into background. It is the equivalent of the command-line argument "-d". It
1702 should never be used in a production configuration since it may prevent full
1703 system startup.
1704
1705quiet
1706 Do not display any message during startup. It is equivalent to the command-
1707 line argument "-q".
1708
Emeric Brunf099e792010-09-27 12:05:28 +02001709
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +010017103.4. Userlists
1711--------------
1712It is possible to control access to frontend/backend/listen sections or to
1713http stats by allowing only authenticated and authorized users. To do this,
1714it is required to create at least one userlist and to define users.
1715
1716userlist <listname>
Cyril Bonté78caf842010-03-10 22:41:43 +01001717 Creates new userlist with name <listname>. Many independent userlists can be
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001718 used to store authentication & authorization data for independent customers.
1719
1720group <groupname> [users <user>,<user>,(...)]
Cyril Bonté78caf842010-03-10 22:41:43 +01001721 Adds group <groupname> to the current userlist. It is also possible to
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001722 attach users to this group by using a comma separated list of names
1723 proceeded by "users" keyword.
1724
Cyril Bontéf0c60612010-02-06 14:44:47 +01001725user <username> [password|insecure-password <password>]
1726 [groups <group>,<group>,(...)]
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001727 Adds user <username> to the current userlist. Both secure (encrypted) and
1728 insecure (unencrypted) passwords can be used. Encrypted passwords are
Daniel Schnellerd06f31c2017-11-06 16:51:04 +01001729 evaluated using the crypt(3) function, so depending on the system's
1730 capabilities, different algorithms are supported. For example, modern Glibc
1731 based Linux systems support MD5, SHA-256, SHA-512, and, of course, the
1732 classic DES-based method of encrypting passwords.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001733
Daniel Schnellerd06f31c2017-11-06 16:51:04 +01001734 Attention: Be aware that using encrypted passwords might cause significantly
1735 increased CPU usage, depending on the number of requests, and the algorithm
1736 used. For any of the hashed variants, the password for each request must
1737 be processed through the chosen algorithm, before it can be compared to the
1738 value specified in the config file. Most current algorithms are deliberately
1739 designed to be expensive to compute to achieve resistance against brute
1740 force attacks. They do not simply salt/hash the clear text password once,
1741 but thousands of times. This can quickly become a major factor in haproxy's
1742 overall CPU consumption!
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001743
1744 Example:
Cyril Bontéf0c60612010-02-06 14:44:47 +01001745 userlist L1
1746 group G1 users tiger,scott
1747 group G2 users xdb,scott
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001748
Cyril Bontéf0c60612010-02-06 14:44:47 +01001749 user tiger password $6$k6y3o.eP$JlKBx9za9667qe4(...)xHSwRv6J.C0/D7cV91
1750 user scott insecure-password elgato
1751 user xdb insecure-password hello
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001752
Cyril Bontéf0c60612010-02-06 14:44:47 +01001753 userlist L2
1754 group G1
1755 group G2
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001756
Cyril Bontéf0c60612010-02-06 14:44:47 +01001757 user tiger password $6$k6y3o.eP$JlKBx(...)xHSwRv6J.C0/D7cV91 groups G1
1758 user scott insecure-password elgato groups G1,G2
1759 user xdb insecure-password hello groups G2
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001760
1761 Please note that both lists are functionally identical.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001762
Emeric Brunf099e792010-09-27 12:05:28 +02001763
17643.5. Peers
Cyril Bontédc4d9032012-04-08 21:57:39 +02001765----------
Emeric Brun94900952015-06-11 18:25:54 +02001766It is possible to propagate entries of any data-types in stick-tables between
1767several haproxy instances over TCP connections in a multi-master fashion. Each
1768instance pushes its local updates and insertions to remote peers. The pushed
1769values overwrite remote ones without aggregation. Interrupted exchanges are
1770automatically detected and recovered from the last known point.
1771In addition, during a soft restart, the old process connects to the new one
1772using such a TCP connection to push all its entries before the new process
1773tries to connect to other peers. That ensures very fast replication during a
1774reload, it typically takes a fraction of a second even for large tables.
1775Note that Server IDs are used to identify servers remotely, so it is important
1776that configurations look similar or at least that the same IDs are forced on
1777each server on all participants.
Emeric Brunf099e792010-09-27 12:05:28 +02001778
1779peers <peersect>
Jamie Gloudon801a0a32012-08-25 00:18:33 -04001780 Creates a new peer list with name <peersect>. It is an independent section,
Emeric Brunf099e792010-09-27 12:05:28 +02001781 which is referenced by one or more stick-tables.
1782
Willy Tarreau77e4bd12015-05-01 20:02:17 +02001783disabled
1784 Disables a peers section. It disables both listening and any synchronization
1785 related to this section. This is provided to disable synchronization of stick
1786 tables without having to comment out all "peers" references.
1787
1788enable
1789 This re-enables a disabled peers section which was previously disabled.
1790
Emeric Brunf099e792010-09-27 12:05:28 +02001791peer <peername> <ip>:<port>
1792 Defines a peer inside a peers section.
1793 If <peername> is set to the local peer name (by default hostname, or forced
1794 using "-L" command line option), haproxy will listen for incoming remote peer
1795 connection on <ip>:<port>. Otherwise, <ip>:<port> defines where to connect to
1796 to join the remote peer, and <peername> is used at the protocol level to
1797 identify and validate the remote peer on the server side.
1798
1799 During a soft restart, local peer <ip>:<port> is used by the old instance to
1800 connect the new one and initiate a complete replication (teaching process).
1801
1802 It is strongly recommended to have the exact same peers declaration on all
1803 peers and to only rely on the "-L" command line argument to change the local
1804 peer name. This makes it easier to maintain coherent configuration files
1805 across all peers.
1806
William Lallemandb2f07452015-05-12 14:27:13 +02001807 You may want to reference some environment variables in the address
1808 parameter, see section 2.3 about environment variables.
Willy Tarreaudad36a32013-03-11 01:20:04 +01001809
Cyril Bontédc4d9032012-04-08 21:57:39 +02001810 Example:
Emeric Brunf099e792010-09-27 12:05:28 +02001811 peers mypeers
Willy Tarreauf7b30a92010-12-06 22:59:17 +01001812 peer haproxy1 192.168.0.1:1024
1813 peer haproxy2 192.168.0.2:1024
1814 peer haproxy3 10.2.0.1:1024
Emeric Brunf099e792010-09-27 12:05:28 +02001815
1816 backend mybackend
1817 mode tcp
1818 balance roundrobin
1819 stick-table type ip size 20k peers mypeers
1820 stick on src
1821
Willy Tarreauf7b30a92010-12-06 22:59:17 +01001822 server srv1 192.168.0.30:80
1823 server srv2 192.168.0.31:80
Emeric Brunf099e792010-09-27 12:05:28 +02001824
1825
Simon Horman51a1cf62015-02-03 13:00:44 +090018263.6. Mailers
1827------------
1828It is possible to send email alerts when the state of servers changes.
1829If configured email alerts are sent to each mailer that is configured
1830in a mailers section. Email is sent to mailers using SMTP.
1831
Pieter Baauw386a1272015-08-16 15:26:24 +02001832mailers <mailersect>
Simon Horman51a1cf62015-02-03 13:00:44 +09001833 Creates a new mailer list with the name <mailersect>. It is an
1834 independent section which is referenced by one or more proxies.
1835
1836mailer <mailername> <ip>:<port>
1837 Defines a mailer inside a mailers section.
1838
1839 Example:
1840 mailers mymailers
1841 mailer smtp1 192.168.0.1:587
1842 mailer smtp2 192.168.0.2:587
1843
1844 backend mybackend
1845 mode tcp
1846 balance roundrobin
1847
1848 email-alert mailers mymailers
1849 email-alert from test1@horms.org
1850 email-alert to test2@horms.org
1851
1852 server srv1 192.168.0.30:80
1853 server srv2 192.168.0.31:80
1854
Pieter Baauw235fcfc2016-02-13 15:33:40 +01001855timeout mail <time>
1856 Defines the time available for a mail/connection to be made and send to
1857 the mail-server. If not defined the default value is 10 seconds. To allow
1858 for at least two SYN-ACK packets to be send during initial TCP handshake it
1859 is advised to keep this value above 4 seconds.
1860
1861 Example:
1862 mailers mymailers
1863 timeout mail 20s
1864 mailer smtp1 192.168.0.1:587
Simon Horman51a1cf62015-02-03 13:00:44 +09001865
Willy Tarreauc57f0e22009-05-10 13:12:33 +020018664. Proxies
Willy Tarreau6a06a402007-07-15 20:15:28 +02001867----------
Willy Tarreau0ba27502007-12-24 16:55:16 +01001868
Willy Tarreau6a06a402007-07-15 20:15:28 +02001869Proxy configuration can be located in a set of sections :
William Lallemand6e62fb62015-04-28 16:55:23 +02001870 - defaults [<name>]
Willy Tarreau6a06a402007-07-15 20:15:28 +02001871 - frontend <name>
1872 - backend <name>
1873 - listen <name>
1874
1875A "defaults" section sets default parameters for all other sections following
1876its declaration. Those default parameters are reset by the next "defaults"
1877section. See below for the list of parameters which can be set in a "defaults"
Willy Tarreau0ba27502007-12-24 16:55:16 +01001878section. The name is optional but its use is encouraged for better readability.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001879
1880A "frontend" section describes a set of listening sockets accepting client
1881connections.
1882
1883A "backend" section describes a set of servers to which the proxy will connect
1884to forward incoming connections.
1885
1886A "listen" section defines a complete proxy with its frontend and backend
1887parts combined in one section. It is generally useful for TCP-only traffic.
1888
Willy Tarreau0ba27502007-12-24 16:55:16 +01001889All proxy names must be formed from upper and lower case letters, digits,
1890'-' (dash), '_' (underscore) , '.' (dot) and ':' (colon). ACL names are
1891case-sensitive, which means that "www" and "WWW" are two different proxies.
1892
1893Historically, all proxy names could overlap, it just caused troubles in the
1894logs. Since the introduction of content switching, it is mandatory that two
1895proxies with overlapping capabilities (frontend/backend) have different names.
1896However, it is still permitted that a frontend and a backend share the same
1897name, as this configuration seems to be commonly encountered.
1898
1899Right now, two major proxy modes are supported : "tcp", also known as layer 4,
1900and "http", also known as layer 7. In layer 4 mode, HAProxy simply forwards
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001901bidirectional traffic between two sides. In layer 7 mode, HAProxy analyzes the
Willy Tarreau0ba27502007-12-24 16:55:16 +01001902protocol, and can interact with it by allowing, blocking, switching, adding,
1903modifying, or removing arbitrary contents in requests or responses, based on
1904arbitrary criteria.
1905
Willy Tarreau70dffda2014-01-30 03:07:23 +01001906In HTTP mode, the processing applied to requests and responses flowing over
1907a connection depends in the combination of the frontend's HTTP options and
1908the backend's. HAProxy supports 5 connection modes :
1909
1910 - KAL : keep alive ("option http-keep-alive") which is the default mode : all
1911 requests and responses are processed, and connections remain open but idle
1912 between responses and new requests.
1913
1914 - TUN: tunnel ("option http-tunnel") : this was the default mode for versions
1915 1.0 to 1.5-dev21 : only the first request and response are processed, and
1916 everything else is forwarded with no analysis at all. This mode should not
1917 be used as it creates lots of trouble with logging and HTTP processing.
1918
1919 - PCL: passive close ("option httpclose") : exactly the same as tunnel mode,
1920 but with "Connection: close" appended in both directions to try to make
1921 both ends close after the first request/response exchange.
1922
1923 - SCL: server close ("option http-server-close") : the server-facing
1924 connection is closed after the end of the response is received, but the
1925 client-facing connection remains open.
1926
1927 - FCL: forced close ("option forceclose") : the connection is actively closed
1928 after the end of the response.
1929
1930The effective mode that will be applied to a connection passing through a
1931frontend and a backend can be determined by both proxy modes according to the
1932following matrix, but in short, the modes are symmetric, keep-alive is the
1933weakest option and force close is the strongest.
1934
1935 Backend mode
1936
1937 | KAL | TUN | PCL | SCL | FCL
1938 ----+-----+-----+-----+-----+----
1939 KAL | KAL | TUN | PCL | SCL | FCL
1940 ----+-----+-----+-----+-----+----
1941 TUN | TUN | TUN | PCL | SCL | FCL
1942 Frontend ----+-----+-----+-----+-----+----
1943 mode PCL | PCL | PCL | PCL | FCL | FCL
1944 ----+-----+-----+-----+-----+----
1945 SCL | SCL | SCL | FCL | SCL | FCL
1946 ----+-----+-----+-----+-----+----
1947 FCL | FCL | FCL | FCL | FCL | FCL
1948
Willy Tarreau0ba27502007-12-24 16:55:16 +01001949
Willy Tarreau70dffda2014-01-30 03:07:23 +01001950
Willy Tarreauc57f0e22009-05-10 13:12:33 +020019514.1. Proxy keywords matrix
1952--------------------------
Willy Tarreau0ba27502007-12-24 16:55:16 +01001953
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001954The following list of keywords is supported. Most of them may only be used in a
1955limited set of section types. Some of them are marked as "deprecated" because
1956they are inherited from an old syntax which may be confusing or functionally
1957limited, and there are new recommended keywords to replace them. Keywords
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001958marked with "(*)" can be optionally inverted using the "no" prefix, eg. "no
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001959option contstats". This makes sense when the option has been enabled by default
Willy Tarreau3842f002009-06-14 11:39:52 +02001960and must be disabled for a specific instance. Such options may also be prefixed
1961with "default" in order to restore default settings regardless of what has been
1962specified in a previous "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001963
Willy Tarreau6a06a402007-07-15 20:15:28 +02001964
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001965 keyword defaults frontend listen backend
1966------------------------------------+----------+----------+---------+---------
1967acl - X X X
Willy Tarreau294d0f02015-08-10 19:40:12 +02001968appsession - - - -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001969backlog X X X -
1970balance X - X X
1971bind - X X -
1972bind-process X X X X
Jarno Huuskonen8c8c3492016-12-28 18:50:29 +02001973block (deprecated) - X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001974capture cookie - X X -
1975capture request header - X X -
1976capture response header - X X -
1977clitimeout (deprecated) X X X -
William Lallemand82fe75c2012-10-23 10:25:10 +02001978compression X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001979contimeout (deprecated) X - X X
1980cookie X - X X
Thierry FOURNIERa0a1b752015-05-26 17:44:32 +02001981declare capture - X X -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001982default-server X - X X
1983default_backend X X X -
1984description - X X X
1985disabled X X X X
1986dispatch - - X X
Simon Horman51a1cf62015-02-03 13:00:44 +09001987email-alert from X X X X
Simon Horman64e34162015-02-06 11:11:57 +09001988email-alert level X X X X
Simon Horman51a1cf62015-02-03 13:00:44 +09001989email-alert mailers X X X X
1990email-alert myhostname X X X X
1991email-alert to X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001992enabled X X X X
1993errorfile X X X X
1994errorloc X X X X
1995errorloc302 X X X X
1996-- keyword -------------------------- defaults - frontend - listen -- backend -
1997errorloc303 X X X X
Cyril Bonté0d4bf012010-04-25 23:21:46 +02001998force-persist - X X X
Christopher Fauletc3fe5332016-04-07 15:30:10 +02001999filter - X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002000fullconn X - X X
2001grace X X X X
2002hash-type X - X X
2003http-check disable-on-404 X - X X
Willy Tarreaubd741542010-03-16 18:46:54 +01002004http-check expect - - X X
Willy Tarreau7ab6aff2010-10-12 06:30:16 +02002005http-check send-state X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002006http-request - X X X
Willy Tarreaue365c0b2013-06-11 16:06:12 +02002007http-response - X X X
Willy Tarreau30631952015-08-06 15:05:24 +02002008http-reuse X - X X
Baptiste Assmann2c42ef52013-10-09 21:57:02 +02002009http-send-name-header - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002010id - X X X
Cyril Bonté0d4bf012010-04-25 23:21:46 +02002011ignore-persist - X X X
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02002012load-server-state-from-file X - X X
William Lallemand0f99e342011-10-12 17:50:54 +02002013log (*) X X X X
Willy Tarreaufb4e7ea2015-01-07 14:55:17 +01002014log-format X X X -
Dragan Dosen7ad31542015-09-28 17:16:47 +02002015log-format-sd X X X -
Willy Tarreau094af4e2015-01-07 15:03:42 +01002016log-tag X X X X
Willy Tarreauc35362a2014-04-25 13:58:37 +02002017max-keep-alive-queue X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002018maxconn X X X -
2019mode X X X X
2020monitor fail - X X -
2021monitor-net X X X -
2022monitor-uri X X X -
2023option abortonclose (*) X - X X
2024option accept-invalid-http-request (*) X X X -
2025option accept-invalid-http-response (*) X - X X
2026option allbackups (*) X - X X
2027option checkcache (*) X - X X
2028option clitcpka (*) X X X -
2029option contstats (*) X X X -
2030option dontlog-normal (*) X X X -
2031option dontlognull (*) X X X -
2032option forceclose (*) X X X X
2033-- keyword -------------------------- defaults - frontend - listen -- backend -
2034option forwardfor X X X X
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02002035option http-buffer-request (*) X X X X
Willy Tarreau82649f92015-05-01 22:40:51 +02002036option http-ignore-probes (*) X X X -
Willy Tarreau16bfb022010-01-16 19:48:41 +01002037option http-keep-alive (*) X X X X
Willy Tarreau96e31212011-05-30 18:10:30 +02002038option http-no-delay (*) X X X X
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02002039option http-pretend-keepalive (*) X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002040option http-server-close (*) X X X X
Willy Tarreau02bce8b2014-01-30 00:15:28 +01002041option http-tunnel (*) X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002042option http-use-proxy-header (*) X X X -
2043option httpchk X - X X
2044option httpclose (*) X X X X
2045option httplog X X X X
2046option http_proxy (*) X X X X
Jamie Gloudon801a0a32012-08-25 00:18:33 -04002047option independent-streams (*) X X X X
Gabor Lekenyb4c81e42010-09-29 18:17:05 +02002048option ldap-check X - X X
Simon Horman98637e52014-06-20 12:30:16 +09002049option external-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002050option log-health-checks (*) X - X X
2051option log-separate-errors (*) X X X -
2052option logasap (*) X X X -
2053option mysql-check X - X X
2054option nolinger (*) X X X X
2055option originalto X X X X
2056option persist (*) X - X X
Baptiste Assmann809e22a2015-10-12 20:22:55 +02002057option pgsql-check X - X X
2058option prefer-last-server (*) X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002059option redispatch (*) X - X X
Hervé COMMOWICKec032d62011-08-05 16:23:48 +02002060option redis-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002061option smtpchk X - X X
2062option socket-stats (*) X X X -
2063option splice-auto (*) X X X X
2064option splice-request (*) X X X X
2065option splice-response (*) X X X X
Christopher Fauletba7bc162016-11-07 21:07:38 +01002066option spop-check - - - X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002067option srvtcpka (*) X - X X
2068option ssl-hello-chk X - X X
2069-- keyword -------------------------- defaults - frontend - listen -- backend -
Willy Tarreaued179852013-12-16 01:07:00 +01002070option tcp-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002071option tcp-smart-accept (*) X X X -
2072option tcp-smart-connect (*) X - X X
2073option tcpka X X X X
2074option tcplog X X X X
2075option transparent (*) X - X X
Simon Horman98637e52014-06-20 12:30:16 +09002076external-check command X - X X
2077external-check path X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002078persist rdp-cookie X - X X
2079rate-limit sessions X X X -
2080redirect - X X X
2081redisp (deprecated) X - X X
2082redispatch (deprecated) X - X X
2083reqadd - X X X
2084reqallow - X X X
2085reqdel - X X X
2086reqdeny - X X X
2087reqiallow - X X X
2088reqidel - X X X
2089reqideny - X X X
2090reqipass - X X X
2091reqirep - X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002092reqitarpit - X X X
2093reqpass - X X X
2094reqrep - X X X
2095-- keyword -------------------------- defaults - frontend - listen -- backend -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002096reqtarpit - X X X
2097retries X - X X
2098rspadd - X X X
2099rspdel - X X X
2100rspdeny - X X X
2101rspidel - X X X
2102rspideny - X X X
2103rspirep - X X X
2104rsprep - X X X
2105server - - X X
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02002106server-state-file-name X - X X
Frédéric Lécaillecb4502e2017-04-20 13:36:25 +02002107server-template - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002108source X - X X
2109srvtimeout (deprecated) X - X X
Baptiste Assmann5a549212015-10-12 20:30:24 +02002110stats admin - X X X
2111stats auth X X X X
2112stats enable X X X X
2113stats hide-version X X X X
2114stats http-request - X X X
2115stats realm X X X X
2116stats refresh X X X X
2117stats scope X X X X
2118stats show-desc X X X X
2119stats show-legends X X X X
2120stats show-node X X X X
2121stats uri X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002122-- keyword -------------------------- defaults - frontend - listen -- backend -
2123stick match - - X X
2124stick on - - X X
2125stick store-request - - X X
Willy Tarreaud8dc99f2011-07-01 11:33:25 +02002126stick store-response - - X X
Adam Spiers68af3c12017-04-06 16:31:39 +01002127stick-table - X X X
Willy Tarreau938c7fe2014-04-25 14:21:39 +02002128tcp-check connect - - X X
2129tcp-check expect - - X X
2130tcp-check send - - X X
2131tcp-check send-binary - - X X
Willy Tarreaue9656522010-08-17 15:40:09 +02002132tcp-request connection - X X -
2133tcp-request content - X X X
Willy Tarreaua56235c2010-09-14 11:31:36 +02002134tcp-request inspect-delay - X X X
Willy Tarreau4f614292016-10-21 17:49:36 +02002135tcp-request session - X X -
Emeric Brun0a3b67f2010-09-24 15:34:53 +02002136tcp-response content - - X X
2137tcp-response inspect-delay - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002138timeout check X - X X
2139timeout client X X X -
Willy Tarreau05cdd962014-05-10 14:30:07 +02002140timeout client-fin X X X -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002141timeout clitimeout (deprecated) X X X -
2142timeout connect X - X X
2143timeout contimeout (deprecated) X - X X
2144timeout http-keep-alive X X X X
2145timeout http-request X X X X
2146timeout queue X - X X
2147timeout server X - X X
Willy Tarreau05cdd962014-05-10 14:30:07 +02002148timeout server-fin X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002149timeout srvtimeout (deprecated) X - X X
2150timeout tarpit X X X X
Willy Tarreauce887fd2012-05-12 12:50:00 +02002151timeout tunnel X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002152transparent (deprecated) X - X X
William Lallemanda73203e2012-03-12 12:48:57 +01002153unique-id-format X X X -
2154unique-id-header X X X -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002155use_backend - X X -
Willy Tarreau4a5cade2012-04-05 21:09:48 +02002156use-server - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002157------------------------------------+----------+----------+---------+---------
2158 keyword defaults frontend listen backend
Willy Tarreau6a06a402007-07-15 20:15:28 +02002159
Willy Tarreau0ba27502007-12-24 16:55:16 +01002160
Willy Tarreauc57f0e22009-05-10 13:12:33 +020021614.2. Alphabetically sorted keywords reference
2162---------------------------------------------
Willy Tarreau0ba27502007-12-24 16:55:16 +01002163
2164This section provides a description of each keyword and its usage.
2165
2166
2167acl <aclname> <criterion> [flags] [operator] <value> ...
2168 Declare or complete an access list.
2169 May be used in sections : defaults | frontend | listen | backend
2170 no | yes | yes | yes
2171 Example:
2172 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
2173 acl invalid_src src_port 0:1023
2174 acl local_dst hdr(host) -i localhost
2175
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002176 See section 7 about ACL usage.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002177
2178
Cyril Bontéb21570a2009-11-29 20:04:48 +01002179appsession <cookie> len <length> timeout <holdtime>
2180 [request-learn] [prefix] [mode <path-parameters|query-string>]
Willy Tarreau0ba27502007-12-24 16:55:16 +01002181 Define session stickiness on an existing application cookie.
2182 May be used in sections : defaults | frontend | listen | backend
2183 no | no | yes | yes
2184 Arguments :
2185 <cookie> this is the name of the cookie used by the application and which
2186 HAProxy will have to learn for each new session.
2187
Cyril Bontéb21570a2009-11-29 20:04:48 +01002188 <length> this is the max number of characters that will be memorized and
Willy Tarreau0ba27502007-12-24 16:55:16 +01002189 checked in each cookie value.
2190
2191 <holdtime> this is the time after which the cookie will be removed from
2192 memory if unused. If no unit is specified, this time is in
2193 milliseconds.
2194
Cyril Bontébf47aeb2009-10-15 00:15:40 +02002195 request-learn
2196 If this option is specified, then haproxy will be able to learn
2197 the cookie found in the request in case the server does not
2198 specify any in response. This is typically what happens with
2199 PHPSESSID cookies, or when haproxy's session expires before
2200 the application's session and the correct server is selected.
2201 It is recommended to specify this option to improve reliability.
2202
Cyril Bontéb21570a2009-11-29 20:04:48 +01002203 prefix When this option is specified, haproxy will match on the cookie
2204 prefix (or URL parameter prefix). The appsession value is the
2205 data following this prefix.
2206
2207 Example :
2208 appsession ASPSESSIONID len 64 timeout 3h prefix
2209
2210 This will match the cookie ASPSESSIONIDXXXX=XXXXX,
2211 the appsession value will be XXXX=XXXXX.
2212
2213 mode This option allows to change the URL parser mode.
2214 2 modes are currently supported :
2215 - path-parameters :
2216 The parser looks for the appsession in the path parameters
2217 part (each parameter is separated by a semi-colon), which is
2218 convenient for JSESSIONID for example.
2219 This is the default mode if the option is not set.
2220 - query-string :
2221 In this mode, the parser will look for the appsession in the
2222 query string.
2223
Willy Tarreau294d0f02015-08-10 19:40:12 +02002224 As of version 1.6, appsessions was removed. It is more flexible and more
2225 convenient to use stick-tables instead, and stick-tables support multi-master
2226 replication and data conservation across reloads, which appsessions did not.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002227
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01002228 See also : "cookie", "capture cookie", "balance", "stick", "stick-table",
2229 "ignore-persist", "nbproc" and "bind-process".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002230
2231
Willy Tarreauc73ce2b2008-01-06 10:55:10 +01002232backlog <conns>
2233 Give hints to the system about the approximate listen backlog desired size
2234 May be used in sections : defaults | frontend | listen | backend
2235 yes | yes | yes | no
2236 Arguments :
2237 <conns> is the number of pending connections. Depending on the operating
2238 system, it may represent the number of already acknowledged
Cyril Bontédc4d9032012-04-08 21:57:39 +02002239 connections, of non-acknowledged ones, or both.
Willy Tarreauc73ce2b2008-01-06 10:55:10 +01002240
2241 In order to protect against SYN flood attacks, one solution is to increase
2242 the system's SYN backlog size. Depending on the system, sometimes it is just
2243 tunable via a system parameter, sometimes it is not adjustable at all, and
2244 sometimes the system relies on hints given by the application at the time of
2245 the listen() syscall. By default, HAProxy passes the frontend's maxconn value
2246 to the listen() syscall. On systems which can make use of this value, it can
2247 sometimes be useful to be able to specify a different value, hence this
2248 backlog parameter.
2249
2250 On Linux 2.4, the parameter is ignored by the system. On Linux 2.6, it is
2251 used as a hint and the system accepts up to the smallest greater power of
2252 two, and never more than some limits (usually 32768).
2253
2254 See also : "maxconn" and the target operating system's tuning guide.
2255
2256
Willy Tarreau0ba27502007-12-24 16:55:16 +01002257balance <algorithm> [ <arguments> ]
Willy Tarreau226071e2014-04-10 11:55:45 +02002258balance url_param <param> [check_post]
Willy Tarreau0ba27502007-12-24 16:55:16 +01002259 Define the load balancing algorithm to be used in a backend.
2260 May be used in sections : defaults | frontend | listen | backend
2261 yes | no | yes | yes
2262 Arguments :
2263 <algorithm> is the algorithm used to select a server when doing load
2264 balancing. This only applies when no persistence information
2265 is available, or when a connection is redispatched to another
2266 server. <algorithm> may be one of the following :
2267
2268 roundrobin Each server is used in turns, according to their weights.
2269 This is the smoothest and fairest algorithm when the server's
2270 processing time remains equally distributed. This algorithm
2271 is dynamic, which means that server weights may be adjusted
Willy Tarreau9757a382009-10-03 12:56:50 +02002272 on the fly for slow starts for instance. It is limited by
Godbacha34bdc02013-07-22 07:44:53 +08002273 design to 4095 active servers per backend. Note that in some
Willy Tarreau9757a382009-10-03 12:56:50 +02002274 large farms, when a server becomes up after having been down
2275 for a very short time, it may sometimes take a few hundreds
2276 requests for it to be re-integrated into the farm and start
2277 receiving traffic. This is normal, though very rare. It is
2278 indicated here in case you would have the chance to observe
2279 it, so that you don't worry.
2280
2281 static-rr Each server is used in turns, according to their weights.
2282 This algorithm is as similar to roundrobin except that it is
2283 static, which means that changing a server's weight on the
2284 fly will have no effect. On the other hand, it has no design
2285 limitation on the number of servers, and when a server goes
2286 up, it is always immediately reintroduced into the farm, once
2287 the full map is recomputed. It also uses slightly less CPU to
2288 run (around -1%).
Willy Tarreau0ba27502007-12-24 16:55:16 +01002289
Willy Tarreau2d2a7f82008-03-17 12:07:56 +01002290 leastconn The server with the lowest number of connections receives the
2291 connection. Round-robin is performed within groups of servers
2292 of the same load to ensure that all servers will be used. Use
2293 of this algorithm is recommended where very long sessions are
2294 expected, such as LDAP, SQL, TSE, etc... but is not very well
2295 suited for protocols using short sessions such as HTTP. This
2296 algorithm is dynamic, which means that server weights may be
2297 adjusted on the fly for slow starts for instance.
2298
Willy Tarreauf09c6602012-02-13 17:12:08 +01002299 first The first server with available connection slots receives the
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03002300 connection. The servers are chosen from the lowest numeric
Willy Tarreauf09c6602012-02-13 17:12:08 +01002301 identifier to the highest (see server parameter "id"), which
2302 defaults to the server's position in the farm. Once a server
Willy Tarreau64559c52012-04-07 09:08:45 +02002303 reaches its maxconn value, the next server is used. It does
Willy Tarreauf09c6602012-02-13 17:12:08 +01002304 not make sense to use this algorithm without setting maxconn.
2305 The purpose of this algorithm is to always use the smallest
2306 number of servers so that extra servers can be powered off
2307 during non-intensive hours. This algorithm ignores the server
2308 weight, and brings more benefit to long session such as RDP
Willy Tarreau64559c52012-04-07 09:08:45 +02002309 or IMAP than HTTP, though it can be useful there too. In
2310 order to use this algorithm efficiently, it is recommended
2311 that a cloud controller regularly checks server usage to turn
2312 them off when unused, and regularly checks backend queue to
2313 turn new servers on when the queue inflates. Alternatively,
2314 using "http-check send-state" may inform servers on the load.
Willy Tarreauf09c6602012-02-13 17:12:08 +01002315
Willy Tarreau0ba27502007-12-24 16:55:16 +01002316 source The source IP address is hashed and divided by the total
2317 weight of the running servers to designate which server will
2318 receive the request. This ensures that the same client IP
2319 address will always reach the same server as long as no
2320 server goes down or up. If the hash result changes due to the
2321 number of running servers changing, many clients will be
2322 directed to a different server. This algorithm is generally
2323 used in TCP mode where no cookie may be inserted. It may also
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002324 be used on the Internet to provide a best-effort stickiness
Willy Tarreau0ba27502007-12-24 16:55:16 +01002325 to clients which refuse session cookies. This algorithm is
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002326 static by default, which means that changing a server's
2327 weight on the fly will have no effect, but this can be
2328 changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002329
Oskar Stolc8dc41842012-05-19 10:19:54 +01002330 uri This algorithm hashes either the left part of the URI (before
2331 the question mark) or the whole URI (if the "whole" parameter
2332 is present) and divides the hash value by the total weight of
2333 the running servers. The result designates which server will
2334 receive the request. This ensures that the same URI will
2335 always be directed to the same server as long as no server
2336 goes up or down. This is used with proxy caches and
2337 anti-virus proxies in order to maximize the cache hit rate.
2338 Note that this algorithm may only be used in an HTTP backend.
2339 This algorithm is static by default, which means that
2340 changing a server's weight on the fly will have no effect,
2341 but this can be changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002342
Oskar Stolc8dc41842012-05-19 10:19:54 +01002343 This algorithm supports two optional parameters "len" and
Marek Majkowski9c30fc12008-04-27 23:25:55 +02002344 "depth", both followed by a positive integer number. These
2345 options may be helpful when it is needed to balance servers
2346 based on the beginning of the URI only. The "len" parameter
2347 indicates that the algorithm should only consider that many
2348 characters at the beginning of the URI to compute the hash.
2349 Note that having "len" set to 1 rarely makes sense since most
2350 URIs start with a leading "/".
2351
2352 The "depth" parameter indicates the maximum directory depth
2353 to be used to compute the hash. One level is counted for each
2354 slash in the request. If both parameters are specified, the
2355 evaluation stops when either is reached.
2356
Willy Tarreau0ba27502007-12-24 16:55:16 +01002357 url_param The URL parameter specified in argument will be looked up in
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002358 the query string of each HTTP GET request.
2359
2360 If the modifier "check_post" is used, then an HTTP POST
Cyril Bontédc4d9032012-04-08 21:57:39 +02002361 request entity will be searched for the parameter argument,
2362 when it is not found in a query string after a question mark
Willy Tarreau226071e2014-04-10 11:55:45 +02002363 ('?') in the URL. The message body will only start to be
2364 analyzed once either the advertised amount of data has been
2365 received or the request buffer is full. In the unlikely event
2366 that chunked encoding is used, only the first chunk is
Cyril Bontédc4d9032012-04-08 21:57:39 +02002367 scanned. Parameter values separated by a chunk boundary, may
Willy Tarreau226071e2014-04-10 11:55:45 +02002368 be randomly balanced if at all. This keyword used to support
2369 an optional <max_wait> parameter which is now ignored.
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002370
2371 If the parameter is found followed by an equal sign ('=') and
2372 a value, then the value is hashed and divided by the total
2373 weight of the running servers. The result designates which
2374 server will receive the request.
2375
2376 This is used to track user identifiers in requests and ensure
2377 that a same user ID will always be sent to the same server as
2378 long as no server goes up or down. If no value is found or if
2379 the parameter is not found, then a round robin algorithm is
2380 applied. Note that this algorithm may only be used in an HTTP
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002381 backend. This algorithm is static by default, which means
2382 that changing a server's weight on the fly will have no
2383 effect, but this can be changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002384
Cyril Bontédc4d9032012-04-08 21:57:39 +02002385 hdr(<name>) The HTTP header <name> will be looked up in each HTTP
2386 request. Just as with the equivalent ACL 'hdr()' function,
2387 the header name in parenthesis is not case sensitive. If the
2388 header is absent or if it does not contain any value, the
2389 roundrobin algorithm is applied instead.
Benoitaffb4812009-03-25 13:02:10 +01002390
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002391 An optional 'use_domain_only' parameter is available, for
Benoitaffb4812009-03-25 13:02:10 +01002392 reducing the hash algorithm to the main domain part with some
2393 specific headers such as 'Host'. For instance, in the Host
2394 value "haproxy.1wt.eu", only "1wt" will be considered.
2395
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002396 This algorithm is static by default, which means that
2397 changing a server's weight on the fly will have no effect,
2398 but this can be changed using "hash-type".
2399
Emeric Brun736aa232009-06-30 17:56:00 +02002400 rdp-cookie
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02002401 rdp-cookie(<name>)
Emeric Brun736aa232009-06-30 17:56:00 +02002402 The RDP cookie <name> (or "mstshash" if omitted) will be
2403 looked up and hashed for each incoming TCP request. Just as
2404 with the equivalent ACL 'req_rdp_cookie()' function, the name
2405 is not case-sensitive. This mechanism is useful as a degraded
2406 persistence mode, as it makes it possible to always send the
2407 same user (or the same session ID) to the same server. If the
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002408 cookie is not found, the normal roundrobin algorithm is
Emeric Brun736aa232009-06-30 17:56:00 +02002409 used instead.
2410
2411 Note that for this to work, the frontend must ensure that an
2412 RDP cookie is already present in the request buffer. For this
2413 you must use 'tcp-request content accept' rule combined with
2414 a 'req_rdp_cookie_cnt' ACL.
2415
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002416 This algorithm is static by default, which means that
2417 changing a server's weight on the fly will have no effect,
2418 but this can be changed using "hash-type".
2419
Cyril Bontédc4d9032012-04-08 21:57:39 +02002420 See also the rdp_cookie pattern fetch function.
Simon Hormanab814e02011-06-24 14:50:20 +09002421
Willy Tarreau0ba27502007-12-24 16:55:16 +01002422 <arguments> is an optional list of arguments which may be needed by some
Marek Majkowski9c30fc12008-04-27 23:25:55 +02002423 algorithms. Right now, only "url_param" and "uri" support an
2424 optional argument.
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002425
Willy Tarreau3cd9af22009-03-15 14:06:41 +01002426 The load balancing algorithm of a backend is set to roundrobin when no other
2427 algorithm, mode nor option have been set. The algorithm may only be set once
2428 for each backend.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002429
2430 Examples :
2431 balance roundrobin
2432 balance url_param userid
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002433 balance url_param session_id check_post 64
Benoitaffb4812009-03-25 13:02:10 +01002434 balance hdr(User-Agent)
2435 balance hdr(host)
2436 balance hdr(Host) use_domain_only
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002437
2438 Note: the following caveats and limitations on using the "check_post"
2439 extension with "url_param" must be considered :
2440
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002441 - all POST requests are eligible for consideration, because there is no way
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002442 to determine if the parameters will be found in the body or entity which
2443 may contain binary data. Therefore another method may be required to
2444 restrict consideration of POST requests that have no URL parameters in
2445 the body. (see acl reqideny http_end)
2446
2447 - using a <max_wait> value larger than the request buffer size does not
2448 make sense and is useless. The buffer size is set at build time, and
2449 defaults to 16 kB.
2450
2451 - Content-Encoding is not supported, the parameter search will probably
2452 fail; and load balancing will fall back to Round Robin.
2453
2454 - Expect: 100-continue is not supported, load balancing will fall back to
2455 Round Robin.
2456
Lukas Tribus23953682017-04-28 13:24:30 +00002457 - Transfer-Encoding (RFC7230 3.3.1) is only supported in the first chunk.
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002458 If the entire parameter value is not present in the first chunk, the
2459 selection of server is undefined (actually, defined by how little
2460 actually appeared in the first chunk).
2461
2462 - This feature does not support generation of a 100, 411 or 501 response.
2463
2464 - In some cases, requesting "check_post" MAY attempt to scan the entire
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002465 contents of a message body. Scanning normally terminates when linear
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002466 white space or control characters are found, indicating the end of what
2467 might be a URL parameter list. This is probably not a concern with SGML
2468 type message bodies.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002469
Willy Tarreau294d0f02015-08-10 19:40:12 +02002470 See also : "dispatch", "cookie", "transparent", "hash-type" and "http_proxy".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002471
2472
Willy Tarreaub6205fd2012-09-24 12:27:33 +02002473bind [<address>]:<port_range> [, ...] [param*]
2474bind /<path> [, ...] [param*]
Willy Tarreau0ba27502007-12-24 16:55:16 +01002475 Define one or several listening addresses and/or ports in a frontend.
2476 May be used in sections : defaults | frontend | listen | backend
2477 no | yes | yes | no
2478 Arguments :
Willy Tarreaub1e52e82008-01-13 14:49:51 +01002479 <address> is optional and can be a host name, an IPv4 address, an IPv6
2480 address, or '*'. It designates the address the frontend will
2481 listen on. If unset, all IPv4 addresses of the system will be
2482 listened on. The same will apply for '*' or the system's
David du Colombier9c938da2011-03-17 10:40:27 +01002483 special address "0.0.0.0". The IPv6 equivalent is '::'.
Willy Tarreau24709282013-03-10 21:32:12 +01002484 Optionally, an address family prefix may be used before the
2485 address to force the family regardless of the address format,
2486 which can be useful to specify a path to a unix socket with
2487 no slash ('/'). Currently supported prefixes are :
2488 - 'ipv4@' -> address is always IPv4
2489 - 'ipv6@' -> address is always IPv6
2490 - 'unix@' -> address is a path to a local unix socket
Willy Tarreau70f72e02014-07-08 00:37:50 +02002491 - 'abns@' -> address is in abstract namespace (Linux only).
2492 Note: since abstract sockets are not "rebindable", they
2493 do not cope well with multi-process mode during
2494 soft-restart, so it is better to avoid them if
2495 nbproc is greater than 1. The effect is that if the
2496 new process fails to start, only one of the old ones
2497 will be able to rebind to the socket.
Willy Tarreau40aa0702013-03-10 23:51:38 +01002498 - 'fd@<n>' -> use file descriptor <n> inherited from the
2499 parent. The fd must be bound and may or may not already
2500 be listening.
William Lallemandb2f07452015-05-12 14:27:13 +02002501 You may want to reference some environment variables in the
2502 address parameter, see section 2.3 about environment
2503 variables.
Willy Tarreaub1e52e82008-01-13 14:49:51 +01002504
Willy Tarreauc5011ca2010-03-22 11:53:56 +01002505 <port_range> is either a unique TCP port, or a port range for which the
2506 proxy will accept connections for the IP address specified
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002507 above. The port is mandatory for TCP listeners. Note that in
2508 the case of an IPv6 address, the port is always the number
2509 after the last colon (':'). A range can either be :
Willy Tarreauc5011ca2010-03-22 11:53:56 +01002510 - a numerical port (ex: '80')
2511 - a dash-delimited ports range explicitly stating the lower
2512 and upper bounds (ex: '2000-2100') which are included in
2513 the range.
2514
2515 Particular care must be taken against port ranges, because
2516 every <address:port> couple consumes one socket (= a file
2517 descriptor), so it's easy to consume lots of descriptors
2518 with a simple range, and to run out of sockets. Also, each
2519 <address:port> couple must be used only once among all
2520 instances running on a same system. Please note that binding
2521 to ports lower than 1024 generally require particular
Jamie Gloudon801a0a32012-08-25 00:18:33 -04002522 privileges to start the program, which are independent of
Willy Tarreauc5011ca2010-03-22 11:53:56 +01002523 the 'uid' parameter.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002524
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002525 <path> is a UNIX socket path beginning with a slash ('/'). This is
2526 alternative to the TCP listening port. Haproxy will then
2527 receive UNIX connections on the socket located at this place.
2528 The path must begin with a slash and by default is absolute.
2529 It can be relative to the prefix defined by "unix-bind" in
2530 the global section. Note that the total length of the prefix
2531 followed by the socket path cannot exceed some system limits
2532 for UNIX sockets, which commonly are set to 107 characters.
2533
Willy Tarreaub6205fd2012-09-24 12:27:33 +02002534 <param*> is a list of parameters common to all sockets declared on the
2535 same line. These numerous parameters depend on OS and build
2536 options and have a complete section dedicated to them. Please
2537 refer to section 5 to for more details.
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02002538
Willy Tarreau0ba27502007-12-24 16:55:16 +01002539 It is possible to specify a list of address:port combinations delimited by
2540 commas. The frontend will then listen on all of these addresses. There is no
2541 fixed limit to the number of addresses and ports which can be listened on in
2542 a frontend, as well as there is no limit to the number of "bind" statements
2543 in a frontend.
2544
2545 Example :
2546 listen http_proxy
2547 bind :80,:443
2548 bind 10.0.0.1:10080,10.0.0.1:10443
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002549 bind /var/run/ssl-frontend.sock user root mode 600 accept-proxy
Willy Tarreau0ba27502007-12-24 16:55:16 +01002550
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02002551 listen http_https_proxy
2552 bind :80
Cyril Bonté0d44fc62012-10-09 22:45:33 +02002553 bind :443 ssl crt /etc/haproxy/site.pem
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02002554
Willy Tarreau24709282013-03-10 21:32:12 +01002555 listen http_https_proxy_explicit
2556 bind ipv6@:80
2557 bind ipv4@public_ssl:443 ssl crt /etc/haproxy/site.pem
2558 bind unix@ssl-frontend.sock user root mode 600 accept-proxy
2559
Willy Tarreaudad36a32013-03-11 01:20:04 +01002560 listen external_bind_app1
William Lallemandb2f07452015-05-12 14:27:13 +02002561 bind "fd@${FD_APP1}"
Willy Tarreaudad36a32013-03-11 01:20:04 +01002562
Willy Tarreau55dcaf62015-09-27 15:03:15 +02002563 Note: regarding Linux's abstract namespace sockets, HAProxy uses the whole
2564 sun_path length is used for the address length. Some other programs
2565 such as socat use the string length only by default. Pass the option
2566 ",unix-tightsocklen=0" to any abstract socket definition in socat to
2567 make it compatible with HAProxy's.
2568
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002569 See also : "source", "option forwardfor", "unix-bind" and the PROXY protocol
Willy Tarreaub6205fd2012-09-24 12:27:33 +02002570 documentation, and section 5 about bind options.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002571
2572
Christopher Fauletff4121f2017-11-22 16:38:49 +01002573bind-process [ all | odd | even | <process_num>[-[<process_num>]] ] ...
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002574 Limit visibility of an instance to a certain set of processes numbers.
2575 May be used in sections : defaults | frontend | listen | backend
2576 yes | yes | yes | yes
2577 Arguments :
2578 all All process will see this instance. This is the default. It
2579 may be used to override a default value.
2580
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002581 odd This instance will be enabled on processes 1,3,5,...63. This
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002582 option may be combined with other numbers.
2583
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002584 even This instance will be enabled on processes 2,4,6,...64. This
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002585 option may be combined with other numbers. Do not use it
2586 with less than 2 processes otherwise some instances might be
2587 missing from all processes.
2588
Christopher Fauletff4121f2017-11-22 16:38:49 +01002589 process_num The instance will be enabled on this process number or range,
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002590 whose values must all be between 1 and 32 or 64 depending on
Christopher Fauletff4121f2017-11-22 16:38:49 +01002591 the machine's word size. Ranges can be partially defined. The
2592 higher bound can be omitted. In such case, it is replaced by
2593 the corresponding maximum value. If a proxy is bound to
2594 process numbers greater than the configured global.nbproc, it
2595 will either be forced to process #1 if a single process was
Willy Tarreau102df612014-05-07 23:56:38 +02002596 specified, or to all processes otherwise.
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002597
2598 This keyword limits binding of certain instances to certain processes. This
2599 is useful in order not to have too many processes listening to the same
2600 ports. For instance, on a dual-core machine, it might make sense to set
2601 'nbproc 2' in the global section, then distributes the listeners among 'odd'
2602 and 'even' instances.
2603
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002604 At the moment, it is not possible to reference more than 32 or 64 processes
2605 using this keyword, but this should be more than enough for most setups.
2606 Please note that 'all' really means all processes regardless of the machine's
2607 word size, and is not limited to the first 32 or 64.
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002608
Willy Tarreau6ae1ba62014-05-07 19:01:58 +02002609 Each "bind" line may further be limited to a subset of the proxy's processes,
2610 please consult the "process" bind keyword in section 5.1.
2611
Willy Tarreaub369a042014-09-16 13:21:03 +02002612 When a frontend has no explicit "bind-process" line, it tries to bind to all
2613 the processes referenced by its "bind" lines. That means that frontends can
2614 easily adapt to their listeners' processes.
2615
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002616 If some backends are referenced by frontends bound to other processes, the
2617 backend automatically inherits the frontend's processes.
2618
2619 Example :
2620 listen app_ip1
2621 bind 10.0.0.1:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02002622 bind-process odd
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002623
2624 listen app_ip2
2625 bind 10.0.0.2:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02002626 bind-process even
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002627
2628 listen management
2629 bind 10.0.0.3:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02002630 bind-process 1 2 3 4
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002631
Willy Tarreau110ecc12012-11-15 17:50:01 +01002632 listen management
2633 bind 10.0.0.4:80
2634 bind-process 1-4
2635
Willy Tarreau6ae1ba62014-05-07 19:01:58 +02002636 See also : "nbproc" in global section, and "process" in section 5.1.
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002637
2638
Jarno Huuskonen8c8c3492016-12-28 18:50:29 +02002639block { if | unless } <condition> (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +01002640 Block a layer 7 request if/unless a condition is matched
2641 May be used in sections : defaults | frontend | listen | backend
2642 no | yes | yes | yes
2643
2644 The HTTP request will be blocked very early in the layer 7 processing
2645 if/unless <condition> is matched. A 403 error will be returned if the request
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002646 is blocked. The condition has to reference ACLs (see section 7). This is
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02002647 typically used to deny access to certain sensitive resources if some
Willy Tarreau0ba27502007-12-24 16:55:16 +01002648 conditions are met or not met. There is no fixed limit to the number of
Jarno Huuskonen95b012b2017-04-06 13:59:14 +03002649 "block" statements per instance. To block connections at layer 4 (without
2650 sending a 403 error) see "tcp-request connection reject" and
2651 "tcp-request content reject" rules.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002652
Jarno Huuskonen8c8c3492016-12-28 18:50:29 +02002653 This form is deprecated, do not use it in any new configuration, use the new
2654 "http-request deny" instead.
2655
Willy Tarreau0ba27502007-12-24 16:55:16 +01002656 Example:
2657 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
2658 acl invalid_src src_port 0:1023
2659 acl local_dst hdr(host) -i localhost
Jarno Huuskonen84c51ec2017-04-03 14:20:34 +03002660 # block is deprecated. Use http-request deny instead:
2661 #block if invalid_src || local_dst
2662 http-request deny if invalid_src || local_dst
Willy Tarreau0ba27502007-12-24 16:55:16 +01002663
Jarno Huuskonen95b012b2017-04-06 13:59:14 +03002664 See also : section 7 about ACL usage, "http-request deny",
2665 "http-response deny", "tcp-request connection reject" and
2666 "tcp-request content reject".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002667
2668capture cookie <name> len <length>
2669 Capture and log a cookie in the request and in the response.
2670 May be used in sections : defaults | frontend | listen | backend
2671 no | yes | yes | no
2672 Arguments :
2673 <name> is the beginning of the name of the cookie to capture. In order
2674 to match the exact name, simply suffix the name with an equal
2675 sign ('='). The full name will appear in the logs, which is
2676 useful with application servers which adjust both the cookie name
2677 and value (eg: ASPSESSIONXXXXX).
2678
2679 <length> is the maximum number of characters to report in the logs, which
2680 include the cookie name, the equal sign and the value, all in the
2681 standard "name=value" form. The string will be truncated on the
2682 right if it exceeds <length>.
2683
2684 Only the first cookie is captured. Both the "cookie" request headers and the
2685 "set-cookie" response headers are monitored. This is particularly useful to
2686 check for application bugs causing session crossing or stealing between
2687 users, because generally the user's cookies can only change on a login page.
2688
2689 When the cookie was not presented by the client, the associated log column
2690 will report "-". When a request does not cause a cookie to be assigned by the
2691 server, a "-" is reported in the response column.
2692
2693 The capture is performed in the frontend only because it is necessary that
2694 the log format does not change for a given frontend depending on the
2695 backends. This may change in the future. Note that there can be only one
Willy Tarreau193b8c62012-11-22 00:17:38 +01002696 "capture cookie" statement in a frontend. The maximum capture length is set
2697 by the global "tune.http.cookielen" setting and defaults to 63 characters. It
2698 is not possible to specify a capture in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002699
2700 Example:
2701 capture cookie ASPSESSION len 32
2702
2703 See also : "capture request header", "capture response header" as well as
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002704 section 8 about logging.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002705
2706
2707capture request header <name> len <length>
Willy Tarreau4460d032012-11-21 23:37:37 +01002708 Capture and log the last occurrence of the specified request header.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002709 May be used in sections : defaults | frontend | listen | backend
2710 no | yes | yes | no
2711 Arguments :
2712 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002713 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +01002714 appear in the requests, with the first letter of each word in
2715 upper case. The header name will not appear in the logs, only the
2716 value is reported, but the position in the logs is respected.
2717
2718 <length> is the maximum number of characters to extract from the value and
2719 report in the logs. The string will be truncated on the right if
2720 it exceeds <length>.
2721
Willy Tarreau4460d032012-11-21 23:37:37 +01002722 The complete value of the last occurrence of the header is captured. The
Willy Tarreau0ba27502007-12-24 16:55:16 +01002723 value will be added to the logs between braces ('{}'). If multiple headers
2724 are captured, they will be delimited by a vertical bar ('|') and will appear
Willy Tarreaucc6c8912009-02-22 10:53:55 +01002725 in the same order they were declared in the configuration. Non-existent
2726 headers will be logged just as an empty string. Common uses for request
2727 header captures include the "Host" field in virtual hosting environments, the
2728 "Content-length" when uploads are supported, "User-agent" to quickly
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002729 differentiate between real users and robots, and "X-Forwarded-For" in proxied
Willy Tarreaucc6c8912009-02-22 10:53:55 +01002730 environments to find where the request came from.
2731
2732 Note that when capturing headers such as "User-agent", some spaces may be
2733 logged, making the log analysis more difficult. Thus be careful about what
2734 you log if you know your log parser is not smart enough to rely on the
2735 braces.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002736
Willy Tarreau0900abb2012-11-22 00:21:46 +01002737 There is no limit to the number of captured request headers nor to their
2738 length, though it is wise to keep them low to limit memory usage per session.
2739 In order to keep log format consistent for a same frontend, header captures
2740 can only be declared in a frontend. It is not possible to specify a capture
2741 in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002742
2743 Example:
2744 capture request header Host len 15
2745 capture request header X-Forwarded-For len 15
Cyril Bontéd1b0f7c2015-10-26 22:37:39 +01002746 capture request header Referer len 15
Willy Tarreau0ba27502007-12-24 16:55:16 +01002747
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002748 See also : "capture cookie", "capture response header" as well as section 8
Willy Tarreau0ba27502007-12-24 16:55:16 +01002749 about logging.
2750
2751
2752capture response header <name> len <length>
Willy Tarreau4460d032012-11-21 23:37:37 +01002753 Capture and log the last occurrence of the specified response header.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002754 May be used in sections : defaults | frontend | listen | backend
2755 no | yes | yes | no
2756 Arguments :
2757 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002758 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +01002759 appear in the response, with the first letter of each word in
2760 upper case. The header name will not appear in the logs, only the
2761 value is reported, but the position in the logs is respected.
2762
2763 <length> is the maximum number of characters to extract from the value and
2764 report in the logs. The string will be truncated on the right if
2765 it exceeds <length>.
2766
Willy Tarreau4460d032012-11-21 23:37:37 +01002767 The complete value of the last occurrence of the header is captured. The
Willy Tarreau0ba27502007-12-24 16:55:16 +01002768 result will be added to the logs between braces ('{}') after the captured
2769 request headers. If multiple headers are captured, they will be delimited by
2770 a vertical bar ('|') and will appear in the same order they were declared in
Willy Tarreaucc6c8912009-02-22 10:53:55 +01002771 the configuration. Non-existent headers will be logged just as an empty
2772 string. Common uses for response header captures include the "Content-length"
2773 header which indicates how many bytes are expected to be returned, the
2774 "Location" header to track redirections.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002775
Willy Tarreau0900abb2012-11-22 00:21:46 +01002776 There is no limit to the number of captured response headers nor to their
2777 length, though it is wise to keep them low to limit memory usage per session.
2778 In order to keep log format consistent for a same frontend, header captures
2779 can only be declared in a frontend. It is not possible to specify a capture
2780 in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002781
2782 Example:
2783 capture response header Content-length len 9
2784 capture response header Location len 15
2785
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002786 See also : "capture cookie", "capture request header" as well as section 8
Willy Tarreau0ba27502007-12-24 16:55:16 +01002787 about logging.
2788
2789
Cyril Bontéf0c60612010-02-06 14:44:47 +01002790clitimeout <timeout> (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +01002791 Set the maximum inactivity time on the client side.
2792 May be used in sections : defaults | frontend | listen | backend
2793 yes | yes | yes | no
2794 Arguments :
2795 <timeout> is the timeout value is specified in milliseconds by default, but
2796 can be in any other unit if the number is suffixed by the unit,
2797 as explained at the top of this document.
2798
2799 The inactivity timeout applies when the client is expected to acknowledge or
2800 send data. In HTTP mode, this timeout is particularly important to consider
2801 during the first phase, when the client sends the request, and during the
2802 response while it is reading data sent by the server. The value is specified
2803 in milliseconds by default, but can be in any other unit if the number is
2804 suffixed by the unit, as specified at the top of this document. In TCP mode
2805 (and to a lesser extent, in HTTP mode), it is highly recommended that the
2806 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002807 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01002808 losses by specifying timeouts that are slightly above multiples of 3 seconds
2809 (eg: 4 or 5 seconds).
2810
2811 This parameter is specific to frontends, but can be specified once for all in
2812 "defaults" sections. This is in fact one of the easiest solutions not to
2813 forget about it. An unspecified timeout results in an infinite timeout, which
2814 is not recommended. Such a usage is accepted and works but reports a warning
2815 during startup because it may results in accumulation of expired sessions in
2816 the system if the system's timeouts are not configured either.
2817
2818 This parameter is provided for compatibility but is currently deprecated.
2819 Please use "timeout client" instead.
2820
Willy Tarreau036fae02008-01-06 13:24:40 +01002821 See also : "timeout client", "timeout http-request", "timeout server", and
2822 "srvtimeout".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002823
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002824compression algo <algorithm> ...
2825compression type <mime type> ...
Willy Tarreau70737d12012-10-27 00:34:28 +02002826compression offload
William Lallemand82fe75c2012-10-23 10:25:10 +02002827 Enable HTTP compression.
2828 May be used in sections : defaults | frontend | listen | backend
2829 yes | yes | yes | yes
2830 Arguments :
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002831 algo is followed by the list of supported compression algorithms.
2832 type is followed by the list of MIME types that will be compressed.
2833 offload makes haproxy work as a compression offloader only (see notes).
2834
2835 The currently supported algorithms are :
Willy Tarreauc91840a2015-03-28 17:00:39 +01002836 identity this is mostly for debugging, and it was useful for developing
2837 the compression feature. Identity does not apply any change on
2838 data.
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002839
Willy Tarreauc91840a2015-03-28 17:00:39 +01002840 gzip applies gzip compression. This setting is only available when
Baptiste Assmannf085d632015-12-21 17:57:32 +01002841 support for zlib or libslz was built in.
Willy Tarreauc91840a2015-03-28 17:00:39 +01002842
2843 deflate same as "gzip", but with deflate algorithm and zlib format.
2844 Note that this algorithm has ambiguous support on many
2845 browsers and no support at all from recent ones. It is
2846 strongly recommended not to use it for anything else than
2847 experimentation. This setting is only available when support
Baptiste Assmannf085d632015-12-21 17:57:32 +01002848 for zlib or libslz was built in.
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002849
Willy Tarreauc91840a2015-03-28 17:00:39 +01002850 raw-deflate same as "deflate" without the zlib wrapper, and used as an
2851 alternative when the browser wants "deflate". All major
2852 browsers understand it and despite violating the standards,
2853 it is known to work better than "deflate", at least on MSIE
2854 and some versions of Safari. Do not use it in conjunction
2855 with "deflate", use either one or the other since both react
2856 to the same Accept-Encoding token. This setting is only
Baptiste Assmannf085d632015-12-21 17:57:32 +01002857 available when support for zlib or libslz was built in.
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002858
Dmitry Sivachenko87c208b2012-11-22 20:03:26 +04002859 Compression will be activated depending on the Accept-Encoding request
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002860 header. With identity, it does not take care of that header.
Dmitry Sivachenkoc9f3b452012-11-28 17:47:11 +04002861 If backend servers support HTTP compression, these directives
2862 will be no-op: haproxy will see the compressed response and will not
2863 compress again. If backend servers do not support HTTP compression and
2864 there is Accept-Encoding header in request, haproxy will compress the
2865 matching response.
Willy Tarreau70737d12012-10-27 00:34:28 +02002866
2867 The "offload" setting makes haproxy remove the Accept-Encoding header to
2868 prevent backend servers from compressing responses. It is strongly
2869 recommended not to do this because this means that all the compression work
2870 will be done on the single point where haproxy is located. However in some
2871 deployment scenarios, haproxy may be installed in front of a buggy gateway
Dmitry Sivachenkoc9f3b452012-11-28 17:47:11 +04002872 with broken HTTP compression implementation which can't be turned off.
2873 In that case haproxy can be used to prevent that gateway from emitting
2874 invalid payloads. In this case, simply removing the header in the
2875 configuration does not work because it applies before the header is parsed,
2876 so that prevents haproxy from compressing. The "offload" setting should
Willy Tarreauffea9fd2014-07-12 16:37:02 +02002877 then be used for such scenarios. Note: for now, the "offload" setting is
2878 ignored when set in a defaults section.
William Lallemand82fe75c2012-10-23 10:25:10 +02002879
William Lallemand05097442012-11-20 12:14:28 +01002880 Compression is disabled when:
Baptiste Assmann650d53d2013-01-05 15:44:44 +01002881 * the request does not advertise a supported compression algorithm in the
2882 "Accept-Encoding" header
2883 * the response message is not HTTP/1.1
William Lallemandd3002612012-11-26 14:34:47 +01002884 * HTTP status code is not 200
William Lallemand8bb4e342013-12-10 17:28:48 +01002885 * response header "Transfer-Encoding" contains "chunked" (Temporary
2886 Workaround)
Baptiste Assmann650d53d2013-01-05 15:44:44 +01002887 * response contain neither a "Content-Length" header nor a
2888 "Transfer-Encoding" whose last value is "chunked"
2889 * response contains a "Content-Type" header whose first value starts with
2890 "multipart"
2891 * the response contains the "no-transform" value in the "Cache-control"
2892 header
2893 * User-Agent matches "Mozilla/4" unless it is MSIE 6 with XP SP2, or MSIE 7
2894 and later
2895 * The response contains a "Content-Encoding" header, indicating that the
2896 response is already compressed (see compression offload)
William Lallemand05097442012-11-20 12:14:28 +01002897
Baptiste Assmann650d53d2013-01-05 15:44:44 +01002898 Note: The compression does not rewrite Etag headers, and does not emit the
2899 Warning header.
William Lallemand05097442012-11-20 12:14:28 +01002900
William Lallemand82fe75c2012-10-23 10:25:10 +02002901 Examples :
2902 compression algo gzip
2903 compression type text/html text/plain
Willy Tarreau0ba27502007-12-24 16:55:16 +01002904
Christopher Fauletc3fe5332016-04-07 15:30:10 +02002905
Cyril Bontéf0c60612010-02-06 14:44:47 +01002906contimeout <timeout> (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +01002907 Set the maximum time to wait for a connection attempt to a server to succeed.
2908 May be used in sections : defaults | frontend | listen | backend
2909 yes | no | yes | yes
2910 Arguments :
2911 <timeout> is the timeout value is specified in milliseconds by default, but
2912 can be in any other unit if the number is suffixed by the unit,
2913 as explained at the top of this document.
2914
2915 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002916 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreaud72758d2010-01-12 10:42:19 +01002917 cover one or several TCP packet losses by specifying timeouts that are
Willy Tarreau0ba27502007-12-24 16:55:16 +01002918 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
2919 connect timeout also presets the queue timeout to the same value if this one
2920 has not been specified. Historically, the contimeout was also used to set the
2921 tarpit timeout in a listen section, which is not possible in a pure frontend.
2922
2923 This parameter is specific to backends, but can be specified once for all in
2924 "defaults" sections. This is in fact one of the easiest solutions not to
2925 forget about it. An unspecified timeout results in an infinite timeout, which
2926 is not recommended. Such a usage is accepted and works but reports a warning
2927 during startup because it may results in accumulation of failed sessions in
2928 the system if the system's timeouts are not configured either.
2929
2930 This parameter is provided for backwards compatibility but is currently
2931 deprecated. Please use "timeout connect", "timeout queue" or "timeout tarpit"
2932 instead.
2933
2934 See also : "timeout connect", "timeout queue", "timeout tarpit",
2935 "timeout server", "contimeout".
2936
2937
Willy Tarreau55165fe2009-05-10 12:02:55 +02002938cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ]
Willy Tarreau4992dd22012-05-31 21:02:17 +02002939 [ postonly ] [ preserve ] [ httponly ] [ secure ]
2940 [ domain <domain> ]* [ maxidle <idle> ] [ maxlife <life> ]
Olivier Houchard4e694042017-03-14 20:01:29 +01002941 [ dynamic ]
Willy Tarreau0ba27502007-12-24 16:55:16 +01002942 Enable cookie-based persistence in a backend.
2943 May be used in sections : defaults | frontend | listen | backend
2944 yes | no | yes | yes
2945 Arguments :
2946 <name> is the name of the cookie which will be monitored, modified or
2947 inserted in order to bring persistence. This cookie is sent to
2948 the client via a "Set-Cookie" header in the response, and is
2949 brought back by the client in a "Cookie" header in all requests.
2950 Special care should be taken to choose a name which does not
2951 conflict with any likely application cookie. Also, if the same
2952 backends are subject to be used by the same clients (eg:
2953 HTTP/HTTPS), care should be taken to use different cookie names
2954 between all backends if persistence between them is not desired.
2955
2956 rewrite This keyword indicates that the cookie will be provided by the
2957 server and that haproxy will have to modify its value to set the
2958 server's identifier in it. This mode is handy when the management
2959 of complex combinations of "Set-cookie" and "Cache-control"
2960 headers is left to the application. The application can then
2961 decide whether or not it is appropriate to emit a persistence
Lukas Tribusf01a9cd2016-02-03 18:09:37 +01002962 cookie. Since all responses should be monitored, this mode
2963 doesn't work in HTTP tunnel mode. Unless the application
2964 behaviour is very complex and/or broken, it is advised not to
2965 start with this mode for new deployments. This keyword is
2966 incompatible with "insert" and "prefix".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002967
2968 insert This keyword indicates that the persistence cookie will have to
Willy Tarreaua79094d2010-08-31 22:54:15 +02002969 be inserted by haproxy in server responses if the client did not
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002970
Willy Tarreaua79094d2010-08-31 22:54:15 +02002971 already have a cookie that would have permitted it to access this
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002972 server. When used without the "preserve" option, if the server
2973 emits a cookie with the same name, it will be remove before
2974 processing. For this reason, this mode can be used to upgrade
2975 existing configurations running in the "rewrite" mode. The cookie
2976 will only be a session cookie and will not be stored on the
2977 client's disk. By default, unless the "indirect" option is added,
2978 the server will see the cookies emitted by the client. Due to
2979 caching effects, it is generally wise to add the "nocache" or
2980 "postonly" keywords (see below). The "insert" keyword is not
2981 compatible with "rewrite" and "prefix".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002982
2983 prefix This keyword indicates that instead of relying on a dedicated
2984 cookie for the persistence, an existing one will be completed.
2985 This may be needed in some specific environments where the client
2986 does not support more than one single cookie and the application
2987 already needs it. In this case, whenever the server sets a cookie
2988 named <name>, it will be prefixed with the server's identifier
2989 and a delimiter. The prefix will be removed from all client
2990 requests so that the server still finds the cookie it emitted.
2991 Since all requests and responses are subject to being modified,
Lukas Tribusf01a9cd2016-02-03 18:09:37 +01002992 this mode doesn't work with tunnel mode. The "prefix" keyword is
Willy Tarreau37229df2011-10-17 12:24:55 +02002993 not compatible with "rewrite" and "insert". Note: it is highly
2994 recommended not to use "indirect" with "prefix", otherwise server
2995 cookie updates would not be sent to clients.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002996
Willy Tarreaua79094d2010-08-31 22:54:15 +02002997 indirect When this option is specified, no cookie will be emitted to a
2998 client which already has a valid one for the server which has
2999 processed the request. If the server sets such a cookie itself,
Willy Tarreauba4c5be2010-10-23 12:46:42 +02003000 it will be removed, unless the "preserve" option is also set. In
3001 "insert" mode, this will additionally remove cookies from the
3002 requests transmitted to the server, making the persistence
3003 mechanism totally transparent from an application point of view.
Willy Tarreau37229df2011-10-17 12:24:55 +02003004 Note: it is highly recommended not to use "indirect" with
3005 "prefix", otherwise server cookie updates would not be sent to
3006 clients.
Willy Tarreau0ba27502007-12-24 16:55:16 +01003007
3008 nocache This option is recommended in conjunction with the insert mode
3009 when there is a cache between the client and HAProxy, as it
3010 ensures that a cacheable response will be tagged non-cacheable if
3011 a cookie needs to be inserted. This is important because if all
3012 persistence cookies are added on a cacheable home page for
3013 instance, then all customers will then fetch the page from an
3014 outer cache and will all share the same persistence cookie,
3015 leading to one server receiving much more traffic than others.
3016 See also the "insert" and "postonly" options.
3017
3018 postonly This option ensures that cookie insertion will only be performed
3019 on responses to POST requests. It is an alternative to the
3020 "nocache" option, because POST responses are not cacheable, so
3021 this ensures that the persistence cookie will never get cached.
3022 Since most sites do not need any sort of persistence before the
3023 first POST which generally is a login request, this is a very
3024 efficient method to optimize caching without risking to find a
3025 persistence cookie in the cache.
3026 See also the "insert" and "nocache" options.
3027
Willy Tarreauba4c5be2010-10-23 12:46:42 +02003028 preserve This option may only be used with "insert" and/or "indirect". It
3029 allows the server to emit the persistence cookie itself. In this
3030 case, if a cookie is found in the response, haproxy will leave it
3031 untouched. This is useful in order to end persistence after a
3032 logout request for instance. For this, the server just has to
3033 emit a cookie with an invalid value (eg: empty) or with a date in
3034 the past. By combining this mechanism with the "disable-on-404"
3035 check option, it is possible to perform a completely graceful
3036 shutdown because users will definitely leave the server after
3037 they logout.
3038
Willy Tarreau4992dd22012-05-31 21:02:17 +02003039 httponly This option tells haproxy to add an "HttpOnly" cookie attribute
3040 when a cookie is inserted. This attribute is used so that a
3041 user agent doesn't share the cookie with non-HTTP components.
3042 Please check RFC6265 for more information on this attribute.
3043
3044 secure This option tells haproxy to add a "Secure" cookie attribute when
3045 a cookie is inserted. This attribute is used so that a user agent
3046 never emits this cookie over non-secure channels, which means
3047 that a cookie learned with this flag will be presented only over
3048 SSL/TLS connections. Please check RFC6265 for more information on
3049 this attribute.
3050
Krzysztof Piotr Oledzkiefe3b6f2008-05-23 23:49:32 +02003051 domain This option allows to specify the domain at which a cookie is
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003052 inserted. It requires exactly one parameter: a valid domain
Willy Tarreau68a897b2009-12-03 23:28:34 +01003053 name. If the domain begins with a dot, the browser is allowed to
3054 use it for any host ending with that name. It is also possible to
3055 specify several domain names by invoking this option multiple
3056 times. Some browsers might have small limits on the number of
3057 domains, so be careful when doing that. For the record, sending
3058 10 domains to MSIE 6 or Firefox 2 works as expected.
Krzysztof Piotr Oledzkiefe3b6f2008-05-23 23:49:32 +02003059
Willy Tarreau996a92c2010-10-13 19:30:47 +02003060 maxidle This option allows inserted cookies to be ignored after some idle
3061 time. It only works with insert-mode cookies. When a cookie is
3062 sent to the client, the date this cookie was emitted is sent too.
3063 Upon further presentations of this cookie, if the date is older
3064 than the delay indicated by the parameter (in seconds), it will
3065 be ignored. Otherwise, it will be refreshed if needed when the
3066 response is sent to the client. This is particularly useful to
3067 prevent users who never close their browsers from remaining for
3068 too long on the same server (eg: after a farm size change). When
3069 this option is set and a cookie has no date, it is always
3070 accepted, but gets refreshed in the response. This maintains the
3071 ability for admins to access their sites. Cookies that have a
3072 date in the future further than 24 hours are ignored. Doing so
3073 lets admins fix timezone issues without risking kicking users off
3074 the site.
3075
3076 maxlife This option allows inserted cookies to be ignored after some life
3077 time, whether they're in use or not. It only works with insert
3078 mode cookies. When a cookie is first sent to the client, the date
3079 this cookie was emitted is sent too. Upon further presentations
3080 of this cookie, if the date is older than the delay indicated by
3081 the parameter (in seconds), it will be ignored. If the cookie in
3082 the request has no date, it is accepted and a date will be set.
3083 Cookies that have a date in the future further than 24 hours are
3084 ignored. Doing so lets admins fix timezone issues without risking
3085 kicking users off the site. Contrary to maxidle, this value is
3086 not refreshed, only the first visit date counts. Both maxidle and
3087 maxlife may be used at the time. This is particularly useful to
3088 prevent users who never close their browsers from remaining for
3089 too long on the same server (eg: after a farm size change). This
3090 is stronger than the maxidle method in that it forces a
3091 redispatch after some absolute delay.
3092
Olivier Houchard4e694042017-03-14 20:01:29 +01003093 dynamic Activate dynamic cookies. When used, a session cookie is
3094 dynamically created for each server, based on the IP and port
3095 of the server, and a secret key, specified in the
3096 "dynamic-cookie-key" backend directive.
3097 The cookie will be regenerated each time the IP address change,
3098 and is only generated for IPv4/IPv6.
3099
Willy Tarreau0ba27502007-12-24 16:55:16 +01003100 There can be only one persistence cookie per HTTP backend, and it can be
3101 declared in a defaults section. The value of the cookie will be the value
3102 indicated after the "cookie" keyword in a "server" statement. If no cookie
3103 is declared for a given server, the cookie is not set.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003104
Willy Tarreau0ba27502007-12-24 16:55:16 +01003105 Examples :
3106 cookie JSESSIONID prefix
3107 cookie SRV insert indirect nocache
3108 cookie SRV insert postonly indirect
Willy Tarreau996a92c2010-10-13 19:30:47 +02003109 cookie SRV insert indirect nocache maxidle 30m maxlife 8h
Willy Tarreau0ba27502007-12-24 16:55:16 +01003110
Willy Tarreau294d0f02015-08-10 19:40:12 +02003111 See also : "balance source", "capture cookie", "server" and "ignore-persist".
Willy Tarreau0ba27502007-12-24 16:55:16 +01003112
Willy Tarreau983e01e2010-01-11 18:42:06 +01003113
Thierry FOURNIERa0a1b752015-05-26 17:44:32 +02003114declare capture [ request | response ] len <length>
3115 Declares a capture slot.
3116 May be used in sections : defaults | frontend | listen | backend
3117 no | yes | yes | no
3118 Arguments:
3119 <length> is the length allowed for the capture.
3120
3121 This declaration is only available in the frontend or listen section, but the
3122 reserved slot can be used in the backends. The "request" keyword allocates a
3123 capture slot for use in the request, and "response" allocates a capture slot
3124 for use in the response.
3125
3126 See also: "capture-req", "capture-res" (sample converters),
Baptiste Assmann5ac425c2015-10-21 23:13:46 +02003127 "capture.req.hdr", "capture.res.hdr" (sample fetches),
Thierry FOURNIERa0a1b752015-05-26 17:44:32 +02003128 "http-request capture" and "http-response capture".
3129
3130
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01003131default-server [param*]
3132 Change default options for a server in a backend
3133 May be used in sections : defaults | frontend | listen | backend
3134 yes | no | yes | yes
3135 Arguments:
Willy Tarreau983e01e2010-01-11 18:42:06 +01003136 <param*> is a list of parameters for this server. The "default-server"
3137 keyword accepts an important number of options and has a complete
3138 section dedicated to it. Please refer to section 5 for more
3139 details.
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01003140
Willy Tarreau983e01e2010-01-11 18:42:06 +01003141 Example :
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01003142 default-server inter 1000 weight 13
3143
3144 See also: "server" and section 5 about server options
Willy Tarreau0ba27502007-12-24 16:55:16 +01003145
Willy Tarreau983e01e2010-01-11 18:42:06 +01003146
Willy Tarreau0ba27502007-12-24 16:55:16 +01003147default_backend <backend>
3148 Specify the backend to use when no "use_backend" rule has been matched.
3149 May be used in sections : defaults | frontend | listen | backend
3150 yes | yes | yes | no
3151 Arguments :
3152 <backend> is the name of the backend to use.
3153
3154 When doing content-switching between frontend and backends using the
3155 "use_backend" keyword, it is often useful to indicate which backend will be
3156 used when no rule has matched. It generally is the dynamic backend which
3157 will catch all undetermined requests.
3158
Willy Tarreau0ba27502007-12-24 16:55:16 +01003159 Example :
3160
3161 use_backend dynamic if url_dyn
3162 use_backend static if url_css url_img extension_img
3163 default_backend dynamic
3164
Willy Tarreau98d04852015-05-26 12:18:29 +02003165 See also : "use_backend"
Willy Tarreau2769aa02007-12-27 18:26:09 +01003166
Willy Tarreau0ba27502007-12-24 16:55:16 +01003167
Baptiste Assmann27f51342013-10-09 06:51:49 +02003168description <string>
3169 Describe a listen, frontend or backend.
3170 May be used in sections : defaults | frontend | listen | backend
3171 no | yes | yes | yes
3172 Arguments : string
3173
3174 Allows to add a sentence to describe the related object in the HAProxy HTML
3175 stats page. The description will be printed on the right of the object name
3176 it describes.
3177 No need to backslash spaces in the <string> arguments.
3178
3179
Willy Tarreau0ba27502007-12-24 16:55:16 +01003180disabled
3181 Disable a proxy, frontend or backend.
3182 May be used in sections : defaults | frontend | listen | backend
3183 yes | yes | yes | yes
3184 Arguments : none
3185
3186 The "disabled" keyword is used to disable an instance, mainly in order to
3187 liberate a listening port or to temporarily disable a service. The instance
3188 will still be created and its configuration will be checked, but it will be
3189 created in the "stopped" state and will appear as such in the statistics. It
3190 will not receive any traffic nor will it send any health-checks or logs. It
3191 is possible to disable many instances at once by adding the "disabled"
3192 keyword in a "defaults" section.
3193
3194 See also : "enabled"
3195
3196
Willy Tarreau5ce94572010-06-07 14:35:41 +02003197dispatch <address>:<port>
3198 Set a default server address
3199 May be used in sections : defaults | frontend | listen | backend
3200 no | no | yes | yes
Cyril Bonté108cf6e2012-04-21 23:30:29 +02003201 Arguments :
Willy Tarreau5ce94572010-06-07 14:35:41 +02003202
3203 <address> is the IPv4 address of the default server. Alternatively, a
3204 resolvable hostname is supported, but this name will be resolved
3205 during start-up.
3206
3207 <ports> is a mandatory port specification. All connections will be sent
3208 to this port, and it is not permitted to use port offsets as is
3209 possible with normal servers.
3210
Willy Tarreau787aed52011-04-15 06:45:37 +02003211 The "dispatch" keyword designates a default server for use when no other
Willy Tarreau5ce94572010-06-07 14:35:41 +02003212 server can take the connection. In the past it was used to forward non
3213 persistent connections to an auxiliary load balancer. Due to its simple
3214 syntax, it has also been used for simple TCP relays. It is recommended not to
3215 use it for more clarity, and to use the "server" directive instead.
3216
3217 See also : "server"
3218
Olivier Houchard4e694042017-03-14 20:01:29 +01003219
3220dynamic-cookie-key <string>
3221 Set the dynamic cookie secret key for a backend.
3222 May be used in sections : defaults | frontend | listen | backend
3223 yes | no | yes | yes
3224 Arguments : The secret key to be used.
3225
3226 When dynamic cookies are enabled (see the "dynamic" directive for cookie),
3227 a dynamic cookie is created for each server (unless one is explicitely
3228 specified on the "server" line), using a hash of the IP address of the
3229 server, the TCP port, and the secret key.
3230 That way, we can ensure session persistence accross multiple load-balancers,
3231 even if servers are dynamically added or removed.
Willy Tarreau5ce94572010-06-07 14:35:41 +02003232
Willy Tarreau0ba27502007-12-24 16:55:16 +01003233enabled
3234 Enable a proxy, frontend or backend.
3235 May be used in sections : defaults | frontend | listen | backend
3236 yes | yes | yes | yes
3237 Arguments : none
3238
3239 The "enabled" keyword is used to explicitly enable an instance, when the
3240 defaults has been set to "disabled". This is very rarely used.
3241
3242 See also : "disabled"
3243
3244
3245errorfile <code> <file>
3246 Return a file contents instead of errors generated by HAProxy
3247 May be used in sections : defaults | frontend | listen | backend
3248 yes | yes | yes | yes
3249 Arguments :
3250 <code> is the HTTP status code. Currently, HAProxy is capable of
Olivier Houchard51a76d82017-10-02 16:12:07 +02003251 generating codes 200, 400, 403, 405, 408, 425, 429, 500, 502,
3252 503, and 504.
Willy Tarreau0ba27502007-12-24 16:55:16 +01003253
3254 <file> designates a file containing the full HTTP response. It is
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003255 recommended to follow the common practice of appending ".http" to
Willy Tarreau0ba27502007-12-24 16:55:16 +01003256 the filename so that people do not confuse the response with HTML
Willy Tarreau59140a22009-02-22 12:02:30 +01003257 error pages, and to use absolute paths, since files are read
3258 before any chroot is performed.
Willy Tarreau0ba27502007-12-24 16:55:16 +01003259
3260 It is important to understand that this keyword is not meant to rewrite
3261 errors returned by the server, but errors detected and returned by HAProxy.
3262 This is why the list of supported errors is limited to a small set.
3263
Willy Tarreauae94d4d2011-05-11 16:28:49 +02003264 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
3265
Willy Tarreau0ba27502007-12-24 16:55:16 +01003266 The files are returned verbatim on the TCP socket. This allows any trick such
3267 as redirections to another URL or site, as well as tricks to clean cookies,
3268 force enable or disable caching, etc... The package provides default error
3269 files returning the same contents as default errors.
3270
Willy Tarreau59140a22009-02-22 12:02:30 +01003271 The files should not exceed the configured buffer size (BUFSIZE), which
3272 generally is 8 or 16 kB, otherwise they will be truncated. It is also wise
3273 not to put any reference to local contents (eg: images) in order to avoid
3274 loops between the client and HAProxy when all servers are down, causing an
3275 error to be returned instead of an image. For better HTTP compliance, it is
3276 recommended that all header lines end with CR-LF and not LF alone.
3277
Willy Tarreau0ba27502007-12-24 16:55:16 +01003278 The files are read at the same time as the configuration and kept in memory.
3279 For this reason, the errors continue to be returned even when the process is
3280 chrooted, and no file change is considered while the process is running. A
Willy Tarreauc27debf2008-01-06 08:57:02 +01003281 simple method for developing those files consists in associating them to the
Willy Tarreau0ba27502007-12-24 16:55:16 +01003282 403 status code and interrogating a blocked URL.
3283
3284 See also : "errorloc", "errorloc302", "errorloc303"
3285
Willy Tarreau59140a22009-02-22 12:02:30 +01003286 Example :
3287 errorfile 400 /etc/haproxy/errorfiles/400badreq.http
Willy Tarreau989222a2016-01-15 10:26:26 +01003288 errorfile 408 /dev/null # work around Chrome pre-connect bug
Willy Tarreau59140a22009-02-22 12:02:30 +01003289 errorfile 403 /etc/haproxy/errorfiles/403forbid.http
3290 errorfile 503 /etc/haproxy/errorfiles/503sorry.http
3291
Willy Tarreau2769aa02007-12-27 18:26:09 +01003292
3293errorloc <code> <url>
3294errorloc302 <code> <url>
3295 Return an HTTP redirection to a URL instead of errors generated by HAProxy
3296 May be used in sections : defaults | frontend | listen | backend
3297 yes | yes | yes | yes
3298 Arguments :
3299 <code> is the HTTP status code. Currently, HAProxy is capable of
Olivier Houchard51a76d82017-10-02 16:12:07 +02003300 generating codes 200, 400, 403, 405, 408, 425, 429, 500, 502,
3301 503, and 504.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003302
3303 <url> it is the exact contents of the "Location" header. It may contain
3304 either a relative URI to an error page hosted on the same site,
3305 or an absolute URI designating an error page on another site.
3306 Special care should be given to relative URIs to avoid redirect
3307 loops if the URI itself may generate the same error (eg: 500).
3308
3309 It is important to understand that this keyword is not meant to rewrite
3310 errors returned by the server, but errors detected and returned by HAProxy.
3311 This is why the list of supported errors is limited to a small set.
3312
Willy Tarreauae94d4d2011-05-11 16:28:49 +02003313 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
3314
Willy Tarreau2769aa02007-12-27 18:26:09 +01003315 Note that both keyword return the HTTP 302 status code, which tells the
3316 client to fetch the designated URL using the same HTTP method. This can be
3317 quite problematic in case of non-GET methods such as POST, because the URL
3318 sent to the client might not be allowed for something other than GET. To
Willy Tarreau989222a2016-01-15 10:26:26 +01003319 work around this problem, please use "errorloc303" which send the HTTP 303
Willy Tarreau2769aa02007-12-27 18:26:09 +01003320 status code, indicating to the client that the URL must be fetched with a GET
3321 request.
3322
3323 See also : "errorfile", "errorloc303"
3324
3325
3326errorloc303 <code> <url>
3327 Return an HTTP redirection to a URL instead of errors generated by HAProxy
3328 May be used in sections : defaults | frontend | listen | backend
3329 yes | yes | yes | yes
3330 Arguments :
3331 <code> is the HTTP status code. Currently, HAProxy is capable of
Olivier Houchard51a76d82017-10-02 16:12:07 +02003332 generating codes 200, 400, 403, 405, 408, 425, 429, 500, 502,
3333 503, and 504.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003334
3335 <url> it is the exact contents of the "Location" header. It may contain
3336 either a relative URI to an error page hosted on the same site,
3337 or an absolute URI designating an error page on another site.
3338 Special care should be given to relative URIs to avoid redirect
3339 loops if the URI itself may generate the same error (eg: 500).
3340
3341 It is important to understand that this keyword is not meant to rewrite
3342 errors returned by the server, but errors detected and returned by HAProxy.
3343 This is why the list of supported errors is limited to a small set.
3344
Willy Tarreauae94d4d2011-05-11 16:28:49 +02003345 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
3346
Willy Tarreau2769aa02007-12-27 18:26:09 +01003347 Note that both keyword return the HTTP 303 status code, which tells the
3348 client to fetch the designated URL using the same HTTP GET method. This
3349 solves the usual problems associated with "errorloc" and the 302 code. It is
3350 possible that some very old browsers designed before HTTP/1.1 do not support
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003351 it, but no such problem has been reported till now.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003352
3353 See also : "errorfile", "errorloc", "errorloc302"
3354
3355
Simon Horman51a1cf62015-02-03 13:00:44 +09003356email-alert from <emailaddr>
3357 Declare the from email address to be used in both the envelope and header
3358 of email alerts. This is the address that email alerts are sent from.
3359 May be used in sections: defaults | frontend | listen | backend
3360 yes | yes | yes | yes
3361
3362 Arguments :
3363
3364 <emailaddr> is the from email address to use when sending email alerts
3365
3366 Also requires "email-alert mailers" and "email-alert to" to be set
3367 and if so sending email alerts is enabled for the proxy.
3368
Simon Horman64e34162015-02-06 11:11:57 +09003369 See also : "email-alert level", "email-alert mailers",
Cyril Bonté307ee1e2015-09-28 23:16:06 +02003370 "email-alert myhostname", "email-alert to", section 3.6 about
3371 mailers.
Simon Horman64e34162015-02-06 11:11:57 +09003372
3373
3374email-alert level <level>
3375 Declare the maximum log level of messages for which email alerts will be
3376 sent. This acts as a filter on the sending of email alerts.
3377 May be used in sections: defaults | frontend | listen | backend
3378 yes | yes | yes | yes
3379
3380 Arguments :
3381
3382 <level> One of the 8 syslog levels:
3383 emerg alert crit err warning notice info debug
3384 The above syslog levels are ordered from lowest to highest.
3385
3386 By default level is alert
3387
3388 Also requires "email-alert from", "email-alert mailers" and
3389 "email-alert to" to be set and if so sending email alerts is enabled
3390 for the proxy.
3391
Simon Horman1421e212015-04-30 13:10:35 +09003392 Alerts are sent when :
3393
3394 * An un-paused server is marked as down and <level> is alert or lower
3395 * A paused server is marked as down and <level> is notice or lower
3396 * A server is marked as up or enters the drain state and <level>
3397 is notice or lower
3398 * "option log-health-checks" is enabled, <level> is info or lower,
3399 and a health check status update occurs
3400
Simon Horman64e34162015-02-06 11:11:57 +09003401 See also : "email-alert from", "email-alert mailers",
3402 "email-alert myhostname", "email-alert to",
Simon Horman51a1cf62015-02-03 13:00:44 +09003403 section 3.6 about mailers.
3404
3405
3406email-alert mailers <mailersect>
3407 Declare the mailers to be used when sending email alerts
3408 May be used in sections: defaults | frontend | listen | backend
3409 yes | yes | yes | yes
3410
3411 Arguments :
3412
3413 <mailersect> is the name of the mailers section to send email alerts.
3414
3415 Also requires "email-alert from" and "email-alert to" to be set
3416 and if so sending email alerts is enabled for the proxy.
3417
Simon Horman64e34162015-02-06 11:11:57 +09003418 See also : "email-alert from", "email-alert level", "email-alert myhostname",
3419 "email-alert to", section 3.6 about mailers.
Simon Horman51a1cf62015-02-03 13:00:44 +09003420
3421
3422email-alert myhostname <hostname>
3423 Declare the to hostname address to be used when communicating with
3424 mailers.
3425 May be used in sections: defaults | frontend | listen | backend
3426 yes | yes | yes | yes
3427
3428 Arguments :
3429
Baptiste Assmann738bad92015-12-21 15:27:53 +01003430 <hostname> is the hostname to use when communicating with mailers
Simon Horman51a1cf62015-02-03 13:00:44 +09003431
3432 By default the systems hostname is used.
3433
3434 Also requires "email-alert from", "email-alert mailers" and
3435 "email-alert to" to be set and if so sending email alerts is enabled
3436 for the proxy.
3437
Simon Horman64e34162015-02-06 11:11:57 +09003438 See also : "email-alert from", "email-alert level", "email-alert mailers",
3439 "email-alert to", section 3.6 about mailers.
Simon Horman51a1cf62015-02-03 13:00:44 +09003440
3441
3442email-alert to <emailaddr>
3443 Declare both the recipent address in the envelope and to address in the
3444 header of email alerts. This is the address that email alerts are sent to.
3445 May be used in sections: defaults | frontend | listen | backend
3446 yes | yes | yes | yes
3447
3448 Arguments :
3449
3450 <emailaddr> is the to email address to use when sending email alerts
3451
3452 Also requires "email-alert mailers" and "email-alert to" to be set
3453 and if so sending email alerts is enabled for the proxy.
3454
Simon Horman64e34162015-02-06 11:11:57 +09003455 See also : "email-alert from", "email-alert level", "email-alert mailers",
Simon Horman51a1cf62015-02-03 13:00:44 +09003456 "email-alert myhostname", section 3.6 about mailers.
3457
3458
Willy Tarreau4de91492010-01-22 19:10:05 +01003459force-persist { if | unless } <condition>
3460 Declare a condition to force persistence on down servers
3461 May be used in sections: defaults | frontend | listen | backend
3462 no | yes | yes | yes
3463
3464 By default, requests are not dispatched to down servers. It is possible to
3465 force this using "option persist", but it is unconditional and redispatches
3466 to a valid server if "option redispatch" is set. That leaves with very little
3467 possibilities to force some requests to reach a server which is artificially
3468 marked down for maintenance operations.
3469
3470 The "force-persist" statement allows one to declare various ACL-based
3471 conditions which, when met, will cause a request to ignore the down status of
3472 a server and still try to connect to it. That makes it possible to start a
3473 server, still replying an error to the health checks, and run a specially
3474 configured browser to test the service. Among the handy methods, one could
3475 use a specific source IP address, or a specific cookie. The cookie also has
3476 the advantage that it can easily be added/removed on the browser from a test
3477 page. Once the service is validated, it is then possible to open the service
3478 to the world by returning a valid response to health checks.
3479
3480 The forced persistence is enabled when an "if" condition is met, or unless an
3481 "unless" condition is met. The final redispatch is always disabled when this
3482 is used.
3483
Cyril Bonté0d4bf012010-04-25 23:21:46 +02003484 See also : "option redispatch", "ignore-persist", "persist",
Cyril Bontéa8e7bbc2010-04-25 22:29:29 +02003485 and section 7 about ACL usage.
Willy Tarreau4de91492010-01-22 19:10:05 +01003486
Christopher Fauletc3fe5332016-04-07 15:30:10 +02003487
3488filter <name> [param*]
3489 Add the filter <name> in the filter list attached to the proxy.
3490 May be used in sections : defaults | frontend | listen | backend
3491 no | yes | yes | yes
3492 Arguments :
3493 <name> is the name of the filter. Officially supported filters are
3494 referenced in section 9.
3495
Tim Düsterhus4896c442016-11-29 02:15:19 +01003496 <param*> is a list of parameters accepted by the filter <name>. The
Christopher Fauletc3fe5332016-04-07 15:30:10 +02003497 parsing of these parameters are the responsibility of the
Tim Düsterhus4896c442016-11-29 02:15:19 +01003498 filter. Please refer to the documentation of the corresponding
3499 filter (section 9) for all details on the supported parameters.
Christopher Fauletc3fe5332016-04-07 15:30:10 +02003500
3501 Multiple occurrences of the filter line can be used for the same proxy. The
3502 same filter can be referenced many times if needed.
3503
3504 Example:
3505 listen
3506 bind *:80
3507
3508 filter trace name BEFORE-HTTP-COMP
3509 filter compression
3510 filter trace name AFTER-HTTP-COMP
3511
3512 compression algo gzip
3513 compression offload
3514
3515 server srv1 192.168.0.1:80
3516
3517 See also : section 9.
3518
Willy Tarreau4de91492010-01-22 19:10:05 +01003519
Willy Tarreau2769aa02007-12-27 18:26:09 +01003520fullconn <conns>
3521 Specify at what backend load the servers will reach their maxconn
3522 May be used in sections : defaults | frontend | listen | backend
3523 yes | no | yes | yes
3524 Arguments :
3525 <conns> is the number of connections on the backend which will make the
3526 servers use the maximal number of connections.
3527
Willy Tarreau198a7442008-01-17 12:05:32 +01003528 When a server has a "maxconn" parameter specified, it means that its number
Willy Tarreau2769aa02007-12-27 18:26:09 +01003529 of concurrent connections will never go higher. Additionally, if it has a
Willy Tarreau198a7442008-01-17 12:05:32 +01003530 "minconn" parameter, it indicates a dynamic limit following the backend's
Willy Tarreau2769aa02007-12-27 18:26:09 +01003531 load. The server will then always accept at least <minconn> connections,
3532 never more than <maxconn>, and the limit will be on the ramp between both
3533 values when the backend has less than <conns> concurrent connections. This
3534 makes it possible to limit the load on the servers during normal loads, but
3535 push it further for important loads without overloading the servers during
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003536 exceptional loads.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003537
Willy Tarreaufbb78422011-06-05 15:38:35 +02003538 Since it's hard to get this value right, haproxy automatically sets it to
3539 10% of the sum of the maxconns of all frontends that may branch to this
Bertrand Jacquin702d44f2013-11-19 11:43:06 +01003540 backend (based on "use_backend" and "default_backend" rules). That way it's
3541 safe to leave it unset. However, "use_backend" involving dynamic names are
3542 not counted since there is no way to know if they could match or not.
Willy Tarreaufbb78422011-06-05 15:38:35 +02003543
Willy Tarreau2769aa02007-12-27 18:26:09 +01003544 Example :
3545 # The servers will accept between 100 and 1000 concurrent connections each
3546 # and the maximum of 1000 will be reached when the backend reaches 10000
3547 # connections.
3548 backend dynamic
3549 fullconn 10000
3550 server srv1 dyn1:80 minconn 100 maxconn 1000
3551 server srv2 dyn2:80 minconn 100 maxconn 1000
3552
3553 See also : "maxconn", "server"
3554
3555
3556grace <time>
3557 Maintain a proxy operational for some time after a soft stop
3558 May be used in sections : defaults | frontend | listen | backend
Cyril Bonté99ed3272010-01-24 23:29:44 +01003559 yes | yes | yes | yes
Willy Tarreau2769aa02007-12-27 18:26:09 +01003560 Arguments :
3561 <time> is the time (by default in milliseconds) for which the instance
3562 will remain operational with the frontend sockets still listening
3563 when a soft-stop is received via the SIGUSR1 signal.
3564
3565 This may be used to ensure that the services disappear in a certain order.
3566 This was designed so that frontends which are dedicated to monitoring by an
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003567 external equipment fail immediately while other ones remain up for the time
Willy Tarreau2769aa02007-12-27 18:26:09 +01003568 needed by the equipment to detect the failure.
3569
3570 Note that currently, there is very little benefit in using this parameter,
3571 and it may in fact complicate the soft-reconfiguration process more than
3572 simplify it.
3573
Willy Tarreau0ba27502007-12-24 16:55:16 +01003574
Andrew Rodland17be45e2016-10-25 17:04:12 -04003575hash-balance-factor <factor>
3576 Specify the balancing factor for bounded-load consistent hashing
3577 May be used in sections : defaults | frontend | listen | backend
3578 yes | no | no | yes
3579 Arguments :
3580 <factor> is the control for the maximum number of concurrent requests to
3581 send to a server, expressed as a percentage of the average number
3582 of concurrent requests across all of the active servers.
3583
3584 Specifying a "hash-balance-factor" for a server with "hash-type consistent"
3585 enables an algorithm that prevents any one server from getting too many
3586 requests at once, even if some hash buckets receive many more requests than
3587 others. Setting <factor> to 0 (the default) disables the feature. Otherwise,
3588 <factor> is a percentage greater than 100. For example, if <factor> is 150,
3589 then no server will be allowed to have a load more than 1.5 times the average.
3590 If server weights are used, they will be respected.
3591
3592 If the first-choice server is disqualified, the algorithm will choose another
3593 server based on the request hash, until a server with additional capacity is
3594 found. A higher <factor> allows more imbalance between the servers, while a
3595 lower <factor> means that more servers will be checked on average, affecting
3596 performance. Reasonable values are from 125 to 200.
3597
3598 See also : "balance" and "hash-type".
3599
3600
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003601hash-type <method> <function> <modifier>
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003602 Specify a method to use for mapping hashes to servers
3603 May be used in sections : defaults | frontend | listen | backend
3604 yes | no | yes | yes
3605 Arguments :
Bhaskar98634f02013-10-29 23:30:51 -04003606 <method> is the method used to select a server from the hash computed by
3607 the <function> :
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003608
Bhaskar98634f02013-10-29 23:30:51 -04003609 map-based the hash table is a static array containing all alive servers.
3610 The hashes will be very smooth, will consider weights, but
3611 will be static in that weight changes while a server is up
3612 will be ignored. This means that there will be no slow start.
3613 Also, since a server is selected by its position in the array,
3614 most mappings are changed when the server count changes. This
3615 means that when a server goes up or down, or when a server is
3616 added to a farm, most connections will be redistributed to
3617 different servers. This can be inconvenient with caches for
3618 instance.
Willy Tarreau798a39c2010-11-24 15:04:29 +01003619
Bhaskar98634f02013-10-29 23:30:51 -04003620 consistent the hash table is a tree filled with many occurrences of each
3621 server. The hash key is looked up in the tree and the closest
3622 server is chosen. This hash is dynamic, it supports changing
3623 weights while the servers are up, so it is compatible with the
3624 slow start feature. It has the advantage that when a server
3625 goes up or down, only its associations are moved. When a
3626 server is added to the farm, only a few part of the mappings
3627 are redistributed, making it an ideal method for caches.
3628 However, due to its principle, the distribution will never be
3629 very smooth and it may sometimes be necessary to adjust a
3630 server's weight or its ID to get a more balanced distribution.
3631 In order to get the same distribution on multiple load
3632 balancers, it is important that all servers have the exact
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003633 same IDs. Note: consistent hash uses sdbm and avalanche if no
3634 hash function is specified.
Bhaskar98634f02013-10-29 23:30:51 -04003635
3636 <function> is the hash function to be used :
3637
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03003638 sdbm this function was created initially for sdbm (a public-domain
Bhaskar98634f02013-10-29 23:30:51 -04003639 reimplementation of ndbm) database library. It was found to do
3640 well in scrambling bits, causing better distribution of the keys
3641 and fewer splits. It also happens to be a good general hashing
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003642 function with good distribution, unless the total server weight
3643 is a multiple of 64, in which case applying the avalanche
3644 modifier may help.
Bhaskar98634f02013-10-29 23:30:51 -04003645
3646 djb2 this function was first proposed by Dan Bernstein many years ago
3647 on comp.lang.c. Studies have shown that for certain workload this
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003648 function provides a better distribution than sdbm. It generally
3649 works well with text-based inputs though it can perform extremely
3650 poorly with numeric-only input or when the total server weight is
3651 a multiple of 33, unless the avalanche modifier is also used.
3652
Willy Tarreaua0f42712013-11-14 14:30:35 +01003653 wt6 this function was designed for haproxy while testing other
3654 functions in the past. It is not as smooth as the other ones, but
3655 is much less sensible to the input data set or to the number of
3656 servers. It can make sense as an alternative to sdbm+avalanche or
3657 djb2+avalanche for consistent hashing or when hashing on numeric
3658 data such as a source IP address or a visitor identifier in a URL
3659 parameter.
3660
Willy Tarreau324f07f2015-01-20 19:44:50 +01003661 crc32 this is the most common CRC32 implementation as used in Ethernet,
3662 gzip, PNG, etc. It is slower than the other ones but may provide
3663 a better distribution or less predictable results especially when
3664 used on strings.
3665
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003666 <modifier> indicates an optional method applied after hashing the key :
3667
3668 avalanche This directive indicates that the result from the hash
3669 function above should not be used in its raw form but that
3670 a 4-byte full avalanche hash must be applied first. The
3671 purpose of this step is to mix the resulting bits from the
3672 previous hash in order to avoid any undesired effect when
3673 the input contains some limited values or when the number of
3674 servers is a multiple of one of the hash's components (64
3675 for SDBM, 33 for DJB2). Enabling avalanche tends to make the
3676 result less predictable, but it's also not as smooth as when
3677 using the original function. Some testing might be needed
3678 with some workloads. This hash is one of the many proposed
3679 by Bob Jenkins.
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003680
Bhaskar98634f02013-10-29 23:30:51 -04003681 The default hash type is "map-based" and is recommended for most usages. The
3682 default function is "sdbm", the selection of a function should be based on
3683 the range of the values being hashed.
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003684
Andrew Rodland17be45e2016-10-25 17:04:12 -04003685 See also : "balance", "hash-balance-factor", "server"
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003686
3687
Willy Tarreau0ba27502007-12-24 16:55:16 +01003688http-check disable-on-404
3689 Enable a maintenance mode upon HTTP/404 response to health-checks
3690 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau2769aa02007-12-27 18:26:09 +01003691 yes | no | yes | yes
Willy Tarreau0ba27502007-12-24 16:55:16 +01003692 Arguments : none
3693
3694 When this option is set, a server which returns an HTTP code 404 will be
3695 excluded from further load-balancing, but will still receive persistent
3696 connections. This provides a very convenient method for Web administrators
3697 to perform a graceful shutdown of their servers. It is also important to note
3698 that a server which is detected as failed while it was in this mode will not
3699 generate an alert, just a notice. If the server responds 2xx or 3xx again, it
3700 will immediately be reinserted into the farm. The status on the stats page
3701 reports "NOLB" for a server in this mode. It is important to note that this
Willy Tarreaubd741542010-03-16 18:46:54 +01003702 option only works in conjunction with the "httpchk" option. If this option
3703 is used with "http-check expect", then it has precedence over it so that 404
3704 responses will still be considered as soft-stop.
3705
3706 See also : "option httpchk", "http-check expect"
3707
3708
3709http-check expect [!] <match> <pattern>
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003710 Make HTTP health checks consider response contents or specific status codes
Willy Tarreaubd741542010-03-16 18:46:54 +01003711 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau1ee51a62011-08-19 20:04:17 +02003712 yes | no | yes | yes
Willy Tarreaubd741542010-03-16 18:46:54 +01003713 Arguments :
3714 <match> is a keyword indicating how to look for a specific pattern in the
3715 response. The keyword may be one of "status", "rstatus",
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003716 "string", or "rstring". The keyword may be preceded by an
Willy Tarreaubd741542010-03-16 18:46:54 +01003717 exclamation mark ("!") to negate the match. Spaces are allowed
3718 between the exclamation mark and the keyword. See below for more
3719 details on the supported keywords.
3720
3721 <pattern> is the pattern to look for. It may be a string or a regular
3722 expression. If the pattern contains spaces, they must be escaped
3723 with the usual backslash ('\').
3724
3725 By default, "option httpchk" considers that response statuses 2xx and 3xx
3726 are valid, and that others are invalid. When "http-check expect" is used,
3727 it defines what is considered valid or invalid. Only one "http-check"
3728 statement is supported in a backend. If a server fails to respond or times
3729 out, the check obviously fails. The available matches are :
3730
3731 status <string> : test the exact string match for the HTTP status code.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003732 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003733 response's status code is exactly this string. If the
3734 "status" keyword is prefixed with "!", then the response
3735 will be considered invalid if the status code matches.
3736
3737 rstatus <regex> : test a regular expression for the HTTP status code.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003738 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003739 response's status code matches the expression. If the
3740 "rstatus" keyword is prefixed with "!", then the response
3741 will be considered invalid if the status code matches.
3742 This is mostly used to check for multiple codes.
3743
3744 string <string> : test the exact string match in the HTTP response body.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003745 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003746 response's body contains this exact string. If the
3747 "string" keyword is prefixed with "!", then the response
3748 will be considered invalid if the body contains this
3749 string. This can be used to look for a mandatory word at
3750 the end of a dynamic page, or to detect a failure when a
3751 specific error appears on the check page (eg: a stack
3752 trace).
3753
3754 rstring <regex> : test a regular expression on the HTTP response body.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003755 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003756 response's body matches this expression. If the "rstring"
3757 keyword is prefixed with "!", then the response will be
3758 considered invalid if the body matches the expression.
3759 This can be used to look for a mandatory word at the end
3760 of a dynamic page, or to detect a failure when a specific
3761 error appears on the check page (eg: a stack trace).
3762
3763 It is important to note that the responses will be limited to a certain size
3764 defined by the global "tune.chksize" option, which defaults to 16384 bytes.
3765 Thus, too large responses may not contain the mandatory pattern when using
3766 "string" or "rstring". If a large response is absolutely required, it is
3767 possible to change the default max size by setting the global variable.
3768 However, it is worth keeping in mind that parsing very large responses can
3769 waste some CPU cycles, especially when regular expressions are used, and that
3770 it is always better to focus the checks on smaller resources.
3771
Cyril Bonté32602d22015-01-30 00:07:07 +01003772 Also "http-check expect" doesn't support HTTP keep-alive. Keep in mind that it
3773 will automatically append a "Connection: close" header, meaning that this
3774 header should not be present in the request provided by "option httpchk".
3775
Willy Tarreaubd741542010-03-16 18:46:54 +01003776 Last, if "http-check expect" is combined with "http-check disable-on-404",
3777 then this last one has precedence when the server responds with 404.
3778
3779 Examples :
3780 # only accept status 200 as valid
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01003781 http-check expect status 200
Willy Tarreaubd741542010-03-16 18:46:54 +01003782
3783 # consider SQL errors as errors
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01003784 http-check expect ! string SQL\ Error
Willy Tarreaubd741542010-03-16 18:46:54 +01003785
3786 # consider status 5xx only as errors
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01003787 http-check expect ! rstatus ^5
Willy Tarreaubd741542010-03-16 18:46:54 +01003788
3789 # check that we have a correct hexadecimal tag before /html
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03003790 http-check expect rstring <!--tag:[0-9a-f]*--></html>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003791
Willy Tarreaubd741542010-03-16 18:46:54 +01003792 See also : "option httpchk", "http-check disable-on-404"
Willy Tarreau2769aa02007-12-27 18:26:09 +01003793
3794
Willy Tarreauef781042010-01-27 11:53:01 +01003795http-check send-state
3796 Enable emission of a state header with HTTP health checks
3797 May be used in sections : defaults | frontend | listen | backend
3798 yes | no | yes | yes
3799 Arguments : none
3800
3801 When this option is set, haproxy will systematically send a special header
3802 "X-Haproxy-Server-State" with a list of parameters indicating to each server
3803 how they are seen by haproxy. This can be used for instance when a server is
3804 manipulated without access to haproxy and the operator needs to know whether
3805 haproxy still sees it up or not, or if the server is the last one in a farm.
3806
3807 The header is composed of fields delimited by semi-colons, the first of which
3808 is a word ("UP", "DOWN", "NOLB"), possibly followed by a number of valid
3809 checks on the total number before transition, just as appears in the stats
3810 interface. Next headers are in the form "<variable>=<value>", indicating in
3811 no specific order some values available in the stats interface :
Joseph Lynch514061c2015-01-15 17:52:59 -08003812 - a variable "address", containing the address of the backend server.
3813 This corresponds to the <address> field in the server declaration. For
3814 unix domain sockets, it will read "unix".
3815
3816 - a variable "port", containing the port of the backend server. This
3817 corresponds to the <port> field in the server declaration. For unix
3818 domain sockets, it will read "unix".
3819
Willy Tarreauef781042010-01-27 11:53:01 +01003820 - a variable "name", containing the name of the backend followed by a slash
3821 ("/") then the name of the server. This can be used when a server is
3822 checked in multiple backends.
3823
3824 - a variable "node" containing the name of the haproxy node, as set in the
3825 global "node" variable, otherwise the system's hostname if unspecified.
3826
3827 - a variable "weight" indicating the weight of the server, a slash ("/")
3828 and the total weight of the farm (just counting usable servers). This
3829 helps to know if other servers are available to handle the load when this
3830 one fails.
3831
3832 - a variable "scur" indicating the current number of concurrent connections
3833 on the server, followed by a slash ("/") then the total number of
3834 connections on all servers of the same backend.
3835
3836 - a variable "qcur" indicating the current number of requests in the
3837 server's queue.
3838
3839 Example of a header received by the application server :
3840 >>> X-Haproxy-Server-State: UP 2/3; name=bck/srv2; node=lb1; weight=1/2; \
3841 scur=13/22; qcur=0
3842
3843 See also : "option httpchk", "http-check disable-on-404"
3844
Willy Tarreau53275e82017-11-24 07:52:01 +01003845http-request { allow | auth [realm <realm>] | redirect <rule> | reject |
Jarno Huuskonen800d1762017-03-06 14:56:36 +02003846 tarpit [deny_status <status>] | deny [deny_status <status>] |
Willy Tarreauf4c43c12013-06-11 17:01:13 +02003847 add-header <name> <fmt> | set-header <name> <fmt> |
Thierry FOURNIER82bf70d2015-05-26 17:58:29 +02003848 capture <sample> [ len <length> | id <id> ] |
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02003849 del-header <name> | set-nice <nice> | set-log-level <level> |
Sasha Pachev218f0642014-06-16 12:05:59 -06003850 replace-header <name> <match-regex> <replace-fmt> |
3851 replace-value <name> <match-regex> <replace-fmt> |
Willy Tarreaua0dc23f2015-01-22 20:46:11 +01003852 set-method <fmt> | set-path <fmt> | set-query <fmt> |
3853 set-uri <fmt> | set-tos <tos> | set-mark <mark> |
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02003854 add-acl(<file name>) <key fmt> |
3855 del-acl(<file name>) <key fmt> |
3856 del-map(<file name>) <key fmt> |
Baptiste Assmannbb7e86a2014-09-03 18:29:47 +02003857 set-map(<file name>) <key fmt> <value fmt> |
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02003858 set-var(<var name>) <expr> |
Christopher Faulet85d79c92016-11-09 16:54:56 +01003859 unset-var(<var name>) |
Thierry FOURNIER90da1912015-03-05 11:17:06 +01003860 { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] |
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02003861 sc-inc-gpc0(<sc-id>) |
Thierry FOURNIER236657b2015-08-19 08:25:14 +02003862 sc-set-gpt0(<sc-id>) <int> |
Willy Tarreau2d392c22015-08-24 01:43:45 +02003863 silent-drop |
Christopher Faulet76c09ef2017-09-21 11:03:52 +02003864 send-spoe-group
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02003865 }
Cyril Bontéf0c60612010-02-06 14:44:47 +01003866 [ { if | unless } <condition> ]
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01003867 Access control for Layer 7 requests
3868
3869 May be used in sections: defaults | frontend | listen | backend
3870 no | yes | yes | yes
3871
Willy Tarreau20b0de52012-12-24 15:45:22 +01003872 The http-request statement defines a set of rules which apply to layer 7
3873 processing. The rules are evaluated in their declaration order when they are
3874 met in a frontend, listen or backend section. Any rule may optionally be
3875 followed by an ACL-based condition, in which case it will only be evaluated
3876 if the condition is true.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01003877
Willy Tarreau20b0de52012-12-24 15:45:22 +01003878 The first keyword is the rule's action. Currently supported actions include :
3879 - "allow" : this stops the evaluation of the rules and lets the request
3880 pass the check. No further "http-request" rules are evaluated.
3881
3882 - "deny" : this stops the evaluation of the rules and immediately rejects
Willy Tarreaube1d34d2016-06-26 19:37:59 +02003883 the request and emits an HTTP 403 error, or optionally the status code
3884 specified as an argument to "deny_status". The list of permitted status
3885 codes is limited to those that can be overridden by the "errorfile"
3886 directive. No further "http-request" rules are evaluated.
Willy Tarreau20b0de52012-12-24 15:45:22 +01003887
Willy Tarreau53275e82017-11-24 07:52:01 +01003888 - "reject" : this stops the evaluation of the rules and immediately closes
3889 the connection without sending any response. It acts similarly to the
3890 "tcp-request content reject" rules. It can be useful to force an
3891 immediate connection closure on HTTP/2 connections.
3892
Willy Tarreauccbcc372012-12-27 12:37:57 +01003893 - "tarpit" : this stops the evaluation of the rules and immediately blocks
3894 the request without responding for a delay specified by "timeout tarpit"
3895 or "timeout connect" if the former is not set. After that delay, if the
Jarno Huuskonen800d1762017-03-06 14:56:36 +02003896 client is still connected, an HTTP error 500 (or optionally the status
3897 code specified as an argument to "deny_status") is returned so that the
Willy Tarreauccbcc372012-12-27 12:37:57 +01003898 client does not suspect it has been tarpitted. Logs will report the flags
3899 "PT". The goal of the tarpit rule is to slow down robots during an attack
3900 when they're limited on the number of concurrent requests. It can be very
3901 efficient against very dumb robots, and will significantly reduce the
3902 load on firewalls compared to a "deny" rule. But when facing "correctly"
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03003903 developed robots, it can make things worse by forcing haproxy and the
Willy Tarreau2d392c22015-08-24 01:43:45 +02003904 front firewall to support insane number of concurrent connections. See
3905 also the "silent-drop" action below.
Willy Tarreauccbcc372012-12-27 12:37:57 +01003906
Willy Tarreau20b0de52012-12-24 15:45:22 +01003907 - "auth" : this stops the evaluation of the rules and immediately responds
3908 with an HTTP 401 or 407 error code to invite the user to present a valid
3909 user name and password. No further "http-request" rules are evaluated. An
3910 optional "realm" parameter is supported, it sets the authentication realm
3911 that is returned with the response (typically the application's name).
3912
Willy Tarreau81499eb2012-12-27 12:19:02 +01003913 - "redirect" : this performs an HTTP redirection based on a redirect rule.
3914 This is exactly the same as the "redirect" statement except that it
3915 inserts a redirect rule which can be processed in the middle of other
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01003916 "http-request" rules and that these rules use the "log-format" strings.
3917 See the "redirect" keyword for the rule's syntax.
Willy Tarreau81499eb2012-12-27 12:19:02 +01003918
Willy Tarreau20b0de52012-12-24 15:45:22 +01003919 - "add-header" appends an HTTP header field whose name is specified in
3920 <name> and whose value is defined by <fmt> which follows the log-format
3921 rules (see Custom Log Format in section 8.2.4). This is particularly
3922 useful to pass connection-specific information to the server (eg: the
3923 client's SSL certificate), or to combine several headers into one. This
3924 rule is not final, so it is possible to add other similar rules. Note
3925 that header addition is performed immediately, so one rule might reuse
3926 the resulting header from a previous rule.
3927
3928 - "set-header" does the same as "add-header" except that the header name
3929 is first removed if it existed. This is useful when passing security
3930 information to the server, where the header must not be manipulated by
Willy Tarreau85603282015-01-21 20:39:27 +01003931 external users. Note that the new value is computed before the removal so
3932 it is possible to concatenate a value to an existing header.
Willy Tarreau20b0de52012-12-24 15:45:22 +01003933
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02003934 - "del-header" removes all HTTP header fields whose name is specified in
3935 <name>.
3936
Sasha Pachev218f0642014-06-16 12:05:59 -06003937 - "replace-header" matches the regular expression in all occurrences of
3938 header field <name> according to <match-regex>, and replaces them with
3939 the <replace-fmt> argument. Format characters are allowed in replace-fmt
3940 and work like in <fmt> arguments in "add-header". The match is only
3941 case-sensitive. It is important to understand that this action only
3942 considers whole header lines, regardless of the number of values they
3943 may contain. This usage is suited to headers naturally containing commas
3944 in their value, such as If-Modified-Since and so on.
3945
3946 Example:
3947
3948 http-request replace-header Cookie foo=([^;]*);(.*) foo=\1;ip=%bi;\2
3949
3950 applied to:
3951
3952 Cookie: foo=foobar; expires=Tue, 14-Jun-2016 01:40:45 GMT;
3953
3954 outputs:
3955
3956 Cookie: foo=foobar;ip=192.168.1.20; expires=Tue, 14-Jun-2016 01:40:45 GMT;
3957
3958 assuming the backend IP is 192.168.1.20
3959
3960 - "replace-value" works like "replace-header" except that it matches the
3961 regex against every comma-delimited value of the header field <name>
3962 instead of the entire header. This is suited for all headers which are
3963 allowed to carry more than one value. An example could be the Accept
3964 header.
3965
3966 Example:
3967
3968 http-request replace-value X-Forwarded-For ^192\.168\.(.*)$ 172.16.\1
3969
3970 applied to:
3971
3972 X-Forwarded-For: 192.168.10.1, 192.168.13.24, 10.0.0.37
3973
3974 outputs:
3975
3976 X-Forwarded-For: 172.16.10.1, 172.16.13.24, 10.0.0.37
3977
Willy Tarreaua0dc23f2015-01-22 20:46:11 +01003978 - "set-method" rewrites the request method with the result of the
3979 evaluation of format string <fmt>. There should be very few valid reasons
3980 for having to do so as this is more likely to break something than to fix
3981 it.
3982
3983 - "set-path" rewrites the request path with the result of the evaluation of
3984 format string <fmt>. The query string, if any, is left intact. If a
3985 scheme and authority is found before the path, they are left intact as
3986 well. If the request doesn't have a path ("*"), this one is replaced with
3987 the format. This can be used to prepend a directory component in front of
3988 a path for example. See also "set-query" and "set-uri".
3989
3990 Example :
3991 # prepend the host name before the path
3992 http-request set-path /%[hdr(host)]%[path]
3993
3994 - "set-query" rewrites the request's query string which appears after the
3995 first question mark ("?") with the result of the evaluation of format
3996 string <fmt>. The part prior to the question mark is left intact. If the
3997 request doesn't contain a question mark and the new value is not empty,
3998 then one is added at the end of the URI, followed by the new value. If
3999 a question mark was present, it will never be removed even if the value
4000 is empty. This can be used to add or remove parameters from the query
4001 string. See also "set-query" and "set-uri".
4002
4003 Example :
4004 # replace "%3D" with "=" in the query string
4005 http-request set-query %[query,regsub(%3D,=,g)]
4006
4007 - "set-uri" rewrites the request URI with the result of the evaluation of
4008 format string <fmt>. The scheme, authority, path and query string are all
4009 replaced at once. This can be used to rewrite hosts in front of proxies,
4010 or to perform complex modifications to the URI such as moving parts
4011 between the path and the query string. See also "set-path" and
4012 "set-query".
4013
Willy Tarreauf4c43c12013-06-11 17:01:13 +02004014 - "set-nice" sets the "nice" factor of the current request being processed.
4015 It only has effect against the other requests being processed at the same
4016 time. The default value is 0, unless altered by the "nice" setting on the
4017 "bind" line. The accepted range is -1024..1024. The higher the value, the
4018 nicest the request will be. Lower values will make the request more
4019 important than other ones. This can be useful to improve the speed of
4020 some requests, or lower the priority of non-important requests. Using
4021 this setting without prior experimentation can cause some major slowdown.
4022
Willy Tarreau9a355ec2013-06-11 17:45:46 +02004023 - "set-log-level" is used to change the log level of the current request
4024 when a certain condition is met. Valid levels are the 8 syslog levels
4025 (see the "log" keyword) plus the special level "silent" which disables
4026 logging for this request. This rule is not final so the last matching
4027 rule wins. This rule can be useful to disable health checks coming from
4028 another equipment.
4029
Willy Tarreau42cf39e2013-06-11 18:51:32 +02004030 - "set-tos" is used to set the TOS or DSCP field value of packets sent to
4031 the client to the value passed in <tos> on platforms which support this.
4032 This value represents the whole 8 bits of the IP TOS field, and can be
4033 expressed both in decimal or hexadecimal format (prefixed by "0x"). Note
4034 that only the 6 higher bits are used in DSCP or TOS, and the two lower
4035 bits are always 0. This can be used to adjust some routing behaviour on
4036 border routers based on some information from the request. See RFC 2474,
4037 2597, 3260 and 4594 for more information.
4038
Willy Tarreau51347ed2013-06-11 19:34:13 +02004039 - "set-mark" is used to set the Netfilter MARK on all packets sent to the
4040 client to the value passed in <mark> on platforms which support it. This
4041 value is an unsigned 32 bit value which can be matched by netfilter and
4042 by the routing table. It can be expressed both in decimal or hexadecimal
4043 format (prefixed by "0x"). This can be useful to force certain packets to
4044 take a different route (for example a cheaper network path for bulk
4045 downloads). This works on Linux kernels 2.6.32 and above and requires
4046 admin privileges.
4047
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004048 - "add-acl" is used to add a new entry into an ACL. The ACL must be loaded
4049 from a file (even a dummy empty file). The file name of the ACL to be
4050 updated is passed between parentheses. It takes one argument: <key fmt>,
4051 which follows log-format rules, to collect content of the new entry. It
4052 performs a lookup in the ACL before insertion, to avoid duplicated (or
4053 more) values. This lookup is done by a linear search and can be expensive
4054 with large lists! It is the equivalent of the "add acl" command from the
4055 stats socket, but can be triggered by an HTTP request.
4056
4057 - "del-acl" is used to delete an entry from an ACL. The ACL must be loaded
4058 from a file (even a dummy empty file). The file name of the ACL to be
4059 updated is passed between parentheses. It takes one argument: <key fmt>,
4060 which follows log-format rules, to collect content of the entry to delete.
4061 It is the equivalent of the "del acl" command from the stats socket, but
4062 can be triggered by an HTTP request.
4063
4064 - "del-map" is used to delete an entry from a MAP. The MAP must be loaded
4065 from a file (even a dummy empty file). The file name of the MAP to be
4066 updated is passed between parentheses. It takes one argument: <key fmt>,
4067 which follows log-format rules, to collect content of the entry to delete.
4068 It takes one argument: "file name" It is the equivalent of the "del map"
4069 command from the stats socket, but can be triggered by an HTTP request.
4070
4071 - "set-map" is used to add a new entry into a MAP. The MAP must be loaded
4072 from a file (even a dummy empty file). The file name of the MAP to be
4073 updated is passed between parentheses. It takes 2 arguments: <key fmt>,
4074 which follows log-format rules, used to collect MAP key, and <value fmt>,
4075 which follows log-format rules, used to collect content for the new entry.
4076 It performs a lookup in the MAP before insertion, to avoid duplicated (or
4077 more) values. This lookup is done by a linear search and can be expensive
4078 with large lists! It is the equivalent of the "set map" command from the
4079 stats socket, but can be triggered by an HTTP request.
4080
Thierry FOURNIER82bf70d2015-05-26 17:58:29 +02004081 - capture <sample> [ len <length> | id <id> ] :
Willy Tarreaua9083d02015-05-08 15:27:59 +02004082 captures sample expression <sample> from the request buffer, and converts
4083 it to a string of at most <len> characters. The resulting string is
4084 stored into the next request "capture" slot, so it will possibly appear
4085 next to some captured HTTP headers. It will then automatically appear in
4086 the logs, and it will be possible to extract it using sample fetch rules
4087 to feed it into headers or anything. The length should be limited given
4088 that this size will be allocated for each capture during the whole
4089 session life. Please check section 7.3 (Fetching samples) and "capture
4090 request header" for more information.
4091
Thierry FOURNIER82bf70d2015-05-26 17:58:29 +02004092 If the keyword "id" is used instead of "len", the action tries to store
4093 the captured string in a previously declared capture slot. This is useful
4094 to run captures in backends. The slot id can be declared by a previous
4095 directive "http-request capture" or with the "declare capture" keyword.
Baptiste Assmanne9544932015-11-03 23:31:35 +01004096 If the slot <id> doesn't exist, then HAProxy fails parsing the
4097 configuration to prevent unexpected behavior at run time.
Thierry FOURNIER82bf70d2015-05-26 17:58:29 +02004098
Willy Tarreau09448f72014-06-25 18:12:15 +02004099 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] :
4100 enables tracking of sticky counters from current request. These rules
4101 do not stop evaluation and do not change default action. Three sets of
4102 counters may be simultaneously tracked by the same connection. The first
4103 "track-sc0" rule executed enables tracking of the counters of the
4104 specified table as the first set. The first "track-sc1" rule executed
4105 enables tracking of the counters of the specified table as the second
4106 set. The first "track-sc2" rule executed enables tracking of the
4107 counters of the specified table as the third set. It is a recommended
4108 practice to use the first set of counters for the per-frontend counters
4109 and the second set for the per-backend ones. But this is just a
4110 guideline, all may be used everywhere.
4111
4112 These actions take one or two arguments :
4113 <key> is mandatory, and is a sample expression rule as described
4114 in section 7.3. It describes what elements of the incoming
4115 request or connection will be analysed, extracted, combined,
4116 and used to select which table entry to update the counters.
4117
4118 <table> is an optional table to be used instead of the default one,
4119 which is the stick-table declared in the current proxy. All
4120 the counters for the matches and updates for the key will
4121 then be performed in that table until the session ends.
4122
4123 Once a "track-sc*" rule is executed, the key is looked up in the table
4124 and if it is not found, an entry is allocated for it. Then a pointer to
4125 that entry is kept during all the session's life, and this entry's
4126 counters are updated as often as possible, every time the session's
4127 counters are updated, and also systematically when the session ends.
4128 Counters are only updated for events that happen after the tracking has
4129 been started. As an exception, connection counters and request counters
4130 are systematically updated so that they reflect useful information.
4131
4132 If the entry tracks concurrent connection counters, one connection is
4133 counted for as long as the entry is tracked, and the entry will not
4134 expire during that time. Tracking counters also provides a performance
4135 advantage over just checking the keys, because only one table lookup is
4136 performed for all ACL checks that make use of it.
4137
Thierry FOURNIER236657b2015-08-19 08:25:14 +02004138 - sc-set-gpt0(<sc-id>) <int> :
4139 This action sets the GPT0 tag according to the sticky counter designated
4140 by <sc-id> and the value of <int>. The expected result is a boolean. If
4141 an error occurs, this action silently fails and the actions evaluation
4142 continues.
4143
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02004144 - sc-inc-gpc0(<sc-id>):
4145 This action increments the GPC0 counter according with the sticky counter
4146 designated by <sc-id>. If an error occurs, this action silently fails and
4147 the actions evaluation continues.
4148
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004149 - set-var(<var-name>) <expr> :
4150 Is used to set the contents of a variable. The variable is declared
4151 inline.
4152
Daniel Schneller0b547052016-03-21 20:46:57 +01004153 <var-name> The name of the variable starts with an indication about
4154 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +01004155 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +01004156 "sess" : the variable is shared with the whole session
4157 "txn" : the variable is shared with the transaction
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004158 (request and response)
Daniel Schneller0b547052016-03-21 20:46:57 +01004159 "req" : the variable is shared only during request
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004160 processing
Daniel Schneller0b547052016-03-21 20:46:57 +01004161 "res" : the variable is shared only during response
4162 processing
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004163 This prefix is followed by a name. The separator is a '.'.
Daniel Schneller0b547052016-03-21 20:46:57 +01004164 The name may only contain characters 'a-z', 'A-Z', '0-9'
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004165 and '_'.
4166
4167 <expr> Is a standard HAProxy expression formed by a sample-fetch
4168 followed by some converters.
4169
4170 Example:
4171
4172 http-request set-var(req.my_var) req.fhdr(user-agent),lower
4173
Christopher Faulet85d79c92016-11-09 16:54:56 +01004174 - unset-var(<var-name>) :
4175 Is used to unset a variable. See above for details about <var-name>.
4176
4177 Example:
4178
4179 http-request unset-var(req.my_var)
4180
Adis Nezirovic2fbcafc2015-07-06 15:44:30 +02004181 - set-src <expr> :
4182 Is used to set the source IP address to the value of specified
4183 expression. Useful when a proxy in front of HAProxy rewrites source IP,
4184 but provides the correct IP in a HTTP header; or you want to mask
4185 source IP for privacy.
4186
4187 <expr> Is a standard HAProxy expression formed by a sample-fetch
4188 followed by some converters.
4189
4190 Example:
4191
4192 http-request set-src hdr(x-forwarded-for)
4193 http-request set-src src,ipmask(24)
4194
Willy Tarreau00005ce2016-10-21 15:07:45 +02004195 When possible, set-src preserves the original source port as long as the
4196 address family allows it, otherwise the source port is set to 0.
Adis Nezirovic2fbcafc2015-07-06 15:44:30 +02004197
William Lallemand44be6402016-05-25 01:51:35 +02004198 - set-src-port <expr> :
4199 Is used to set the source port address to the value of specified
4200 expression.
4201
4202 <expr> Is a standard HAProxy expression formed by a sample-fetch
4203 followed by some converters.
4204
4205 Example:
4206
4207 http-request set-src-port hdr(x-port)
4208 http-request set-src-port int(4000)
4209
Willy Tarreau00005ce2016-10-21 15:07:45 +02004210 When possible, set-src-port preserves the original source address as long
4211 as the address family supports a port, otherwise it forces the source
4212 address to IPv4 "0.0.0.0" before rewriting the port.
William Lallemand44be6402016-05-25 01:51:35 +02004213
William Lallemand13e9b0c2016-05-25 02:34:07 +02004214 - set-dst <expr> :
4215 Is used to set the destination IP address to the value of specified
4216 expression. Useful when a proxy in front of HAProxy rewrites destination
4217 IP, but provides the correct IP in a HTTP header; or you want to mask
4218 the IP for privacy. If you want to connect to the new address/port, use
4219 '0.0.0.0:0' as a server address in the backend.
4220
4221 <expr> Is a standard HAProxy expression formed by a sample-fetch
4222 followed by some converters.
4223
4224 Example:
4225
4226 http-request set-dst hdr(x-dst)
4227 http-request set-dst dst,ipmask(24)
4228
Willy Tarreau00005ce2016-10-21 15:07:45 +02004229 When possible, set-dst preserves the original destination port as long as
4230 the address family allows it, otherwise the destination port is set to 0.
4231
William Lallemand13e9b0c2016-05-25 02:34:07 +02004232 - set-dst-port <expr> :
4233 Is used to set the destination port address to the value of specified
4234 expression. If you want to connect to the new address/port, use
4235 '0.0.0.0:0' as a server address in the backend.
4236
4237 <expr> Is a standard HAProxy expression formed by a sample-fetch
4238 followed by some converters.
4239
4240 Example:
4241
4242 http-request set-dst-port hdr(x-port)
4243 http-request set-dst-port int(4000)
4244
Willy Tarreau00005ce2016-10-21 15:07:45 +02004245 When possible, set-dst-port preserves the original destination address as
4246 long as the address family supports a port, otherwise it forces the
4247 destination address to IPv4 "0.0.0.0" before rewriting the port.
4248
Willy Tarreau2d392c22015-08-24 01:43:45 +02004249 - "silent-drop" : this stops the evaluation of the rules and makes the
4250 client-facing connection suddenly disappear using a system-dependant way
4251 that tries to prevent the client from being notified. The effect it then
4252 that the client still sees an established connection while there's none
4253 on HAProxy. The purpose is to achieve a comparable effect to "tarpit"
4254 except that it doesn't use any local resource at all on the machine
4255 running HAProxy. It can resist much higher loads than "tarpit", and slow
4256 down stronger attackers. It is important to undestand the impact of using
4257 this mechanism. All stateful equipments placed between the client and
4258 HAProxy (firewalls, proxies, load balancers) will also keep the
4259 established connection for a long time and may suffer from this action.
4260 On modern Linux systems running with enough privileges, the TCP_REPAIR
4261 socket option is used to block the emission of a TCP reset. On other
4262 systems, the socket's TTL is reduced to 1 so that the TCP reset doesn't
4263 pass the first router, though it's still delivered to local networks. Do
4264 not use it unless you fully understand how it works.
4265
Christopher Faulet76c09ef2017-09-21 11:03:52 +02004266
Olivier Houchardccaa7de2017-10-02 11:51:03 +02004267 - "wait-for-handshake" : this will delay the processing of the request
4268 until the SSL handshake happened. This is mostly useful to delay
4269 processing early data until we're sure they are valid.
4270
Christopher Faulet76c09ef2017-09-21 11:03:52 +02004271 - send-spoe-group <engine-name> <group-name> :
4272 This action is used to trigger sending of a group of SPOE messages. To do
4273 so, the SPOE engine used to send messages must be defined, as well as the
4274 SPOE group to send. Of course, the SPOE engine must refer to an existing
4275 SPOE filter. If not engine name is provided on the SPOE filter line, the
4276 SPOE agent name must be used.
4277
4278 <engine-name> The SPOE engine name.
4279
4280 <group-name> The SPOE group name as specified in the engine
4281 configuration.
4282
Willy Tarreau20b0de52012-12-24 15:45:22 +01004283 There is no limit to the number of http-request statements per instance.
4284
4285 It is important to know that http-request rules are processed very early in
4286 the HTTP processing, just after "block" rules and before "reqdel" or "reqrep"
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08004287 or "reqadd" rules. That way, headers added by "add-header"/"set-header" are
4288 visible by almost all further ACL rules.
4289
4290 Using "reqadd"/"reqdel"/"reqrep" to manipulate request headers is discouraged
4291 in newer versions (>= 1.5). But if you need to use regular expression to
4292 delete headers, you can still use "reqdel". Also please use
4293 "http-request deny/allow/tarpit" instead of "reqdeny"/"reqpass"/"reqtarpit".
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01004294
4295 Example:
Cyril Bonté78caf842010-03-10 22:41:43 +01004296 acl nagios src 192.168.129.3
4297 acl local_net src 192.168.0.0/16
4298 acl auth_ok http_auth(L1)
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01004299
Cyril Bonté78caf842010-03-10 22:41:43 +01004300 http-request allow if nagios
4301 http-request allow if local_net auth_ok
4302 http-request auth realm Gimme if local_net auth_ok
4303 http-request deny
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01004304
Cyril Bonté78caf842010-03-10 22:41:43 +01004305 Example:
4306 acl auth_ok http_auth_group(L1) G1
Cyril Bonté78caf842010-03-10 22:41:43 +01004307 http-request auth unless auth_ok
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01004308
Willy Tarreau20b0de52012-12-24 15:45:22 +01004309 Example:
4310 http-request set-header X-Haproxy-Current-Date %T
4311 http-request set-header X-SSL %[ssl_fc]
Willy Tarreaufca42612015-08-27 17:15:05 +02004312 http-request set-header X-SSL-Session_ID %[ssl_fc_session_id,hex]
Willy Tarreau20b0de52012-12-24 15:45:22 +01004313 http-request set-header X-SSL-Client-Verify %[ssl_c_verify]
4314 http-request set-header X-SSL-Client-DN %{+Q}[ssl_c_s_dn]
4315 http-request set-header X-SSL-Client-CN %{+Q}[ssl_c_s_dn(cn)]
4316 http-request set-header X-SSL-Issuer %{+Q}[ssl_c_i_dn]
4317 http-request set-header X-SSL-Client-NotBefore %{+Q}[ssl_c_notbefore]
4318 http-request set-header X-SSL-Client-NotAfter %{+Q}[ssl_c_notafter]
4319
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004320 Example:
4321 acl key req.hdr(X-Add-Acl-Key) -m found
4322 acl add path /addacl
4323 acl del path /delacl
4324
4325 acl myhost hdr(Host) -f myhost.lst
4326
4327 http-request add-acl(myhost.lst) %[req.hdr(X-Add-Acl-Key)] if key add
4328 http-request del-acl(myhost.lst) %[req.hdr(X-Add-Acl-Key)] if key del
4329
4330 Example:
4331 acl value req.hdr(X-Value) -m found
4332 acl setmap path /setmap
4333 acl delmap path /delmap
4334
4335 use_backend bk_appli if { hdr(Host),map_str(map.lst) -m found }
4336
4337 http-request set-map(map.lst) %[src] %[req.hdr(X-Value)] if setmap value
4338 http-request del-map(map.lst) %[src] if delmap
4339
Cyril Bonté2be1b3f2010-09-30 23:46:30 +02004340 See also : "stats http-request", section 3.4 about userlists and section 7
4341 about ACL usage.
Willy Tarreauef781042010-01-27 11:53:01 +01004342
Willy Tarreauf4c43c12013-06-11 17:01:13 +02004343http-response { allow | deny | add-header <name> <fmt> | set-nice <nice> |
Willy Tarreau51d861a2015-05-22 17:30:48 +02004344 capture <sample> id <id> | redirect <rule> |
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02004345 set-header <name> <fmt> | del-header <name> |
Sasha Pachev218f0642014-06-16 12:05:59 -06004346 replace-header <name> <regex-match> <replace-fmt> |
4347 replace-value <name> <regex-match> <replace-fmt> |
Robin H. Johnson52f5db22017-01-01 13:10:52 -08004348 set-status <status> [reason <str>] |
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004349 set-log-level <level> | set-mark <mark> | set-tos <tos> |
4350 add-acl(<file name>) <key fmt> |
4351 del-acl(<file name>) <key fmt> |
4352 del-map(<file name>) <key fmt> |
Thierry FOURNIER90da1912015-03-05 11:17:06 +01004353 set-map(<file name>) <key fmt> <value fmt> |
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004354 set-var(<var-name>) <expr> |
Christopher Faulet85d79c92016-11-09 16:54:56 +01004355 unset-var(<var-name>) |
Ruoshan Huange4edc6b2016-07-14 15:07:45 +08004356 { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] |
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02004357 sc-inc-gpc0(<sc-id>) |
Thierry FOURNIER236657b2015-08-19 08:25:14 +02004358 sc-set-gpt0(<sc-id>) <int> |
Willy Tarreau2d392c22015-08-24 01:43:45 +02004359 silent-drop |
Christopher Faulet76c09ef2017-09-21 11:03:52 +02004360 send-spoe-group
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004361 }
Lukas Tribus2dd1d1a2013-06-19 23:34:41 +02004362 [ { if | unless } <condition> ]
Willy Tarreaue365c0b2013-06-11 16:06:12 +02004363 Access control for Layer 7 responses
4364
4365 May be used in sections: defaults | frontend | listen | backend
4366 no | yes | yes | yes
4367
4368 The http-response statement defines a set of rules which apply to layer 7
4369 processing. The rules are evaluated in their declaration order when they are
4370 met in a frontend, listen or backend section. Any rule may optionally be
4371 followed by an ACL-based condition, in which case it will only be evaluated
4372 if the condition is true. Since these rules apply on responses, the backend
4373 rules are applied first, followed by the frontend's rules.
4374
4375 The first keyword is the rule's action. Currently supported actions include :
4376 - "allow" : this stops the evaluation of the rules and lets the response
4377 pass the check. No further "http-response" rules are evaluated for the
4378 current section.
4379
4380 - "deny" : this stops the evaluation of the rules and immediately rejects
4381 the response and emits an HTTP 502 error. No further "http-response"
4382 rules are evaluated.
4383
4384 - "add-header" appends an HTTP header field whose name is specified in
4385 <name> and whose value is defined by <fmt> which follows the log-format
4386 rules (see Custom Log Format in section 8.2.4). This may be used to send
4387 a cookie to a client for example, or to pass some internal information.
4388 This rule is not final, so it is possible to add other similar rules.
4389 Note that header addition is performed immediately, so one rule might
4390 reuse the resulting header from a previous rule.
4391
4392 - "set-header" does the same as "add-header" except that the header name
4393 is first removed if it existed. This is useful when passing security
4394 information to the server, where the header must not be manipulated by
4395 external users.
4396
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02004397 - "del-header" removes all HTTP header fields whose name is specified in
4398 <name>.
4399
Sasha Pachev218f0642014-06-16 12:05:59 -06004400 - "replace-header" matches the regular expression in all occurrences of
4401 header field <name> according to <match-regex>, and replaces them with
4402 the <replace-fmt> argument. Format characters are allowed in replace-fmt
4403 and work like in <fmt> arguments in "add-header". The match is only
4404 case-sensitive. It is important to understand that this action only
4405 considers whole header lines, regardless of the number of values they
4406 may contain. This usage is suited to headers naturally containing commas
4407 in their value, such as Set-Cookie, Expires and so on.
4408
4409 Example:
4410
4411 http-response replace-header Set-Cookie (C=[^;]*);(.*) \1;ip=%bi;\2
4412
4413 applied to:
4414
4415 Set-Cookie: C=1; expires=Tue, 14-Jun-2016 01:40:45 GMT
4416
4417 outputs:
4418
4419 Set-Cookie: C=1;ip=192.168.1.20; expires=Tue, 14-Jun-2016 01:40:45 GMT
4420
4421 assuming the backend IP is 192.168.1.20.
4422
4423 - "replace-value" works like "replace-header" except that it matches the
4424 regex against every comma-delimited value of the header field <name>
4425 instead of the entire header. This is suited for all headers which are
4426 allowed to carry more than one value. An example could be the Accept
4427 header.
4428
4429 Example:
4430
4431 http-response replace-value Cache-control ^public$ private
4432
4433 applied to:
4434
4435 Cache-Control: max-age=3600, public
4436
4437 outputs:
4438
4439 Cache-Control: max-age=3600, private
4440
Thierry FOURNIER35d70ef2015-08-26 16:21:56 +02004441 - "set-status" replaces the response status code with <status> which must
Robin H. Johnson52f5db22017-01-01 13:10:52 -08004442 be an integer between 100 and 999. Optionally, a custom reason text can be
4443 provided defined by <str>, or the default reason for the specified code
4444 will be used as a fallback.
Thierry FOURNIER35d70ef2015-08-26 16:21:56 +02004445
4446 Example:
4447
4448 # return "431 Request Header Fields Too Large"
4449 http-response set-status 431
Robin H. Johnson52f5db22017-01-01 13:10:52 -08004450 # return "503 Slow Down", custom reason
4451 http-response set-status 503 reason "Slow Down".
Thierry FOURNIER35d70ef2015-08-26 16:21:56 +02004452
Willy Tarreauf4c43c12013-06-11 17:01:13 +02004453 - "set-nice" sets the "nice" factor of the current request being processed.
4454 It only has effect against the other requests being processed at the same
4455 time. The default value is 0, unless altered by the "nice" setting on the
4456 "bind" line. The accepted range is -1024..1024. The higher the value, the
4457 nicest the request will be. Lower values will make the request more
4458 important than other ones. This can be useful to improve the speed of
4459 some requests, or lower the priority of non-important requests. Using
4460 this setting without prior experimentation can cause some major slowdown.
4461
Willy Tarreau9a355ec2013-06-11 17:45:46 +02004462 - "set-log-level" is used to change the log level of the current request
4463 when a certain condition is met. Valid levels are the 8 syslog levels
4464 (see the "log" keyword) plus the special level "silent" which disables
4465 logging for this request. This rule is not final so the last matching
4466 rule wins. This rule can be useful to disable health checks coming from
4467 another equipment.
4468
Willy Tarreau42cf39e2013-06-11 18:51:32 +02004469 - "set-tos" is used to set the TOS or DSCP field value of packets sent to
4470 the client to the value passed in <tos> on platforms which support this.
4471 This value represents the whole 8 bits of the IP TOS field, and can be
4472 expressed both in decimal or hexadecimal format (prefixed by "0x"). Note
4473 that only the 6 higher bits are used in DSCP or TOS, and the two lower
4474 bits are always 0. This can be used to adjust some routing behaviour on
4475 border routers based on some information from the request. See RFC 2474,
4476 2597, 3260 and 4594 for more information.
4477
Willy Tarreau51347ed2013-06-11 19:34:13 +02004478 - "set-mark" is used to set the Netfilter MARK on all packets sent to the
4479 client to the value passed in <mark> on platforms which support it. This
4480 value is an unsigned 32 bit value which can be matched by netfilter and
4481 by the routing table. It can be expressed both in decimal or hexadecimal
4482 format (prefixed by "0x"). This can be useful to force certain packets to
4483 take a different route (for example a cheaper network path for bulk
4484 downloads). This works on Linux kernels 2.6.32 and above and requires
4485 admin privileges.
4486
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004487 - "add-acl" is used to add a new entry into an ACL. The ACL must be loaded
4488 from a file (even a dummy empty file). The file name of the ACL to be
4489 updated is passed between parentheses. It takes one argument: <key fmt>,
4490 which follows log-format rules, to collect content of the new entry. It
4491 performs a lookup in the ACL before insertion, to avoid duplicated (or
4492 more) values. This lookup is done by a linear search and can be expensive
4493 with large lists! It is the equivalent of the "add acl" command from the
4494 stats socket, but can be triggered by an HTTP response.
4495
4496 - "del-acl" is used to delete an entry from an ACL. The ACL must be loaded
4497 from a file (even a dummy empty file). The file name of the ACL to be
4498 updated is passed between parentheses. It takes one argument: <key fmt>,
4499 which follows log-format rules, to collect content of the entry to delete.
4500 It is the equivalent of the "del acl" command from the stats socket, but
4501 can be triggered by an HTTP response.
4502
4503 - "del-map" is used to delete an entry from a MAP. The MAP must be loaded
4504 from a file (even a dummy empty file). The file name of the MAP to be
4505 updated is passed between parentheses. It takes one argument: <key fmt>,
4506 which follows log-format rules, to collect content of the entry to delete.
4507 It takes one argument: "file name" It is the equivalent of the "del map"
4508 command from the stats socket, but can be triggered by an HTTP response.
4509
4510 - "set-map" is used to add a new entry into a MAP. The MAP must be loaded
4511 from a file (even a dummy empty file). The file name of the MAP to be
4512 updated is passed between parentheses. It takes 2 arguments: <key fmt>,
4513 which follows log-format rules, used to collect MAP key, and <value fmt>,
4514 which follows log-format rules, used to collect content for the new entry.
4515 It performs a lookup in the MAP before insertion, to avoid duplicated (or
4516 more) values. This lookup is done by a linear search and can be expensive
4517 with large lists! It is the equivalent of the "set map" command from the
4518 stats socket, but can be triggered by an HTTP response.
4519
Thierry FOURNIERe80fada2015-05-26 18:06:31 +02004520 - capture <sample> id <id> :
4521 captures sample expression <sample> from the response buffer, and converts
4522 it to a string. The resulting string is stored into the next request
4523 "capture" slot, so it will possibly appear next to some captured HTTP
4524 headers. It will then automatically appear in the logs, and it will be
4525 possible to extract it using sample fetch rules to feed it into headers or
4526 anything. Please check section 7.3 (Fetching samples) and "capture
4527 response header" for more information.
4528
4529 The keyword "id" is the id of the capture slot which is used for storing
4530 the string. The capture slot must be defined in an associated frontend.
4531 This is useful to run captures in backends. The slot id can be declared by
4532 a previous directive "http-response capture" or with the "declare capture"
4533 keyword.
Baptiste Assmanne9544932015-11-03 23:31:35 +01004534 If the slot <id> doesn't exist, then HAProxy fails parsing the
4535 configuration to prevent unexpected behavior at run time.
Thierry FOURNIERe80fada2015-05-26 18:06:31 +02004536
Willy Tarreau51d861a2015-05-22 17:30:48 +02004537 - "redirect" : this performs an HTTP redirection based on a redirect rule.
4538 This supports a format string similarly to "http-request redirect" rules,
4539 with the exception that only the "location" type of redirect is possible
4540 on the response. See the "redirect" keyword for the rule's syntax. When
4541 a redirect rule is applied during a response, connections to the server
4542 are closed so that no data can be forwarded from the server to the client.
4543
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004544 - set-var(<var-name>) expr:
4545 Is used to set the contents of a variable. The variable is declared
4546 inline.
4547
Daniel Schneller0b547052016-03-21 20:46:57 +01004548 <var-name> The name of the variable starts with an indication about
4549 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +01004550 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +01004551 "sess" : the variable is shared with the whole session
4552 "txn" : the variable is shared with the transaction
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004553 (request and response)
Daniel Schneller0b547052016-03-21 20:46:57 +01004554 "req" : the variable is shared only during request
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004555 processing
Daniel Schneller0b547052016-03-21 20:46:57 +01004556 "res" : the variable is shared only during response
4557 processing
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004558 This prefix is followed by a name. The separator is a '.'.
Christopher Fauletb71557a2016-10-31 10:49:03 +01004559 The name may only contain characters 'a-z', 'A-Z', '0-9',
4560 '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004561
4562 <expr> Is a standard HAProxy expression formed by a sample-fetch
4563 followed by some converters.
4564
4565 Example:
4566
4567 http-response set-var(sess.last_redir) res.hdr(location)
4568
Christopher Faulet85d79c92016-11-09 16:54:56 +01004569 - unset-var(<var-name>) :
4570 Is used to unset a variable. See above for details about <var-name>.
4571
4572 Example:
4573
4574 http-response unset-var(sess.last_redir)
4575
Ruoshan Huange4edc6b2016-07-14 15:07:45 +08004576 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] :
4577 enables tracking of sticky counters from current response. Please refer to
4578 "http-request track-sc" for a complete description. The only difference
4579 from "http-request track-sc" is the <key> sample expression can only make
4580 use of samples in response (eg. res.*, status etc.) and samples below
4581 Layer 6 (eg. ssl related samples, see section 7.3.4). If the sample is
4582 not supported, haproxy will fail and warn while parsing the config.
4583
Thierry FOURNIER236657b2015-08-19 08:25:14 +02004584 - sc-set-gpt0(<sc-id>) <int> :
4585 This action sets the GPT0 tag according to the sticky counter designated
4586 by <sc-id> and the value of <int>. The expected result is a boolean. If
4587 an error occurs, this action silently fails and the actions evaluation
4588 continues.
4589
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02004590 - sc-inc-gpc0(<sc-id>):
4591 This action increments the GPC0 counter according with the sticky counter
4592 designated by <sc-id>. If an error occurs, this action silently fails and
4593 the actions evaluation continues.
4594
Willy Tarreau2d392c22015-08-24 01:43:45 +02004595 - "silent-drop" : this stops the evaluation of the rules and makes the
4596 client-facing connection suddenly disappear using a system-dependant way
4597 that tries to prevent the client from being notified. The effect it then
4598 that the client still sees an established connection while there's none
4599 on HAProxy. The purpose is to achieve a comparable effect to "tarpit"
4600 except that it doesn't use any local resource at all on the machine
4601 running HAProxy. It can resist much higher loads than "tarpit", and slow
4602 down stronger attackers. It is important to undestand the impact of using
4603 this mechanism. All stateful equipments placed between the client and
4604 HAProxy (firewalls, proxies, load balancers) will also keep the
4605 established connection for a long time and may suffer from this action.
4606 On modern Linux systems running with enough privileges, the TCP_REPAIR
4607 socket option is used to block the emission of a TCP reset. On other
4608 systems, the socket's TTL is reduced to 1 so that the TCP reset doesn't
4609 pass the first router, though it's still delivered to local networks. Do
4610 not use it unless you fully understand how it works.
4611
Christopher Faulet76c09ef2017-09-21 11:03:52 +02004612 - send-spoe-group <engine-name> <group-name> :
4613 This action is used to trigger sending of a group of SPOE messages. To do
4614 so, the SPOE engine used to send messages must be defined, as well as the
4615 SPOE group to send. Of course, the SPOE engine must refer to an existing
4616 SPOE filter. If not engine name is provided on the SPOE filter line, the
4617 SPOE agent name must be used.
4618
4619 <engine-name> The SPOE engine name.
4620
4621 <group-name> The SPOE group name as specified in the engine
4622 configuration.
4623
Willy Tarreaue365c0b2013-06-11 16:06:12 +02004624 There is no limit to the number of http-response statements per instance.
4625
Godbach09250262013-07-02 01:19:15 +08004626 It is important to know that http-response rules are processed very early in
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08004627 the HTTP processing, before "rspdel" or "rsprep" or "rspadd" rules. That way,
4628 headers added by "add-header"/"set-header" are visible by almost all further ACL
Willy Tarreaue365c0b2013-06-11 16:06:12 +02004629 rules.
4630
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08004631 Using "rspadd"/"rspdel"/"rsprep" to manipulate request headers is discouraged
4632 in newer versions (>= 1.5). But if you need to use regular expression to
4633 delete headers, you can still use "rspdel". Also please use
4634 "http-response deny" instead of "rspdeny".
4635
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004636 Example:
4637 acl key_acl res.hdr(X-Acl-Key) -m found
4638
4639 acl myhost hdr(Host) -f myhost.lst
4640
4641 http-response add-acl(myhost.lst) %[res.hdr(X-Acl-Key)] if key_acl
4642 http-response del-acl(myhost.lst) %[res.hdr(X-Acl-Key)] if key_acl
4643
4644 Example:
4645 acl value res.hdr(X-Value) -m found
4646
4647 use_backend bk_appli if { hdr(Host),map_str(map.lst) -m found }
4648
4649 http-response set-map(map.lst) %[src] %[res.hdr(X-Value)] if value
4650 http-response del-map(map.lst) %[src] if ! value
4651
Willy Tarreaue365c0b2013-06-11 16:06:12 +02004652 See also : "http-request", section 3.4 about userlists and section 7 about
4653 ACL usage.
4654
Baptiste Assmann5ecb77f2013-10-06 23:24:13 +02004655
Willy Tarreau30631952015-08-06 15:05:24 +02004656http-reuse { never | safe | aggressive | always }
4657 Declare how idle HTTP connections may be shared between requests
4658
4659 May be used in sections: defaults | frontend | listen | backend
4660 yes | no | yes | yes
4661
4662 By default, a connection established between haproxy and the backend server
4663 belongs to the session that initiated it. The downside is that between the
4664 response and the next request, the connection remains idle and is not used.
4665 In many cases for performance reasons it is desirable to make it possible to
4666 reuse these idle connections to serve other requests from different sessions.
4667 This directive allows to tune this behaviour.
4668
4669 The argument indicates the desired connection reuse strategy :
4670
4671 - "never" : idle connections are never shared between sessions. This is
4672 the default choice. It may be enforced to cancel a different
4673 strategy inherited from a defaults section or for
4674 troubleshooting. For example, if an old bogus application
4675 considers that multiple requests over the same connection come
4676 from the same client and it is not possible to fix the
4677 application, it may be desirable to disable connection sharing
4678 in a single backend. An example of such an application could
4679 be an old haproxy using cookie insertion in tunnel mode and
4680 not checking any request past the first one.
4681
4682 - "safe" : this is the recommended strategy. The first request of a
4683 session is always sent over its own connection, and only
4684 subsequent requests may be dispatched over other existing
4685 connections. This ensures that in case the server closes the
4686 connection when the request is being sent, the browser can
4687 decide to silently retry it. Since it is exactly equivalent to
4688 regular keep-alive, there should be no side effects.
4689
4690 - "aggressive" : this mode may be useful in webservices environments where
4691 all servers are not necessarily known and where it would be
4692 appreciable to deliver most first requests over existing
4693 connections. In this case, first requests are only delivered
4694 over existing connections that have been reused at least once,
4695 proving that the server correctly supports connection reuse.
4696 It should only be used when it's sure that the client can
4697 retry a failed request once in a while and where the benefit
4698 of aggressive connection reuse significantly outweights the
4699 downsides of rare connection failures.
4700
4701 - "always" : this mode is only recommended when the path to the server is
4702 known for never breaking existing connections quickly after
4703 releasing them. It allows the first request of a session to be
4704 sent to an existing connection. This can provide a significant
4705 performance increase over the "safe" strategy when the backend
4706 is a cache farm, since such components tend to show a
4707 consistent behaviour and will benefit from the connection
4708 sharing. It is recommended that the "http-keep-alive" timeout
4709 remains low in this mode so that no dead connections remain
4710 usable. In most cases, this will lead to the same performance
4711 gains as "aggressive" but with more risks. It should only be
4712 used when it improves the situation over "aggressive".
4713
4714 When http connection sharing is enabled, a great care is taken to respect the
4715 connection properties and compatiblities. Specifically :
4716 - connections made with "usesrc" followed by a client-dependant value
4717 ("client", "clientip", "hdr_ip") are marked private and never shared ;
4718
4719 - connections sent to a server with a TLS SNI extension are marked private
4720 and are never shared ;
4721
4722 - connections receiving a status code 401 or 407 expect some authentication
4723 to be sent in return. Due to certain bogus authentication schemes (such
4724 as NTLM) relying on the connection, these connections are marked private
4725 and are never shared ;
4726
4727 No connection pool is involved, once a session dies, the last idle connection
4728 it was attached to is deleted at the same time. This ensures that connections
4729 may not last after all sessions are closed.
4730
4731 Note: connection reuse improves the accuracy of the "server maxconn" setting,
4732 because almost no new connection will be established while idle connections
4733 remain available. This is particularly true with the "always" strategy.
4734
4735 See also : "option http-keep-alive", "server maxconn"
4736
4737
Mark Lamourinec2247f02012-01-04 13:02:01 -05004738http-send-name-header [<header>]
4739 Add the server name to a request. Use the header string given by <header>
4740
4741 May be used in sections: defaults | frontend | listen | backend
4742 yes | no | yes | yes
4743
4744 Arguments :
4745
4746 <header> The header string to use to send the server name
4747
4748 The "http-send-name-header" statement causes the name of the target
4749 server to be added to the headers of an HTTP request. The name
4750 is added with the header string proved.
4751
4752 See also : "server"
4753
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01004754id <value>
Willy Tarreau53fb4ae2009-10-04 23:04:08 +02004755 Set a persistent ID to a proxy.
4756 May be used in sections : defaults | frontend | listen | backend
4757 no | yes | yes | yes
4758 Arguments : none
4759
4760 Set a persistent ID for the proxy. This ID must be unique and positive.
4761 An unused ID will automatically be assigned if unset. The first assigned
4762 value will be 1. This ID is currently only returned in statistics.
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01004763
4764
Cyril Bonté0d4bf012010-04-25 23:21:46 +02004765ignore-persist { if | unless } <condition>
4766 Declare a condition to ignore persistence
4767 May be used in sections: defaults | frontend | listen | backend
4768 no | yes | yes | yes
4769
4770 By default, when cookie persistence is enabled, every requests containing
4771 the cookie are unconditionally persistent (assuming the target server is up
4772 and running).
4773
4774 The "ignore-persist" statement allows one to declare various ACL-based
4775 conditions which, when met, will cause a request to ignore persistence.
4776 This is sometimes useful to load balance requests for static files, which
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03004777 often don't require persistence. This can also be used to fully disable
Cyril Bonté0d4bf012010-04-25 23:21:46 +02004778 persistence for a specific User-Agent (for example, some web crawler bots).
4779
Cyril Bonté0d4bf012010-04-25 23:21:46 +02004780 The persistence is ignored when an "if" condition is met, or unless an
4781 "unless" condition is met.
4782
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03004783 Example:
4784 acl url_static path_beg /static /images /img /css
4785 acl url_static path_end .gif .png .jpg .css .js
4786 ignore-persist if url_static
4787
Cyril Bonté0d4bf012010-04-25 23:21:46 +02004788 See also : "force-persist", "cookie", and section 7 about ACL usage.
4789
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004790load-server-state-from-file { global | local | none }
4791 Allow seamless reload of HAProxy
4792 May be used in sections: defaults | frontend | listen | backend
4793 yes | no | yes | yes
4794
4795 This directive points HAProxy to a file where server state from previous
4796 running process has been saved. That way, when starting up, before handling
4797 traffic, the new process can apply old states to servers exactly has if no
4798 reload occured. The purpose of the "load-server-state-from-file" directive is
4799 to tell haproxy which file to use. For now, only 2 arguments to either prevent
4800 loading state or load states from a file containing all backends and servers.
4801 The state file can be generated by running the command "show servers state"
4802 over the stats socket and redirect output.
4803
4804 The format of the file is versionned and is very specific. To understand it,
4805 please read the documentation of the "show servers state" command (chapter
Willy Tarreau1af20c72017-06-23 16:01:14 +02004806 9.3 of Management Guide).
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004807
4808 Arguments:
4809 global load the content of the file pointed by the global directive
4810 named "server-state-file".
4811
4812 local load the content of the file pointed by the directive
4813 "server-state-file-name" if set. If not set, then the backend
4814 name is used as a file name.
4815
4816 none don't load any stat for this backend
4817
4818 Notes:
Willy Tarreaue5a60682016-11-09 14:54:53 +01004819 - server's IP address is preserved across reloads by default, but the
4820 order can be changed thanks to the server's "init-addr" setting. This
4821 means that an IP address change performed on the CLI at run time will
4822 be preserved, and that any change to the local resolver (eg: /etc/hosts)
4823 will possibly not have any effect if the state file is in use.
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004824
4825 - server's weight is applied from previous running process unless it has
4826 has changed between previous and new configuration files.
4827
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004828 Example: Minimal configuration
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004829
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004830 global
4831 stats socket /tmp/socket
4832 server-state-file /tmp/server_state
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004833
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004834 defaults
4835 load-server-state-from-file global
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004836
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004837 backend bk
4838 server s1 127.0.0.1:22 check weight 11
4839 server s2 127.0.0.1:22 check weight 12
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004840
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004841
4842 Then one can run :
4843
4844 socat /tmp/socket - <<< "show servers state" > /tmp/server_state
4845
4846 Content of the file /tmp/server_state would be like this:
4847
4848 1
4849 # <field names skipped for the doc example>
4850 1 bk 1 s1 127.0.0.1 2 0 11 11 4 6 3 4 6 0 0
4851 1 bk 2 s2 127.0.0.1 2 0 12 12 4 6 3 4 6 0 0
4852
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004853 Example: Minimal configuration
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004854
4855 global
4856 stats socket /tmp/socket
4857 server-state-base /etc/haproxy/states
4858
4859 defaults
4860 load-server-state-from-file local
4861
4862 backend bk
4863 server s1 127.0.0.1:22 check weight 11
4864 server s2 127.0.0.1:22 check weight 12
4865
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004866
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004867 Then one can run :
4868
4869 socat /tmp/socket - <<< "show servers state bk" > /etc/haproxy/states/bk
4870
4871 Content of the file /etc/haproxy/states/bk would be like this:
4872
4873 1
4874 # <field names skipped for the doc example>
4875 1 bk 1 s1 127.0.0.1 2 0 11 11 4 6 3 4 6 0 0
4876 1 bk 2 s2 127.0.0.1 2 0 12 12 4 6 3 4 6 0 0
4877
4878 See also: "server-state-file", "server-state-file-name", and
4879 "show servers state"
4880
Cyril Bonté0d4bf012010-04-25 23:21:46 +02004881
Willy Tarreau2769aa02007-12-27 18:26:09 +01004882log global
Willy Tarreau18324f52014-06-27 18:10:07 +02004883log <address> [len <length>] <facility> [<level> [<minlevel>]]
William Lallemand0f99e342011-10-12 17:50:54 +02004884no log
Willy Tarreau2769aa02007-12-27 18:26:09 +01004885 Enable per-instance logging of events and traffic.
4886 May be used in sections : defaults | frontend | listen | backend
4887 yes | yes | yes | yes
William Lallemand0f99e342011-10-12 17:50:54 +02004888
4889 Prefix :
4890 no should be used when the logger list must be flushed. For example,
4891 if you don't want to inherit from the default logger list. This
4892 prefix does not allow arguments.
4893
Willy Tarreau2769aa02007-12-27 18:26:09 +01004894 Arguments :
4895 global should be used when the instance's logging parameters are the
4896 same as the global ones. This is the most common usage. "global"
4897 replaces <address>, <facility> and <level> with those of the log
4898 entries found in the "global" section. Only one "log global"
4899 statement may be used per instance, and this form takes no other
4900 parameter.
4901
4902 <address> indicates where to send the logs. It takes the same format as
4903 for the "global" section's logs, and can be one of :
4904
4905 - An IPv4 address optionally followed by a colon (':') and a UDP
4906 port. If no port is specified, 514 is used by default (the
4907 standard syslog port).
4908
David du Colombier24bb5f52011-03-17 10:40:23 +01004909 - An IPv6 address followed by a colon (':') and optionally a UDP
4910 port. If no port is specified, 514 is used by default (the
4911 standard syslog port).
4912
Willy Tarreau2769aa02007-12-27 18:26:09 +01004913 - A filesystem path to a UNIX domain socket, keeping in mind
4914 considerations for chroot (be sure the path is accessible
4915 inside the chroot) and uid/gid (be sure the path is
4916 appropriately writeable).
4917
William Lallemandb2f07452015-05-12 14:27:13 +02004918 You may want to reference some environment variables in the
4919 address parameter, see section 2.3 about environment variables.
Willy Tarreaudad36a32013-03-11 01:20:04 +01004920
Willy Tarreau18324f52014-06-27 18:10:07 +02004921 <length> is an optional maximum line length. Log lines larger than this
4922 value will be truncated before being sent. The reason is that
4923 syslog servers act differently on log line length. All servers
4924 support the default value of 1024, but some servers simply drop
4925 larger lines while others do log them. If a server supports long
4926 lines, it may make sense to set this value here in order to avoid
4927 truncating long lines. Similarly, if a server drops long lines,
4928 it is preferable to truncate them before sending them. Accepted
4929 values are 80 to 65535 inclusive. The default value of 1024 is
4930 generally fine for all standard usages. Some specific cases of
4931 long captures or JSON-formated logs may require larger values.
4932
Willy Tarreau2769aa02007-12-27 18:26:09 +01004933 <facility> must be one of the 24 standard syslog facilities :
4934
4935 kern user mail daemon auth syslog lpr news
4936 uucp cron auth2 ftp ntp audit alert cron2
4937 local0 local1 local2 local3 local4 local5 local6 local7
4938
4939 <level> is optional and can be specified to filter outgoing messages. By
4940 default, all messages are sent. If a level is specified, only
4941 messages with a severity at least as important as this level
Willy Tarreauf7edefa2009-05-10 17:20:05 +02004942 will be sent. An optional minimum level can be specified. If it
4943 is set, logs emitted with a more severe level than this one will
4944 be capped to this level. This is used to avoid sending "emerg"
4945 messages on all terminals on some default syslog configurations.
4946 Eight levels are known :
Willy Tarreau2769aa02007-12-27 18:26:09 +01004947
4948 emerg alert crit err warning notice info debug
4949
William Lallemand0f99e342011-10-12 17:50:54 +02004950 It is important to keep in mind that it is the frontend which decides what to
4951 log from a connection, and that in case of content switching, the log entries
4952 from the backend will be ignored. Connections are logged at level "info".
Willy Tarreaucc6c8912009-02-22 10:53:55 +01004953
4954 However, backend log declaration define how and where servers status changes
4955 will be logged. Level "notice" will be used to indicate a server going up,
4956 "warning" will be used for termination signals and definitive service
4957 termination, and "alert" will be used for when a server goes down.
4958
4959 Note : According to RFC3164, messages are truncated to 1024 bytes before
4960 being emitted.
Willy Tarreau2769aa02007-12-27 18:26:09 +01004961
4962 Example :
4963 log global
Willy Tarreauf7edefa2009-05-10 17:20:05 +02004964 log 127.0.0.1:514 local0 notice # only send important events
4965 log 127.0.0.1:514 local0 notice notice # same but limit output level
William Lallemandb2f07452015-05-12 14:27:13 +02004966 log "${LOCAL_SYSLOG}:514" local0 notice # send to local server
Willy Tarreaudad36a32013-03-11 01:20:04 +01004967
Willy Tarreau2769aa02007-12-27 18:26:09 +01004968
William Lallemand48940402012-01-30 16:47:22 +01004969log-format <string>
Willy Tarreaufb4e7ea2015-01-07 14:55:17 +01004970 Specifies the log format string to use for traffic logs
4971 May be used in sections: defaults | frontend | listen | backend
4972 yes | yes | yes | no
William Lallemand48940402012-01-30 16:47:22 +01004973
Willy Tarreaufb4e7ea2015-01-07 14:55:17 +01004974 This directive specifies the log format string that will be used for all logs
4975 resulting from traffic passing through the frontend using this line. If the
4976 directive is used in a defaults section, all subsequent frontends will use
4977 the same log format. Please see section 8.2.4 which covers the log format
4978 string in depth.
William Lallemand48940402012-01-30 16:47:22 +01004979
Guillaume de Lafond29f45602017-03-31 19:52:15 +02004980 "log-format" directive overrides previous "option tcplog", "log-format" and
4981 "option httplog" directives.
4982
Dragan Dosen7ad31542015-09-28 17:16:47 +02004983log-format-sd <string>
4984 Specifies the RFC5424 structured-data log format string
4985 May be used in sections: defaults | frontend | listen | backend
4986 yes | yes | yes | no
4987
4988 This directive specifies the RFC5424 structured-data log format string that
4989 will be used for all logs resulting from traffic passing through the frontend
4990 using this line. If the directive is used in a defaults section, all
4991 subsequent frontends will use the same log format. Please see section 8.2.4
4992 which covers the log format string in depth.
4993
4994 See https://tools.ietf.org/html/rfc5424#section-6.3 for more information
4995 about the RFC5424 structured-data part.
4996
4997 Note : This log format string will be used only for loggers that have set
4998 log format to "rfc5424".
4999
5000 Example :
5001 log-format-sd [exampleSDID@1234\ bytes=\"%B\"\ status=\"%ST\"]
5002
5003
Willy Tarreau094af4e2015-01-07 15:03:42 +01005004log-tag <string>
5005 Specifies the log tag to use for all outgoing logs
5006 May be used in sections: defaults | frontend | listen | backend
5007 yes | yes | yes | yes
5008
5009 Sets the tag field in the syslog header to this string. It defaults to the
5010 log-tag set in the global section, otherwise the program name as launched
5011 from the command line, which usually is "haproxy". Sometimes it can be useful
5012 to differentiate between multiple processes running on the same host, or to
5013 differentiate customer instances running in the same process. In the backend,
5014 logs about servers up/down will use this tag. As a hint, it can be convenient
5015 to set a log-tag related to a hosted customer in a defaults section then put
5016 all the frontends and backends for that customer, then start another customer
5017 in a new defaults section. See also the global "log-tag" directive.
Willy Tarreau2769aa02007-12-27 18:26:09 +01005018
Willy Tarreauc35362a2014-04-25 13:58:37 +02005019max-keep-alive-queue <value>
5020 Set the maximum server queue size for maintaining keep-alive connections
5021 May be used in sections: defaults | frontend | listen | backend
5022 yes | no | yes | yes
5023
5024 HTTP keep-alive tries to reuse the same server connection whenever possible,
5025 but sometimes it can be counter-productive, for example if a server has a lot
5026 of connections while other ones are idle. This is especially true for static
5027 servers.
5028
5029 The purpose of this setting is to set a threshold on the number of queued
5030 connections at which haproxy stops trying to reuse the same server and prefers
5031 to find another one. The default value, -1, means there is no limit. A value
5032 of zero means that keep-alive requests will never be queued. For very close
5033 servers which can be reached with a low latency and which are not sensible to
5034 breaking keep-alive, a low value is recommended (eg: local static server can
5035 use a value of 10 or less). For remote servers suffering from a high latency,
5036 higher values might be needed to cover for the latency and/or the cost of
5037 picking a different server.
5038
5039 Note that this has no impact on responses which are maintained to the same
5040 server consecutively to a 401 response. They will still go to the same server
5041 even if they have to be queued.
5042
5043 See also : "option http-server-close", "option prefer-last-server", server
5044 "maxconn" and cookie persistence.
5045
5046
Willy Tarreau2769aa02007-12-27 18:26:09 +01005047maxconn <conns>
5048 Fix the maximum number of concurrent connections on a frontend
5049 May be used in sections : defaults | frontend | listen | backend
5050 yes | yes | yes | no
5051 Arguments :
5052 <conns> is the maximum number of concurrent connections the frontend will
5053 accept to serve. Excess connections will be queued by the system
5054 in the socket's listen queue and will be served once a connection
5055 closes.
5056
5057 If the system supports it, it can be useful on big sites to raise this limit
5058 very high so that haproxy manages connection queues, instead of leaving the
5059 clients with unanswered connection attempts. This value should not exceed the
5060 global maxconn. Also, keep in mind that a connection contains two buffers
Baptiste Assmann79fb45d2016-03-06 23:34:31 +01005061 of tune.bufsize (16kB by default) each, as well as some other data resulting
5062 in about 33 kB of RAM being consumed per established connection. That means
5063 that a medium system equipped with 1GB of RAM can withstand around
5064 20000-25000 concurrent connections if properly tuned.
Willy Tarreau2769aa02007-12-27 18:26:09 +01005065
5066 Also, when <conns> is set to large values, it is possible that the servers
5067 are not sized to accept such loads, and for this reason it is generally wise
5068 to assign them some reasonable connection limits.
5069
Vincent Bernat6341be52012-06-27 17:18:30 +02005070 By default, this value is set to 2000.
5071
Willy Tarreau2769aa02007-12-27 18:26:09 +01005072 See also : "server", global section's "maxconn", "fullconn"
5073
5074
5075mode { tcp|http|health }
5076 Set the running mode or protocol of the instance
5077 May be used in sections : defaults | frontend | listen | backend
5078 yes | yes | yes | yes
5079 Arguments :
5080 tcp The instance will work in pure TCP mode. A full-duplex connection
5081 will be established between clients and servers, and no layer 7
5082 examination will be performed. This is the default mode. It
5083 should be used for SSL, SSH, SMTP, ...
5084
5085 http The instance will work in HTTP mode. The client request will be
5086 analyzed in depth before connecting to any server. Any request
5087 which is not RFC-compliant will be rejected. Layer 7 filtering,
5088 processing and switching will be possible. This is the mode which
5089 brings HAProxy most of its value.
5090
5091 health The instance will work in "health" mode. It will just reply "OK"
Willy Tarreau82569f92012-09-27 23:48:56 +02005092 to incoming connections and close the connection. Alternatively,
5093 If the "httpchk" option is set, "HTTP/1.0 200 OK" will be sent
5094 instead. Nothing will be logged in either case. This mode is used
5095 to reply to external components health checks. This mode is
5096 deprecated and should not be used anymore as it is possible to do
5097 the same and even better by combining TCP or HTTP modes with the
5098 "monitor" keyword.
Willy Tarreau2769aa02007-12-27 18:26:09 +01005099
Cyril Bonté108cf6e2012-04-21 23:30:29 +02005100 When doing content switching, it is mandatory that the frontend and the
5101 backend are in the same mode (generally HTTP), otherwise the configuration
5102 will be refused.
Willy Tarreau2769aa02007-12-27 18:26:09 +01005103
Cyril Bonté108cf6e2012-04-21 23:30:29 +02005104 Example :
Willy Tarreau2769aa02007-12-27 18:26:09 +01005105 defaults http_instances
5106 mode http
5107
Cyril Bonté108cf6e2012-04-21 23:30:29 +02005108 See also : "monitor", "monitor-net"
Willy Tarreau2769aa02007-12-27 18:26:09 +01005109
Willy Tarreau0ba27502007-12-24 16:55:16 +01005110
Cyril Bontéf0c60612010-02-06 14:44:47 +01005111monitor fail { if | unless } <condition>
Willy Tarreau2769aa02007-12-27 18:26:09 +01005112 Add a condition to report a failure to a monitor HTTP request.
Willy Tarreau0ba27502007-12-24 16:55:16 +01005113 May be used in sections : defaults | frontend | listen | backend
5114 no | yes | yes | no
Willy Tarreau0ba27502007-12-24 16:55:16 +01005115 Arguments :
5116 if <cond> the monitor request will fail if the condition is satisfied,
5117 and will succeed otherwise. The condition should describe a
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005118 combined test which must induce a failure if all conditions
Willy Tarreau0ba27502007-12-24 16:55:16 +01005119 are met, for instance a low number of servers both in a
5120 backend and its backup.
5121
5122 unless <cond> the monitor request will succeed only if the condition is
5123 satisfied, and will fail otherwise. Such a condition may be
5124 based on a test on the presence of a minimum number of active
5125 servers in a list of backends.
5126
5127 This statement adds a condition which can force the response to a monitor
5128 request to report a failure. By default, when an external component queries
5129 the URI dedicated to monitoring, a 200 response is returned. When one of the
5130 conditions above is met, haproxy will return 503 instead of 200. This is
5131 very useful to report a site failure to an external component which may base
5132 routing advertisements between multiple sites on the availability reported by
5133 haproxy. In this case, one would rely on an ACL involving the "nbsrv"
Willy Tarreauae94d4d2011-05-11 16:28:49 +02005134 criterion. Note that "monitor fail" only works in HTTP mode. Both status
5135 messages may be tweaked using "errorfile" or "errorloc" if needed.
Willy Tarreau0ba27502007-12-24 16:55:16 +01005136
5137 Example:
5138 frontend www
Willy Tarreau2769aa02007-12-27 18:26:09 +01005139 mode http
Willy Tarreau0ba27502007-12-24 16:55:16 +01005140 acl site_dead nbsrv(dynamic) lt 2
5141 acl site_dead nbsrv(static) lt 2
5142 monitor-uri /site_alive
5143 monitor fail if site_dead
5144
Willy Tarreauae94d4d2011-05-11 16:28:49 +02005145 See also : "monitor-net", "monitor-uri", "errorfile", "errorloc"
Willy Tarreau2769aa02007-12-27 18:26:09 +01005146
5147
5148monitor-net <source>
5149 Declare a source network which is limited to monitor requests
5150 May be used in sections : defaults | frontend | listen | backend
5151 yes | yes | yes | no
5152 Arguments :
5153 <source> is the source IPv4 address or network which will only be able to
5154 get monitor responses to any request. It can be either an IPv4
5155 address, a host name, or an address followed by a slash ('/')
5156 followed by a mask.
5157
5158 In TCP mode, any connection coming from a source matching <source> will cause
5159 the connection to be immediately closed without any log. This allows another
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005160 equipment to probe the port and verify that it is still listening, without
Willy Tarreau2769aa02007-12-27 18:26:09 +01005161 forwarding the connection to a remote server.
5162
5163 In HTTP mode, a connection coming from a source matching <source> will be
5164 accepted, the following response will be sent without waiting for a request,
5165 then the connection will be closed : "HTTP/1.0 200 OK". This is normally
5166 enough for any front-end HTTP probe to detect that the service is UP and
Willy Tarreau82569f92012-09-27 23:48:56 +02005167 running without forwarding the request to a backend server. Note that this
5168 response is sent in raw format, without any transformation. This is important
5169 as it means that it will not be SSL-encrypted on SSL listeners.
Willy Tarreau2769aa02007-12-27 18:26:09 +01005170
Willy Tarreau82569f92012-09-27 23:48:56 +02005171 Monitor requests are processed very early, just after tcp-request connection
5172 ACLs which are the only ones able to block them. These connections are short
5173 lived and never wait for any data from the client. They cannot be logged, and
5174 it is the intended purpose. They are only used to report HAProxy's health to
5175 an upper component, nothing more. Please note that "monitor fail" rules do
5176 not apply to connections intercepted by "monitor-net".
Willy Tarreau2769aa02007-12-27 18:26:09 +01005177
Willy Tarreau95cd2832010-03-04 23:36:33 +01005178 Last, please note that only one "monitor-net" statement can be specified in
5179 a frontend. If more than one is found, only the last one will be considered.
Cyril Bonté108cf6e2012-04-21 23:30:29 +02005180
Willy Tarreau2769aa02007-12-27 18:26:09 +01005181 Example :
5182 # addresses .252 and .253 are just probing us.
5183 frontend www
5184 monitor-net 192.168.0.252/31
5185
5186 See also : "monitor fail", "monitor-uri"
5187
5188
5189monitor-uri <uri>
5190 Intercept a URI used by external components' monitor requests
5191 May be used in sections : defaults | frontend | listen | backend
5192 yes | yes | yes | no
5193 Arguments :
5194 <uri> is the exact URI which we want to intercept to return HAProxy's
5195 health status instead of forwarding the request.
5196
5197 When an HTTP request referencing <uri> will be received on a frontend,
5198 HAProxy will not forward it nor log it, but instead will return either
5199 "HTTP/1.0 200 OK" or "HTTP/1.0 503 Service unavailable", depending on failure
5200 conditions defined with "monitor fail". This is normally enough for any
5201 front-end HTTP probe to detect that the service is UP and running without
5202 forwarding the request to a backend server. Note that the HTTP method, the
5203 version and all headers are ignored, but the request must at least be valid
5204 at the HTTP level. This keyword may only be used with an HTTP-mode frontend.
5205
5206 Monitor requests are processed very early. It is not possible to block nor
5207 divert them using ACLs. They cannot be logged either, and it is the intended
5208 purpose. They are only used to report HAProxy's health to an upper component,
5209 nothing more. However, it is possible to add any number of conditions using
5210 "monitor fail" and ACLs so that the result can be adjusted to whatever check
5211 can be imagined (most often the number of available servers in a backend).
5212
5213 Example :
5214 # Use /haproxy_test to report haproxy's status
5215 frontend www
5216 mode http
5217 monitor-uri /haproxy_test
5218
5219 See also : "monitor fail", "monitor-net"
5220
Willy Tarreau0ba27502007-12-24 16:55:16 +01005221
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005222option abortonclose
5223no option abortonclose
5224 Enable or disable early dropping of aborted requests pending in queues.
5225 May be used in sections : defaults | frontend | listen | backend
5226 yes | no | yes | yes
5227 Arguments : none
5228
5229 In presence of very high loads, the servers will take some time to respond.
5230 The per-instance connection queue will inflate, and the response time will
5231 increase respective to the size of the queue times the average per-session
5232 response time. When clients will wait for more than a few seconds, they will
Willy Tarreau198a7442008-01-17 12:05:32 +01005233 often hit the "STOP" button on their browser, leaving a useless request in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005234 the queue, and slowing down other users, and the servers as well, because the
5235 request will eventually be served, then aborted at the first error
5236 encountered while delivering the response.
5237
5238 As there is no way to distinguish between a full STOP and a simple output
5239 close on the client side, HTTP agents should be conservative and consider
5240 that the client might only have closed its output channel while waiting for
5241 the response. However, this introduces risks of congestion when lots of users
5242 do the same, and is completely useless nowadays because probably no client at
5243 all will close the session while waiting for the response. Some HTTP agents
Willy Tarreaud72758d2010-01-12 10:42:19 +01005244 support this behaviour (Squid, Apache, HAProxy), and others do not (TUX, most
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005245 hardware-based load balancers). So the probability for a closed input channel
Willy Tarreau198a7442008-01-17 12:05:32 +01005246 to represent a user hitting the "STOP" button is close to 100%, and the risk
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005247 of being the single component to break rare but valid traffic is extremely
5248 low, which adds to the temptation to be able to abort a session early while
5249 still not served and not pollute the servers.
5250
5251 In HAProxy, the user can choose the desired behaviour using the option
5252 "abortonclose". By default (without the option) the behaviour is HTTP
5253 compliant and aborted requests will be served. But when the option is
5254 specified, a session with an incoming channel closed will be aborted while
5255 it is still possible, either pending in the queue for a connection slot, or
5256 during the connection establishment if the server has not yet acknowledged
5257 the connection request. This considerably reduces the queue size and the load
5258 on saturated servers when users are tempted to click on STOP, which in turn
Willy Tarreaud72758d2010-01-12 10:42:19 +01005259 reduces the response time for other users.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005260
5261 If this option has been enabled in a "defaults" section, it can be disabled
5262 in a specific instance by prepending the "no" keyword before it.
5263
5264 See also : "timeout queue" and server's "maxconn" and "maxqueue" parameters
5265
5266
Willy Tarreau4076a152009-04-02 15:18:36 +02005267option accept-invalid-http-request
5268no option accept-invalid-http-request
5269 Enable or disable relaxing of HTTP request parsing
5270 May be used in sections : defaults | frontend | listen | backend
5271 yes | yes | yes | no
5272 Arguments : none
5273
Willy Tarreau91852eb2015-05-01 13:26:00 +02005274 By default, HAProxy complies with RFC7230 in terms of message parsing. This
Willy Tarreau4076a152009-04-02 15:18:36 +02005275 means that invalid characters in header names are not permitted and cause an
5276 error to be returned to the client. This is the desired behaviour as such
5277 forbidden characters are essentially used to build attacks exploiting server
5278 weaknesses, and bypass security filtering. Sometimes, a buggy browser or
5279 server will emit invalid header names for whatever reason (configuration,
5280 implementation) and the issue will not be immediately fixed. In such a case,
5281 it is possible to relax HAProxy's header name parser to accept any character
Willy Tarreau422246e2012-01-07 23:54:13 +01005282 even if that does not make sense, by specifying this option. Similarly, the
5283 list of characters allowed to appear in a URI is well defined by RFC3986, and
5284 chars 0-31, 32 (space), 34 ('"'), 60 ('<'), 62 ('>'), 92 ('\'), 94 ('^'), 96
5285 ('`'), 123 ('{'), 124 ('|'), 125 ('}'), 127 (delete) and anything above are
5286 not allowed at all. Haproxy always blocks a number of them (0..32, 127). The
Willy Tarreau91852eb2015-05-01 13:26:00 +02005287 remaining ones are blocked by default unless this option is enabled. This
Willy Tarreau13317662015-05-01 13:47:08 +02005288 option also relaxes the test on the HTTP version, it allows HTTP/0.9 requests
5289 to pass through (no version specified) and multiple digits for both the major
5290 and the minor version.
Willy Tarreau4076a152009-04-02 15:18:36 +02005291
5292 This option should never be enabled by default as it hides application bugs
5293 and open security breaches. It should only be deployed after a problem has
5294 been confirmed.
5295
5296 When this option is enabled, erroneous header names will still be accepted in
5297 requests, but the complete request will be captured in order to permit later
Willy Tarreau422246e2012-01-07 23:54:13 +01005298 analysis using the "show errors" request on the UNIX stats socket. Similarly,
5299 requests containing invalid chars in the URI part will be logged. Doing this
Willy Tarreau4076a152009-04-02 15:18:36 +02005300 also helps confirming that the issue has been solved.
5301
5302 If this option has been enabled in a "defaults" section, it can be disabled
5303 in a specific instance by prepending the "no" keyword before it.
5304
5305 See also : "option accept-invalid-http-response" and "show errors" on the
5306 stats socket.
5307
5308
5309option accept-invalid-http-response
5310no option accept-invalid-http-response
5311 Enable or disable relaxing of HTTP response parsing
5312 May be used in sections : defaults | frontend | listen | backend
5313 yes | no | yes | yes
5314 Arguments : none
5315
Willy Tarreau91852eb2015-05-01 13:26:00 +02005316 By default, HAProxy complies with RFC7230 in terms of message parsing. This
Willy Tarreau4076a152009-04-02 15:18:36 +02005317 means that invalid characters in header names are not permitted and cause an
5318 error to be returned to the client. This is the desired behaviour as such
5319 forbidden characters are essentially used to build attacks exploiting server
5320 weaknesses, and bypass security filtering. Sometimes, a buggy browser or
5321 server will emit invalid header names for whatever reason (configuration,
5322 implementation) and the issue will not be immediately fixed. In such a case,
5323 it is possible to relax HAProxy's header name parser to accept any character
Willy Tarreau91852eb2015-05-01 13:26:00 +02005324 even if that does not make sense, by specifying this option. This option also
5325 relaxes the test on the HTTP version format, it allows multiple digits for
5326 both the major and the minor version.
Willy Tarreau4076a152009-04-02 15:18:36 +02005327
5328 This option should never be enabled by default as it hides application bugs
5329 and open security breaches. It should only be deployed after a problem has
5330 been confirmed.
5331
5332 When this option is enabled, erroneous header names will still be accepted in
5333 responses, but the complete response will be captured in order to permit
5334 later analysis using the "show errors" request on the UNIX stats socket.
5335 Doing this also helps confirming that the issue has been solved.
5336
5337 If this option has been enabled in a "defaults" section, it can be disabled
5338 in a specific instance by prepending the "no" keyword before it.
5339
5340 See also : "option accept-invalid-http-request" and "show errors" on the
5341 stats socket.
5342
5343
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005344option allbackups
5345no option allbackups
5346 Use either all backup servers at a time or only the first one
5347 May be used in sections : defaults | frontend | listen | backend
5348 yes | no | yes | yes
5349 Arguments : none
5350
5351 By default, the first operational backup server gets all traffic when normal
5352 servers are all down. Sometimes, it may be preferred to use multiple backups
5353 at once, because one will not be enough. When "option allbackups" is enabled,
5354 the load balancing will be performed among all backup servers when all normal
5355 ones are unavailable. The same load balancing algorithm will be used and the
5356 servers' weights will be respected. Thus, there will not be any priority
5357 order between the backup servers anymore.
5358
5359 This option is mostly used with static server farms dedicated to return a
5360 "sorry" page when an application is completely offline.
5361
5362 If this option has been enabled in a "defaults" section, it can be disabled
5363 in a specific instance by prepending the "no" keyword before it.
5364
5365
5366option checkcache
5367no option checkcache
Godbach7056a352013-12-11 20:01:07 +08005368 Analyze all server responses and block responses with cacheable cookies
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005369 May be used in sections : defaults | frontend | listen | backend
5370 yes | no | yes | yes
5371 Arguments : none
5372
5373 Some high-level frameworks set application cookies everywhere and do not
5374 always let enough control to the developer to manage how the responses should
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005375 be cached. When a session cookie is returned on a cacheable object, there is a
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005376 high risk of session crossing or stealing between users traversing the same
5377 caches. In some situations, it is better to block the response than to let
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02005378 some sensitive session information go in the wild.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005379
5380 The option "checkcache" enables deep inspection of all server responses for
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005381 strict compliance with HTTP specification in terms of cacheability. It
Willy Tarreau198a7442008-01-17 12:05:32 +01005382 carefully checks "Cache-control", "Pragma" and "Set-cookie" headers in server
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005383 response to check if there's a risk of caching a cookie on a client-side
5384 proxy. When this option is enabled, the only responses which can be delivered
Willy Tarreau198a7442008-01-17 12:05:32 +01005385 to the client are :
5386 - all those without "Set-Cookie" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005387 - all those with a return code other than 200, 203, 206, 300, 301, 410,
Willy Tarreau198a7442008-01-17 12:05:32 +01005388 provided that the server has not set a "Cache-control: public" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005389 - all those that come from a POST request, provided that the server has not
5390 set a 'Cache-Control: public' header ;
5391 - those with a 'Pragma: no-cache' header
5392 - those with a 'Cache-control: private' header
5393 - those with a 'Cache-control: no-store' header
5394 - those with a 'Cache-control: max-age=0' header
5395 - those with a 'Cache-control: s-maxage=0' header
5396 - those with a 'Cache-control: no-cache' header
5397 - those with a 'Cache-control: no-cache="set-cookie"' header
5398 - those with a 'Cache-control: no-cache="set-cookie,' header
5399 (allowing other fields after set-cookie)
5400
5401 If a response doesn't respect these requirements, then it will be blocked
Willy Tarreau198a7442008-01-17 12:05:32 +01005402 just as if it was from an "rspdeny" filter, with an "HTTP 502 bad gateway".
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005403 The session state shows "PH--" meaning that the proxy blocked the response
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005404 during headers processing. Additionally, an alert will be sent in the logs so
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005405 that admins are informed that there's something to be fixed.
5406
5407 Due to the high impact on the application, the application should be tested
5408 in depth with the option enabled before going to production. It is also a
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01005409 good practice to always activate it during tests, even if it is not used in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005410 production, as it will report potentially dangerous application behaviours.
5411
5412 If this option has been enabled in a "defaults" section, it can be disabled
5413 in a specific instance by prepending the "no" keyword before it.
5414
5415
5416option clitcpka
5417no option clitcpka
5418 Enable or disable the sending of TCP keepalive packets on the client side
5419 May be used in sections : defaults | frontend | listen | backend
5420 yes | yes | yes | no
5421 Arguments : none
5422
5423 When there is a firewall or any session-aware component between a client and
5424 a server, and when the protocol involves very long sessions with long idle
5425 periods (eg: remote desktops), there is a risk that one of the intermediate
5426 components decides to expire a session which has remained idle for too long.
5427
5428 Enabling socket-level TCP keep-alives makes the system regularly send packets
5429 to the other end of the connection, leaving it active. The delay between
5430 keep-alive probes is controlled by the system only and depends both on the
5431 operating system and its tuning parameters.
5432
5433 It is important to understand that keep-alive packets are neither emitted nor
5434 received at the application level. It is only the network stacks which sees
5435 them. For this reason, even if one side of the proxy already uses keep-alives
5436 to maintain its connection alive, those keep-alive packets will not be
5437 forwarded to the other side of the proxy.
5438
5439 Please note that this has nothing to do with HTTP keep-alive.
5440
5441 Using option "clitcpka" enables the emission of TCP keep-alive probes on the
5442 client side of a connection, which should help when session expirations are
5443 noticed between HAProxy and a client.
5444
5445 If this option has been enabled in a "defaults" section, it can be disabled
5446 in a specific instance by prepending the "no" keyword before it.
5447
5448 See also : "option srvtcpka", "option tcpka"
5449
5450
Willy Tarreau0ba27502007-12-24 16:55:16 +01005451option contstats
5452 Enable continuous traffic statistics updates
5453 May be used in sections : defaults | frontend | listen | backend
5454 yes | yes | yes | no
5455 Arguments : none
5456
5457 By default, counters used for statistics calculation are incremented
5458 only when a session finishes. It works quite well when serving small
5459 objects, but with big ones (for example large images or archives) or
5460 with A/V streaming, a graph generated from haproxy counters looks like
Willy Tarreaudef0d222016-11-08 22:03:00 +01005461 a hedgehog. With this option enabled counters get incremented frequently
5462 along the session, typically every 5 seconds, which is often enough to
5463 produce clean graphs. Recounting touches a hotpath directly so it is not
5464 not enabled by default, as it can cause a lot of wakeups for very large
5465 session counts and cause a small performance drop.
Willy Tarreau0ba27502007-12-24 16:55:16 +01005466
5467
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02005468option dontlog-normal
5469no option dontlog-normal
5470 Enable or disable logging of normal, successful connections
5471 May be used in sections : defaults | frontend | listen | backend
5472 yes | yes | yes | no
5473 Arguments : none
5474
5475 There are large sites dealing with several thousand connections per second
5476 and for which logging is a major pain. Some of them are even forced to turn
5477 logs off and cannot debug production issues. Setting this option ensures that
5478 normal connections, those which experience no error, no timeout, no retry nor
5479 redispatch, will not be logged. This leaves disk space for anomalies. In HTTP
5480 mode, the response status code is checked and return codes 5xx will still be
5481 logged.
5482
5483 It is strongly discouraged to use this option as most of the time, the key to
5484 complex issues is in the normal logs which will not be logged here. If you
5485 need to separate logs, see the "log-separate-errors" option instead.
5486
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005487 See also : "log", "dontlognull", "log-separate-errors" and section 8 about
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02005488 logging.
5489
5490
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005491option dontlognull
5492no option dontlognull
5493 Enable or disable logging of null connections
5494 May be used in sections : defaults | frontend | listen | backend
5495 yes | yes | yes | no
5496 Arguments : none
5497
5498 In certain environments, there are components which will regularly connect to
5499 various systems to ensure that they are still alive. It can be the case from
5500 another load balancer as well as from monitoring systems. By default, even a
5501 simple port probe or scan will produce a log. If those connections pollute
5502 the logs too much, it is possible to enable option "dontlognull" to indicate
5503 that a connection on which no data has been transferred will not be logged,
Willy Tarreau0f228a02015-05-01 15:37:53 +02005504 which typically corresponds to those probes. Note that errors will still be
5505 returned to the client and accounted for in the stats. If this is not what is
5506 desired, option http-ignore-probes can be used instead.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005507
5508 It is generally recommended not to use this option in uncontrolled
5509 environments (eg: internet), otherwise scans and other malicious activities
5510 would not be logged.
5511
5512 If this option has been enabled in a "defaults" section, it can be disabled
5513 in a specific instance by prepending the "no" keyword before it.
5514
Willy Tarreau0f228a02015-05-01 15:37:53 +02005515 See also : "log", "http-ignore-probes", "monitor-net", "monitor-uri", and
5516 section 8 about logging.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005517
5518
5519option forceclose
5520no option forceclose
5521 Enable or disable active connection closing after response is transferred.
5522 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaua31e5df2009-12-30 01:10:35 +01005523 yes | yes | yes | yes
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005524 Arguments : none
5525
5526 Some HTTP servers do not necessarily close the connections when they receive
5527 the "Connection: close" set by "option httpclose", and if the client does not
5528 close either, then the connection remains open till the timeout expires. This
5529 causes high number of simultaneous connections on the servers and shows high
5530 global session times in the logs.
5531
5532 When this happens, it is possible to use "option forceclose". It will
Willy Tarreau82eeaf22009-12-29 12:09:05 +01005533 actively close the outgoing server channel as soon as the server has finished
Cyril Bonté653dcd62014-02-20 00:13:15 +01005534 to respond and release some resources earlier than with "option httpclose".
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005535
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005536 This option may also be combined with "option http-pretend-keepalive", which
5537 will disable sending of the "Connection: close" header, but will still cause
5538 the connection to be closed once the whole response is received.
5539
Cyril Bonté653dcd62014-02-20 00:13:15 +01005540 This option disables and replaces any previous "option httpclose", "option
5541 http-server-close", "option http-keep-alive", or "option http-tunnel".
Willy Tarreau02bce8b2014-01-30 00:15:28 +01005542
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005543 If this option has been enabled in a "defaults" section, it can be disabled
5544 in a specific instance by prepending the "no" keyword before it.
5545
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005546 See also : "option httpclose" and "option http-pretend-keepalive"
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005547
5548
Willy Tarreau87cf5142011-08-19 22:57:24 +02005549option forwardfor [ except <network> ] [ header <name> ] [ if-none ]
Willy Tarreauc27debf2008-01-06 08:57:02 +01005550 Enable insertion of the X-Forwarded-For header to requests sent to servers
5551 May be used in sections : defaults | frontend | listen | backend
5552 yes | yes | yes | yes
5553 Arguments :
5554 <network> is an optional argument used to disable this option for sources
5555 matching <network>
Ross Westaf72a1d2008-08-03 10:51:45 +02005556 <name> an optional argument to specify a different "X-Forwarded-For"
Willy Tarreaud72758d2010-01-12 10:42:19 +01005557 header name.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005558
5559 Since HAProxy works in reverse-proxy mode, the servers see its IP address as
5560 their client address. This is sometimes annoying when the client's IP address
5561 is expected in server logs. To solve this problem, the well-known HTTP header
5562 "X-Forwarded-For" may be added by HAProxy to all requests sent to the server.
5563 This header contains a value representing the client's IP address. Since this
5564 header is always appended at the end of the existing header list, the server
5565 must be configured to always use the last occurrence of this header only. See
Ross Westaf72a1d2008-08-03 10:51:45 +02005566 the server's manual to find how to enable use of this standard header. Note
5567 that only the last occurrence of the header must be used, since it is really
5568 possible that the client has already brought one.
5569
Willy Tarreaud72758d2010-01-12 10:42:19 +01005570 The keyword "header" may be used to supply a different header name to replace
Ross Westaf72a1d2008-08-03 10:51:45 +02005571 the default "X-Forwarded-For". This can be useful where you might already
Willy Tarreaud72758d2010-01-12 10:42:19 +01005572 have a "X-Forwarded-For" header from a different application (eg: stunnel),
5573 and you need preserve it. Also if your backend server doesn't use the
Ross Westaf72a1d2008-08-03 10:51:45 +02005574 "X-Forwarded-For" header and requires different one (eg: Zeus Web Servers
5575 require "X-Cluster-Client-IP").
Willy Tarreauc27debf2008-01-06 08:57:02 +01005576
5577 Sometimes, a same HAProxy instance may be shared between a direct client
5578 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
5579 used to decrypt HTTPS traffic). It is possible to disable the addition of the
5580 header for a known source address or network by adding the "except" keyword
5581 followed by the network address. In this case, any source IP matching the
5582 network will not cause an addition of this header. Most common uses are with
5583 private networks or 127.0.0.1.
5584
Willy Tarreau87cf5142011-08-19 22:57:24 +02005585 Alternatively, the keyword "if-none" states that the header will only be
5586 added if it is not present. This should only be used in perfectly trusted
5587 environment, as this might cause a security issue if headers reaching haproxy
5588 are under the control of the end-user.
5589
Willy Tarreauc27debf2008-01-06 08:57:02 +01005590 This option may be specified either in the frontend or in the backend. If at
Ross Westaf72a1d2008-08-03 10:51:45 +02005591 least one of them uses it, the header will be added. Note that the backend's
5592 setting of the header subargument takes precedence over the frontend's if
Willy Tarreau87cf5142011-08-19 22:57:24 +02005593 both are defined. In the case of the "if-none" argument, if at least one of
5594 the frontend or the backend does not specify it, it wants the addition to be
5595 mandatory, so it wins.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005596
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02005597 Example :
Willy Tarreauc27debf2008-01-06 08:57:02 +01005598 # Public HTTP address also used by stunnel on the same machine
5599 frontend www
5600 mode http
5601 option forwardfor except 127.0.0.1 # stunnel already adds the header
5602
Ross Westaf72a1d2008-08-03 10:51:45 +02005603 # Those servers want the IP Address in X-Client
5604 backend www
5605 mode http
5606 option forwardfor header X-Client
5607
Willy Tarreau87cf5142011-08-19 22:57:24 +02005608 See also : "option httpclose", "option http-server-close",
Willy Tarreau70dffda2014-01-30 03:07:23 +01005609 "option forceclose", "option http-keep-alive"
Willy Tarreauc27debf2008-01-06 08:57:02 +01005610
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005611
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02005612option http-buffer-request
5613no option http-buffer-request
5614 Enable or disable waiting for whole HTTP request body before proceeding
5615 May be used in sections : defaults | frontend | listen | backend
5616 yes | yes | yes | yes
5617 Arguments : none
5618
5619 It is sometimes desirable to wait for the body of an HTTP request before
5620 taking a decision. This is what is being done by "balance url_param" for
5621 example. The first use case is to buffer requests from slow clients before
5622 connecting to the server. Another use case consists in taking the routing
5623 decision based on the request body's contents. This option placed in a
5624 frontend or backend forces the HTTP processing to wait until either the whole
5625 body is received, or the request buffer is full, or the first chunk is
5626 complete in case of chunked encoding. It can have undesired side effects with
Tim Düsterhus4896c442016-11-29 02:15:19 +01005627 some applications abusing HTTP by expecting unbuffered transmissions between
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02005628 the frontend and the backend, so this should definitely not be used by
5629 default.
5630
Baptiste Assmanneccdf432015-10-28 13:49:01 +01005631 See also : "option http-no-delay", "timeout http-request"
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02005632
5633
Willy Tarreau0f228a02015-05-01 15:37:53 +02005634option http-ignore-probes
5635no option http-ignore-probes
5636 Enable or disable logging of null connections and request timeouts
5637 May be used in sections : defaults | frontend | listen | backend
5638 yes | yes | yes | no
5639 Arguments : none
5640
5641 Recently some browsers started to implement a "pre-connect" feature
5642 consisting in speculatively connecting to some recently visited web sites
5643 just in case the user would like to visit them. This results in many
5644 connections being established to web sites, which end up in 408 Request
5645 Timeout if the timeout strikes first, or 400 Bad Request when the browser
5646 decides to close them first. These ones pollute the log and feed the error
5647 counters. There was already "option dontlognull" but it's insufficient in
5648 this case. Instead, this option does the following things :
5649 - prevent any 400/408 message from being sent to the client if nothing
5650 was received over a connection before it was closed ;
5651 - prevent any log from being emitted in this situation ;
5652 - prevent any error counter from being incremented
5653
5654 That way the empty connection is silently ignored. Note that it is better
5655 not to use this unless it is clear that it is needed, because it will hide
5656 real problems. The most common reason for not receiving a request and seeing
5657 a 408 is due to an MTU inconsistency between the client and an intermediary
5658 element such as a VPN, which blocks too large packets. These issues are
5659 generally seen with POST requests as well as GET with large cookies. The logs
5660 are often the only way to detect them.
5661
5662 If this option has been enabled in a "defaults" section, it can be disabled
5663 in a specific instance by prepending the "no" keyword before it.
5664
5665 See also : "log", "dontlognull", "errorfile", and section 8 about logging.
5666
5667
Willy Tarreau16bfb022010-01-16 19:48:41 +01005668option http-keep-alive
5669no option http-keep-alive
5670 Enable or disable HTTP keep-alive from client to server
5671 May be used in sections : defaults | frontend | listen | backend
5672 yes | yes | yes | yes
5673 Arguments : none
5674
Willy Tarreau70dffda2014-01-30 03:07:23 +01005675 By default HAProxy operates in keep-alive mode with regards to persistent
5676 connections: for each connection it processes each request and response, and
5677 leaves the connection idle on both sides between the end of a response and the
5678 start of a new request. This mode may be changed by several options such as
5679 "option http-server-close", "option forceclose", "option httpclose" or
5680 "option http-tunnel". This option allows to set back the keep-alive mode,
5681 which can be useful when another mode was used in a defaults section.
5682
5683 Setting "option http-keep-alive" enables HTTP keep-alive mode on the client-
5684 and server- sides. This provides the lowest latency on the client side (slow
Willy Tarreau16bfb022010-01-16 19:48:41 +01005685 network) and the fastest session reuse on the server side at the expense
5686 of maintaining idle connections to the servers. In general, it is possible
5687 with this option to achieve approximately twice the request rate that the
5688 "http-server-close" option achieves on small objects. There are mainly two
5689 situations where this option may be useful :
5690
5691 - when the server is non-HTTP compliant and authenticates the connection
5692 instead of requests (eg: NTLM authentication)
5693
5694 - when the cost of establishing the connection to the server is significant
5695 compared to the cost of retrieving the associated object from the server.
5696
5697 This last case can happen when the server is a fast static server of cache.
5698 In this case, the server will need to be properly tuned to support high enough
5699 connection counts because connections will last until the client sends another
5700 request.
5701
5702 If the client request has to go to another backend or another server due to
5703 content switching or the load balancing algorithm, the idle connection will
Willy Tarreau9420b122013-12-15 18:58:25 +01005704 immediately be closed and a new one re-opened. Option "prefer-last-server" is
5705 available to try optimize server selection so that if the server currently
5706 attached to an idle connection is usable, it will be used.
Willy Tarreau16bfb022010-01-16 19:48:41 +01005707
5708 In general it is preferred to use "option http-server-close" with application
5709 servers, and some static servers might benefit from "option http-keep-alive".
5710
5711 At the moment, logs will not indicate whether requests came from the same
5712 session or not. The accept date reported in the logs corresponds to the end
5713 of the previous request, and the request time corresponds to the time spent
5714 waiting for a new request. The keep-alive request time is still bound to the
5715 timeout defined by "timeout http-keep-alive" or "timeout http-request" if
5716 not set.
5717
Cyril Bonté653dcd62014-02-20 00:13:15 +01005718 This option disables and replaces any previous "option httpclose", "option
5719 http-server-close", "option forceclose" or "option http-tunnel". When backend
Willy Tarreau70dffda2014-01-30 03:07:23 +01005720 and frontend options differ, all of these 4 options have precedence over
Cyril Bonté653dcd62014-02-20 00:13:15 +01005721 "option http-keep-alive".
Willy Tarreau16bfb022010-01-16 19:48:41 +01005722
5723 See also : "option forceclose", "option http-server-close",
Willy Tarreau9420b122013-12-15 18:58:25 +01005724 "option prefer-last-server", "option http-pretend-keepalive",
5725 "option httpclose", and "1.1. The HTTP transaction model".
Willy Tarreau16bfb022010-01-16 19:48:41 +01005726
5727
Willy Tarreau96e31212011-05-30 18:10:30 +02005728option http-no-delay
5729no option http-no-delay
5730 Instruct the system to favor low interactive delays over performance in HTTP
5731 May be used in sections : defaults | frontend | listen | backend
5732 yes | yes | yes | yes
5733 Arguments : none
5734
5735 In HTTP, each payload is unidirectional and has no notion of interactivity.
5736 Any agent is expected to queue data somewhat for a reasonably low delay.
5737 There are some very rare server-to-server applications that abuse the HTTP
5738 protocol and expect the payload phase to be highly interactive, with many
5739 interleaved data chunks in both directions within a single request. This is
5740 absolutely not supported by the HTTP specification and will not work across
5741 most proxies or servers. When such applications attempt to do this through
5742 haproxy, it works but they will experience high delays due to the network
5743 optimizations which favor performance by instructing the system to wait for
5744 enough data to be available in order to only send full packets. Typical
5745 delays are around 200 ms per round trip. Note that this only happens with
5746 abnormal uses. Normal uses such as CONNECT requests nor WebSockets are not
5747 affected.
5748
5749 When "option http-no-delay" is present in either the frontend or the backend
5750 used by a connection, all such optimizations will be disabled in order to
5751 make the exchanges as fast as possible. Of course this offers no guarantee on
5752 the functionality, as it may break at any other place. But if it works via
5753 HAProxy, it will work as fast as possible. This option should never be used
5754 by default, and should never be used at all unless such a buggy application
5755 is discovered. The impact of using this option is an increase of bandwidth
5756 usage and CPU usage, which may significantly lower performance in high
5757 latency environments.
5758
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02005759 See also : "option http-buffer-request"
5760
Willy Tarreau96e31212011-05-30 18:10:30 +02005761
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005762option http-pretend-keepalive
5763no option http-pretend-keepalive
5764 Define whether haproxy will announce keepalive to the server or not
5765 May be used in sections : defaults | frontend | listen | backend
5766 yes | yes | yes | yes
5767 Arguments : none
5768
5769 When running with "option http-server-close" or "option forceclose", haproxy
5770 adds a "Connection: close" header to the request forwarded to the server.
5771 Unfortunately, when some servers see this header, they automatically refrain
5772 from using the chunked encoding for responses of unknown length, while this
5773 is totally unrelated. The immediate effect is that this prevents haproxy from
5774 maintaining the client connection alive. A second effect is that a client or
5775 a cache could receive an incomplete response without being aware of it, and
5776 consider the response complete.
5777
5778 By setting "option http-pretend-keepalive", haproxy will make the server
5779 believe it will keep the connection alive. The server will then not fall back
5780 to the abnormal undesired above. When haproxy gets the whole response, it
5781 will close the connection with the server just as it would do with the
5782 "forceclose" option. That way the client gets a normal response and the
5783 connection is correctly closed on the server side.
5784
5785 It is recommended not to enable this option by default, because most servers
5786 will more efficiently close the connection themselves after the last packet,
5787 and release its buffers slightly earlier. Also, the added packet on the
5788 network could slightly reduce the overall peak performance. However it is
5789 worth noting that when this option is enabled, haproxy will have slightly
5790 less work to do. So if haproxy is the bottleneck on the whole architecture,
5791 enabling this option might save a few CPU cycles.
5792
5793 This option may be set both in a frontend and in a backend. It is enabled if
5794 at least one of the frontend or backend holding a connection has it enabled.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04005795 This option may be combined with "option httpclose", which will cause
Willy Tarreau22a95342010-09-29 14:31:41 +02005796 keepalive to be announced to the server and close to be announced to the
5797 client. This practice is discouraged though.
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005798
5799 If this option has been enabled in a "defaults" section, it can be disabled
5800 in a specific instance by prepending the "no" keyword before it.
5801
Willy Tarreau16bfb022010-01-16 19:48:41 +01005802 See also : "option forceclose", "option http-server-close", and
5803 "option http-keep-alive"
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005804
Willy Tarreauc27debf2008-01-06 08:57:02 +01005805
Willy Tarreaub608feb2010-01-02 22:47:18 +01005806option http-server-close
5807no option http-server-close
5808 Enable or disable HTTP connection closing on the server side
5809 May be used in sections : defaults | frontend | listen | backend
5810 yes | yes | yes | yes
5811 Arguments : none
5812
Willy Tarreau70dffda2014-01-30 03:07:23 +01005813 By default HAProxy operates in keep-alive mode with regards to persistent
5814 connections: for each connection it processes each request and response, and
5815 leaves the connection idle on both sides between the end of a response and
5816 the start of a new request. This mode may be changed by several options such
5817 as "option http-server-close", "option forceclose", "option httpclose" or
5818 "option http-tunnel". Setting "option http-server-close" enables HTTP
5819 connection-close mode on the server side while keeping the ability to support
5820 HTTP keep-alive and pipelining on the client side. This provides the lowest
5821 latency on the client side (slow network) and the fastest session reuse on
5822 the server side to save server resources, similarly to "option forceclose".
5823 It also permits non-keepalive capable servers to be served in keep-alive mode
Lukas Tribus23953682017-04-28 13:24:30 +00005824 to the clients if they conform to the requirements of RFC7230. Please note
Willy Tarreau70dffda2014-01-30 03:07:23 +01005825 that some servers do not always conform to those requirements when they see
5826 "Connection: close" in the request. The effect will be that keep-alive will
5827 never be used. A workaround consists in enabling "option
5828 http-pretend-keepalive".
Willy Tarreaub608feb2010-01-02 22:47:18 +01005829
5830 At the moment, logs will not indicate whether requests came from the same
5831 session or not. The accept date reported in the logs corresponds to the end
5832 of the previous request, and the request time corresponds to the time spent
5833 waiting for a new request. The keep-alive request time is still bound to the
Willy Tarreaub16a5742010-01-10 14:46:16 +01005834 timeout defined by "timeout http-keep-alive" or "timeout http-request" if
5835 not set.
Willy Tarreaub608feb2010-01-02 22:47:18 +01005836
5837 This option may be set both in a frontend and in a backend. It is enabled if
5838 at least one of the frontend or backend holding a connection has it enabled.
Cyril Bonté653dcd62014-02-20 00:13:15 +01005839 It disables and replaces any previous "option httpclose", "option forceclose",
5840 "option http-tunnel" or "option http-keep-alive". Please check section 4
Willy Tarreau70dffda2014-01-30 03:07:23 +01005841 ("Proxies") to see how this option combines with others when frontend and
5842 backend options differ.
Willy Tarreaub608feb2010-01-02 22:47:18 +01005843
5844 If this option has been enabled in a "defaults" section, it can be disabled
5845 in a specific instance by prepending the "no" keyword before it.
5846
Patrick Mezard9ec2ec42010-06-12 17:02:45 +02005847 See also : "option forceclose", "option http-pretend-keepalive",
Willy Tarreau16bfb022010-01-16 19:48:41 +01005848 "option httpclose", "option http-keep-alive", and
5849 "1.1. The HTTP transaction model".
Willy Tarreaub608feb2010-01-02 22:47:18 +01005850
5851
Willy Tarreau02bce8b2014-01-30 00:15:28 +01005852option http-tunnel
5853no option http-tunnel
5854 Disable or enable HTTP connection processing after first transaction
5855 May be used in sections : defaults | frontend | listen | backend
5856 yes | yes | yes | yes
5857 Arguments : none
5858
Willy Tarreau70dffda2014-01-30 03:07:23 +01005859 By default HAProxy operates in keep-alive mode with regards to persistent
5860 connections: for each connection it processes each request and response, and
5861 leaves the connection idle on both sides between the end of a response and
5862 the start of a new request. This mode may be changed by several options such
5863 as "option http-server-close", "option forceclose", "option httpclose" or
5864 "option http-tunnel".
5865
5866 Option "http-tunnel" disables any HTTP processing past the first request and
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03005867 the first response. This is the mode which was used by default in versions
Willy Tarreau70dffda2014-01-30 03:07:23 +01005868 1.0 to 1.5-dev21. It is the mode with the lowest processing overhead, which
5869 is normally not needed anymore unless in very specific cases such as when
5870 using an in-house protocol that looks like HTTP but is not compatible, or
5871 just to log one request per client in order to reduce log size. Note that
5872 everything which works at the HTTP level, including header parsing/addition,
5873 cookie processing or content switching will only work for the first request
5874 and will be ignored after the first response.
Willy Tarreau02bce8b2014-01-30 00:15:28 +01005875
5876 If this option has been enabled in a "defaults" section, it can be disabled
5877 in a specific instance by prepending the "no" keyword before it.
5878
5879 See also : "option forceclose", "option http-server-close",
5880 "option httpclose", "option http-keep-alive", and
5881 "1.1. The HTTP transaction model".
5882
5883
Willy Tarreau88d349d2010-01-25 12:15:43 +01005884option http-use-proxy-header
Cyril Bontéf0c60612010-02-06 14:44:47 +01005885no option http-use-proxy-header
Willy Tarreau88d349d2010-01-25 12:15:43 +01005886 Make use of non-standard Proxy-Connection header instead of Connection
5887 May be used in sections : defaults | frontend | listen | backend
5888 yes | yes | yes | no
5889 Arguments : none
5890
Lukas Tribus23953682017-04-28 13:24:30 +00005891 While RFC7230 explicitly states that HTTP/1.1 agents must use the
Willy Tarreau88d349d2010-01-25 12:15:43 +01005892 Connection header to indicate their wish of persistent or non-persistent
5893 connections, both browsers and proxies ignore this header for proxied
5894 connections and make use of the undocumented, non-standard Proxy-Connection
5895 header instead. The issue begins when trying to put a load balancer between
5896 browsers and such proxies, because there will be a difference between what
5897 haproxy understands and what the client and the proxy agree on.
5898
5899 By setting this option in a frontend, haproxy can automatically switch to use
5900 that non-standard header if it sees proxied requests. A proxied request is
Lukas Tribusf01a9cd2016-02-03 18:09:37 +01005901 defined here as one where the URI begins with neither a '/' nor a '*'. This
5902 is incompatible with the HTTP tunnel mode. Note that this option can only be
5903 specified in a frontend and will affect the request along its whole life.
Willy Tarreau88d349d2010-01-25 12:15:43 +01005904
Willy Tarreau844a7e72010-01-31 21:46:18 +01005905 Also, when this option is set, a request which requires authentication will
5906 automatically switch to use proxy authentication headers if it is itself a
5907 proxied request. That makes it possible to check or enforce authentication in
5908 front of an existing proxy.
5909
Willy Tarreau88d349d2010-01-25 12:15:43 +01005910 This option should normally never be used, except in front of a proxy.
5911
5912 See also : "option httpclose", "option forceclose" and "option
5913 http-server-close".
5914
5915
Willy Tarreaud63335a2010-02-26 12:56:52 +01005916option httpchk
5917option httpchk <uri>
5918option httpchk <method> <uri>
5919option httpchk <method> <uri> <version>
5920 Enable HTTP protocol to check on the servers health
5921 May be used in sections : defaults | frontend | listen | backend
5922 yes | no | yes | yes
5923 Arguments :
5924 <method> is the optional HTTP method used with the requests. When not set,
5925 the "OPTIONS" method is used, as it generally requires low server
5926 processing and is easy to filter out from the logs. Any method
5927 may be used, though it is not recommended to invent non-standard
5928 ones.
5929
5930 <uri> is the URI referenced in the HTTP requests. It defaults to " / "
5931 which is accessible by default on almost any server, but may be
5932 changed to any other URI. Query strings are permitted.
5933
5934 <version> is the optional HTTP version string. It defaults to "HTTP/1.0"
5935 but some servers might behave incorrectly in HTTP 1.0, so turning
5936 it to HTTP/1.1 may sometimes help. Note that the Host field is
5937 mandatory in HTTP/1.1, and as a trick, it is possible to pass it
5938 after "\r\n" following the version string.
5939
5940 By default, server health checks only consist in trying to establish a TCP
5941 connection. When "option httpchk" is specified, a complete HTTP request is
5942 sent once the TCP connection is established, and responses 2xx and 3xx are
5943 considered valid, while all other ones indicate a server failure, including
5944 the lack of any response.
5945
5946 The port and interval are specified in the server configuration.
5947
5948 This option does not necessarily require an HTTP backend, it also works with
5949 plain TCP backends. This is particularly useful to check simple scripts bound
5950 to some dedicated ports using the inetd daemon.
5951
5952 Examples :
5953 # Relay HTTPS traffic to Apache instance and check service availability
5954 # using HTTP request "OPTIONS * HTTP/1.1" on port 80.
5955 backend https_relay
5956 mode tcp
5957 option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
5958 server apache1 192.168.1.1:443 check port 80
5959
Simon Hormanafc47ee2013-11-25 10:46:35 +09005960 See also : "option ssl-hello-chk", "option smtpchk", "option mysql-check",
5961 "option pgsql-check", "http-check" and the "check", "port" and
5962 "inter" server options.
Willy Tarreaud63335a2010-02-26 12:56:52 +01005963
5964
Willy Tarreauc27debf2008-01-06 08:57:02 +01005965option httpclose
5966no option httpclose
5967 Enable or disable passive HTTP connection closing
5968 May be used in sections : defaults | frontend | listen | backend
5969 yes | yes | yes | yes
5970 Arguments : none
5971
Willy Tarreau70dffda2014-01-30 03:07:23 +01005972 By default HAProxy operates in keep-alive mode with regards to persistent
5973 connections: for each connection it processes each request and response, and
5974 leaves the connection idle on both sides between the end of a response and
5975 the start of a new request. This mode may be changed by several options such
Cyril Bonté653dcd62014-02-20 00:13:15 +01005976 as "option http-server-close", "option forceclose", "option httpclose" or
Willy Tarreau70dffda2014-01-30 03:07:23 +01005977 "option http-tunnel".
5978
5979 If "option httpclose" is set, HAProxy will work in HTTP tunnel mode and check
5980 if a "Connection: close" header is already set in each direction, and will
5981 add one if missing. Each end should react to this by actively closing the TCP
5982 connection after each transfer, thus resulting in a switch to the HTTP close
5983 mode. Any "Connection" header different from "close" will also be removed.
5984 Note that this option is deprecated since what it does is very cheap but not
5985 reliable. Using "option http-server-close" or "option forceclose" is strongly
5986 recommended instead.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005987
5988 It seldom happens that some servers incorrectly ignore this header and do not
Jamie Gloudonaaa21002012-08-25 00:18:33 -04005989 close the connection even though they reply "Connection: close". For this
Willy Tarreau0dfdf192010-01-05 11:33:11 +01005990 reason, they are not compatible with older HTTP 1.0 browsers. If this happens
5991 it is possible to use the "option forceclose" which actively closes the
5992 request connection once the server responds. Option "forceclose" also
5993 releases the server connection earlier because it does not have to wait for
5994 the client to acknowledge it.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005995
5996 This option may be set both in a frontend and in a backend. It is enabled if
5997 at least one of the frontend or backend holding a connection has it enabled.
Cyril Bonté653dcd62014-02-20 00:13:15 +01005998 It disables and replaces any previous "option http-server-close",
5999 "option forceclose", "option http-keep-alive" or "option http-tunnel". Please
Willy Tarreau70dffda2014-01-30 03:07:23 +01006000 check section 4 ("Proxies") to see how this option combines with others when
6001 frontend and backend options differ.
Willy Tarreauc27debf2008-01-06 08:57:02 +01006002
6003 If this option has been enabled in a "defaults" section, it can be disabled
6004 in a specific instance by prepending the "no" keyword before it.
6005
Patrick Mezard9ec2ec42010-06-12 17:02:45 +02006006 See also : "option forceclose", "option http-server-close" and
6007 "1.1. The HTTP transaction model".
Willy Tarreauc27debf2008-01-06 08:57:02 +01006008
6009
Emeric Brun3a058f32009-06-30 18:26:00 +02006010option httplog [ clf ]
Willy Tarreauc27debf2008-01-06 08:57:02 +01006011 Enable logging of HTTP request, session state and timers
6012 May be used in sections : defaults | frontend | listen | backend
6013 yes | yes | yes | yes
Emeric Brun3a058f32009-06-30 18:26:00 +02006014 Arguments :
6015 clf if the "clf" argument is added, then the output format will be
6016 the CLF format instead of HAProxy's default HTTP format. You can
6017 use this when you need to feed HAProxy's logs through a specific
6018 log analyser which only support the CLF format and which is not
6019 extensible.
Willy Tarreauc27debf2008-01-06 08:57:02 +01006020
6021 By default, the log output format is very poor, as it only contains the
6022 source and destination addresses, and the instance name. By specifying
6023 "option httplog", each log line turns into a much richer format including,
6024 but not limited to, the HTTP request, the connection timers, the session
6025 status, the connections numbers, the captured headers and cookies, the
6026 frontend, backend and server name, and of course the source address and
6027 ports.
6028
6029 This option may be set either in the frontend or the backend.
6030
PiBa-NLbd556bf2014-12-11 21:31:54 +01006031 Specifying only "option httplog" will automatically clear the 'clf' mode
6032 if it was set by default.
Emeric Brun3a058f32009-06-30 18:26:00 +02006033
Guillaume de Lafond29f45602017-03-31 19:52:15 +02006034 "option httplog" overrides any previous "log-format" directive.
6035
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006036 See also : section 8 about logging.
Willy Tarreauc27debf2008-01-06 08:57:02 +01006037
Willy Tarreau55165fe2009-05-10 12:02:55 +02006038
6039option http_proxy
6040no option http_proxy
6041 Enable or disable plain HTTP proxy mode
6042 May be used in sections : defaults | frontend | listen | backend
6043 yes | yes | yes | yes
6044 Arguments : none
6045
6046 It sometimes happens that people need a pure HTTP proxy which understands
6047 basic proxy requests without caching nor any fancy feature. In this case,
6048 it may be worth setting up an HAProxy instance with the "option http_proxy"
6049 set. In this mode, no server is declared, and the connection is forwarded to
6050 the IP address and port found in the URL after the "http://" scheme.
6051
6052 No host address resolution is performed, so this only works when pure IP
6053 addresses are passed. Since this option's usage perimeter is rather limited,
Lukas Tribusf01a9cd2016-02-03 18:09:37 +01006054 it will probably be used only by experts who know they need exactly it. This
6055 is incompatible with the HTTP tunnel mode.
Willy Tarreau55165fe2009-05-10 12:02:55 +02006056
6057 If this option has been enabled in a "defaults" section, it can be disabled
6058 in a specific instance by prepending the "no" keyword before it.
6059
6060 Example :
6061 # this backend understands HTTP proxy requests and forwards them directly.
6062 backend direct_forward
6063 option httpclose
6064 option http_proxy
6065
6066 See also : "option httpclose"
6067
Willy Tarreau211ad242009-10-03 21:45:07 +02006068
Jamie Gloudon801a0a32012-08-25 00:18:33 -04006069option independent-streams
6070no option independent-streams
6071 Enable or disable independent timeout processing for both directions
Willy Tarreauf27b5ea2009-10-03 22:01:18 +02006072 May be used in sections : defaults | frontend | listen | backend
6073 yes | yes | yes | yes
6074 Arguments : none
6075
6076 By default, when data is sent over a socket, both the write timeout and the
6077 read timeout for that socket are refreshed, because we consider that there is
6078 activity on that socket, and we have no other means of guessing if we should
6079 receive data or not.
6080
6081 While this default behaviour is desirable for almost all applications, there
6082 exists a situation where it is desirable to disable it, and only refresh the
6083 read timeout if there are incoming data. This happens on sessions with large
6084 timeouts and low amounts of exchanged data such as telnet session. If the
6085 server suddenly disappears, the output data accumulates in the system's
6086 socket buffers, both timeouts are correctly refreshed, and there is no way
6087 to know the server does not receive them, so we don't timeout. However, when
6088 the underlying protocol always echoes sent data, it would be enough by itself
6089 to detect the issue using the read timeout. Note that this problem does not
6090 happen with more verbose protocols because data won't accumulate long in the
6091 socket buffers.
6092
6093 When this option is set on the frontend, it will disable read timeout updates
6094 on data sent to the client. There probably is little use of this case. When
6095 the option is set on the backend, it will disable read timeout updates on
6096 data sent to the server. Doing so will typically break large HTTP posts from
6097 slow lines, so use it with caution.
6098
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006099 Note: older versions used to call this setting "option independent-streams"
Jamie Gloudon801a0a32012-08-25 00:18:33 -04006100 with a spelling mistake. This spelling is still supported but
6101 deprecated.
6102
Willy Tarreauce887fd2012-05-12 12:50:00 +02006103 See also : "timeout client", "timeout server" and "timeout tunnel"
Willy Tarreauf27b5ea2009-10-03 22:01:18 +02006104
6105
Gabor Lekenyb4c81e42010-09-29 18:17:05 +02006106option ldap-check
6107 Use LDAPv3 health checks for server testing
6108 May be used in sections : defaults | frontend | listen | backend
6109 yes | no | yes | yes
6110 Arguments : none
6111
6112 It is possible to test that the server correctly talks LDAPv3 instead of just
6113 testing that it accepts the TCP connection. When this option is set, an
6114 LDAPv3 anonymous simple bind message is sent to the server, and the response
6115 is analyzed to find an LDAPv3 bind response message.
6116
6117 The server is considered valid only when the LDAP response contains success
6118 resultCode (http://tools.ietf.org/html/rfc4511#section-4.1.9).
6119
6120 Logging of bind requests is server dependent see your documentation how to
6121 configure it.
6122
6123 Example :
6124 option ldap-check
6125
6126 See also : "option httpchk"
6127
6128
Simon Horman98637e52014-06-20 12:30:16 +09006129option external-check
6130 Use external processes for server health checks
6131 May be used in sections : defaults | frontend | listen | backend
6132 yes | no | yes | yes
6133
6134 It is possible to test the health of a server using an external command.
6135 This is achieved by running the executable set using "external-check
6136 command".
6137
6138 Requires the "external-check" global to be set.
6139
6140 See also : "external-check", "external-check command", "external-check path"
6141
6142
Willy Tarreau211ad242009-10-03 21:45:07 +02006143option log-health-checks
6144no option log-health-checks
Willy Tarreaubef1b322014-05-13 21:01:39 +02006145 Enable or disable logging of health checks status updates
Willy Tarreau211ad242009-10-03 21:45:07 +02006146 May be used in sections : defaults | frontend | listen | backend
6147 yes | no | yes | yes
6148 Arguments : none
6149
Willy Tarreaubef1b322014-05-13 21:01:39 +02006150 By default, failed health check are logged if server is UP and successful
6151 health checks are logged if server is DOWN, so the amount of additional
6152 information is limited.
Willy Tarreau211ad242009-10-03 21:45:07 +02006153
Willy Tarreaubef1b322014-05-13 21:01:39 +02006154 When this option is enabled, any change of the health check status or to
6155 the server's health will be logged, so that it becomes possible to know
6156 that a server was failing occasional checks before crashing, or exactly when
6157 it failed to respond a valid HTTP status, then when the port started to
6158 reject connections, then when the server stopped responding at all.
6159
6160 Note that status changes not caused by health checks (eg: enable/disable on
6161 the CLI) are intentionally not logged by this option.
Willy Tarreau211ad242009-10-03 21:45:07 +02006162
Willy Tarreaubef1b322014-05-13 21:01:39 +02006163 See also: "option httpchk", "option ldap-check", "option mysql-check",
6164 "option pgsql-check", "option redis-check", "option smtpchk",
6165 "option tcp-check", "log" and section 8 about logging.
Willy Tarreau211ad242009-10-03 21:45:07 +02006166
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02006167
6168option log-separate-errors
6169no option log-separate-errors
6170 Change log level for non-completely successful connections
6171 May be used in sections : defaults | frontend | listen | backend
6172 yes | yes | yes | no
6173 Arguments : none
6174
6175 Sometimes looking for errors in logs is not easy. This option makes haproxy
6176 raise the level of logs containing potentially interesting information such
6177 as errors, timeouts, retries, redispatches, or HTTP status codes 5xx. The
6178 level changes from "info" to "err". This makes it possible to log them
6179 separately to a different file with most syslog daemons. Be careful not to
6180 remove them from the original file, otherwise you would lose ordering which
6181 provides very important information.
6182
6183 Using this option, large sites dealing with several thousand connections per
6184 second may log normal traffic to a rotating buffer and only archive smaller
6185 error logs.
6186
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006187 See also : "log", "dontlognull", "dontlog-normal" and section 8 about
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02006188 logging.
6189
Willy Tarreauc27debf2008-01-06 08:57:02 +01006190
6191option logasap
6192no option logasap
6193 Enable or disable early logging of HTTP requests
6194 May be used in sections : defaults | frontend | listen | backend
6195 yes | yes | yes | no
6196 Arguments : none
6197
6198 By default, HTTP requests are logged upon termination so that the total
6199 transfer time and the number of bytes appear in the logs. When large objects
6200 are being transferred, it may take a while before the request appears in the
6201 logs. Using "option logasap", the request gets logged as soon as the server
6202 sends the complete headers. The only missing information in the logs will be
6203 the total number of bytes which will indicate everything except the amount
6204 of data transferred, and the total time which will not take the transfer
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01006205 time into account. In such a situation, it's a good practice to capture the
Willy Tarreauc27debf2008-01-06 08:57:02 +01006206 "Content-Length" response header so that the logs at least indicate how many
6207 bytes are expected to be transferred.
6208
Willy Tarreaucc6c8912009-02-22 10:53:55 +01006209 Examples :
6210 listen http_proxy 0.0.0.0:80
6211 mode http
6212 option httplog
6213 option logasap
6214 log 192.168.2.200 local3
6215
6216 >>> Feb 6 12:14:14 localhost \
6217 haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
6218 static/srv1 9/10/7/14/+30 200 +243 - - ---- 3/1/1/1/0 1/0 \
6219 "GET /image.iso HTTP/1.0"
6220
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006221 See also : "option httplog", "capture response header", and section 8 about
Willy Tarreauc27debf2008-01-06 08:57:02 +01006222 logging.
6223
6224
Nenad Merdanovic6639a7c2014-05-30 14:26:32 +02006225option mysql-check [ user <username> [ post-41 ] ]
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02006226 Use MySQL health checks for server testing
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01006227 May be used in sections : defaults | frontend | listen | backend
6228 yes | no | yes | yes
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02006229 Arguments :
Cyril Bonté108cf6e2012-04-21 23:30:29 +02006230 <username> This is the username which will be used when connecting to MySQL
6231 server.
Nenad Merdanovic6639a7c2014-05-30 14:26:32 +02006232 post-41 Send post v4.1 client compatible checks
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02006233
6234 If you specify a username, the check consists of sending two MySQL packet,
6235 one Client Authentication packet, and one QUIT packet, to correctly close
6236 MySQL session. We then parse the MySQL Handshake Initialisation packet and/or
6237 Error packet. It is a basic but useful test which does not produce error nor
6238 aborted connect on the server. However, it requires adding an authorization
6239 in the MySQL table, like this :
6240
6241 USE mysql;
6242 INSERT INTO user (Host,User) values ('<ip_of_haproxy>','<username>');
6243 FLUSH PRIVILEGES;
6244
6245 If you don't specify a username (it is deprecated and not recommended), the
6246 check only consists in parsing the Mysql Handshake Initialisation packet or
6247 Error packet, we don't send anything in this mode. It was reported that it
6248 can generate lockout if check is too frequent and/or if there is not enough
6249 traffic. In fact, you need in this case to check MySQL "max_connect_errors"
6250 value as if a connection is established successfully within fewer than MySQL
6251 "max_connect_errors" attempts after a previous connection was interrupted,
6252 the error count for the host is cleared to zero. If HAProxy's server get
6253 blocked, the "FLUSH HOSTS" statement is the only way to unblock it.
6254
6255 Remember that this does not check database presence nor database consistency.
6256 To do this, you can use an external check with xinetd for example.
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01006257
Hervé COMMOWICK212f7782011-06-10 14:05:59 +02006258 The check requires MySQL >=3.22, for older version, please use TCP check.
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01006259
6260 Most often, an incoming MySQL server needs to see the client's IP address for
6261 various purposes, including IP privilege matching and connection logging.
6262 When possible, it is often wise to masquerade the client's IP address when
6263 connecting to the server using the "usesrc" argument of the "source" keyword,
Willy Tarreau29fbe512015-08-20 19:35:14 +02006264 which requires the transparent proxy feature to be compiled in, and the MySQL
6265 server to route the client via the machine hosting haproxy.
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01006266
6267 See also: "option httpchk"
6268
6269
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006270option nolinger
6271no option nolinger
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01006272 Enable or disable immediate session resource cleaning after close
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006273 May be used in sections: defaults | frontend | listen | backend
6274 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006275 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006276
6277 When clients or servers abort connections in a dirty way (eg: they are
6278 physically disconnected), the session timeouts triggers and the session is
6279 closed. But it will remain in FIN_WAIT1 state for some time in the system,
6280 using some resources and possibly limiting the ability to establish newer
6281 connections.
6282
6283 When this happens, it is possible to activate "option nolinger" which forces
6284 the system to immediately remove any socket's pending data on close. Thus,
6285 the session is instantly purged from the system's tables. This usually has
6286 side effects such as increased number of TCP resets due to old retransmits
6287 getting immediately rejected. Some firewalls may sometimes complain about
6288 this too.
6289
6290 For this reason, it is not recommended to use this option when not absolutely
6291 needed. You know that you need it when you have thousands of FIN_WAIT1
6292 sessions on your system (TIME_WAIT ones do not count).
6293
6294 This option may be used both on frontends and backends, depending on the side
6295 where it is required. Use it on the frontend for clients, and on the backend
6296 for servers.
6297
6298 If this option has been enabled in a "defaults" section, it can be disabled
6299 in a specific instance by prepending the "no" keyword before it.
6300
6301
Willy Tarreau55165fe2009-05-10 12:02:55 +02006302option originalto [ except <network> ] [ header <name> ]
6303 Enable insertion of the X-Original-To header to requests sent to servers
6304 May be used in sections : defaults | frontend | listen | backend
6305 yes | yes | yes | yes
6306 Arguments :
6307 <network> is an optional argument used to disable this option for sources
6308 matching <network>
6309 <name> an optional argument to specify a different "X-Original-To"
6310 header name.
6311
6312 Since HAProxy can work in transparent mode, every request from a client can
6313 be redirected to the proxy and HAProxy itself can proxy every request to a
6314 complex SQUID environment and the destination host from SO_ORIGINAL_DST will
6315 be lost. This is annoying when you want access rules based on destination ip
6316 addresses. To solve this problem, a new HTTP header "X-Original-To" may be
6317 added by HAProxy to all requests sent to the server. This header contains a
6318 value representing the original destination IP address. Since this must be
6319 configured to always use the last occurrence of this header only. Note that
6320 only the last occurrence of the header must be used, since it is really
6321 possible that the client has already brought one.
6322
6323 The keyword "header" may be used to supply a different header name to replace
6324 the default "X-Original-To". This can be useful where you might already
6325 have a "X-Original-To" header from a different application, and you need
6326 preserve it. Also if your backend server doesn't use the "X-Original-To"
6327 header and requires different one.
6328
6329 Sometimes, a same HAProxy instance may be shared between a direct client
6330 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
6331 used to decrypt HTTPS traffic). It is possible to disable the addition of the
6332 header for a known source address or network by adding the "except" keyword
6333 followed by the network address. In this case, any source IP matching the
6334 network will not cause an addition of this header. Most common uses are with
6335 private networks or 127.0.0.1.
6336
6337 This option may be specified either in the frontend or in the backend. If at
6338 least one of them uses it, the header will be added. Note that the backend's
6339 setting of the header subargument takes precedence over the frontend's if
6340 both are defined.
6341
Willy Tarreau55165fe2009-05-10 12:02:55 +02006342 Examples :
6343 # Original Destination address
6344 frontend www
6345 mode http
6346 option originalto except 127.0.0.1
6347
6348 # Those servers want the IP Address in X-Client-Dst
6349 backend www
6350 mode http
6351 option originalto header X-Client-Dst
6352
Willy Tarreau87cf5142011-08-19 22:57:24 +02006353 See also : "option httpclose", "option http-server-close",
6354 "option forceclose"
Willy Tarreau55165fe2009-05-10 12:02:55 +02006355
6356
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006357option persist
6358no option persist
6359 Enable or disable forced persistence on down servers
6360 May be used in sections: defaults | frontend | listen | backend
6361 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006362 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006363
6364 When an HTTP request reaches a backend with a cookie which references a dead
6365 server, by default it is redispatched to another server. It is possible to
6366 force the request to be sent to the dead server first using "option persist"
6367 if absolutely needed. A common use case is when servers are under extreme
6368 load and spend their time flapping. In this case, the users would still be
6369 directed to the server they opened the session on, in the hope they would be
6370 correctly served. It is recommended to use "option redispatch" in conjunction
6371 with this option so that in the event it would not be possible to connect to
6372 the server at all (server definitely dead), the client would finally be
6373 redirected to another valid server.
6374
6375 If this option has been enabled in a "defaults" section, it can be disabled
6376 in a specific instance by prepending the "no" keyword before it.
6377
Willy Tarreau4de91492010-01-22 19:10:05 +01006378 See also : "option redispatch", "retries", "force-persist"
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006379
6380
Willy Tarreau0c122822013-12-15 18:49:01 +01006381option pgsql-check [ user <username> ]
6382 Use PostgreSQL health checks for server testing
6383 May be used in sections : defaults | frontend | listen | backend
6384 yes | no | yes | yes
6385 Arguments :
6386 <username> This is the username which will be used when connecting to
6387 PostgreSQL server.
6388
6389 The check sends a PostgreSQL StartupMessage and waits for either
6390 Authentication request or ErrorResponse message. It is a basic but useful
6391 test which does not produce error nor aborted connect on the server.
6392 This check is identical with the "mysql-check".
6393
6394 See also: "option httpchk"
6395
6396
Willy Tarreau9420b122013-12-15 18:58:25 +01006397option prefer-last-server
6398no option prefer-last-server
6399 Allow multiple load balanced requests to remain on the same server
6400 May be used in sections: defaults | frontend | listen | backend
6401 yes | no | yes | yes
6402 Arguments : none
6403
6404 When the load balancing algorithm in use is not deterministic, and a previous
6405 request was sent to a server to which haproxy still holds a connection, it is
6406 sometimes desirable that subsequent requests on a same session go to the same
6407 server as much as possible. Note that this is different from persistence, as
6408 we only indicate a preference which haproxy tries to apply without any form
6409 of warranty. The real use is for keep-alive connections sent to servers. When
6410 this option is used, haproxy will try to reuse the same connection that is
6411 attached to the server instead of rebalancing to another server, causing a
6412 close of the connection. This can make sense for static file servers. It does
Willy Tarreau068621e2013-12-23 15:11:25 +01006413 not make much sense to use this in combination with hashing algorithms. Note,
6414 haproxy already automatically tries to stick to a server which sends a 401 or
6415 to a proxy which sends a 407 (authentication required). This is mandatory for
6416 use with the broken NTLM authentication challenge, and significantly helps in
6417 troubleshooting some faulty applications. Option prefer-last-server might be
6418 desirable in these environments as well, to avoid redistributing the traffic
6419 after every other response.
Willy Tarreau9420b122013-12-15 18:58:25 +01006420
6421 If this option has been enabled in a "defaults" section, it can be disabled
6422 in a specific instance by prepending the "no" keyword before it.
6423
6424 See also: "option http-keep-alive"
6425
6426
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006427option redispatch
Joseph Lynch726ab712015-05-11 23:25:34 -07006428option redispatch <interval>
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006429no option redispatch
6430 Enable or disable session redistribution in case of connection failure
6431 May be used in sections: defaults | frontend | listen | backend
6432 yes | no | yes | yes
Joseph Lynch726ab712015-05-11 23:25:34 -07006433 Arguments :
6434 <interval> The optional integer value that controls how often redispatches
6435 occur when retrying connections. Positive value P indicates a
6436 redispatch is desired on every Pth retry, and negative value
6437 N indicate a redispath is desired on the Nth retry prior to the
6438 last retry. For example, the default of -1 preserves the
6439 historical behaviour of redispatching on the last retry, a
6440 positive value of 1 would indicate a redispatch on every retry,
6441 and a positive value of 3 would indicate a redispatch on every
6442 third retry. You can disable redispatches with a value of 0.
6443
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006444
6445 In HTTP mode, if a server designated by a cookie is down, clients may
6446 definitely stick to it because they cannot flush the cookie, so they will not
6447 be able to access the service anymore.
6448
6449 Specifying "option redispatch" will allow the proxy to break their
6450 persistence and redistribute them to a working server.
6451
Joseph Lynch726ab712015-05-11 23:25:34 -07006452 It also allows to retry connections to another server in case of multiple
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006453 connection failures. Of course, it requires having "retries" set to a nonzero
6454 value.
Willy Tarreaud72758d2010-01-12 10:42:19 +01006455
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006456 This form is the preferred form, which replaces both the "redispatch" and
6457 "redisp" keywords.
6458
6459 If this option has been enabled in a "defaults" section, it can be disabled
6460 in a specific instance by prepending the "no" keyword before it.
6461
Willy Tarreau4de91492010-01-22 19:10:05 +01006462 See also : "redispatch", "retries", "force-persist"
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006463
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006464
Hervé COMMOWICKec032d62011-08-05 16:23:48 +02006465option redis-check
6466 Use redis health checks for server testing
6467 May be used in sections : defaults | frontend | listen | backend
6468 yes | no | yes | yes
6469 Arguments : none
6470
6471 It is possible to test that the server correctly talks REDIS protocol instead
6472 of just testing that it accepts the TCP connection. When this option is set,
6473 a PING redis command is sent to the server, and the response is analyzed to
6474 find the "+PONG" response message.
6475
6476 Example :
6477 option redis-check
6478
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03006479 See also : "option httpchk", "option tcp-check", "tcp-check expect"
Hervé COMMOWICKec032d62011-08-05 16:23:48 +02006480
6481
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006482option smtpchk
6483option smtpchk <hello> <domain>
6484 Use SMTP health checks for server testing
6485 May be used in sections : defaults | frontend | listen | backend
6486 yes | no | yes | yes
Willy Tarreaud72758d2010-01-12 10:42:19 +01006487 Arguments :
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006488 <hello> is an optional argument. It is the "hello" command to use. It can
6489 be either "HELO" (for SMTP) or "EHLO" (for ESTMP). All other
6490 values will be turned into the default command ("HELO").
6491
6492 <domain> is the domain name to present to the server. It may only be
6493 specified (and is mandatory) if the hello command has been
6494 specified. By default, "localhost" is used.
6495
6496 When "option smtpchk" is set, the health checks will consist in TCP
6497 connections followed by an SMTP command. By default, this command is
6498 "HELO localhost". The server's return code is analyzed and only return codes
6499 starting with a "2" will be considered as valid. All other responses,
6500 including a lack of response will constitute an error and will indicate a
6501 dead server.
6502
6503 This test is meant to be used with SMTP servers or relays. Depending on the
6504 request, it is possible that some servers do not log each connection attempt,
6505 so you may want to experiment to improve the behaviour. Using telnet on port
6506 25 is often easier than adjusting the configuration.
6507
6508 Most often, an incoming SMTP server needs to see the client's IP address for
6509 various purposes, including spam filtering, anti-spoofing and logging. When
6510 possible, it is often wise to masquerade the client's IP address when
6511 connecting to the server using the "usesrc" argument of the "source" keyword,
Willy Tarreau29fbe512015-08-20 19:35:14 +02006512 which requires the transparent proxy feature to be compiled in.
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006513
6514 Example :
6515 option smtpchk HELO mydomain.org
6516
6517 See also : "option httpchk", "source"
6518
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006519
Krzysztof Piotr Oledzkiaeebf9b2009-10-04 15:43:17 +02006520option socket-stats
6521no option socket-stats
6522
6523 Enable or disable collecting & providing separate statistics for each socket.
6524 May be used in sections : defaults | frontend | listen | backend
6525 yes | yes | yes | no
6526
6527 Arguments : none
6528
6529
Willy Tarreauff4f82d2009-02-06 11:28:13 +01006530option splice-auto
6531no option splice-auto
6532 Enable or disable automatic kernel acceleration on sockets in both directions
6533 May be used in sections : defaults | frontend | listen | backend
6534 yes | yes | yes | yes
6535 Arguments : none
6536
6537 When this option is enabled either on a frontend or on a backend, haproxy
6538 will automatically evaluate the opportunity to use kernel tcp splicing to
6539 forward data between the client and the server, in either direction. Haproxy
6540 uses heuristics to estimate if kernel splicing might improve performance or
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01006541 not. Both directions are handled independently. Note that the heuristics used
Willy Tarreauff4f82d2009-02-06 11:28:13 +01006542 are not much aggressive in order to limit excessive use of splicing. This
6543 option requires splicing to be enabled at compile time, and may be globally
6544 disabled with the global option "nosplice". Since splice uses pipes, using it
6545 requires that there are enough spare pipes.
6546
6547 Important note: kernel-based TCP splicing is a Linux-specific feature which
6548 first appeared in kernel 2.6.25. It offers kernel-based acceleration to
6549 transfer data between sockets without copying these data to user-space, thus
6550 providing noticeable performance gains and CPU cycles savings. Since many
6551 early implementations are buggy, corrupt data and/or are inefficient, this
6552 feature is not enabled by default, and it should be used with extreme care.
6553 While it is not possible to detect the correctness of an implementation,
6554 2.6.29 is the first version offering a properly working implementation. In
6555 case of doubt, splicing may be globally disabled using the global "nosplice"
6556 keyword.
6557
6558 Example :
6559 option splice-auto
6560
6561 If this option has been enabled in a "defaults" section, it can be disabled
6562 in a specific instance by prepending the "no" keyword before it.
6563
6564 See also : "option splice-request", "option splice-response", and global
6565 options "nosplice" and "maxpipes"
6566
6567
6568option splice-request
6569no option splice-request
6570 Enable or disable automatic kernel acceleration on sockets for requests
6571 May be used in sections : defaults | frontend | listen | backend
6572 yes | yes | yes | yes
6573 Arguments : none
6574
6575 When this option is enabled either on a frontend or on a backend, haproxy
Jamie Gloudonaaa21002012-08-25 00:18:33 -04006576 will use kernel tcp splicing whenever possible to forward data going from
Willy Tarreauff4f82d2009-02-06 11:28:13 +01006577 the client to the server. It might still use the recv/send scheme if there
6578 are no spare pipes left. This option requires splicing to be enabled at
6579 compile time, and may be globally disabled with the global option "nosplice".
6580 Since splice uses pipes, using it requires that there are enough spare pipes.
6581
6582 Important note: see "option splice-auto" for usage limitations.
6583
6584 Example :
6585 option splice-request
6586
6587 If this option has been enabled in a "defaults" section, it can be disabled
6588 in a specific instance by prepending the "no" keyword before it.
6589
6590 See also : "option splice-auto", "option splice-response", and global options
6591 "nosplice" and "maxpipes"
6592
6593
6594option splice-response
6595no option splice-response
6596 Enable or disable automatic kernel acceleration on sockets for responses
6597 May be used in sections : defaults | frontend | listen | backend
6598 yes | yes | yes | yes
6599 Arguments : none
6600
6601 When this option is enabled either on a frontend or on a backend, haproxy
Jamie Gloudonaaa21002012-08-25 00:18:33 -04006602 will use kernel tcp splicing whenever possible to forward data going from
Willy Tarreauff4f82d2009-02-06 11:28:13 +01006603 the server to the client. It might still use the recv/send scheme if there
6604 are no spare pipes left. This option requires splicing to be enabled at
6605 compile time, and may be globally disabled with the global option "nosplice".
6606 Since splice uses pipes, using it requires that there are enough spare pipes.
6607
6608 Important note: see "option splice-auto" for usage limitations.
6609
6610 Example :
6611 option splice-response
6612
6613 If this option has been enabled in a "defaults" section, it can be disabled
6614 in a specific instance by prepending the "no" keyword before it.
6615
6616 See also : "option splice-auto", "option splice-request", and global options
6617 "nosplice" and "maxpipes"
6618
6619
Christopher Fauletba7bc162016-11-07 21:07:38 +01006620option spop-check
6621 Use SPOP health checks for server testing
6622 May be used in sections : defaults | frontend | listen | backend
6623 no | no | no | yes
6624 Arguments : none
6625
6626 It is possible to test that the server correctly talks SPOP protocol instead
6627 of just testing that it accepts the TCP connection. When this option is set,
6628 a HELLO handshake is performed between HAProxy and the server, and the
6629 response is analyzed to check no error is reported.
6630
6631 Example :
6632 option spop-check
6633
6634 See also : "option httpchk"
6635
6636
Willy Tarreaubf1f8162007-12-28 17:42:56 +01006637option srvtcpka
6638no option srvtcpka
6639 Enable or disable the sending of TCP keepalive packets on the server side
6640 May be used in sections : defaults | frontend | listen | backend
6641 yes | no | yes | yes
6642 Arguments : none
6643
6644 When there is a firewall or any session-aware component between a client and
6645 a server, and when the protocol involves very long sessions with long idle
6646 periods (eg: remote desktops), there is a risk that one of the intermediate
6647 components decides to expire a session which has remained idle for too long.
6648
6649 Enabling socket-level TCP keep-alives makes the system regularly send packets
6650 to the other end of the connection, leaving it active. The delay between
6651 keep-alive probes is controlled by the system only and depends both on the
6652 operating system and its tuning parameters.
6653
6654 It is important to understand that keep-alive packets are neither emitted nor
6655 received at the application level. It is only the network stacks which sees
6656 them. For this reason, even if one side of the proxy already uses keep-alives
6657 to maintain its connection alive, those keep-alive packets will not be
6658 forwarded to the other side of the proxy.
6659
6660 Please note that this has nothing to do with HTTP keep-alive.
6661
6662 Using option "srvtcpka" enables the emission of TCP keep-alive probes on the
6663 server side of a connection, which should help when session expirations are
6664 noticed between HAProxy and a server.
6665
6666 If this option has been enabled in a "defaults" section, it can be disabled
6667 in a specific instance by prepending the "no" keyword before it.
6668
6669 See also : "option clitcpka", "option tcpka"
6670
6671
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006672option ssl-hello-chk
6673 Use SSLv3 client hello health checks for server testing
6674 May be used in sections : defaults | frontend | listen | backend
6675 yes | no | yes | yes
6676 Arguments : none
6677
6678 When some SSL-based protocols are relayed in TCP mode through HAProxy, it is
6679 possible to test that the server correctly talks SSL instead of just testing
6680 that it accepts the TCP connection. When "option ssl-hello-chk" is set, pure
6681 SSLv3 client hello messages are sent once the connection is established to
6682 the server, and the response is analyzed to find an SSL server hello message.
6683 The server is considered valid only when the response contains this server
6684 hello message.
6685
6686 All servers tested till there correctly reply to SSLv3 client hello messages,
6687 and most servers tested do not even log the requests containing only hello
6688 messages, which is appreciable.
6689
Willy Tarreau763a95b2012-10-04 23:15:39 +02006690 Note that this check works even when SSL support was not built into haproxy
6691 because it forges the SSL message. When SSL support is available, it is best
6692 to use native SSL health checks instead of this one.
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006693
Willy Tarreau763a95b2012-10-04 23:15:39 +02006694 See also: "option httpchk", "check-ssl"
6695
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006696
Willy Tarreaued179852013-12-16 01:07:00 +01006697option tcp-check
6698 Perform health checks using tcp-check send/expect sequences
6699 May be used in sections: defaults | frontend | listen | backend
6700 yes | no | yes | yes
6701
6702 This health check method is intended to be combined with "tcp-check" command
6703 lists in order to support send/expect types of health check sequences.
6704
6705 TCP checks currently support 4 modes of operations :
6706 - no "tcp-check" directive : the health check only consists in a connection
6707 attempt, which remains the default mode.
6708
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006709 - "tcp-check send" or "tcp-check send-binary" only is mentioned : this is
Willy Tarreaued179852013-12-16 01:07:00 +01006710 used to send a string along with a connection opening. With some
6711 protocols, it helps sending a "QUIT" message for example that prevents
6712 the server from logging a connection error for each health check. The
6713 check result will still be based on the ability to open the connection
6714 only.
6715
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006716 - "tcp-check expect" only is mentioned : this is used to test a banner.
Willy Tarreaued179852013-12-16 01:07:00 +01006717 The connection is opened and haproxy waits for the server to present some
6718 contents which must validate some rules. The check result will be based
6719 on the matching between the contents and the rules. This is suited for
6720 POP, IMAP, SMTP, FTP, SSH, TELNET.
6721
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006722 - both "tcp-check send" and "tcp-check expect" are mentioned : this is
Willy Tarreaued179852013-12-16 01:07:00 +01006723 used to test a hello-type protocol. Haproxy sends a message, the server
6724 responds and its response is analysed. the check result will be based on
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006725 the matching between the response contents and the rules. This is often
Willy Tarreaued179852013-12-16 01:07:00 +01006726 suited for protocols which require a binding or a request/response model.
6727 LDAP, MySQL, Redis and SSL are example of such protocols, though they
6728 already all have their dedicated checks with a deeper understanding of
6729 the respective protocols.
6730 In this mode, many questions may be sent and many answers may be
6731 analysed.
6732
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006733 A fifth mode can be used to insert comments in different steps of the
6734 script.
6735
6736 For each tcp-check rule you create, you can add a "comment" directive,
6737 followed by a string. This string will be reported in the log and stderr
6738 in debug mode. It is useful to make user-friendly error reporting.
6739 The "comment" is of course optional.
6740
6741
Willy Tarreaued179852013-12-16 01:07:00 +01006742 Examples :
6743 # perform a POP check (analyse only server's banner)
6744 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006745 tcp-check expect string +OK\ POP3\ ready comment POP\ protocol
Willy Tarreaued179852013-12-16 01:07:00 +01006746
6747 # perform an IMAP check (analyse only server's banner)
6748 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006749 tcp-check expect string *\ OK\ IMAP4\ ready comment IMAP\ protocol
Willy Tarreaued179852013-12-16 01:07:00 +01006750
6751 # look for the redis master server after ensuring it speaks well
6752 # redis protocol, then it exits properly.
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006753 # (send a command then analyse the response 3 times)
Willy Tarreaued179852013-12-16 01:07:00 +01006754 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006755 tcp-check comment PING\ phase
Willy Tarreaued179852013-12-16 01:07:00 +01006756 tcp-check send PING\r\n
Baptiste Assmanna3322992015-08-04 10:12:18 +02006757 tcp-check expect string +PONG
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006758 tcp-check comment role\ check
Willy Tarreaued179852013-12-16 01:07:00 +01006759 tcp-check send info\ replication\r\n
6760 tcp-check expect string role:master
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006761 tcp-check comment QUIT\ phase
Willy Tarreaued179852013-12-16 01:07:00 +01006762 tcp-check send QUIT\r\n
6763 tcp-check expect string +OK
6764
6765 forge a HTTP request, then analyse the response
6766 (send many headers before analyzing)
6767 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006768 tcp-check comment forge\ and\ send\ HTTP\ request
Willy Tarreaued179852013-12-16 01:07:00 +01006769 tcp-check send HEAD\ /\ HTTP/1.1\r\n
6770 tcp-check send Host:\ www.mydomain.com\r\n
6771 tcp-check send User-Agent:\ HAProxy\ tcpcheck\r\n
6772 tcp-check send \r\n
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006773 tcp-check expect rstring HTTP/1\..\ (2..|3..) comment check\ HTTP\ response
Willy Tarreaued179852013-12-16 01:07:00 +01006774
6775
6776 See also : "tcp-check expect", "tcp-check send"
6777
6778
Willy Tarreau9ea05a72009-06-14 12:07:01 +02006779option tcp-smart-accept
6780no option tcp-smart-accept
6781 Enable or disable the saving of one ACK packet during the accept sequence
6782 May be used in sections : defaults | frontend | listen | backend
6783 yes | yes | yes | no
6784 Arguments : none
6785
6786 When an HTTP connection request comes in, the system acknowledges it on
6787 behalf of HAProxy, then the client immediately sends its request, and the
6788 system acknowledges it too while it is notifying HAProxy about the new
6789 connection. HAProxy then reads the request and responds. This means that we
6790 have one TCP ACK sent by the system for nothing, because the request could
6791 very well be acknowledged by HAProxy when it sends its response.
6792
6793 For this reason, in HTTP mode, HAProxy automatically asks the system to avoid
6794 sending this useless ACK on platforms which support it (currently at least
6795 Linux). It must not cause any problem, because the system will send it anyway
6796 after 40 ms if the response takes more time than expected to come.
6797
6798 During complex network debugging sessions, it may be desirable to disable
6799 this optimization because delayed ACKs can make troubleshooting more complex
6800 when trying to identify where packets are delayed. It is then possible to
6801 fall back to normal behaviour by specifying "no option tcp-smart-accept".
6802
6803 It is also possible to force it for non-HTTP proxies by simply specifying
6804 "option tcp-smart-accept". For instance, it can make sense with some services
6805 such as SMTP where the server speaks first.
6806
6807 It is recommended to avoid forcing this option in a defaults section. In case
6808 of doubt, consider setting it back to automatic values by prepending the
6809 "default" keyword before it, or disabling it using the "no" keyword.
6810
Willy Tarreaud88edf22009-06-14 15:48:17 +02006811 See also : "option tcp-smart-connect"
6812
6813
6814option tcp-smart-connect
6815no option tcp-smart-connect
6816 Enable or disable the saving of one ACK packet during the connect sequence
6817 May be used in sections : defaults | frontend | listen | backend
6818 yes | no | yes | yes
6819 Arguments : none
6820
6821 On certain systems (at least Linux), HAProxy can ask the kernel not to
6822 immediately send an empty ACK upon a connection request, but to directly
6823 send the buffer request instead. This saves one packet on the network and
6824 thus boosts performance. It can also be useful for some servers, because they
6825 immediately get the request along with the incoming connection.
6826
6827 This feature is enabled when "option tcp-smart-connect" is set in a backend.
6828 It is not enabled by default because it makes network troubleshooting more
6829 complex.
6830
6831 It only makes sense to enable it with protocols where the client speaks first
6832 such as HTTP. In other situations, if there is no data to send in place of
6833 the ACK, a normal ACK is sent.
6834
6835 If this option has been enabled in a "defaults" section, it can be disabled
6836 in a specific instance by prepending the "no" keyword before it.
6837
6838 See also : "option tcp-smart-accept"
6839
Willy Tarreau9ea05a72009-06-14 12:07:01 +02006840
Willy Tarreaubf1f8162007-12-28 17:42:56 +01006841option tcpka
6842 Enable or disable the sending of TCP keepalive packets on both sides
6843 May be used in sections : defaults | frontend | listen | backend
6844 yes | yes | yes | yes
6845 Arguments : none
6846
6847 When there is a firewall or any session-aware component between a client and
6848 a server, and when the protocol involves very long sessions with long idle
6849 periods (eg: remote desktops), there is a risk that one of the intermediate
6850 components decides to expire a session which has remained idle for too long.
6851
6852 Enabling socket-level TCP keep-alives makes the system regularly send packets
6853 to the other end of the connection, leaving it active. The delay between
6854 keep-alive probes is controlled by the system only and depends both on the
6855 operating system and its tuning parameters.
6856
6857 It is important to understand that keep-alive packets are neither emitted nor
6858 received at the application level. It is only the network stacks which sees
6859 them. For this reason, even if one side of the proxy already uses keep-alives
6860 to maintain its connection alive, those keep-alive packets will not be
6861 forwarded to the other side of the proxy.
6862
6863 Please note that this has nothing to do with HTTP keep-alive.
6864
6865 Using option "tcpka" enables the emission of TCP keep-alive probes on both
6866 the client and server sides of a connection. Note that this is meaningful
6867 only in "defaults" or "listen" sections. If this option is used in a
6868 frontend, only the client side will get keep-alives, and if this option is
6869 used in a backend, only the server side will get keep-alives. For this
6870 reason, it is strongly recommended to explicitly use "option clitcpka" and
6871 "option srvtcpka" when the configuration is split between frontends and
6872 backends.
6873
6874 See also : "option clitcpka", "option srvtcpka"
6875
Willy Tarreau844e3c52008-01-11 16:28:18 +01006876
6877option tcplog
6878 Enable advanced logging of TCP connections with session state and timers
6879 May be used in sections : defaults | frontend | listen | backend
6880 yes | yes | yes | yes
6881 Arguments : none
6882
6883 By default, the log output format is very poor, as it only contains the
6884 source and destination addresses, and the instance name. By specifying
6885 "option tcplog", each log line turns into a much richer format including, but
6886 not limited to, the connection timers, the session status, the connections
6887 numbers, the frontend, backend and server name, and of course the source
6888 address and ports. This option is useful for pure TCP proxies in order to
6889 find which of the client or server disconnects or times out. For normal HTTP
6890 proxies, it's better to use "option httplog" which is even more complete.
6891
6892 This option may be set either in the frontend or the backend.
6893
Guillaume de Lafond29f45602017-03-31 19:52:15 +02006894 "option tcplog" overrides any previous "log-format" directive.
6895
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006896 See also : "option httplog", and section 8 about logging.
Willy Tarreau844e3c52008-01-11 16:28:18 +01006897
6898
Willy Tarreau844e3c52008-01-11 16:28:18 +01006899option transparent
6900no option transparent
6901 Enable client-side transparent proxying
6902 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau4b1f8592008-12-23 23:13:55 +01006903 yes | no | yes | yes
Willy Tarreau844e3c52008-01-11 16:28:18 +01006904 Arguments : none
6905
6906 This option was introduced in order to provide layer 7 persistence to layer 3
6907 load balancers. The idea is to use the OS's ability to redirect an incoming
6908 connection for a remote address to a local process (here HAProxy), and let
6909 this process know what address was initially requested. When this option is
6910 used, sessions without cookies will be forwarded to the original destination
6911 IP address of the incoming request (which should match that of another
6912 equipment), while requests with cookies will still be forwarded to the
6913 appropriate server.
6914
6915 Note that contrary to a common belief, this option does NOT make HAProxy
6916 present the client's IP to the server when establishing the connection.
6917
Willy Tarreaua1146052011-03-01 09:51:54 +01006918 See also: the "usesrc" argument of the "source" keyword, and the
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006919 "transparent" option of the "bind" keyword.
Willy Tarreau844e3c52008-01-11 16:28:18 +01006920
Willy Tarreaubf1f8162007-12-28 17:42:56 +01006921
Simon Horman98637e52014-06-20 12:30:16 +09006922external-check command <command>
6923 Executable to run when performing an external-check
6924 May be used in sections : defaults | frontend | listen | backend
6925 yes | no | yes | yes
6926
6927 Arguments :
6928 <command> is the external command to run
6929
Simon Horman98637e52014-06-20 12:30:16 +09006930 The arguments passed to the to the command are:
6931
Cyril Bonté777be862014-12-02 21:21:35 +01006932 <proxy_address> <proxy_port> <server_address> <server_port>
Simon Horman98637e52014-06-20 12:30:16 +09006933
Cyril Bonté777be862014-12-02 21:21:35 +01006934 The <proxy_address> and <proxy_port> are derived from the first listener
6935 that is either IPv4, IPv6 or a UNIX socket. In the case of a UNIX socket
6936 listener the proxy_address will be the path of the socket and the
6937 <proxy_port> will be the string "NOT_USED". In a backend section, it's not
6938 possible to determine a listener, and both <proxy_address> and <proxy_port>
6939 will have the string value "NOT_USED".
Simon Horman98637e52014-06-20 12:30:16 +09006940
Cyril Bonté72cda2a2014-12-27 22:28:39 +01006941 Some values are also provided through environment variables.
6942
6943 Environment variables :
6944 HAPROXY_PROXY_ADDR The first bind address if available (or empty if not
6945 applicable, for example in a "backend" section).
6946
6947 HAPROXY_PROXY_ID The backend id.
6948
6949 HAPROXY_PROXY_NAME The backend name.
6950
6951 HAPROXY_PROXY_PORT The first bind port if available (or empty if not
6952 applicable, for example in a "backend" section or
6953 for a UNIX socket).
6954
6955 HAPROXY_SERVER_ADDR The server address.
6956
6957 HAPROXY_SERVER_CURCONN The current number of connections on the server.
6958
6959 HAPROXY_SERVER_ID The server id.
6960
6961 HAPROXY_SERVER_MAXCONN The server max connections.
6962
6963 HAPROXY_SERVER_NAME The server name.
6964
6965 HAPROXY_SERVER_PORT The server port if available (or empty for a UNIX
6966 socket).
6967
6968 PATH The PATH environment variable used when executing
6969 the command may be set using "external-check path".
6970
Simon Horman98637e52014-06-20 12:30:16 +09006971 If the command executed and exits with a zero status then the check is
6972 considered to have passed, otherwise the check is considered to have
6973 failed.
6974
6975 Example :
6976 external-check command /bin/true
6977
6978 See also : "external-check", "option external-check", "external-check path"
6979
6980
6981external-check path <path>
6982 The value of the PATH environment variable used when running an external-check
6983 May be used in sections : defaults | frontend | listen | backend
6984 yes | no | yes | yes
6985
6986 Arguments :
6987 <path> is the path used when executing external command to run
6988
6989 The default path is "".
6990
6991 Example :
6992 external-check path "/usr/bin:/bin"
6993
6994 See also : "external-check", "option external-check",
6995 "external-check command"
6996
6997
Emeric Brun647caf12009-06-30 17:57:00 +02006998persist rdp-cookie
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02006999persist rdp-cookie(<name>)
Emeric Brun647caf12009-06-30 17:57:00 +02007000 Enable RDP cookie-based persistence
7001 May be used in sections : defaults | frontend | listen | backend
7002 yes | no | yes | yes
7003 Arguments :
7004 <name> is the optional name of the RDP cookie to check. If omitted, the
Willy Tarreau61e28f22010-05-16 22:31:05 +02007005 default cookie name "msts" will be used. There currently is no
7006 valid reason to change this name.
Emeric Brun647caf12009-06-30 17:57:00 +02007007
7008 This statement enables persistence based on an RDP cookie. The RDP cookie
7009 contains all information required to find the server in the list of known
7010 servers. So when this option is set in the backend, the request is analysed
7011 and if an RDP cookie is found, it is decoded. If it matches a known server
7012 which is still UP (or if "option persist" is set), then the connection is
7013 forwarded to this server.
7014
7015 Note that this only makes sense in a TCP backend, but for this to work, the
7016 frontend must have waited long enough to ensure that an RDP cookie is present
7017 in the request buffer. This is the same requirement as with the "rdp-cookie"
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01007018 load-balancing method. Thus it is highly recommended to put all statements in
Emeric Brun647caf12009-06-30 17:57:00 +02007019 a single "listen" section.
7020
Willy Tarreau61e28f22010-05-16 22:31:05 +02007021 Also, it is important to understand that the terminal server will emit this
7022 RDP cookie only if it is configured for "token redirection mode", which means
7023 that the "IP address redirection" option is disabled.
7024
Emeric Brun647caf12009-06-30 17:57:00 +02007025 Example :
7026 listen tse-farm
7027 bind :3389
7028 # wait up to 5s for an RDP cookie in the request
7029 tcp-request inspect-delay 5s
7030 tcp-request content accept if RDP_COOKIE
7031 # apply RDP cookie persistence
7032 persist rdp-cookie
7033 # if server is unknown, let's balance on the same cookie.
Cyril Bontédc4d9032012-04-08 21:57:39 +02007034 # alternatively, "balance leastconn" may be useful too.
Emeric Brun647caf12009-06-30 17:57:00 +02007035 balance rdp-cookie
7036 server srv1 1.1.1.1:3389
7037 server srv2 1.1.1.2:3389
7038
Simon Hormanab814e02011-06-24 14:50:20 +09007039 See also : "balance rdp-cookie", "tcp-request", the "req_rdp_cookie" ACL and
7040 the rdp_cookie pattern fetch function.
Emeric Brun647caf12009-06-30 17:57:00 +02007041
7042
Willy Tarreau3a7d2072009-03-05 23:48:25 +01007043rate-limit sessions <rate>
7044 Set a limit on the number of new sessions accepted per second on a frontend
7045 May be used in sections : defaults | frontend | listen | backend
7046 yes | yes | yes | no
7047 Arguments :
7048 <rate> The <rate> parameter is an integer designating the maximum number
7049 of new sessions per second to accept on the frontend.
7050
7051 When the frontend reaches the specified number of new sessions per second, it
7052 stops accepting new connections until the rate drops below the limit again.
7053 During this time, the pending sessions will be kept in the socket's backlog
7054 (in system buffers) and haproxy will not even be aware that sessions are
7055 pending. When applying very low limit on a highly loaded service, it may make
7056 sense to increase the socket's backlog using the "backlog" keyword.
7057
7058 This feature is particularly efficient at blocking connection-based attacks
7059 or service abuse on fragile servers. Since the session rate is measured every
7060 millisecond, it is extremely accurate. Also, the limit applies immediately,
7061 no delay is needed at all to detect the threshold.
7062
7063 Example : limit the connection rate on SMTP to 10 per second max
7064 listen smtp
7065 mode tcp
7066 bind :25
7067 rate-limit sessions 10
Panagiotis Panagiotopoulos7282d8e2016-02-11 16:37:15 +02007068 server smtp1 127.0.0.1:1025
Willy Tarreau3a7d2072009-03-05 23:48:25 +01007069
Willy Tarreaua17c2d92011-07-25 08:16:20 +02007070 Note : when the maximum rate is reached, the frontend's status is not changed
7071 but its sockets appear as "WAITING" in the statistics if the
7072 "socket-stats" option is enabled.
Willy Tarreau3a7d2072009-03-05 23:48:25 +01007073
7074 See also : the "backlog" keyword and the "fe_sess_rate" ACL criterion.
7075
7076
Willy Tarreau2e1dca82012-09-12 08:43:15 +02007077redirect location <loc> [code <code>] <option> [{if | unless} <condition>]
7078redirect prefix <pfx> [code <code>] <option> [{if | unless} <condition>]
7079redirect scheme <sch> [code <code>] <option> [{if | unless} <condition>]
Willy Tarreaub463dfb2008-06-07 23:08:56 +02007080 Return an HTTP redirection if/unless a condition is matched
7081 May be used in sections : defaults | frontend | listen | backend
7082 no | yes | yes | yes
7083
7084 If/unless the condition is matched, the HTTP request will lead to a redirect
Willy Tarreauf285f542010-01-03 20:03:03 +01007085 response. If no condition is specified, the redirect applies unconditionally.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02007086
Willy Tarreau0140f252008-11-19 21:07:09 +01007087 Arguments :
Willy Tarreau2e1dca82012-09-12 08:43:15 +02007088 <loc> With "redirect location", the exact value in <loc> is placed into
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01007089 the HTTP "Location" header. When used in an "http-request" rule,
7090 <loc> value follows the log-format rules and can include some
7091 dynamic values (see Custom Log Format in section 8.2.4).
Willy Tarreau2e1dca82012-09-12 08:43:15 +02007092
7093 <pfx> With "redirect prefix", the "Location" header is built from the
7094 concatenation of <pfx> and the complete URI path, including the
7095 query string, unless the "drop-query" option is specified (see
7096 below). As a special case, if <pfx> equals exactly "/", then
7097 nothing is inserted before the original URI. It allows one to
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01007098 redirect to the same URL (for instance, to insert a cookie). When
7099 used in an "http-request" rule, <pfx> value follows the log-format
7100 rules and can include some dynamic values (see Custom Log Format
7101 in section 8.2.4).
Willy Tarreau2e1dca82012-09-12 08:43:15 +02007102
7103 <sch> With "redirect scheme", then the "Location" header is built by
7104 concatenating <sch> with "://" then the first occurrence of the
7105 "Host" header, and then the URI path, including the query string
7106 unless the "drop-query" option is specified (see below). If no
7107 path is found or if the path is "*", then "/" is used instead. If
7108 no "Host" header is found, then an empty host component will be
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03007109 returned, which most recent browsers interpret as redirecting to
Willy Tarreau2e1dca82012-09-12 08:43:15 +02007110 the same host. This directive is mostly used to redirect HTTP to
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01007111 HTTPS. When used in an "http-request" rule, <sch> value follows
7112 the log-format rules and can include some dynamic values (see
7113 Custom Log Format in section 8.2.4).
Willy Tarreau0140f252008-11-19 21:07:09 +01007114
7115 <code> The code is optional. It indicates which type of HTTP redirection
Willy Tarreaub67fdc42013-03-29 19:28:11 +01007116 is desired. Only codes 301, 302, 303, 307 and 308 are supported,
7117 with 302 used by default if no code is specified. 301 means
7118 "Moved permanently", and a browser may cache the Location. 302
Baptiste Assmannea849c02015-08-03 11:42:50 +02007119 means "Moved temporarily" and means that the browser should not
Willy Tarreaub67fdc42013-03-29 19:28:11 +01007120 cache the redirection. 303 is equivalent to 302 except that the
7121 browser will fetch the location with a GET method. 307 is just
7122 like 302 but makes it clear that the same method must be reused.
7123 Likewise, 308 replaces 301 if the same method must be used.
Willy Tarreau0140f252008-11-19 21:07:09 +01007124
7125 <option> There are several options which can be specified to adjust the
7126 expected behaviour of a redirection :
7127
7128 - "drop-query"
7129 When this keyword is used in a prefix-based redirection, then the
7130 location will be set without any possible query-string, which is useful
7131 for directing users to a non-secure page for instance. It has no effect
7132 with a location-type redirect.
7133
Willy Tarreau81e3b4f2010-01-10 00:42:19 +01007134 - "append-slash"
7135 This keyword may be used in conjunction with "drop-query" to redirect
7136 users who use a URL not ending with a '/' to the same one with the '/'.
7137 It can be useful to ensure that search engines will only see one URL.
7138 For this, a return code 301 is preferred.
7139
Willy Tarreau0140f252008-11-19 21:07:09 +01007140 - "set-cookie NAME[=value]"
7141 A "Set-Cookie" header will be added with NAME (and optionally "=value")
7142 to the response. This is sometimes used to indicate that a user has
7143 been seen, for instance to protect against some types of DoS. No other
7144 cookie option is added, so the cookie will be a session cookie. Note
7145 that for a browser, a sole cookie name without an equal sign is
7146 different from a cookie with an equal sign.
7147
7148 - "clear-cookie NAME[=]"
7149 A "Set-Cookie" header will be added with NAME (and optionally "="), but
7150 with the "Max-Age" attribute set to zero. This will tell the browser to
7151 delete this cookie. It is useful for instance on logout pages. It is
7152 important to note that clearing the cookie "NAME" will not remove a
7153 cookie set with "NAME=value". You have to clear the cookie "NAME=" for
7154 that, because the browser makes the difference.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02007155
7156 Example: move the login URL only to HTTPS.
7157 acl clear dst_port 80
7158 acl secure dst_port 8080
7159 acl login_page url_beg /login
Willy Tarreau0140f252008-11-19 21:07:09 +01007160 acl logout url_beg /logout
Willy Tarreau79da4692008-11-19 20:03:04 +01007161 acl uid_given url_reg /login?userid=[^&]+
Willy Tarreau0140f252008-11-19 21:07:09 +01007162 acl cookie_set hdr_sub(cookie) SEEN=1
7163
7164 redirect prefix https://mysite.com set-cookie SEEN=1 if !cookie_set
Willy Tarreau79da4692008-11-19 20:03:04 +01007165 redirect prefix https://mysite.com if login_page !secure
7166 redirect prefix http://mysite.com drop-query if login_page !uid_given
7167 redirect location http://mysite.com/ if !login_page secure
Willy Tarreau0140f252008-11-19 21:07:09 +01007168 redirect location / clear-cookie USERID= if logout
Willy Tarreaub463dfb2008-06-07 23:08:56 +02007169
Willy Tarreau81e3b4f2010-01-10 00:42:19 +01007170 Example: send redirects for request for articles without a '/'.
7171 acl missing_slash path_reg ^/article/[^/]*$
7172 redirect code 301 prefix / drop-query append-slash if missing_slash
7173
Willy Tarreau2e1dca82012-09-12 08:43:15 +02007174 Example: redirect all HTTP traffic to HTTPS when SSL is handled by haproxy.
David BERARDe7153042012-11-03 00:11:31 +01007175 redirect scheme https if !{ ssl_fc }
Willy Tarreau2e1dca82012-09-12 08:43:15 +02007176
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01007177 Example: append 'www.' prefix in front of all hosts not having it
Coen Rosdorff596659b2016-04-11 11:33:49 +02007178 http-request redirect code 301 location \
7179 http://www.%[hdr(host)]%[capture.req.uri] \
7180 unless { hdr_beg(host) -i www }
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01007181
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007182 See section 7 about ACL usage.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02007183
7184
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01007185redisp (deprecated)
7186redispatch (deprecated)
7187 Enable or disable session redistribution in case of connection failure
7188 May be used in sections: defaults | frontend | listen | backend
7189 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007190 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01007191
7192 In HTTP mode, if a server designated by a cookie is down, clients may
7193 definitely stick to it because they cannot flush the cookie, so they will not
7194 be able to access the service anymore.
7195
7196 Specifying "redispatch" will allow the proxy to break their persistence and
7197 redistribute them to a working server.
7198
7199 It also allows to retry last connection to another server in case of multiple
7200 connection failures. Of course, it requires having "retries" set to a nonzero
7201 value.
Willy Tarreaud72758d2010-01-12 10:42:19 +01007202
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01007203 This form is deprecated, do not use it in any new configuration, use the new
7204 "option redispatch" instead.
7205
7206 See also : "option redispatch"
7207
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007208
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01007209reqadd <string> [{if | unless} <cond>]
Willy Tarreau303c0352008-01-17 19:01:39 +01007210 Add a header at the end of the HTTP request
7211 May be used in sections : defaults | frontend | listen | backend
7212 no | yes | yes | yes
7213 Arguments :
7214 <string> is the complete line to be added. Any space or known delimiter
7215 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007216 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01007217
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01007218 <cond> is an optional matching condition built from ACLs. It makes it
7219 possible to ignore this rule when other conditions are not met.
7220
Willy Tarreau303c0352008-01-17 19:01:39 +01007221 A new line consisting in <string> followed by a line feed will be added after
7222 the last header of an HTTP request.
7223
7224 Header transformations only apply to traffic which passes through HAProxy,
7225 and not to traffic generated by HAProxy, such as health-checks or error
7226 responses.
7227
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01007228 Example : add "X-Proto: SSL" to requests coming via port 81
7229 acl is-ssl dst_port 81
7230 reqadd X-Proto:\ SSL if is-ssl
7231
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007232 See also: "rspadd", "http-request", section 6 about HTTP header manipulation,
7233 and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007234
7235
Willy Tarreau5321c422010-01-28 20:35:13 +01007236reqallow <search> [{if | unless} <cond>]
7237reqiallow <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007238 Definitely allow an HTTP request if a line matches a regular expression
7239 May be used in sections : defaults | frontend | listen | backend
7240 no | yes | yes | yes
7241 Arguments :
7242 <search> is the regular expression applied to HTTP headers and to the
7243 request line. This is an extended regular expression. Parenthesis
7244 grouping is supported and no preliminary backslash is required.
7245 Any space or known delimiter must be escaped using a backslash
7246 ('\'). The pattern applies to a full line at a time. The
7247 "reqallow" keyword strictly matches case while "reqiallow"
7248 ignores case.
7249
Willy Tarreau5321c422010-01-28 20:35:13 +01007250 <cond> is an optional matching condition built from ACLs. It makes it
7251 possible to ignore this rule when other conditions are not met.
7252
Willy Tarreau303c0352008-01-17 19:01:39 +01007253 A request containing any line which matches extended regular expression
7254 <search> will mark the request as allowed, even if any later test would
7255 result in a deny. The test applies both to the request line and to request
7256 headers. Keep in mind that URLs in request line are case-sensitive while
Willy Tarreaud72758d2010-01-12 10:42:19 +01007257 header names are not.
Willy Tarreau303c0352008-01-17 19:01:39 +01007258
7259 It is easier, faster and more powerful to use ACLs to write access policies.
7260 Reqdeny, reqallow and reqpass should be avoided in new designs.
7261
7262 Example :
7263 # allow www.* but refuse *.local
7264 reqiallow ^Host:\ www\.
7265 reqideny ^Host:\ .*\.local
7266
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007267 See also: "reqdeny", "block", "http-request", section 6 about HTTP header
7268 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007269
7270
Willy Tarreau5321c422010-01-28 20:35:13 +01007271reqdel <search> [{if | unless} <cond>]
7272reqidel <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007273 Delete all headers matching a regular expression in an HTTP request
7274 May be used in sections : defaults | frontend | listen | backend
7275 no | yes | yes | yes
7276 Arguments :
7277 <search> is the regular expression applied to HTTP headers and to the
7278 request line. This is an extended regular expression. Parenthesis
7279 grouping is supported and no preliminary backslash is required.
7280 Any space or known delimiter must be escaped using a backslash
7281 ('\'). The pattern applies to a full line at a time. The "reqdel"
7282 keyword strictly matches case while "reqidel" ignores case.
7283
Willy Tarreau5321c422010-01-28 20:35:13 +01007284 <cond> is an optional matching condition built from ACLs. It makes it
7285 possible to ignore this rule when other conditions are not met.
7286
Willy Tarreau303c0352008-01-17 19:01:39 +01007287 Any header line matching extended regular expression <search> in the request
7288 will be completely deleted. Most common use of this is to remove unwanted
7289 and/or dangerous headers or cookies from a request before passing it to the
7290 next servers.
7291
7292 Header transformations only apply to traffic which passes through HAProxy,
7293 and not to traffic generated by HAProxy, such as health-checks or error
7294 responses. Keep in mind that header names are not case-sensitive.
7295
7296 Example :
7297 # remove X-Forwarded-For header and SERVER cookie
7298 reqidel ^X-Forwarded-For:.*
7299 reqidel ^Cookie:.*SERVER=
7300
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007301 See also: "reqadd", "reqrep", "rspdel", "http-request", section 6 about
7302 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007303
7304
Willy Tarreau5321c422010-01-28 20:35:13 +01007305reqdeny <search> [{if | unless} <cond>]
7306reqideny <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007307 Deny an HTTP request if a line matches a regular expression
7308 May be used in sections : defaults | frontend | listen | backend
7309 no | yes | yes | yes
7310 Arguments :
7311 <search> is the regular expression applied to HTTP headers and to the
7312 request line. This is an extended regular expression. Parenthesis
7313 grouping is supported and no preliminary backslash is required.
7314 Any space or known delimiter must be escaped using a backslash
7315 ('\'). The pattern applies to a full line at a time. The
7316 "reqdeny" keyword strictly matches case while "reqideny" ignores
7317 case.
7318
Willy Tarreau5321c422010-01-28 20:35:13 +01007319 <cond> is an optional matching condition built from ACLs. It makes it
7320 possible to ignore this rule when other conditions are not met.
7321
Willy Tarreau303c0352008-01-17 19:01:39 +01007322 A request containing any line which matches extended regular expression
7323 <search> will mark the request as denied, even if any later test would
7324 result in an allow. The test applies both to the request line and to request
7325 headers. Keep in mind that URLs in request line are case-sensitive while
Willy Tarreaud72758d2010-01-12 10:42:19 +01007326 header names are not.
Willy Tarreau303c0352008-01-17 19:01:39 +01007327
Willy Tarreauced27012008-01-17 20:35:34 +01007328 A denied request will generate an "HTTP 403 forbidden" response once the
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01007329 complete request has been parsed. This is consistent with what is practiced
Willy Tarreaud72758d2010-01-12 10:42:19 +01007330 using ACLs.
Willy Tarreauced27012008-01-17 20:35:34 +01007331
Willy Tarreau303c0352008-01-17 19:01:39 +01007332 It is easier, faster and more powerful to use ACLs to write access policies.
7333 Reqdeny, reqallow and reqpass should be avoided in new designs.
7334
7335 Example :
7336 # refuse *.local, then allow www.*
7337 reqideny ^Host:\ .*\.local
7338 reqiallow ^Host:\ www\.
7339
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007340 See also: "reqallow", "rspdeny", "block", "http-request", section 6 about
7341 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007342
7343
Willy Tarreau5321c422010-01-28 20:35:13 +01007344reqpass <search> [{if | unless} <cond>]
7345reqipass <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007346 Ignore any HTTP request line matching a regular expression in next rules
7347 May be used in sections : defaults | frontend | listen | backend
7348 no | yes | yes | yes
7349 Arguments :
7350 <search> is the regular expression applied to HTTP headers and to the
7351 request line. This is an extended regular expression. Parenthesis
7352 grouping is supported and no preliminary backslash is required.
7353 Any space or known delimiter must be escaped using a backslash
7354 ('\'). The pattern applies to a full line at a time. The
7355 "reqpass" keyword strictly matches case while "reqipass" ignores
7356 case.
7357
Willy Tarreau5321c422010-01-28 20:35:13 +01007358 <cond> is an optional matching condition built from ACLs. It makes it
7359 possible to ignore this rule when other conditions are not met.
7360
Willy Tarreau303c0352008-01-17 19:01:39 +01007361 A request containing any line which matches extended regular expression
7362 <search> will skip next rules, without assigning any deny or allow verdict.
7363 The test applies both to the request line and to request headers. Keep in
7364 mind that URLs in request line are case-sensitive while header names are not.
7365
7366 It is easier, faster and more powerful to use ACLs to write access policies.
7367 Reqdeny, reqallow and reqpass should be avoided in new designs.
7368
7369 Example :
7370 # refuse *.local, then allow www.*, but ignore "www.private.local"
7371 reqipass ^Host:\ www.private\.local
7372 reqideny ^Host:\ .*\.local
7373 reqiallow ^Host:\ www\.
7374
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007375 See also: "reqallow", "reqdeny", "block", "http-request", section 6 about
7376 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007377
7378
Willy Tarreau5321c422010-01-28 20:35:13 +01007379reqrep <search> <string> [{if | unless} <cond>]
7380reqirep <search> <string> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007381 Replace a regular expression with a string in an HTTP request line
7382 May be used in sections : defaults | frontend | listen | backend
7383 no | yes | yes | yes
7384 Arguments :
7385 <search> is the regular expression applied to HTTP headers and to the
7386 request line. This is an extended regular expression. Parenthesis
7387 grouping is supported and no preliminary backslash is required.
7388 Any space or known delimiter must be escaped using a backslash
7389 ('\'). The pattern applies to a full line at a time. The "reqrep"
7390 keyword strictly matches case while "reqirep" ignores case.
7391
7392 <string> is the complete line to be added. Any space or known delimiter
7393 must be escaped using a backslash ('\'). References to matched
7394 pattern groups are possible using the common \N form, with N
7395 being a single digit between 0 and 9. Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007396 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01007397
Willy Tarreau5321c422010-01-28 20:35:13 +01007398 <cond> is an optional matching condition built from ACLs. It makes it
7399 possible to ignore this rule when other conditions are not met.
7400
Willy Tarreau303c0352008-01-17 19:01:39 +01007401 Any line matching extended regular expression <search> in the request (both
7402 the request line and header lines) will be completely replaced with <string>.
7403 Most common use of this is to rewrite URLs or domain names in "Host" headers.
7404
7405 Header transformations only apply to traffic which passes through HAProxy,
7406 and not to traffic generated by HAProxy, such as health-checks or error
7407 responses. Note that for increased readability, it is suggested to add enough
7408 spaces between the request and the response. Keep in mind that URLs in
7409 request line are case-sensitive while header names are not.
7410
7411 Example :
7412 # replace "/static/" with "/" at the beginning of any request path.
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04007413 reqrep ^([^\ :]*)\ /static/(.*) \1\ /\2
Willy Tarreau303c0352008-01-17 19:01:39 +01007414 # replace "www.mydomain.com" with "www" in the host name.
7415 reqirep ^Host:\ www.mydomain.com Host:\ www
7416
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007417 See also: "reqadd", "reqdel", "rsprep", "tune.bufsize", "http-request",
7418 section 6 about HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007419
7420
Willy Tarreau5321c422010-01-28 20:35:13 +01007421reqtarpit <search> [{if | unless} <cond>]
7422reqitarpit <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007423 Tarpit an HTTP request containing a line matching a regular expression
7424 May be used in sections : defaults | frontend | listen | backend
7425 no | yes | yes | yes
7426 Arguments :
7427 <search> is the regular expression applied to HTTP headers and to the
7428 request line. This is an extended regular expression. Parenthesis
7429 grouping is supported and no preliminary backslash is required.
7430 Any space or known delimiter must be escaped using a backslash
7431 ('\'). The pattern applies to a full line at a time. The
7432 "reqtarpit" keyword strictly matches case while "reqitarpit"
7433 ignores case.
7434
Willy Tarreau5321c422010-01-28 20:35:13 +01007435 <cond> is an optional matching condition built from ACLs. It makes it
7436 possible to ignore this rule when other conditions are not met.
7437
Willy Tarreau303c0352008-01-17 19:01:39 +01007438 A request containing any line which matches extended regular expression
7439 <search> will be tarpitted, which means that it will connect to nowhere, will
Willy Tarreauced27012008-01-17 20:35:34 +01007440 be kept open for a pre-defined time, then will return an HTTP error 500 so
7441 that the attacker does not suspect it has been tarpitted. The status 500 will
7442 be reported in the logs, but the completion flags will indicate "PT". The
Willy Tarreau303c0352008-01-17 19:01:39 +01007443 delay is defined by "timeout tarpit", or "timeout connect" if the former is
7444 not set.
7445
7446 The goal of the tarpit is to slow down robots attacking servers with
7447 identifiable requests. Many robots limit their outgoing number of connections
7448 and stay connected waiting for a reply which can take several minutes to
7449 come. Depending on the environment and attack, it may be particularly
7450 efficient at reducing the load on the network and firewalls.
7451
Willy Tarreau5321c422010-01-28 20:35:13 +01007452 Examples :
Willy Tarreau303c0352008-01-17 19:01:39 +01007453 # ignore user-agents reporting any flavour of "Mozilla" or "MSIE", but
7454 # block all others.
7455 reqipass ^User-Agent:\.*(Mozilla|MSIE)
7456 reqitarpit ^User-Agent:
7457
Willy Tarreau5321c422010-01-28 20:35:13 +01007458 # block bad guys
7459 acl badguys src 10.1.0.3 172.16.13.20/28
7460 reqitarpit . if badguys
7461
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007462 See also: "reqallow", "reqdeny", "reqpass", "http-request", section 6
7463 about HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007464
7465
Willy Tarreaue5c5ce92008-06-20 17:27:19 +02007466retries <value>
7467 Set the number of retries to perform on a server after a connection failure
7468 May be used in sections: defaults | frontend | listen | backend
7469 yes | no | yes | yes
7470 Arguments :
7471 <value> is the number of times a connection attempt should be retried on
7472 a server when a connection either is refused or times out. The
7473 default value is 3.
7474
7475 It is important to understand that this value applies to the number of
7476 connection attempts, not full requests. When a connection has effectively
7477 been established to a server, there will be no more retry.
7478
7479 In order to avoid immediate reconnections to a server which is restarting,
Joseph Lynch726ab712015-05-11 23:25:34 -07007480 a turn-around timer of min("timeout connect", one second) is applied before
7481 a retry occurs.
Willy Tarreaue5c5ce92008-06-20 17:27:19 +02007482
7483 When "option redispatch" is set, the last retry may be performed on another
7484 server even if a cookie references a different server.
7485
7486 See also : "option redispatch"
7487
7488
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007489rspadd <string> [{if | unless} <cond>]
Willy Tarreau303c0352008-01-17 19:01:39 +01007490 Add a header at the end of the HTTP response
7491 May be used in sections : defaults | frontend | listen | backend
7492 no | yes | yes | yes
7493 Arguments :
7494 <string> is the complete line to be added. Any space or known delimiter
7495 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007496 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01007497
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007498 <cond> is an optional matching condition built from ACLs. It makes it
7499 possible to ignore this rule when other conditions are not met.
7500
Willy Tarreau303c0352008-01-17 19:01:39 +01007501 A new line consisting in <string> followed by a line feed will be added after
7502 the last header of an HTTP response.
7503
7504 Header transformations only apply to traffic which passes through HAProxy,
7505 and not to traffic generated by HAProxy, such as health-checks or error
7506 responses.
7507
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007508 See also: "rspdel" "reqadd", "http-response", section 6 about HTTP header
7509 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007510
7511
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007512rspdel <search> [{if | unless} <cond>]
7513rspidel <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007514 Delete all headers matching a regular expression in an HTTP response
7515 May be used in sections : defaults | frontend | listen | backend
7516 no | yes | yes | yes
7517 Arguments :
7518 <search> is the regular expression applied to HTTP headers and to the
7519 response line. This is an extended regular expression, so
7520 parenthesis grouping is supported and no preliminary backslash
7521 is required. Any space or known delimiter must be escaped using
7522 a backslash ('\'). The pattern applies to a full line at a time.
7523 The "rspdel" keyword strictly matches case while "rspidel"
7524 ignores case.
7525
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007526 <cond> is an optional matching condition built from ACLs. It makes it
7527 possible to ignore this rule when other conditions are not met.
7528
Willy Tarreau303c0352008-01-17 19:01:39 +01007529 Any header line matching extended regular expression <search> in the response
7530 will be completely deleted. Most common use of this is to remove unwanted
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02007531 and/or sensitive headers or cookies from a response before passing it to the
Willy Tarreau303c0352008-01-17 19:01:39 +01007532 client.
7533
7534 Header transformations only apply to traffic which passes through HAProxy,
7535 and not to traffic generated by HAProxy, such as health-checks or error
7536 responses. Keep in mind that header names are not case-sensitive.
7537
7538 Example :
7539 # remove the Server header from responses
Willy Tarreau5e80e022013-05-25 08:31:25 +02007540 rspidel ^Server:.*
Willy Tarreau303c0352008-01-17 19:01:39 +01007541
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007542 See also: "rspadd", "rsprep", "reqdel", "http-response", section 6 about
7543 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007544
7545
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007546rspdeny <search> [{if | unless} <cond>]
7547rspideny <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007548 Block an HTTP response if a line matches a regular expression
7549 May be used in sections : defaults | frontend | listen | backend
7550 no | yes | yes | yes
7551 Arguments :
7552 <search> is the regular expression applied to HTTP headers and to the
7553 response line. This is an extended regular expression, so
7554 parenthesis grouping is supported and no preliminary backslash
7555 is required. Any space or known delimiter must be escaped using
7556 a backslash ('\'). The pattern applies to a full line at a time.
7557 The "rspdeny" keyword strictly matches case while "rspideny"
7558 ignores case.
7559
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007560 <cond> is an optional matching condition built from ACLs. It makes it
7561 possible to ignore this rule when other conditions are not met.
7562
Willy Tarreau303c0352008-01-17 19:01:39 +01007563 A response containing any line which matches extended regular expression
7564 <search> will mark the request as denied. The test applies both to the
7565 response line and to response headers. Keep in mind that header names are not
7566 case-sensitive.
7567
7568 Main use of this keyword is to prevent sensitive information leak and to
Willy Tarreauced27012008-01-17 20:35:34 +01007569 block the response before it reaches the client. If a response is denied, it
7570 will be replaced with an HTTP 502 error so that the client never retrieves
7571 any sensitive data.
Willy Tarreau303c0352008-01-17 19:01:39 +01007572
7573 It is easier, faster and more powerful to use ACLs to write access policies.
7574 Rspdeny should be avoided in new designs.
7575
7576 Example :
7577 # Ensure that no content type matching ms-word will leak
7578 rspideny ^Content-type:\.*/ms-word
7579
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007580 See also: "reqdeny", "acl", "block", "http-response", section 6 about
7581 HTTP header manipulation and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007582
7583
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007584rsprep <search> <string> [{if | unless} <cond>]
7585rspirep <search> <string> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007586 Replace a regular expression with a string in an HTTP response line
7587 May be used in sections : defaults | frontend | listen | backend
7588 no | yes | yes | yes
7589 Arguments :
7590 <search> is the regular expression applied to HTTP headers and to the
7591 response line. This is an extended regular expression, so
7592 parenthesis grouping is supported and no preliminary backslash
7593 is required. Any space or known delimiter must be escaped using
7594 a backslash ('\'). The pattern applies to a full line at a time.
7595 The "rsprep" keyword strictly matches case while "rspirep"
7596 ignores case.
7597
7598 <string> is the complete line to be added. Any space or known delimiter
7599 must be escaped using a backslash ('\'). References to matched
7600 pattern groups are possible using the common \N form, with N
7601 being a single digit between 0 and 9. Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007602 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01007603
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007604 <cond> is an optional matching condition built from ACLs. It makes it
7605 possible to ignore this rule when other conditions are not met.
7606
Willy Tarreau303c0352008-01-17 19:01:39 +01007607 Any line matching extended regular expression <search> in the response (both
7608 the response line and header lines) will be completely replaced with
7609 <string>. Most common use of this is to rewrite Location headers.
7610
7611 Header transformations only apply to traffic which passes through HAProxy,
7612 and not to traffic generated by HAProxy, such as health-checks or error
7613 responses. Note that for increased readability, it is suggested to add enough
7614 spaces between the request and the response. Keep in mind that header names
7615 are not case-sensitive.
7616
7617 Example :
7618 # replace "Location: 127.0.0.1:8080" with "Location: www.mydomain.com"
7619 rspirep ^Location:\ 127.0.0.1:8080 Location:\ www.mydomain.com
7620
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007621 See also: "rspadd", "rspdel", "reqrep", "http-response", section 6 about
7622 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007623
7624
David du Colombier486df472011-03-17 10:40:26 +01007625server <name> <address>[:[port]] [param*]
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007626 Declare a server in a backend
7627 May be used in sections : defaults | frontend | listen | backend
7628 no | no | yes | yes
7629 Arguments :
7630 <name> is the internal name assigned to this server. This name will
Cyril Bonté941a0c62012-10-15 19:44:24 +02007631 appear in logs and alerts. If "http-send-name-header" is
Mark Lamourinec2247f02012-01-04 13:02:01 -05007632 set, it will be added to the request header sent to the server.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007633
David du Colombier486df472011-03-17 10:40:26 +01007634 <address> is the IPv4 or IPv6 address of the server. Alternatively, a
7635 resolvable hostname is supported, but this name will be resolved
7636 during start-up. Address "0.0.0.0" or "*" has a special meaning.
7637 It indicates that the connection will be forwarded to the same IP
Willy Tarreaud669a4f2010-07-13 14:49:50 +02007638 address as the one from the client connection. This is useful in
7639 transparent proxy architectures where the client's connection is
7640 intercepted and haproxy must forward to the original destination
7641 address. This is more or less what the "transparent" keyword does
7642 except that with a server it's possible to limit concurrency and
Willy Tarreau24709282013-03-10 21:32:12 +01007643 to report statistics. Optionally, an address family prefix may be
7644 used before the address to force the family regardless of the
7645 address format, which can be useful to specify a path to a unix
7646 socket with no slash ('/'). Currently supported prefixes are :
7647 - 'ipv4@' -> address is always IPv4
7648 - 'ipv6@' -> address is always IPv6
7649 - 'unix@' -> address is a path to a local unix socket
Willy Tarreauccfccef2014-05-10 01:49:15 +02007650 - 'abns@' -> address is in abstract namespace (Linux only)
William Lallemandb2f07452015-05-12 14:27:13 +02007651 You may want to reference some environment variables in the
7652 address parameter, see section 2.3 about environment
Willy Tarreau6a031d12016-11-07 19:42:35 +01007653 variables. The "init-addr" setting can be used to modify the way
7654 IP addresses should be resolved upon startup.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007655
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007656 <port> is an optional port specification. If set, all connections will
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007657 be sent to this port. If unset, the same port the client
7658 connected to will be used. The port may also be prefixed by a "+"
7659 or a "-". In this case, the server's port will be determined by
7660 adding this value to the client's port.
7661
7662 <param*> is a list of parameters for this server. The "server" keywords
7663 accepts an important number of options and has a complete section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007664 dedicated to it. Please refer to section 5 for more details.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007665
7666 Examples :
7667 server first 10.1.1.1:1080 cookie first check inter 1000
7668 server second 10.1.1.2:1080 cookie second check inter 1000
Willy Tarreau24709282013-03-10 21:32:12 +01007669 server transp ipv4@
William Lallemandb2f07452015-05-12 14:27:13 +02007670 server backup "${SRV_BACKUP}:1080" backup
7671 server www1_dc1 "${LAN_DC1}.101:80"
7672 server www1_dc2 "${LAN_DC2}.101:80"
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007673
Willy Tarreau55dcaf62015-09-27 15:03:15 +02007674 Note: regarding Linux's abstract namespace sockets, HAProxy uses the whole
7675 sun_path length is used for the address length. Some other programs
7676 such as socat use the string length only by default. Pass the option
7677 ",unix-tightsocklen=0" to any abstract socket definition in socat to
7678 make it compatible with HAProxy's.
7679
Mark Lamourinec2247f02012-01-04 13:02:01 -05007680 See also: "default-server", "http-send-name-header" and section 5 about
7681 server options
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007682
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02007683server-state-file-name [<file>]
7684 Set the server state file to read, load and apply to servers available in
7685 this backend. It only applies when the directive "load-server-state-from-file"
7686 is set to "local". When <file> is not provided or if this directive is not
7687 set, then backend name is used. If <file> starts with a slash '/', then it is
7688 considered as an absolute path. Otherwise, <file> is concatenated to the
7689 global directive "server-state-file-base".
7690
7691 Example: the minimal configuration below would make HAProxy look for the
7692 state server file '/etc/haproxy/states/bk':
7693
7694 global
7695 server-state-file-base /etc/haproxy/states
7696
7697 backend bk
7698 load-server-state-from-file
7699
7700 See also: "server-state-file-base", "load-server-state-from-file", and
7701 "show servers state"
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007702
Frédéric Lécaillecb4502e2017-04-20 13:36:25 +02007703server-template <prefix> <num | range> <fqdn>[:<port>] [params*]
7704 Set a template to initialize servers with shared parameters.
7705 The names of these servers are built from <prefix> and <num | range> parameters.
7706 May be used in sections : defaults | frontend | listen | backend
7707 no | no | yes | yes
7708
7709 Arguments:
7710 <prefix> A prefix for the server names to be built.
7711
7712 <num | range>
7713 If <num> is provided, this template initializes <num> servers
7714 with 1 up to <num> as server name suffixes. A range of numbers
7715 <num_low>-<num_high> may also be used to use <num_low> up to
7716 <num_high> as server name suffixes.
7717
7718 <fqdn> A FQDN for all the servers this template initializes.
7719
7720 <port> Same meaning as "server" <port> argument (see "server" keyword).
7721
7722 <params*>
7723 Remaining server parameters among all those supported by "server"
7724 keyword.
7725
7726 Examples:
7727 # Initializes 3 servers with srv1, srv2 and srv3 as names,
7728 # google.com as FQDN, and health-check enabled.
7729 server-template srv 1-3 google.com:80 check
7730
7731 # or
7732 server-template srv 3 google.com:80 check
7733
7734 # would be equivalent to:
7735 server srv1 google.com:80 check
7736 server srv2 google.com:80 check
7737 server srv3 google.com:80 check
7738
7739
7740
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007741source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
Willy Tarreaubce70882009-09-07 11:51:47 +02007742source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | hdr_ip(<hdr>[,<occ>]) } ]
Willy Tarreaud53f96b2009-02-04 18:46:54 +01007743source <addr>[:<port>] [interface <name>]
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007744 Set the source address for outgoing connections
7745 May be used in sections : defaults | frontend | listen | backend
7746 yes | no | yes | yes
7747 Arguments :
7748 <addr> is the IPv4 address HAProxy will bind to before connecting to a
7749 server. This address is also used as a source for health checks.
Willy Tarreau24709282013-03-10 21:32:12 +01007750
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007751 The default value of 0.0.0.0 means that the system will select
Willy Tarreau24709282013-03-10 21:32:12 +01007752 the most appropriate address to reach its destination. Optionally
7753 an address family prefix may be used before the address to force
7754 the family regardless of the address format, which can be useful
7755 to specify a path to a unix socket with no slash ('/'). Currently
7756 supported prefixes are :
7757 - 'ipv4@' -> address is always IPv4
7758 - 'ipv6@' -> address is always IPv6
7759 - 'unix@' -> address is a path to a local unix socket
Willy Tarreauccfccef2014-05-10 01:49:15 +02007760 - 'abns@' -> address is in abstract namespace (Linux only)
Cyril Bonté307ee1e2015-09-28 23:16:06 +02007761 You may want to reference some environment variables in the
7762 address parameter, see section 2.3 about environment variables.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007763
7764 <port> is an optional port. It is normally not needed but may be useful
7765 in some very specific contexts. The default value of zero means
Willy Tarreauc6f4ce82009-06-10 11:09:37 +02007766 the system will select a free port. Note that port ranges are not
7767 supported in the backend. If you want to force port ranges, you
7768 have to specify them on each "server" line.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007769
7770 <addr2> is the IP address to present to the server when connections are
7771 forwarded in full transparent proxy mode. This is currently only
7772 supported on some patched Linux kernels. When this address is
7773 specified, clients connecting to the server will be presented
7774 with this address, while health checks will still use the address
7775 <addr>.
7776
7777 <port2> is the optional port to present to the server when connections
7778 are forwarded in full transparent proxy mode (see <addr2> above).
7779 The default value of zero means the system will select a free
7780 port.
7781
Willy Tarreaubce70882009-09-07 11:51:47 +02007782 <hdr> is the name of a HTTP header in which to fetch the IP to bind to.
7783 This is the name of a comma-separated header list which can
7784 contain multiple IP addresses. By default, the last occurrence is
7785 used. This is designed to work with the X-Forwarded-For header
Baptiste Assmannea3e73b2013-02-02 23:47:49 +01007786 and to automatically bind to the client's IP address as seen
Willy Tarreaubce70882009-09-07 11:51:47 +02007787 by previous proxy, typically Stunnel. In order to use another
7788 occurrence from the last one, please see the <occ> parameter
7789 below. When the header (or occurrence) is not found, no binding
7790 is performed so that the proxy's default IP address is used. Also
7791 keep in mind that the header name is case insensitive, as for any
7792 HTTP header.
7793
7794 <occ> is the occurrence number of a value to be used in a multi-value
7795 header. This is to be used in conjunction with "hdr_ip(<hdr>)",
Jamie Gloudonaaa21002012-08-25 00:18:33 -04007796 in order to specify which occurrence to use for the source IP
Willy Tarreaubce70882009-09-07 11:51:47 +02007797 address. Positive values indicate a position from the first
7798 occurrence, 1 being the first one. Negative values indicate
7799 positions relative to the last one, -1 being the last one. This
7800 is helpful for situations where an X-Forwarded-For header is set
7801 at the entry point of an infrastructure and must be used several
7802 proxy layers away. When this value is not specified, -1 is
7803 assumed. Passing a zero here disables the feature.
7804
Willy Tarreaud53f96b2009-02-04 18:46:54 +01007805 <name> is an optional interface name to which to bind to for outgoing
7806 traffic. On systems supporting this features (currently, only
7807 Linux), this allows one to bind all traffic to the server to
7808 this interface even if it is not the one the system would select
7809 based on routing tables. This should be used with extreme care.
7810 Note that using this option requires root privileges.
7811
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007812 The "source" keyword is useful in complex environments where a specific
7813 address only is allowed to connect to the servers. It may be needed when a
7814 private address must be used through a public gateway for instance, and it is
7815 known that the system cannot determine the adequate source address by itself.
7816
7817 An extension which is available on certain patched Linux kernels may be used
7818 through the "usesrc" optional keyword. It makes it possible to connect to the
7819 servers with an IP address which does not belong to the system itself. This
7820 is called "full transparent proxy mode". For this to work, the destination
7821 servers have to route their traffic back to this address through the machine
7822 running HAProxy, and IP forwarding must generally be enabled on this machine.
7823
7824 In this "full transparent proxy" mode, it is possible to force a specific IP
7825 address to be presented to the servers. This is not much used in fact. A more
7826 common use is to tell HAProxy to present the client's IP address. For this,
7827 there are two methods :
7828
7829 - present the client's IP and port addresses. This is the most transparent
7830 mode, but it can cause problems when IP connection tracking is enabled on
7831 the machine, because a same connection may be seen twice with different
7832 states. However, this solution presents the huge advantage of not
7833 limiting the system to the 64k outgoing address+port couples, because all
7834 of the client ranges may be used.
7835
7836 - present only the client's IP address and select a spare port. This
7837 solution is still quite elegant but slightly less transparent (downstream
7838 firewalls logs will not match upstream's). It also presents the downside
7839 of limiting the number of concurrent connections to the usual 64k ports.
7840 However, since the upstream and downstream ports are different, local IP
7841 connection tracking on the machine will not be upset by the reuse of the
7842 same session.
7843
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007844 This option sets the default source for all servers in the backend. It may
7845 also be specified in a "defaults" section. Finer source address specification
7846 is possible at the server level using the "source" server option. Refer to
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007847 section 5 for more information.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007848
Baptiste Assmann91bd3372015-07-17 21:59:42 +02007849 In order to work, "usesrc" requires root privileges.
7850
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007851 Examples :
7852 backend private
7853 # Connect to the servers using our 192.168.1.200 source address
7854 source 192.168.1.200
7855
7856 backend transparent_ssl1
7857 # Connect to the SSL farm from the client's source address
7858 source 192.168.1.200 usesrc clientip
7859
7860 backend transparent_ssl2
7861 # Connect to the SSL farm from the client's source address and port
7862 # not recommended if IP conntrack is present on the local machine.
7863 source 192.168.1.200 usesrc client
7864
7865 backend transparent_ssl3
7866 # Connect to the SSL farm from the client's source address. It
7867 # is more conntrack-friendly.
7868 source 192.168.1.200 usesrc clientip
7869
7870 backend transparent_smtp
7871 # Connect to the SMTP farm from the client's source address/port
7872 # with Tproxy version 4.
7873 source 0.0.0.0 usesrc clientip
7874
Willy Tarreaubce70882009-09-07 11:51:47 +02007875 backend transparent_http
7876 # Connect to the servers using the client's IP as seen by previous
7877 # proxy.
7878 source 0.0.0.0 usesrc hdr_ip(x-forwarded-for,-1)
7879
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007880 See also : the "source" server option in section 5, the Tproxy patches for
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007881 the Linux kernel on www.balabit.com, the "bind" keyword.
7882
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01007883
Willy Tarreau844e3c52008-01-11 16:28:18 +01007884srvtimeout <timeout> (deprecated)
7885 Set the maximum inactivity time on the server side.
7886 May be used in sections : defaults | frontend | listen | backend
7887 yes | no | yes | yes
7888 Arguments :
7889 <timeout> is the timeout value specified in milliseconds by default, but
7890 can be in any other unit if the number is suffixed by the unit,
7891 as explained at the top of this document.
7892
7893 The inactivity timeout applies when the server is expected to acknowledge or
7894 send data. In HTTP mode, this timeout is particularly important to consider
7895 during the first phase of the server's response, when it has to send the
7896 headers, as it directly represents the server's processing time for the
7897 request. To find out what value to put there, it's often good to start with
7898 what would be considered as unacceptable response times, then check the logs
7899 to observe the response time distribution, and adjust the value accordingly.
7900
7901 The value is specified in milliseconds by default, but can be in any other
7902 unit if the number is suffixed by the unit, as specified at the top of this
7903 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
7904 recommended that the client timeout remains equal to the server timeout in
7905 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01007906 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01007907 packet losses by specifying timeouts that are slightly above multiples of 3
Willy Tarreaud72758d2010-01-12 10:42:19 +01007908 seconds (eg: 4 or 5 seconds minimum).
Willy Tarreau844e3c52008-01-11 16:28:18 +01007909
7910 This parameter is specific to backends, but can be specified once for all in
7911 "defaults" sections. This is in fact one of the easiest solutions not to
7912 forget about it. An unspecified timeout results in an infinite timeout, which
7913 is not recommended. Such a usage is accepted and works but reports a warning
7914 during startup because it may results in accumulation of expired sessions in
7915 the system if the system's timeouts are not configured either.
7916
7917 This parameter is provided for compatibility but is currently deprecated.
7918 Please use "timeout server" instead.
7919
Willy Tarreauce887fd2012-05-12 12:50:00 +02007920 See also : "timeout server", "timeout tunnel", "timeout client" and
7921 "clitimeout".
Willy Tarreau844e3c52008-01-11 16:28:18 +01007922
7923
Cyril Bonté66c327d2010-10-12 00:14:37 +02007924stats admin { if | unless } <cond>
7925 Enable statistics admin level if/unless a condition is matched
7926 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007927 no | yes | yes | yes
Cyril Bonté66c327d2010-10-12 00:14:37 +02007928
7929 This statement enables the statistics admin level if/unless a condition is
7930 matched.
7931
7932 The admin level allows to enable/disable servers from the web interface. By
7933 default, statistics page is read-only for security reasons.
7934
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01007935 Note : Consider not using this feature in multi-process mode (nbproc > 1)
7936 unless you know what you do : memory is not shared between the
7937 processes, which can result in random behaviours.
7938
Cyril Bonté23b39d92011-02-10 22:54:44 +01007939 Currently, the POST request is limited to the buffer size minus the reserved
7940 buffer space, which means that if the list of servers is too long, the
7941 request won't be processed. It is recommended to alter few servers at a
7942 time.
Cyril Bonté66c327d2010-10-12 00:14:37 +02007943
7944 Example :
7945 # statistics admin level only for localhost
7946 backend stats_localhost
7947 stats enable
7948 stats admin if LOCALHOST
7949
7950 Example :
7951 # statistics admin level always enabled because of the authentication
7952 backend stats_auth
7953 stats enable
7954 stats auth admin:AdMiN123
7955 stats admin if TRUE
7956
7957 Example :
7958 # statistics admin level depends on the authenticated user
7959 userlist stats-auth
7960 group admin users admin
7961 user admin insecure-password AdMiN123
7962 group readonly users haproxy
7963 user haproxy insecure-password haproxy
7964
7965 backend stats_auth
7966 stats enable
7967 acl AUTH http_auth(stats-auth)
7968 acl AUTH_ADMIN http_auth_group(stats-auth) admin
7969 stats http-request auth unless AUTH
7970 stats admin if AUTH_ADMIN
7971
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01007972 See also : "stats enable", "stats auth", "stats http-request", "nbproc",
7973 "bind-process", section 3.4 about userlists and section 7 about
7974 ACL usage.
Cyril Bonté66c327d2010-10-12 00:14:37 +02007975
7976
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007977stats auth <user>:<passwd>
7978 Enable statistics with authentication and grant access to an account
7979 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007980 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007981 Arguments :
7982 <user> is a user name to grant access to
7983
7984 <passwd> is the cleartext password associated to this user
7985
7986 This statement enables statistics with default settings, and restricts access
7987 to declared users only. It may be repeated as many times as necessary to
7988 allow as many users as desired. When a user tries to access the statistics
7989 without a valid account, a "401 Forbidden" response will be returned so that
7990 the browser asks the user to provide a valid user and password. The real
7991 which will be returned to the browser is configurable using "stats realm".
7992
7993 Since the authentication method is HTTP Basic Authentication, the passwords
7994 circulate in cleartext on the network. Thus, it was decided that the
7995 configuration file would also use cleartext passwords to remind the users
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02007996 that those ones should not be sensitive and not shared with any other account.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007997
7998 It is also possible to reduce the scope of the proxies which appear in the
7999 report using "stats scope".
8000
8001 Though this statement alone is enough to enable statistics reporting, it is
8002 recommended to set all other settings in order to avoid relying on default
8003 unobvious parameters.
8004
8005 Example :
8006 # public access (limited to this backend only)
8007 backend public_www
8008 server srv1 192.168.0.1:80
8009 stats enable
8010 stats hide-version
8011 stats scope .
8012 stats uri /admin?stats
8013 stats realm Haproxy\ Statistics
8014 stats auth admin1:AdMiN123
8015 stats auth admin2:AdMiN321
8016
8017 # internal monitoring access (unlimited)
8018 backend private_monitoring
8019 stats enable
8020 stats uri /admin?stats
8021 stats refresh 5s
8022
8023 See also : "stats enable", "stats realm", "stats scope", "stats uri"
8024
8025
8026stats enable
8027 Enable statistics reporting with default settings
8028 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008029 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008030 Arguments : none
8031
8032 This statement enables statistics reporting with default settings defined
8033 at build time. Unless stated otherwise, these settings are used :
8034 - stats uri : /haproxy?stats
8035 - stats realm : "HAProxy Statistics"
8036 - stats auth : no authentication
8037 - stats scope : no restriction
8038
8039 Though this statement alone is enough to enable statistics reporting, it is
8040 recommended to set all other settings in order to avoid relying on default
8041 unobvious parameters.
8042
8043 Example :
8044 # public access (limited to this backend only)
8045 backend public_www
8046 server srv1 192.168.0.1:80
8047 stats enable
8048 stats hide-version
8049 stats scope .
8050 stats uri /admin?stats
8051 stats realm Haproxy\ Statistics
8052 stats auth admin1:AdMiN123
8053 stats auth admin2:AdMiN321
8054
8055 # internal monitoring access (unlimited)
8056 backend private_monitoring
8057 stats enable
8058 stats uri /admin?stats
8059 stats refresh 5s
8060
8061 See also : "stats auth", "stats realm", "stats uri"
8062
8063
Willy Tarreaud63335a2010-02-26 12:56:52 +01008064stats hide-version
8065 Enable statistics and hide HAProxy version reporting
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02008066 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008067 yes | yes | yes | yes
Willy Tarreaud63335a2010-02-26 12:56:52 +01008068 Arguments : none
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02008069
Willy Tarreaud63335a2010-02-26 12:56:52 +01008070 By default, the stats page reports some useful status information along with
8071 the statistics. Among them is HAProxy's version. However, it is generally
8072 considered dangerous to report precise version to anyone, as it can help them
8073 target known weaknesses with specific attacks. The "stats hide-version"
8074 statement removes the version from the statistics report. This is recommended
8075 for public sites or any site with a weak login/password.
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02008076
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +02008077 Though this statement alone is enough to enable statistics reporting, it is
8078 recommended to set all other settings in order to avoid relying on default
8079 unobvious parameters.
8080
Willy Tarreaud63335a2010-02-26 12:56:52 +01008081 Example :
8082 # public access (limited to this backend only)
8083 backend public_www
8084 server srv1 192.168.0.1:80
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +02008085 stats enable
Willy Tarreaud63335a2010-02-26 12:56:52 +01008086 stats hide-version
8087 stats scope .
8088 stats uri /admin?stats
8089 stats realm Haproxy\ Statistics
8090 stats auth admin1:AdMiN123
8091 stats auth admin2:AdMiN321
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02008092
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02008093 # internal monitoring access (unlimited)
8094 backend private_monitoring
8095 stats enable
Willy Tarreaud63335a2010-02-26 12:56:52 +01008096 stats uri /admin?stats
8097 stats refresh 5s
Krzysztof Piotr Oledzki15514c22010-01-04 16:03:09 +01008098
Willy Tarreaud63335a2010-02-26 12:56:52 +01008099 See also : "stats auth", "stats enable", "stats realm", "stats uri"
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02008100
Willy Tarreau983e01e2010-01-11 18:42:06 +01008101
Cyril Bonté2be1b3f2010-09-30 23:46:30 +02008102stats http-request { allow | deny | auth [realm <realm>] }
8103 [ { if | unless } <condition> ]
8104 Access control for statistics
8105
8106 May be used in sections: defaults | frontend | listen | backend
8107 no | no | yes | yes
8108
8109 As "http-request", these set of options allow to fine control access to
8110 statistics. Each option may be followed by if/unless and acl.
8111 First option with matched condition (or option without condition) is final.
8112 For "deny" a 403 error will be returned, for "allow" normal processing is
8113 performed, for "auth" a 401/407 error code is returned so the client
8114 should be asked to enter a username and password.
8115
8116 There is no fixed limit to the number of http-request statements per
8117 instance.
8118
8119 See also : "http-request", section 3.4 about userlists and section 7
8120 about ACL usage.
8121
8122
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008123stats realm <realm>
8124 Enable statistics and set authentication realm
8125 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008126 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008127 Arguments :
8128 <realm> is the name of the HTTP Basic Authentication realm reported to
8129 the browser. The browser uses it to display it in the pop-up
8130 inviting the user to enter a valid username and password.
8131
8132 The realm is read as a single word, so any spaces in it should be escaped
8133 using a backslash ('\').
8134
8135 This statement is useful only in conjunction with "stats auth" since it is
8136 only related to authentication.
8137
8138 Though this statement alone is enough to enable statistics reporting, it is
8139 recommended to set all other settings in order to avoid relying on default
8140 unobvious parameters.
8141
8142 Example :
8143 # public access (limited to this backend only)
8144 backend public_www
8145 server srv1 192.168.0.1:80
8146 stats enable
8147 stats hide-version
8148 stats scope .
8149 stats uri /admin?stats
8150 stats realm Haproxy\ Statistics
8151 stats auth admin1:AdMiN123
8152 stats auth admin2:AdMiN321
8153
8154 # internal monitoring access (unlimited)
8155 backend private_monitoring
8156 stats enable
8157 stats uri /admin?stats
8158 stats refresh 5s
8159
8160 See also : "stats auth", "stats enable", "stats uri"
8161
8162
8163stats refresh <delay>
8164 Enable statistics with automatic refresh
8165 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008166 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008167 Arguments :
8168 <delay> is the suggested refresh delay, specified in seconds, which will
8169 be returned to the browser consulting the report page. While the
8170 browser is free to apply any delay, it will generally respect it
8171 and refresh the page this every seconds. The refresh interval may
8172 be specified in any other non-default time unit, by suffixing the
8173 unit after the value, as explained at the top of this document.
8174
8175 This statement is useful on monitoring displays with a permanent page
8176 reporting the load balancer's activity. When set, the HTML report page will
8177 include a link "refresh"/"stop refresh" so that the user can select whether
8178 he wants automatic refresh of the page or not.
8179
8180 Though this statement alone is enough to enable statistics reporting, it is
8181 recommended to set all other settings in order to avoid relying on default
8182 unobvious parameters.
8183
8184 Example :
8185 # public access (limited to this backend only)
8186 backend public_www
8187 server srv1 192.168.0.1:80
8188 stats enable
8189 stats hide-version
8190 stats scope .
8191 stats uri /admin?stats
8192 stats realm Haproxy\ Statistics
8193 stats auth admin1:AdMiN123
8194 stats auth admin2:AdMiN321
8195
8196 # internal monitoring access (unlimited)
8197 backend private_monitoring
8198 stats enable
8199 stats uri /admin?stats
8200 stats refresh 5s
8201
8202 See also : "stats auth", "stats enable", "stats realm", "stats uri"
8203
8204
8205stats scope { <name> | "." }
8206 Enable statistics and limit access scope
8207 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008208 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008209 Arguments :
8210 <name> is the name of a listen, frontend or backend section to be
8211 reported. The special name "." (a single dot) designates the
8212 section in which the statement appears.
8213
8214 When this statement is specified, only the sections enumerated with this
8215 statement will appear in the report. All other ones will be hidden. This
8216 statement may appear as many times as needed if multiple sections need to be
8217 reported. Please note that the name checking is performed as simple string
8218 comparisons, and that it is never checked that a give section name really
8219 exists.
8220
8221 Though this statement alone is enough to enable statistics reporting, it is
8222 recommended to set all other settings in order to avoid relying on default
8223 unobvious parameters.
8224
8225 Example :
8226 # public access (limited to this backend only)
8227 backend public_www
8228 server srv1 192.168.0.1:80
8229 stats enable
8230 stats hide-version
8231 stats scope .
8232 stats uri /admin?stats
8233 stats realm Haproxy\ Statistics
8234 stats auth admin1:AdMiN123
8235 stats auth admin2:AdMiN321
8236
8237 # internal monitoring access (unlimited)
8238 backend private_monitoring
8239 stats enable
8240 stats uri /admin?stats
8241 stats refresh 5s
8242
8243 See also : "stats auth", "stats enable", "stats realm", "stats uri"
8244
Willy Tarreaud63335a2010-02-26 12:56:52 +01008245
Willy Tarreauc9705a12010-07-27 20:05:50 +02008246stats show-desc [ <desc> ]
Willy Tarreaud63335a2010-02-26 12:56:52 +01008247 Enable reporting of a description on the statistics page.
8248 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008249 yes | yes | yes | yes
Willy Tarreaud63335a2010-02-26 12:56:52 +01008250
Willy Tarreauc9705a12010-07-27 20:05:50 +02008251 <desc> is an optional description to be reported. If unspecified, the
Willy Tarreaud63335a2010-02-26 12:56:52 +01008252 description from global section is automatically used instead.
8253
8254 This statement is useful for users that offer shared services to their
8255 customers, where node or description should be different for each customer.
8256
8257 Though this statement alone is enough to enable statistics reporting, it is
8258 recommended to set all other settings in order to avoid relying on default
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04008259 unobvious parameters. By default description is not shown.
Willy Tarreaud63335a2010-02-26 12:56:52 +01008260
8261 Example :
8262 # internal monitoring access (unlimited)
8263 backend private_monitoring
8264 stats enable
8265 stats show-desc Master node for Europe, Asia, Africa
8266 stats uri /admin?stats
8267 stats refresh 5s
8268
8269 See also: "show-node", "stats enable", "stats uri" and "description" in
8270 global section.
8271
8272
8273stats show-legends
Willy Tarreaued2119c2014-04-24 22:10:39 +02008274 Enable reporting additional information on the statistics page
8275 May be used in sections : defaults | frontend | listen | backend
8276 yes | yes | yes | yes
8277 Arguments : none
8278
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03008279 Enable reporting additional information on the statistics page :
Willy Tarreaud63335a2010-02-26 12:56:52 +01008280 - cap: capabilities (proxy)
8281 - mode: one of tcp, http or health (proxy)
8282 - id: SNMP ID (proxy, socket, server)
8283 - IP (socket, server)
8284 - cookie (backend, server)
8285
8286 Though this statement alone is enough to enable statistics reporting, it is
8287 recommended to set all other settings in order to avoid relying on default
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04008288 unobvious parameters. Default behaviour is not to show this information.
Willy Tarreaud63335a2010-02-26 12:56:52 +01008289
8290 See also: "stats enable", "stats uri".
8291
8292
8293stats show-node [ <name> ]
8294 Enable reporting of a host name on the statistics page.
8295 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008296 yes | yes | yes | yes
Willy Tarreaud63335a2010-02-26 12:56:52 +01008297 Arguments:
8298 <name> is an optional name to be reported. If unspecified, the
8299 node name from global section is automatically used instead.
8300
8301 This statement is useful for users that offer shared services to their
8302 customers, where node or description might be different on a stats page
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04008303 provided for each customer. Default behaviour is not to show host name.
Willy Tarreaud63335a2010-02-26 12:56:52 +01008304
8305 Though this statement alone is enough to enable statistics reporting, it is
8306 recommended to set all other settings in order to avoid relying on default
8307 unobvious parameters.
8308
8309 Example:
8310 # internal monitoring access (unlimited)
8311 backend private_monitoring
8312 stats enable
8313 stats show-node Europe-1
8314 stats uri /admin?stats
8315 stats refresh 5s
8316
8317 See also: "show-desc", "stats enable", "stats uri", and "node" in global
8318 section.
8319
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008320
8321stats uri <prefix>
8322 Enable statistics and define the URI prefix to access them
8323 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008324 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008325 Arguments :
8326 <prefix> is the prefix of any URI which will be redirected to stats. This
8327 prefix may contain a question mark ('?') to indicate part of a
8328 query string.
8329
8330 The statistics URI is intercepted on the relayed traffic, so it appears as a
8331 page within the normal application. It is strongly advised to ensure that the
8332 selected URI will never appear in the application, otherwise it will never be
8333 possible to reach it in the application.
8334
8335 The default URI compiled in haproxy is "/haproxy?stats", but this may be
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01008336 changed at build time, so it's better to always explicitly specify it here.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008337 It is generally a good idea to include a question mark in the URI so that
8338 intermediate proxies refrain from caching the results. Also, since any string
8339 beginning with the prefix will be accepted as a stats request, the question
8340 mark helps ensuring that no valid URI will begin with the same words.
8341
8342 It is sometimes very convenient to use "/" as the URI prefix, and put that
8343 statement in a "listen" instance of its own. That makes it easy to dedicate
8344 an address or a port to statistics only.
8345
8346 Though this statement alone is enough to enable statistics reporting, it is
8347 recommended to set all other settings in order to avoid relying on default
8348 unobvious parameters.
8349
8350 Example :
8351 # public access (limited to this backend only)
8352 backend public_www
8353 server srv1 192.168.0.1:80
8354 stats enable
8355 stats hide-version
8356 stats scope .
8357 stats uri /admin?stats
8358 stats realm Haproxy\ Statistics
8359 stats auth admin1:AdMiN123
8360 stats auth admin2:AdMiN321
8361
8362 # internal monitoring access (unlimited)
8363 backend private_monitoring
8364 stats enable
8365 stats uri /admin?stats
8366 stats refresh 5s
8367
8368 See also : "stats auth", "stats enable", "stats realm"
8369
8370
Willy Tarreaud63335a2010-02-26 12:56:52 +01008371stick match <pattern> [table <table>] [{if | unless} <cond>]
8372 Define a request pattern matching condition to stick a user to a server
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008373 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaud63335a2010-02-26 12:56:52 +01008374 no | no | yes | yes
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008375
8376 Arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02008377 <pattern> is a sample expression rule as described in section 7.3. It
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008378 describes what elements of the incoming request or connection
8379 will be analysed in the hope to find a matching entry in a
8380 stickiness table. This rule is mandatory.
8381
8382 <table> is an optional stickiness table name. If unspecified, the same
8383 backend's table is used. A stickiness table is declared using
8384 the "stick-table" statement.
8385
8386 <cond> is an optional matching condition. It makes it possible to match
8387 on a certain criterion only when other conditions are met (or
8388 not met). For instance, it could be used to match on a source IP
8389 address except when a request passes through a known proxy, in
8390 which case we'd match on a header containing that IP address.
8391
8392 Some protocols or applications require complex stickiness rules and cannot
8393 always simply rely on cookies nor hashing. The "stick match" statement
8394 describes a rule to extract the stickiness criterion from an incoming request
8395 or connection. See section 7 for a complete list of possible patterns and
8396 transformation rules.
8397
8398 The table has to be declared using the "stick-table" statement. It must be of
8399 a type compatible with the pattern. By default it is the one which is present
8400 in the same backend. It is possible to share a table with other backends by
8401 referencing it using the "table" keyword. If another table is referenced,
8402 the server's ID inside the backends are used. By default, all server IDs
8403 start at 1 in each backend, so the server ordering is enough. But in case of
8404 doubt, it is highly recommended to force server IDs using their "id" setting.
8405
8406 It is possible to restrict the conditions where a "stick match" statement
8407 will apply, using "if" or "unless" followed by a condition. See section 7 for
8408 ACL based conditions.
8409
8410 There is no limit on the number of "stick match" statements. The first that
8411 applies and matches will cause the request to be directed to the same server
8412 as was used for the request which created the entry. That way, multiple
8413 matches can be used as fallbacks.
8414
8415 The stick rules are checked after the persistence cookies, so they will not
8416 affect stickiness if a cookie has already been used to select a server. That
8417 way, it becomes very easy to insert cookies and match on IP addresses in
8418 order to maintain stickiness between HTTP and HTTPS.
8419
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008420 Note : Consider not using this feature in multi-process mode (nbproc > 1)
8421 unless you know what you do : memory is not shared between the
8422 processes, which can result in random behaviours.
8423
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008424 Example :
8425 # forward SMTP users to the same server they just used for POP in the
8426 # last 30 minutes
8427 backend pop
8428 mode tcp
8429 balance roundrobin
8430 stick store-request src
8431 stick-table type ip size 200k expire 30m
8432 server s1 192.168.1.1:110
8433 server s2 192.168.1.1:110
8434
8435 backend smtp
8436 mode tcp
8437 balance roundrobin
8438 stick match src table pop
8439 server s1 192.168.1.1:25
8440 server s2 192.168.1.1:25
8441
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008442 See also : "stick-table", "stick on", "nbproc", "bind-process" and section 7
Willy Tarreaube722a22014-06-13 16:31:59 +02008443 about ACLs and samples fetching.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008444
8445
8446stick on <pattern> [table <table>] [{if | unless} <condition>]
8447 Define a request pattern to associate a user to a server
8448 May be used in sections : defaults | frontend | listen | backend
8449 no | no | yes | yes
8450
8451 Note : This form is exactly equivalent to "stick match" followed by
8452 "stick store-request", all with the same arguments. Please refer
8453 to both keywords for details. It is only provided as a convenience
8454 for writing more maintainable configurations.
8455
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008456 Note : Consider not using this feature in multi-process mode (nbproc > 1)
8457 unless you know what you do : memory is not shared between the
8458 processes, which can result in random behaviours.
8459
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008460 Examples :
8461 # The following form ...
Willy Tarreauec579d82010-02-26 19:15:04 +01008462 stick on src table pop if !localhost
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008463
8464 # ...is strictly equivalent to this one :
8465 stick match src table pop if !localhost
8466 stick store-request src table pop if !localhost
8467
8468
8469 # Use cookie persistence for HTTP, and stick on source address for HTTPS as
8470 # well as HTTP without cookie. Share the same table between both accesses.
8471 backend http
8472 mode http
8473 balance roundrobin
8474 stick on src table https
8475 cookie SRV insert indirect nocache
8476 server s1 192.168.1.1:80 cookie s1
8477 server s2 192.168.1.1:80 cookie s2
8478
8479 backend https
8480 mode tcp
8481 balance roundrobin
8482 stick-table type ip size 200k expire 30m
8483 stick on src
8484 server s1 192.168.1.1:443
8485 server s2 192.168.1.1:443
8486
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008487 See also : "stick match", "stick store-request", "nbproc" and "bind-process".
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008488
8489
8490stick store-request <pattern> [table <table>] [{if | unless} <condition>]
8491 Define a request pattern used to create an entry in a stickiness table
8492 May be used in sections : defaults | frontend | listen | backend
8493 no | no | yes | yes
8494
8495 Arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02008496 <pattern> is a sample expression rule as described in section 7.3. It
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008497 describes what elements of the incoming request or connection
8498 will be analysed, extracted and stored in the table once a
8499 server is selected.
8500
8501 <table> is an optional stickiness table name. If unspecified, the same
8502 backend's table is used. A stickiness table is declared using
8503 the "stick-table" statement.
8504
8505 <cond> is an optional storage condition. It makes it possible to store
8506 certain criteria only when some conditions are met (or not met).
8507 For instance, it could be used to store the source IP address
8508 except when the request passes through a known proxy, in which
8509 case we'd store a converted form of a header containing that IP
8510 address.
8511
8512 Some protocols or applications require complex stickiness rules and cannot
8513 always simply rely on cookies nor hashing. The "stick store-request" statement
8514 describes a rule to decide what to extract from the request and when to do
8515 it, in order to store it into a stickiness table for further requests to
8516 match it using the "stick match" statement. Obviously the extracted part must
8517 make sense and have a chance to be matched in a further request. Storing a
8518 client's IP address for instance often makes sense. Storing an ID found in a
8519 URL parameter also makes sense. Storing a source port will almost never make
8520 any sense because it will be randomly matched. See section 7 for a complete
8521 list of possible patterns and transformation rules.
8522
8523 The table has to be declared using the "stick-table" statement. It must be of
8524 a type compatible with the pattern. By default it is the one which is present
8525 in the same backend. It is possible to share a table with other backends by
8526 referencing it using the "table" keyword. If another table is referenced,
8527 the server's ID inside the backends are used. By default, all server IDs
8528 start at 1 in each backend, so the server ordering is enough. But in case of
8529 doubt, it is highly recommended to force server IDs using their "id" setting.
8530
8531 It is possible to restrict the conditions where a "stick store-request"
8532 statement will apply, using "if" or "unless" followed by a condition. This
8533 condition will be evaluated while parsing the request, so any criteria can be
8534 used. See section 7 for ACL based conditions.
8535
8536 There is no limit on the number of "stick store-request" statements, but
8537 there is a limit of 8 simultaneous stores per request or response. This
8538 makes it possible to store up to 8 criteria, all extracted from either the
8539 request or the response, regardless of the number of rules. Only the 8 first
8540 ones which match will be kept. Using this, it is possible to feed multiple
8541 tables at once in the hope to increase the chance to recognize a user on
Willy Tarreau9667a802013-12-09 12:52:13 +01008542 another protocol or access method. Using multiple store-request rules with
8543 the same table is possible and may be used to find the best criterion to rely
8544 on, by arranging the rules by decreasing preference order. Only the first
8545 extracted criterion for a given table will be stored. All subsequent store-
8546 request rules referencing the same table will be skipped and their ACLs will
8547 not be evaluated.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008548
8549 The "store-request" rules are evaluated once the server connection has been
8550 established, so that the table will contain the real server that processed
8551 the request.
8552
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008553 Note : Consider not using this feature in multi-process mode (nbproc > 1)
8554 unless you know what you do : memory is not shared between the
8555 processes, which can result in random behaviours.
8556
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008557 Example :
8558 # forward SMTP users to the same server they just used for POP in the
8559 # last 30 minutes
8560 backend pop
8561 mode tcp
8562 balance roundrobin
8563 stick store-request src
8564 stick-table type ip size 200k expire 30m
8565 server s1 192.168.1.1:110
8566 server s2 192.168.1.1:110
8567
8568 backend smtp
8569 mode tcp
8570 balance roundrobin
8571 stick match src table pop
8572 server s1 192.168.1.1:25
8573 server s2 192.168.1.1:25
8574
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008575 See also : "stick-table", "stick on", "nbproc", "bind-process" and section 7
Willy Tarreaube722a22014-06-13 16:31:59 +02008576 about ACLs and sample fetching.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008577
8578
Emeric Brun7c6b82e2010-09-24 16:34:28 +02008579stick-table type {ip | integer | string [len <length>] | binary [len <length>]}
Emeric Brunf099e792010-09-27 12:05:28 +02008580 size <size> [expire <expire>] [nopurge] [peers <peersect>]
8581 [store <data_type>]*
Godbach64cef792013-12-04 16:08:22 +08008582 Configure the stickiness table for the current section
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008583 May be used in sections : defaults | frontend | listen | backend
Willy Tarreauc00cdc22010-06-06 16:48:26 +02008584 no | yes | yes | yes
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008585
8586 Arguments :
8587 ip a table declared with "type ip" will only store IPv4 addresses.
8588 This form is very compact (about 50 bytes per entry) and allows
8589 very fast entry lookup and stores with almost no overhead. This
8590 is mainly used to store client source IP addresses.
8591
David du Colombier9a6d3c92011-03-17 10:40:24 +01008592 ipv6 a table declared with "type ipv6" will only store IPv6 addresses.
8593 This form is very compact (about 60 bytes per entry) and allows
8594 very fast entry lookup and stores with almost no overhead. This
8595 is mainly used to store client source IP addresses.
8596
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008597 integer a table declared with "type integer" will store 32bit integers
8598 which can represent a client identifier found in a request for
8599 instance.
8600
8601 string a table declared with "type string" will store substrings of up
8602 to <len> characters. If the string provided by the pattern
8603 extractor is larger than <len>, it will be truncated before
8604 being stored. During matching, at most <len> characters will be
8605 compared between the string in the table and the extracted
8606 pattern. When not specified, the string is automatically limited
Emeric Brun7c6b82e2010-09-24 16:34:28 +02008607 to 32 characters.
8608
8609 binary a table declared with "type binary" will store binary blocks
8610 of <len> bytes. If the block provided by the pattern
8611 extractor is larger than <len>, it will be truncated before
Willy Tarreaube722a22014-06-13 16:31:59 +02008612 being stored. If the block provided by the sample expression
Emeric Brun7c6b82e2010-09-24 16:34:28 +02008613 is shorter than <len>, it will be padded by 0. When not
8614 specified, the block is automatically limited to 32 bytes.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008615
8616 <length> is the maximum number of characters that will be stored in a
Emeric Brun7c6b82e2010-09-24 16:34:28 +02008617 "string" type table (See type "string" above). Or the number
8618 of bytes of the block in "binary" type table. Be careful when
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008619 changing this parameter as memory usage will proportionally
8620 increase.
8621
8622 <size> is the maximum number of entries that can fit in the table. This
Cyril Bonté78caf842010-03-10 22:41:43 +01008623 value directly impacts memory usage. Count approximately
8624 50 bytes per entry, plus the size of a string if any. The size
8625 supports suffixes "k", "m", "g" for 2^10, 2^20 and 2^30 factors.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008626
8627 [nopurge] indicates that we refuse to purge older entries when the table
8628 is full. When not specified and the table is full when haproxy
8629 wants to store an entry in it, it will flush a few of the oldest
8630 entries in order to release some space for the new ones. This is
8631 most often the desired behaviour. In some specific cases, it
8632 be desirable to refuse new entries instead of purging the older
8633 ones. That may be the case when the amount of data to store is
8634 far above the hardware limits and we prefer not to offer access
8635 to new clients than to reject the ones already connected. When
8636 using this parameter, be sure to properly set the "expire"
8637 parameter (see below).
8638
Emeric Brunf099e792010-09-27 12:05:28 +02008639 <peersect> is the name of the peers section to use for replication. Entries
8640 which associate keys to server IDs are kept synchronized with
8641 the remote peers declared in this section. All entries are also
8642 automatically learned from the local peer (old process) during a
8643 soft restart.
8644
Willy Tarreau1abc6732015-05-01 19:21:02 +02008645 NOTE : each peers section may be referenced only by tables
8646 belonging to the same unique process.
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008647
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008648 <expire> defines the maximum duration of an entry in the table since it
8649 was last created, refreshed or matched. The expiration delay is
8650 defined using the standard time format, similarly as the various
8651 timeouts. The maximum duration is slightly above 24 days. See
Jarno Huuskonene0ee0be2017-07-04 10:35:12 +03008652 section 2.4 for more information. If this delay is not specified,
Cyril Bontédc4d9032012-04-08 21:57:39 +02008653 the session won't automatically expire, but older entries will
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008654 be removed once full. Be sure not to use the "nopurge" parameter
8655 if not expiration delay is specified.
8656
Willy Tarreau08d5f982010-06-06 13:34:54 +02008657 <data_type> is used to store additional information in the stick-table. This
8658 may be used by ACLs in order to control various criteria related
8659 to the activity of the client matching the stick-table. For each
8660 item specified here, the size of each entry will be inflated so
Willy Tarreauc9705a12010-07-27 20:05:50 +02008661 that the additional data can fit. Several data types may be
8662 stored with an entry. Multiple data types may be specified after
8663 the "store" keyword, as a comma-separated list. Alternatively,
8664 it is possible to repeat the "store" keyword followed by one or
8665 several data types. Except for the "server_id" type which is
8666 automatically detected and enabled, all data types must be
8667 explicitly declared to be stored. If an ACL references a data
8668 type which is not stored, the ACL will simply not match. Some
8669 data types require an argument which must be passed just after
8670 the type between parenthesis. See below for the supported data
8671 types and their arguments.
8672
8673 The data types that can be stored with an entry are the following :
8674 - server_id : this is an integer which holds the numeric ID of the server a
8675 request was assigned to. It is used by the "stick match", "stick store",
8676 and "stick on" rules. It is automatically enabled when referenced.
8677
8678 - gpc0 : first General Purpose Counter. It is a positive 32-bit integer
8679 integer which may be used for anything. Most of the time it will be used
8680 to put a special tag on some entries, for instance to note that a
8681 specific behaviour was detected and must be known for future matches.
8682
Willy Tarreauba2ffd12013-05-29 15:54:14 +02008683 - gpc0_rate(<period>) : increment rate of the first General Purpose Counter
8684 over a period. It is a positive 32-bit integer integer which may be used
8685 for anything. Just like <gpc0>, it counts events, but instead of keeping
8686 a cumulative count, it maintains the rate at which the counter is
8687 incremented. Most of the time it will be used to measure the frequency of
8688 occurrence of certain events (eg: requests to a specific URL).
8689
Willy Tarreauc9705a12010-07-27 20:05:50 +02008690 - conn_cnt : Connection Count. It is a positive 32-bit integer which counts
8691 the absolute number of connections received from clients which matched
8692 this entry. It does not mean the connections were accepted, just that
8693 they were received.
8694
8695 - conn_cur : Current Connections. It is a positive 32-bit integer which
8696 stores the concurrent connection counts for the entry. It is incremented
8697 once an incoming connection matches the entry, and decremented once the
8698 connection leaves. That way it is possible to know at any time the exact
8699 number of concurrent connections for an entry.
8700
8701 - conn_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8702 integer parameter <period> which indicates in milliseconds the length
8703 of the period over which the average is measured. It reports the average
8704 incoming connection rate over that period, in connections per period. The
8705 result is an integer which can be matched using ACLs.
8706
8707 - sess_cnt : Session Count. It is a positive 32-bit integer which counts
8708 the absolute number of sessions received from clients which matched this
8709 entry. A session is a connection that was accepted by the layer 4 rules.
8710
8711 - sess_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8712 integer parameter <period> which indicates in milliseconds the length
8713 of the period over which the average is measured. It reports the average
8714 incoming session rate over that period, in sessions per period. The
8715 result is an integer which can be matched using ACLs.
8716
8717 - http_req_cnt : HTTP request Count. It is a positive 32-bit integer which
8718 counts the absolute number of HTTP requests received from clients which
8719 matched this entry. It does not matter whether they are valid requests or
8720 not. Note that this is different from sessions when keep-alive is used on
8721 the client side.
8722
8723 - http_req_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8724 integer parameter <period> which indicates in milliseconds the length
8725 of the period over which the average is measured. It reports the average
8726 HTTP request rate over that period, in requests per period. The result is
8727 an integer which can be matched using ACLs. It does not matter whether
8728 they are valid requests or not. Note that this is different from sessions
8729 when keep-alive is used on the client side.
8730
8731 - http_err_cnt : HTTP Error Count. It is a positive 32-bit integer which
8732 counts the absolute number of HTTP requests errors induced by clients
8733 which matched this entry. Errors are counted on invalid and truncated
8734 requests, as well as on denied or tarpitted requests, and on failed
8735 authentications. If the server responds with 4xx, then the request is
8736 also counted as an error since it's an error triggered by the client
8737 (eg: vulnerability scan).
8738
8739 - http_err_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8740 integer parameter <period> which indicates in milliseconds the length
8741 of the period over which the average is measured. It reports the average
8742 HTTP request error rate over that period, in requests per period (see
8743 http_err_cnt above for what is accounted as an error). The result is an
8744 integer which can be matched using ACLs.
8745
8746 - bytes_in_cnt : client to server byte count. It is a positive 64-bit
8747 integer which counts the cumulated amount of bytes received from clients
8748 which matched this entry. Headers are included in the count. This may be
8749 used to limit abuse of upload features on photo or video servers.
8750
8751 - bytes_in_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8752 integer parameter <period> which indicates in milliseconds the length
8753 of the period over which the average is measured. It reports the average
8754 incoming bytes rate over that period, in bytes per period. It may be used
8755 to detect users which upload too much and too fast. Warning: with large
8756 uploads, it is possible that the amount of uploaded data will be counted
8757 once upon termination, thus causing spikes in the average transfer speed
8758 instead of having a smooth one. This may partially be smoothed with
8759 "option contstats" though this is not perfect yet. Use of byte_in_cnt is
8760 recommended for better fairness.
8761
8762 - bytes_out_cnt : server to client byte count. It is a positive 64-bit
8763 integer which counts the cumulated amount of bytes sent to clients which
8764 matched this entry. Headers are included in the count. This may be used
8765 to limit abuse of bots sucking the whole site.
8766
8767 - bytes_out_rate(<period>) : frequency counter (takes 12 bytes). It takes
8768 an integer parameter <period> which indicates in milliseconds the length
8769 of the period over which the average is measured. It reports the average
8770 outgoing bytes rate over that period, in bytes per period. It may be used
8771 to detect users which download too much and too fast. Warning: with large
8772 transfers, it is possible that the amount of transferred data will be
8773 counted once upon termination, thus causing spikes in the average
8774 transfer speed instead of having a smooth one. This may partially be
8775 smoothed with "option contstats" though this is not perfect yet. Use of
8776 byte_out_cnt is recommended for better fairness.
Willy Tarreau08d5f982010-06-06 13:34:54 +02008777
Willy Tarreauc00cdc22010-06-06 16:48:26 +02008778 There is only one stick-table per proxy. At the moment of writing this doc,
8779 it does not seem useful to have multiple tables per proxy. If this happens
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008780 to be required, simply create a dummy backend with a stick-table in it and
8781 reference it.
8782
8783 It is important to understand that stickiness based on learning information
8784 has some limitations, including the fact that all learned associations are
Baptiste Assmann123ff042016-03-06 23:29:28 +01008785 lost upon restart unless peers are properly configured to transfer such
8786 information upon restart (recommended). In general it can be good as a
8787 complement but not always as an exclusive stickiness.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008788
Willy Tarreauc9705a12010-07-27 20:05:50 +02008789 Last, memory requirements may be important when storing many data types.
8790 Indeed, storing all indicators above at once in each entry requires 116 bytes
8791 per entry, or 116 MB for a 1-million entries table. This is definitely not
8792 something that can be ignored.
8793
8794 Example:
8795 # Keep track of counters of up to 1 million IP addresses over 5 minutes
8796 # and store a general purpose counter and the average connection rate
8797 # computed over a sliding window of 30 seconds.
8798 stick-table type ip size 1m expire 5m store gpc0,conn_rate(30s)
8799
Jarno Huuskonene0ee0be2017-07-04 10:35:12 +03008800 See also : "stick match", "stick on", "stick store-request", section 2.4
David du Colombiera13d1b92011-03-17 10:40:22 +01008801 about time format and section 7 about ACLs.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008802
8803
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008804stick store-response <pattern> [table <table>] [{if | unless} <condition>]
Baptiste Assmann2f2d2ec2016-03-06 23:27:24 +01008805 Define a response pattern used to create an entry in a stickiness table
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008806 May be used in sections : defaults | frontend | listen | backend
8807 no | no | yes | yes
8808
8809 Arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02008810 <pattern> is a sample expression rule as described in section 7.3. It
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008811 describes what elements of the response or connection will
8812 be analysed, extracted and stored in the table once a
8813 server is selected.
8814
8815 <table> is an optional stickiness table name. If unspecified, the same
8816 backend's table is used. A stickiness table is declared using
8817 the "stick-table" statement.
8818
8819 <cond> is an optional storage condition. It makes it possible to store
8820 certain criteria only when some conditions are met (or not met).
8821 For instance, it could be used to store the SSL session ID only
8822 when the response is a SSL server hello.
8823
8824 Some protocols or applications require complex stickiness rules and cannot
8825 always simply rely on cookies nor hashing. The "stick store-response"
8826 statement describes a rule to decide what to extract from the response and
8827 when to do it, in order to store it into a stickiness table for further
8828 requests to match it using the "stick match" statement. Obviously the
8829 extracted part must make sense and have a chance to be matched in a further
Cyril Bonté108cf6e2012-04-21 23:30:29 +02008830 request. Storing an ID found in a header of a response makes sense.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008831 See section 7 for a complete list of possible patterns and transformation
8832 rules.
8833
8834 The table has to be declared using the "stick-table" statement. It must be of
8835 a type compatible with the pattern. By default it is the one which is present
8836 in the same backend. It is possible to share a table with other backends by
8837 referencing it using the "table" keyword. If another table is referenced,
8838 the server's ID inside the backends are used. By default, all server IDs
8839 start at 1 in each backend, so the server ordering is enough. But in case of
8840 doubt, it is highly recommended to force server IDs using their "id" setting.
8841
8842 It is possible to restrict the conditions where a "stick store-response"
8843 statement will apply, using "if" or "unless" followed by a condition. This
8844 condition will be evaluated while parsing the response, so any criteria can
8845 be used. See section 7 for ACL based conditions.
8846
8847 There is no limit on the number of "stick store-response" statements, but
8848 there is a limit of 8 simultaneous stores per request or response. This
8849 makes it possible to store up to 8 criteria, all extracted from either the
8850 request or the response, regardless of the number of rules. Only the 8 first
8851 ones which match will be kept. Using this, it is possible to feed multiple
8852 tables at once in the hope to increase the chance to recognize a user on
Willy Tarreau9667a802013-12-09 12:52:13 +01008853 another protocol or access method. Using multiple store-response rules with
8854 the same table is possible and may be used to find the best criterion to rely
8855 on, by arranging the rules by decreasing preference order. Only the first
8856 extracted criterion for a given table will be stored. All subsequent store-
8857 response rules referencing the same table will be skipped and their ACLs will
8858 not be evaluated. However, even if a store-request rule references a table, a
8859 store-response rule may also use the same table. This means that each table
8860 may learn exactly one element from the request and one element from the
8861 response at once.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008862
8863 The table will contain the real server that processed the request.
8864
8865 Example :
8866 # Learn SSL session ID from both request and response and create affinity.
8867 backend https
8868 mode tcp
8869 balance roundrobin
Cyril Bontédc4d9032012-04-08 21:57:39 +02008870 # maximum SSL session ID length is 32 bytes.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008871 stick-table type binary len 32 size 30k expire 30m
Cyril Bonté108cf6e2012-04-21 23:30:29 +02008872
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008873 acl clienthello req_ssl_hello_type 1
8874 acl serverhello rep_ssl_hello_type 2
8875
8876 # use tcp content accepts to detects ssl client and server hello.
8877 tcp-request inspect-delay 5s
8878 tcp-request content accept if clienthello
8879
8880 # no timeout on response inspect delay by default.
8881 tcp-response content accept if serverhello
Cyril Bonté108cf6e2012-04-21 23:30:29 +02008882
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008883 # SSL session ID (SSLID) may be present on a client or server hello.
8884 # Its length is coded on 1 byte at offset 43 and its value starts
8885 # at offset 44.
8886
8887 # Match and learn on request if client hello.
8888 stick on payload_lv(43,1) if clienthello
8889
8890 # Learn on response if server hello.
8891 stick store-response payload_lv(43,1) if serverhello
Cyril Bontédc4d9032012-04-08 21:57:39 +02008892
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008893 server s1 192.168.1.1:443
8894 server s2 192.168.1.1:443
8895
8896 See also : "stick-table", "stick on", and section 7 about ACLs and pattern
8897 extraction.
8898
8899
Willy Tarreau938c7fe2014-04-25 14:21:39 +02008900tcp-check connect [params*]
8901 Opens a new connection
8902 May be used in sections: defaults | frontend | listen | backend
8903 no | no | yes | yes
8904
8905 When an application lies on more than a single TCP port or when HAProxy
8906 load-balance many services in a single backend, it makes sense to probe all
8907 the services individually before considering a server as operational.
8908
8909 When there are no TCP port configured on the server line neither server port
8910 directive, then the 'tcp-check connect port <port>' must be the first step
8911 of the sequence.
8912
8913 In a tcp-check ruleset a 'connect' is required, it is also mandatory to start
8914 the ruleset with a 'connect' rule. Purpose is to ensure admin know what they
8915 do.
8916
8917 Parameters :
8918 They are optional and can be used to describe how HAProxy should open and
8919 use the TCP connection.
8920
8921 port if not set, check port or server port is used.
8922 It tells HAProxy where to open the connection to.
8923 <port> must be a valid TCP port source integer, from 1 to 65535.
8924
8925 send-proxy send a PROXY protocol string
8926
8927 ssl opens a ciphered connection
8928
8929 Examples:
8930 # check HTTP and HTTPs services on a server.
8931 # first open port 80 thanks to server line port directive, then
8932 # tcp-check opens port 443, ciphered and run a request on it:
8933 option tcp-check
8934 tcp-check connect
8935 tcp-check send GET\ /\ HTTP/1.0\r\n
8936 tcp-check send Host:\ haproxy.1wt.eu\r\n
8937 tcp-check send \r\n
8938 tcp-check expect rstring (2..|3..)
8939 tcp-check connect port 443 ssl
8940 tcp-check send GET\ /\ HTTP/1.0\r\n
8941 tcp-check send Host:\ haproxy.1wt.eu\r\n
8942 tcp-check send \r\n
8943 tcp-check expect rstring (2..|3..)
8944 server www 10.0.0.1 check port 80
8945
8946 # check both POP and IMAP from a single server:
8947 option tcp-check
8948 tcp-check connect port 110
8949 tcp-check expect string +OK\ POP3\ ready
8950 tcp-check connect port 143
8951 tcp-check expect string *\ OK\ IMAP4\ ready
8952 server mail 10.0.0.1 check
8953
8954 See also : "option tcp-check", "tcp-check send", "tcp-check expect"
8955
8956
8957tcp-check expect [!] <match> <pattern>
8958 Specify data to be collected and analysed during a generic health check
8959 May be used in sections: defaults | frontend | listen | backend
8960 no | no | yes | yes
8961
8962 Arguments :
8963 <match> is a keyword indicating how to look for a specific pattern in the
8964 response. The keyword may be one of "string", "rstring" or
8965 binary.
8966 The keyword may be preceded by an exclamation mark ("!") to negate
8967 the match. Spaces are allowed between the exclamation mark and the
8968 keyword. See below for more details on the supported keywords.
8969
8970 <pattern> is the pattern to look for. It may be a string or a regular
8971 expression. If the pattern contains spaces, they must be escaped
8972 with the usual backslash ('\').
8973 If the match is set to binary, then the pattern must be passed as
8974 a serie of hexadecimal digits in an even number. Each sequence of
8975 two digits will represent a byte. The hexadecimal digits may be
8976 used upper or lower case.
8977
8978
8979 The available matches are intentionally similar to their http-check cousins :
8980
8981 string <string> : test the exact string matches in the response buffer.
8982 A health check response will be considered valid if the
8983 response's buffer contains this exact string. If the
8984 "string" keyword is prefixed with "!", then the response
8985 will be considered invalid if the body contains this
8986 string. This can be used to look for a mandatory pattern
8987 in a protocol response, or to detect a failure when a
8988 specific error appears in a protocol banner.
8989
8990 rstring <regex> : test a regular expression on the response buffer.
8991 A health check response will be considered valid if the
8992 response's buffer matches this expression. If the
8993 "rstring" keyword is prefixed with "!", then the response
8994 will be considered invalid if the body matches the
8995 expression.
8996
8997 binary <hexstring> : test the exact string in its hexadecimal form matches
8998 in the response buffer. A health check response will
8999 be considered valid if the response's buffer contains
9000 this exact hexadecimal string.
9001 Purpose is to match data on binary protocols.
9002
9003 It is important to note that the responses will be limited to a certain size
9004 defined by the global "tune.chksize" option, which defaults to 16384 bytes.
9005 Thus, too large responses may not contain the mandatory pattern when using
9006 "string", "rstring" or binary. If a large response is absolutely required, it
9007 is possible to change the default max size by setting the global variable.
9008 However, it is worth keeping in mind that parsing very large responses can
9009 waste some CPU cycles, especially when regular expressions are used, and that
9010 it is always better to focus the checks on smaller resources. Also, in its
9011 current state, the check will not find any string nor regex past a null
9012 character in the response. Similarly it is not possible to request matching
9013 the null character.
9014
9015 Examples :
9016 # perform a POP check
9017 option tcp-check
9018 tcp-check expect string +OK\ POP3\ ready
9019
9020 # perform an IMAP check
9021 option tcp-check
9022 tcp-check expect string *\ OK\ IMAP4\ ready
9023
9024 # look for the redis master server
9025 option tcp-check
9026 tcp-check send PING\r\n
Baptiste Assmanna3322992015-08-04 10:12:18 +02009027 tcp-check expect string +PONG
Willy Tarreau938c7fe2014-04-25 14:21:39 +02009028 tcp-check send info\ replication\r\n
9029 tcp-check expect string role:master
9030 tcp-check send QUIT\r\n
9031 tcp-check expect string +OK
9032
9033
9034 See also : "option tcp-check", "tcp-check connect", "tcp-check send",
9035 "tcp-check send-binary", "http-check expect", tune.chksize
9036
9037
9038tcp-check send <data>
9039 Specify a string to be sent as a question during a generic health check
9040 May be used in sections: defaults | frontend | listen | backend
9041 no | no | yes | yes
9042
9043 <data> : the data to be sent as a question during a generic health check
9044 session. For now, <data> must be a string.
9045
9046 Examples :
9047 # look for the redis master server
9048 option tcp-check
9049 tcp-check send info\ replication\r\n
9050 tcp-check expect string role:master
9051
9052 See also : "option tcp-check", "tcp-check connect", "tcp-check expect",
9053 "tcp-check send-binary", tune.chksize
9054
9055
9056tcp-check send-binary <hexastring>
9057 Specify an hexa digits string to be sent as a binary question during a raw
9058 tcp health check
9059 May be used in sections: defaults | frontend | listen | backend
9060 no | no | yes | yes
9061
9062 <data> : the data to be sent as a question during a generic health check
9063 session. For now, <data> must be a string.
9064 <hexastring> : test the exact string in its hexadecimal form matches in the
9065 response buffer. A health check response will be considered
9066 valid if the response's buffer contains this exact
9067 hexadecimal string.
9068 Purpose is to send binary data to ask on binary protocols.
9069
9070 Examples :
9071 # redis check in binary
9072 option tcp-check
9073 tcp-check send-binary 50494e470d0a # PING\r\n
9074 tcp-check expect binary 2b504F4e47 # +PONG
9075
9076
9077 See also : "option tcp-check", "tcp-check connect", "tcp-check expect",
9078 "tcp-check send", tune.chksize
9079
9080
Willy Tarreaue9656522010-08-17 15:40:09 +02009081tcp-request connection <action> [{if | unless} <condition>]
9082 Perform an action on an incoming connection depending on a layer 4 condition
Willy Tarreau1a687942010-05-23 22:40:30 +02009083 May be used in sections : defaults | frontend | listen | backend
9084 no | yes | yes | no
Willy Tarreaue9656522010-08-17 15:40:09 +02009085 Arguments :
Willy Tarreauc870bfd2015-09-28 18:47:38 +02009086 <action> defines the action to perform if the condition applies. See
9087 below.
Willy Tarreau1a687942010-05-23 22:40:30 +02009088
Willy Tarreaue9656522010-08-17 15:40:09 +02009089 <condition> is a standard layer4-only ACL-based condition (see section 7).
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009090
9091 Immediately after acceptance of a new incoming connection, it is possible to
9092 evaluate some conditions to decide whether this connection must be accepted
Willy Tarreaue9656522010-08-17 15:40:09 +02009093 or dropped or have its counters tracked. Those conditions cannot make use of
9094 any data contents because the connection has not been read from yet, and the
9095 buffers are not yet allocated. This is used to selectively and very quickly
9096 accept or drop connections from various sources with a very low overhead. If
9097 some contents need to be inspected in order to take the decision, the
9098 "tcp-request content" statements must be used instead.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009099
Willy Tarreaue9656522010-08-17 15:40:09 +02009100 The "tcp-request connection" rules are evaluated in their exact declaration
9101 order. If no rule matches or if there is no rule, the default action is to
9102 accept the incoming connection. There is no specific limit to the number of
9103 rules which may be inserted.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009104
Willy Tarreaua9083d02015-05-08 15:27:59 +02009105 Four types of actions are supported :
Willy Tarreaue9656522010-08-17 15:40:09 +02009106 - accept :
9107 accepts the connection if the condition is true (when used with "if")
9108 or false (when used with "unless"). The first such rule executed ends
9109 the rules evaluation.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009110
Willy Tarreaue9656522010-08-17 15:40:09 +02009111 - reject :
9112 rejects the connection if the condition is true (when used with "if")
9113 or false (when used with "unless"). The first such rule executed ends
9114 the rules evaluation. Rejected connections do not even become a
9115 session, which is why they are accounted separately for in the stats,
9116 as "denied connections". They are not considered for the session
9117 rate-limit and are not logged either. The reason is that these rules
9118 should only be used to filter extremely high connection rates such as
9119 the ones encountered during a massive DDoS attack. Under these extreme
9120 conditions, the simple action of logging each event would make the
9121 system collapse and would considerably lower the filtering capacity. If
9122 logging is absolutely desired, then "tcp-request content" rules should
Willy Tarreau4f614292016-10-21 17:49:36 +02009123 be used instead, as "tcp-request session" rules will not log either.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009124
Willy Tarreau4f0d9192013-06-11 20:40:55 +02009125 - expect-proxy layer4 :
9126 configures the client-facing connection to receive a PROXY protocol
9127 header before any byte is read from the socket. This is equivalent to
9128 having the "accept-proxy" keyword on the "bind" line, except that using
9129 the TCP rule allows the PROXY protocol to be accepted only for certain
9130 IP address ranges using an ACL. This is convenient when multiple layers
9131 of load balancers are passed through by traffic coming from public
9132 hosts.
9133
Bertrand Jacquin90759682016-06-06 15:35:39 +01009134 - expect-netscaler-cip layer4 :
9135 configures the client-facing connection to receive a NetScaler Client
9136 IP insertion protocol header before any byte is read from the socket.
9137 This is equivalent to having the "accept-netscaler-cip" keyword on the
9138 "bind" line, except that using the TCP rule allows the PROXY protocol
9139 to be accepted only for certain IP address ranges using an ACL. This
9140 is convenient when multiple layers of load balancers are passed
9141 through by traffic coming from public hosts.
9142
Willy Tarreau18bf01e2014-06-13 16:18:52 +02009143 - capture <sample> len <length> :
9144 This only applies to "tcp-request content" rules. It captures sample
9145 expression <sample> from the request buffer, and converts it to a
9146 string of at most <len> characters. The resulting string is stored into
9147 the next request "capture" slot, so it will possibly appear next to
9148 some captured HTTP headers. It will then automatically appear in the
9149 logs, and it will be possible to extract it using sample fetch rules to
9150 feed it into headers or anything. The length should be limited given
9151 that this size will be allocated for each capture during the whole
Willy Tarreaua9083d02015-05-08 15:27:59 +02009152 session life. Please check section 7.3 (Fetching samples) and "capture
9153 request header" for more information.
Willy Tarreau18bf01e2014-06-13 16:18:52 +02009154
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009155 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] :
Willy Tarreaue9656522010-08-17 15:40:09 +02009156 enables tracking of sticky counters from current connection. These
Willy Tarreau09448f72014-06-25 18:12:15 +02009157 rules do not stop evaluation and do not change default action. 3 sets
Willy Tarreaue9656522010-08-17 15:40:09 +02009158 of counters may be simultaneously tracked by the same connection. The
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009159 first "track-sc0" rule executed enables tracking of the counters of the
9160 specified table as the first set. The first "track-sc1" rule executed
Willy Tarreaue9656522010-08-17 15:40:09 +02009161 enables tracking of the counters of the specified table as the second
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009162 set. The first "track-sc2" rule executed enables tracking of the
9163 counters of the specified table as the third set. It is a recommended
9164 practice to use the first set of counters for the per-frontend counters
9165 and the second set for the per-backend ones. But this is just a
9166 guideline, all may be used everywhere.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009167
Willy Tarreaue9656522010-08-17 15:40:09 +02009168 These actions take one or two arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02009169 <key> is mandatory, and is a sample expression rule as described
Willy Tarreau74ca5042013-06-11 23:12:07 +02009170 in section 7.3. It describes what elements of the incoming
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009171 request or connection will be analysed, extracted, combined,
9172 and used to select which table entry to update the counters.
9173 Note that "tcp-request connection" cannot use content-based
9174 fetches.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009175
Willy Tarreaue9656522010-08-17 15:40:09 +02009176 <table> is an optional table to be used instead of the default one,
9177 which is the stick-table declared in the current proxy. All
9178 the counters for the matches and updates for the key will
9179 then be performed in that table until the session ends.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009180
Willy Tarreaue9656522010-08-17 15:40:09 +02009181 Once a "track-sc*" rule is executed, the key is looked up in the table
9182 and if it is not found, an entry is allocated for it. Then a pointer to
9183 that entry is kept during all the session's life, and this entry's
9184 counters are updated as often as possible, every time the session's
9185 counters are updated, and also systematically when the session ends.
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009186 Counters are only updated for events that happen after the tracking has
9187 been started. For example, connection counters will not be updated when
9188 tracking layer 7 information, since the connection event happens before
9189 layer7 information is extracted.
9190
Willy Tarreaue9656522010-08-17 15:40:09 +02009191 If the entry tracks concurrent connection counters, one connection is
9192 counted for as long as the entry is tracked, and the entry will not
9193 expire during that time. Tracking counters also provides a performance
9194 advantage over just checking the keys, because only one table lookup is
9195 performed for all ACL checks that make use of it.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009196
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02009197 - sc-inc-gpc0(<sc-id>):
9198 The "sc-inc-gpc0" increments the GPC0 counter according to the sticky
9199 counter designated by <sc-id>. If an error occurs, this action silently
9200 fails and the actions evaluation continues.
9201
Thierry FOURNIER236657b2015-08-19 08:25:14 +02009202 - sc-set-gpt0(<sc-id>) <int>:
9203 This action sets the GPT0 tag according to the sticky counter designated
9204 by <sc-id> and the value of <int>. The expected result is a boolean. If
9205 an error occurs, this action silently fails and the actions evaluation
9206 continues.
9207
William Lallemand2e785f22016-05-25 01:48:42 +02009208 - set-src <expr> :
9209 Is used to set the source IP address to the value of specified
9210 expression. Useful if you want to mask source IP for privacy.
9211 If you want to provide an IP from a HTTP header use "http-request
9212 set-src"
9213
9214 <expr> Is a standard HAProxy expression formed by a sample-fetch
9215 followed by some converters.
9216
9217 Example:
9218
9219 tcp-request connection set-src src,ipmask(24)
9220
Willy Tarreau0c630532016-10-21 17:52:58 +02009221 When possible, set-src preserves the original source port as long as the
9222 address family allows it, otherwise the source port is set to 0.
William Lallemand2e785f22016-05-25 01:48:42 +02009223
William Lallemand44be6402016-05-25 01:51:35 +02009224 - set-src-port <expr> :
9225 Is used to set the source port address to the value of specified
9226 expression.
9227
9228 <expr> Is a standard HAProxy expression formed by a sample-fetch
9229 followed by some converters.
9230
9231 Example:
9232
9233 tcp-request connection set-src-port int(4000)
9234
Willy Tarreau0c630532016-10-21 17:52:58 +02009235 When possible, set-src-port preserves the original source address as long
9236 as the address family supports a port, otherwise it forces the source
9237 address to IPv4 "0.0.0.0" before rewriting the port.
William Lallemand44be6402016-05-25 01:51:35 +02009238
William Lallemand13e9b0c2016-05-25 02:34:07 +02009239 - set-dst <expr> :
9240 Is used to set the destination IP address to the value of specified
9241 expression. Useful if you want to mask IP for privacy in log.
9242 If you want to provide an IP from a HTTP header use "http-request
9243 set-dst". If you want to connect to the new address/port, use
9244 '0.0.0.0:0' as a server address in the backend.
9245
9246 <expr> Is a standard HAProxy expression formed by a sample-fetch
9247 followed by some converters.
9248
9249 Example:
9250
9251 tcp-request connection set-dst dst,ipmask(24)
9252 tcp-request connection set-dst ipv4(10.0.0.1)
9253
Willy Tarreau0c630532016-10-21 17:52:58 +02009254 When possible, set-dst preserves the original destination port as long as
9255 the address family allows it, otherwise the destination port is set to 0.
9256
William Lallemand13e9b0c2016-05-25 02:34:07 +02009257 - set-dst-port <expr> :
9258 Is used to set the destination port address to the value of specified
9259 expression. If you want to connect to the new address/port, use
9260 '0.0.0.0:0' as a server address in the backend.
9261
9262
9263 <expr> Is a standard HAProxy expression formed by a sample-fetch
9264 followed by some converters.
9265
9266 Example:
9267
9268 tcp-request connection set-dst-port int(4000)
9269
Willy Tarreau0c630532016-10-21 17:52:58 +02009270 When possible, set-dst-port preserves the original destination address as
9271 long as the address family supports a port, otherwise it forces the
9272 destination address to IPv4 "0.0.0.0" before rewriting the port.
9273
Willy Tarreau2d392c22015-08-24 01:43:45 +02009274 - "silent-drop" :
9275 This stops the evaluation of the rules and makes the client-facing
9276 connection suddenly disappear using a system-dependant way that tries
9277 to prevent the client from being notified. The effect it then that the
9278 client still sees an established connection while there's none on
9279 HAProxy. The purpose is to achieve a comparable effect to "tarpit"
9280 except that it doesn't use any local resource at all on the machine
9281 running HAProxy. It can resist much higher loads than "tarpit", and
9282 slow down stronger attackers. It is important to undestand the impact
9283 of using this mechanism. All stateful equipments placed between the
9284 client and HAProxy (firewalls, proxies, load balancers) will also keep
9285 the established connection for a long time and may suffer from this
9286 action. On modern Linux systems running with enough privileges, the
9287 TCP_REPAIR socket option is used to block the emission of a TCP
9288 reset. On other systems, the socket's TTL is reduced to 1 so that the
9289 TCP reset doesn't pass the first router, though it's still delivered to
9290 local networks. Do not use it unless you fully understand how it works.
9291
Willy Tarreaue9656522010-08-17 15:40:09 +02009292 Note that the "if/unless" condition is optional. If no condition is set on
9293 the action, it is simply performed unconditionally. That can be useful for
9294 "track-sc*" actions as well as for changing the default action to a reject.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009295
Willy Tarreaue9656522010-08-17 15:40:09 +02009296 Example: accept all connections from white-listed hosts, reject too fast
9297 connection without counting them, and track accepted connections.
9298 This results in connection rate being capped from abusive sources.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009299
Willy Tarreaue9656522010-08-17 15:40:09 +02009300 tcp-request connection accept if { src -f /etc/haproxy/whitelist.lst }
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009301 tcp-request connection reject if { src_conn_rate gt 10 }
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009302 tcp-request connection track-sc0 src
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009303
Willy Tarreaue9656522010-08-17 15:40:09 +02009304 Example: accept all connections from white-listed hosts, count all other
9305 connections and reject too fast ones. This results in abusive ones
9306 being blocked as long as they don't slow down.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009307
Willy Tarreaue9656522010-08-17 15:40:09 +02009308 tcp-request connection accept if { src -f /etc/haproxy/whitelist.lst }
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009309 tcp-request connection track-sc0 src
9310 tcp-request connection reject if { sc0_conn_rate gt 10 }
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009311
Willy Tarreau4f0d9192013-06-11 20:40:55 +02009312 Example: enable the PROXY protocol for traffic coming from all known proxies.
9313
9314 tcp-request connection expect-proxy layer4 if { src -f proxies.lst }
9315
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009316 See section 7 about ACL usage.
9317
Willy Tarreau4f614292016-10-21 17:49:36 +02009318 See also : "tcp-request session", "tcp-request content", "stick-table"
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009319
9320
Willy Tarreaue9656522010-08-17 15:40:09 +02009321tcp-request content <action> [{if | unless} <condition>]
9322 Perform an action on a new session depending on a layer 4-7 condition
Willy Tarreau62644772008-07-16 18:36:06 +02009323 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaufb356202010-08-03 14:02:05 +02009324 no | yes | yes | yes
Willy Tarreaue9656522010-08-17 15:40:09 +02009325 Arguments :
Willy Tarreauc870bfd2015-09-28 18:47:38 +02009326 <action> defines the action to perform if the condition applies. See
9327 below.
Willy Tarreau62644772008-07-16 18:36:06 +02009328
Willy Tarreaue9656522010-08-17 15:40:09 +02009329 <condition> is a standard layer 4-7 ACL-based condition (see section 7).
Willy Tarreau62644772008-07-16 18:36:06 +02009330
Willy Tarreaue9656522010-08-17 15:40:09 +02009331 A request's contents can be analysed at an early stage of request processing
9332 called "TCP content inspection". During this stage, ACL-based rules are
9333 evaluated every time the request contents are updated, until either an
9334 "accept" or a "reject" rule matches, or the TCP request inspection delay
9335 expires with no matching rule.
Willy Tarreau62644772008-07-16 18:36:06 +02009336
Willy Tarreaue9656522010-08-17 15:40:09 +02009337 The first difference between these rules and "tcp-request connection" rules
9338 is that "tcp-request content" rules can make use of contents to take a
9339 decision. Most often, these decisions will consider a protocol recognition or
9340 validity. The second difference is that content-based rules can be used in
Willy Tarreauf3338342014-01-28 21:40:28 +01009341 both frontends and backends. In case of HTTP keep-alive with the client, all
9342 tcp-request content rules are evaluated again, so haproxy keeps a record of
9343 what sticky counters were assigned by a "tcp-request connection" versus a
9344 "tcp-request content" rule, and flushes all the content-related ones after
9345 processing an HTTP request, so that they may be evaluated again by the rules
9346 being evaluated again for the next request. This is of particular importance
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009347 when the rule tracks some L7 information or when it is conditioned by an
Willy Tarreauf3338342014-01-28 21:40:28 +01009348 L7-based ACL, since tracking may change between requests.
Willy Tarreau62644772008-07-16 18:36:06 +02009349
Willy Tarreaue9656522010-08-17 15:40:09 +02009350 Content-based rules are evaluated in their exact declaration order. If no
9351 rule matches or if there is no rule, the default action is to accept the
9352 contents. There is no specific limit to the number of rules which may be
9353 inserted.
Willy Tarreau62644772008-07-16 18:36:06 +02009354
Thierry FOURNIER236657b2015-08-19 08:25:14 +02009355 Several types of actions are supported :
Willy Tarreau18bf01e2014-06-13 16:18:52 +02009356 - accept : the request is accepted
9357 - reject : the request is rejected and the connection is closed
9358 - capture : the specified sample expression is captured
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009359 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>]
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02009360 - sc-inc-gpc0(<sc-id>)
Thierry Fournierb9125672016-03-29 19:34:37 +02009361 - sc-set-gpt0(<sc-id>) <int>
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009362 - set-var(<var-name>) <expr>
Christopher Faulet85d79c92016-11-09 16:54:56 +01009363 - unset-var(<var-name>)
Willy Tarreau2d392c22015-08-24 01:43:45 +02009364 - silent-drop
Christopher Faulet76c09ef2017-09-21 11:03:52 +02009365 - send-spoe-group <engin-name> <group-name>
Willy Tarreau62644772008-07-16 18:36:06 +02009366
Willy Tarreaue9656522010-08-17 15:40:09 +02009367 They have the same meaning as their counter-parts in "tcp-request connection"
9368 so please refer to that section for a complete description.
Willy Tarreau62644772008-07-16 18:36:06 +02009369
Willy Tarreauf3338342014-01-28 21:40:28 +01009370 While there is nothing mandatory about it, it is recommended to use the
9371 track-sc0 in "tcp-request connection" rules, track-sc1 for "tcp-request
9372 content" rules in the frontend, and track-sc2 for "tcp-request content"
9373 rules in the backend, because that makes the configuration more readable
9374 and easier to troubleshoot, but this is just a guideline and all counters
9375 may be used everywhere.
Willy Tarreau62644772008-07-16 18:36:06 +02009376
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01009377 Note that the "if/unless" condition is optional. If no condition is set on
Willy Tarreaue9656522010-08-17 15:40:09 +02009378 the action, it is simply performed unconditionally. That can be useful for
9379 "track-sc*" actions as well as for changing the default action to a reject.
Willy Tarreau62644772008-07-16 18:36:06 +02009380
Willy Tarreaue9656522010-08-17 15:40:09 +02009381 It is perfectly possible to match layer 7 contents with "tcp-request content"
Willy Tarreauc0239e02012-04-16 14:42:55 +02009382 rules, since HTTP-specific ACL matches are able to preliminarily parse the
9383 contents of a buffer before extracting the required data. If the buffered
9384 contents do not parse as a valid HTTP message, then the ACL does not match.
9385 The parser which is involved there is exactly the same as for all other HTTP
Willy Tarreauf3338342014-01-28 21:40:28 +01009386 processing, so there is no risk of parsing something differently. In an HTTP
9387 backend connected to from an HTTP frontend, it is guaranteed that HTTP
9388 contents will always be immediately present when the rule is evaluated first.
Willy Tarreau62644772008-07-16 18:36:06 +02009389
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009390 Tracking layer7 information is also possible provided that the information
Willy Tarreau4d54c7c2014-09-16 15:48:15 +02009391 are present when the rule is processed. The rule processing engine is able to
9392 wait until the inspect delay expires when the data to be tracked is not yet
9393 available.
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009394
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009395 The "set-var" is used to set the content of a variable. The variable is
Willy Tarreau4f614292016-10-21 17:49:36 +02009396 declared inline. For "tcp-request session" rules, only session-level
9397 variables can be used, without any layer7 contents.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009398
Daniel Schneller0b547052016-03-21 20:46:57 +01009399 <var-name> The name of the variable starts with an indication about
9400 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +01009401 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +01009402 "sess" : the variable is shared with the whole session
9403 "txn" : the variable is shared with the transaction
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009404 (request and response)
Daniel Schneller0b547052016-03-21 20:46:57 +01009405 "req" : the variable is shared only during request
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009406 processing
Daniel Schneller0b547052016-03-21 20:46:57 +01009407 "res" : the variable is shared only during response
9408 processing
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009409 This prefix is followed by a name. The separator is a '.'.
Christopher Fauletb71557a2016-10-31 10:49:03 +01009410 The name may only contain characters 'a-z', 'A-Z', '0-9',
9411 '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009412
9413 <expr> Is a standard HAProxy expression formed by a sample-fetch
9414 followed by some converters.
9415
Christopher Faulet85d79c92016-11-09 16:54:56 +01009416 The "unset-var" is used to unset a variable. See above for details about
9417 <var-name>.
9418
Christopher Faulet76c09ef2017-09-21 11:03:52 +02009419 The "send-spoe-group" is used to trigger sending of a group of SPOE
9420 messages. To do so, the SPOE engine used to send messages must be defined, as
9421 well as the SPOE group to send. Of course, the SPOE engine must refer to an
9422 existing SPOE filter. If not engine name is provided on the SPOE filter line,
9423 the SPOE agent name must be used.
9424
9425 <engine-name> The SPOE engine name.
9426
9427 <group-name> The SPOE group name as specified in the engine configuration.
9428
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009429 Example:
9430
9431 tcp-request content set-var(sess.my_var) src
Christopher Faulet85d79c92016-11-09 16:54:56 +01009432 tcp-request content unset-var(sess.my_var2)
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009433
Willy Tarreau62644772008-07-16 18:36:06 +02009434 Example:
Willy Tarreaue9656522010-08-17 15:40:09 +02009435 # Accept HTTP requests containing a Host header saying "example.com"
9436 # and reject everything else.
9437 acl is_host_com hdr(Host) -i example.com
9438 tcp-request inspect-delay 30s
Willy Tarreauc0239e02012-04-16 14:42:55 +02009439 tcp-request content accept if is_host_com
Willy Tarreaue9656522010-08-17 15:40:09 +02009440 tcp-request content reject
9441
9442 Example:
Willy Tarreau62644772008-07-16 18:36:06 +02009443 # reject SMTP connection if client speaks first
9444 tcp-request inspect-delay 30s
9445 acl content_present req_len gt 0
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009446 tcp-request content reject if content_present
Willy Tarreau62644772008-07-16 18:36:06 +02009447
9448 # Forward HTTPS connection only if client speaks
9449 tcp-request inspect-delay 30s
9450 acl content_present req_len gt 0
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009451 tcp-request content accept if content_present
Willy Tarreaue9656522010-08-17 15:40:09 +02009452 tcp-request content reject
9453
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009454 Example:
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03009455 # Track the last IP(stick-table type string) from X-Forwarded-For
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009456 tcp-request inspect-delay 10s
Willy Tarreau4d54c7c2014-09-16 15:48:15 +02009457 tcp-request content track-sc0 hdr(x-forwarded-for,-1)
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03009458 # Or track the last IP(stick-table type ip|ipv6) from X-Forwarded-For
9459 tcp-request content track-sc0 req.hdr_ip(x-forwarded-for,-1)
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009460
9461 Example:
9462 # track request counts per "base" (concatenation of Host+URL)
9463 tcp-request inspect-delay 10s
Willy Tarreau4d54c7c2014-09-16 15:48:15 +02009464 tcp-request content track-sc0 base table req-rate
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009465
Willy Tarreaue9656522010-08-17 15:40:09 +02009466 Example: track per-frontend and per-backend counters, block abusers at the
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03009467 frontend when the backend detects abuse(and marks gpc0).
Willy Tarreaue9656522010-08-17 15:40:09 +02009468
9469 frontend http
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009470 # Use General Purpose Couter 0 in SC0 as a global abuse counter
Willy Tarreaue9656522010-08-17 15:40:09 +02009471 # protecting all our sites
9472 stick-table type ip size 1m expire 5m store gpc0
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009473 tcp-request connection track-sc0 src
9474 tcp-request connection reject if { sc0_get_gpc0 gt 0 }
Willy Tarreaue9656522010-08-17 15:40:09 +02009475 ...
9476 use_backend http_dynamic if { path_end .php }
9477
9478 backend http_dynamic
9479 # if a source makes too fast requests to this dynamic site (tracked
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009480 # by SC1), block it globally in the frontend.
Willy Tarreaue9656522010-08-17 15:40:09 +02009481 stick-table type ip size 1m expire 5m store http_req_rate(10s)
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009482 acl click_too_fast sc1_http_req_rate gt 10
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03009483 acl mark_as_abuser sc0_inc_gpc0(http) gt 0
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009484 tcp-request content track-sc1 src
Willy Tarreaue9656522010-08-17 15:40:09 +02009485 tcp-request content reject if click_too_fast mark_as_abuser
Willy Tarreau62644772008-07-16 18:36:06 +02009486
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009487 See section 7 about ACL usage.
Willy Tarreau62644772008-07-16 18:36:06 +02009488
Jarno Huuskonen95b012b2017-04-06 13:59:14 +03009489 See also : "tcp-request connection", "tcp-request session",
9490 "tcp-request inspect-delay", and "http-request".
Willy Tarreau62644772008-07-16 18:36:06 +02009491
9492
9493tcp-request inspect-delay <timeout>
9494 Set the maximum allowed time to wait for data during content inspection
9495 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaufb356202010-08-03 14:02:05 +02009496 no | yes | yes | yes
Willy Tarreau62644772008-07-16 18:36:06 +02009497 Arguments :
9498 <timeout> is the timeout value specified in milliseconds by default, but
9499 can be in any other unit if the number is suffixed by the unit,
9500 as explained at the top of this document.
9501
9502 People using haproxy primarily as a TCP relay are often worried about the
9503 risk of passing any type of protocol to a server without any analysis. In
9504 order to be able to analyze the request contents, we must first withhold
9505 the data then analyze them. This statement simply enables withholding of
9506 data for at most the specified amount of time.
9507
Willy Tarreaufb356202010-08-03 14:02:05 +02009508 TCP content inspection applies very early when a connection reaches a
9509 frontend, then very early when the connection is forwarded to a backend. This
9510 means that a connection may experience a first delay in the frontend and a
9511 second delay in the backend if both have tcp-request rules.
9512
Willy Tarreau62644772008-07-16 18:36:06 +02009513 Note that when performing content inspection, haproxy will evaluate the whole
9514 rules for every new chunk which gets in, taking into account the fact that
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01009515 those data are partial. If no rule matches before the aforementioned delay,
Willy Tarreau62644772008-07-16 18:36:06 +02009516 a last check is performed upon expiration, this time considering that the
Willy Tarreaud869b242009-03-15 14:43:58 +01009517 contents are definitive. If no delay is set, haproxy will not wait at all
9518 and will immediately apply a verdict based on the available information.
9519 Obviously this is unlikely to be very useful and might even be racy, so such
9520 setups are not recommended.
Willy Tarreau62644772008-07-16 18:36:06 +02009521
9522 As soon as a rule matches, the request is released and continues as usual. If
9523 the timeout is reached and no rule matches, the default policy will be to let
9524 it pass through unaffected.
9525
9526 For most protocols, it is enough to set it to a few seconds, as most clients
9527 send the full request immediately upon connection. Add 3 or more seconds to
9528 cover TCP retransmits but that's all. For some protocols, it may make sense
Willy Tarreaud72758d2010-01-12 10:42:19 +01009529 to use large values, for instance to ensure that the client never talks
Willy Tarreau62644772008-07-16 18:36:06 +02009530 before the server (eg: SMTP), or to wait for a client to talk before passing
9531 data to the server (eg: SSL). Note that the client timeout must cover at
Willy Tarreaub824b002010-09-29 16:36:16 +02009532 least the inspection delay, otherwise it will expire first. If the client
9533 closes the connection or if the buffer is full, the delay immediately expires
9534 since the contents will not be able to change anymore.
Willy Tarreau62644772008-07-16 18:36:06 +02009535
Willy Tarreau55165fe2009-05-10 12:02:55 +02009536 See also : "tcp-request content accept", "tcp-request content reject",
Willy Tarreau62644772008-07-16 18:36:06 +02009537 "timeout client".
9538
9539
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009540tcp-response content <action> [{if | unless} <condition>]
9541 Perform an action on a session response depending on a layer 4-7 condition
9542 May be used in sections : defaults | frontend | listen | backend
9543 no | no | yes | yes
9544 Arguments :
Willy Tarreauc870bfd2015-09-28 18:47:38 +02009545 <action> defines the action to perform if the condition applies. See
9546 below.
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009547
9548 <condition> is a standard layer 4-7 ACL-based condition (see section 7).
9549
9550 Response contents can be analysed at an early stage of response processing
9551 called "TCP content inspection". During this stage, ACL-based rules are
9552 evaluated every time the response contents are updated, until either an
Willy Tarreaucc1e04b2013-09-11 23:20:29 +02009553 "accept", "close" or a "reject" rule matches, or a TCP response inspection
9554 delay is set and expires with no matching rule.
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009555
9556 Most often, these decisions will consider a protocol recognition or validity.
9557
9558 Content-based rules are evaluated in their exact declaration order. If no
9559 rule matches or if there is no rule, the default action is to accept the
9560 contents. There is no specific limit to the number of rules which may be
9561 inserted.
9562
Thierry FOURNIER236657b2015-08-19 08:25:14 +02009563 Several types of actions are supported :
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009564 - accept :
9565 accepts the response if the condition is true (when used with "if")
9566 or false (when used with "unless"). The first such rule executed ends
9567 the rules evaluation.
9568
Willy Tarreaucc1e04b2013-09-11 23:20:29 +02009569 - close :
9570 immediately closes the connection with the server if the condition is
9571 true (when used with "if"), or false (when used with "unless"). The
9572 first such rule executed ends the rules evaluation. The main purpose of
9573 this action is to force a connection to be finished between a client
9574 and a server after an exchange when the application protocol expects
9575 some long time outs to elapse first. The goal is to eliminate idle
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009576 connections which take significant resources on servers with certain
Willy Tarreaucc1e04b2013-09-11 23:20:29 +02009577 protocols.
9578
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009579 - reject :
9580 rejects the response if the condition is true (when used with "if")
9581 or false (when used with "unless"). The first such rule executed ends
Jamie Gloudonaaa21002012-08-25 00:18:33 -04009582 the rules evaluation. Rejected session are immediately closed.
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009583
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009584 - set-var(<var-name>) <expr>
9585 Sets a variable.
9586
Christopher Faulet85d79c92016-11-09 16:54:56 +01009587 - unset-var(<var-name>)
9588 Unsets a variable.
9589
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02009590 - sc-inc-gpc0(<sc-id>):
9591 This action increments the GPC0 counter according to the sticky
9592 counter designated by <sc-id>. If an error occurs, this action fails
9593 silently and the actions evaluation continues.
9594
Thierry FOURNIER236657b2015-08-19 08:25:14 +02009595 - sc-set-gpt0(<sc-id>) <int> :
9596 This action sets the GPT0 tag according to the sticky counter designated
9597 by <sc-id> and the value of <int>. The expected result is a boolean. If
9598 an error occurs, this action silently fails and the actions evaluation
9599 continues.
9600
Willy Tarreau2d392c22015-08-24 01:43:45 +02009601 - "silent-drop" :
9602 This stops the evaluation of the rules and makes the client-facing
9603 connection suddenly disappear using a system-dependant way that tries
9604 to prevent the client from being notified. The effect it then that the
9605 client still sees an established connection while there's none on
9606 HAProxy. The purpose is to achieve a comparable effect to "tarpit"
9607 except that it doesn't use any local resource at all on the machine
9608 running HAProxy. It can resist much higher loads than "tarpit", and
9609 slow down stronger attackers. It is important to undestand the impact
9610 of using this mechanism. All stateful equipments placed between the
9611 client and HAProxy (firewalls, proxies, load balancers) will also keep
9612 the established connection for a long time and may suffer from this
9613 action. On modern Linux systems running with enough privileges, the
9614 TCP_REPAIR socket option is used to block the emission of a TCP
9615 reset. On other systems, the socket's TTL is reduced to 1 so that the
9616 TCP reset doesn't pass the first router, though it's still delivered to
9617 local networks. Do not use it unless you fully understand how it works.
9618
Christopher Faulet76c09ef2017-09-21 11:03:52 +02009619 - send-spoe-group <engine-name> <group-name>
9620 Send a group of SPOE messages.
9621
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009622 Note that the "if/unless" condition is optional. If no condition is set on
9623 the action, it is simply performed unconditionally. That can be useful for
9624 for changing the default action to a reject.
9625
Jamie Gloudonaaa21002012-08-25 00:18:33 -04009626 It is perfectly possible to match layer 7 contents with "tcp-response
9627 content" rules, but then it is important to ensure that a full response has
9628 been buffered, otherwise no contents will match. In order to achieve this,
9629 the best solution involves detecting the HTTP protocol during the inspection
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009630 period.
9631
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009632 The "set-var" is used to set the content of a variable. The variable is
9633 declared inline.
9634
Daniel Schneller0b547052016-03-21 20:46:57 +01009635 <var-name> The name of the variable starts with an indication about
9636 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +01009637 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +01009638 "sess" : the variable is shared with the whole session
9639 "txn" : the variable is shared with the transaction
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009640 (request and response)
Daniel Schneller0b547052016-03-21 20:46:57 +01009641 "req" : the variable is shared only during request
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009642 processing
Daniel Schneller0b547052016-03-21 20:46:57 +01009643 "res" : the variable is shared only during response
9644 processing
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009645 This prefix is followed by a name. The separator is a '.'.
Christopher Fauletb71557a2016-10-31 10:49:03 +01009646 The name may only contain characters 'a-z', 'A-Z', '0-9',
9647 '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009648
9649 <expr> Is a standard HAProxy expression formed by a sample-fetch
9650 followed by some converters.
9651
9652 Example:
9653
9654 tcp-request content set-var(sess.my_var) src
9655
Christopher Faulet85d79c92016-11-09 16:54:56 +01009656 The "unset-var" is used to unset a variable. See above for details about
9657 <var-name>.
9658
9659 Example:
9660
9661 tcp-request content unset-var(sess.my_var)
9662
Christopher Faulet76c09ef2017-09-21 11:03:52 +02009663 The "send-spoe-group" is used to trigger sending of a group of SPOE
9664 messages. To do so, the SPOE engine used to send messages must be defined, as
9665 well as the SPOE group to send. Of course, the SPOE engine must refer to an
9666 existing SPOE filter. If not engine name is provided on the SPOE filter line,
9667 the SPOE agent name must be used.
9668
9669 <engine-name> The SPOE engine name.
9670
9671 <group-name> The SPOE group name as specified in the engine configuration.
9672
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009673 See section 7 about ACL usage.
9674
9675 See also : "tcp-request content", "tcp-response inspect-delay"
9676
9677
Willy Tarreau4f614292016-10-21 17:49:36 +02009678tcp-request session <action> [{if | unless} <condition>]
9679 Perform an action on a validated session depending on a layer 5 condition
9680 May be used in sections : defaults | frontend | listen | backend
9681 no | yes | yes | no
9682 Arguments :
9683 <action> defines the action to perform if the condition applies. See
9684 below.
9685
9686 <condition> is a standard layer5-only ACL-based condition (see section 7).
9687
9688 Once a session is validated, (ie. after all handshakes have been completed),
9689 it is possible to evaluate some conditions to decide whether this session
9690 must be accepted or dropped or have its counters tracked. Those conditions
9691 cannot make use of any data contents because no buffers are allocated yet and
9692 the processing cannot wait at this stage. The main use case it to copy some
9693 early information into variables (since variables are accessible in the
9694 session), or to keep track of some information collected after the handshake,
9695 such as SSL-level elements (SNI, ciphers, client cert's CN) or information
9696 from the PROXY protocol header (eg: track a source forwarded this way). The
9697 extracted information can thus be copied to a variable or tracked using
9698 "track-sc" rules. Of course it is also possible to decide to accept/reject as
9699 with other rulesets. Most operations performed here could also be performed
9700 in "tcp-request content" rules, except that in HTTP these rules are evaluated
9701 for each new request, and that might not always be acceptable. For example a
9702 rule might increment a counter on each evaluation. It would also be possible
9703 that a country is resolved by geolocation from the source IP address,
9704 assigned to a session-wide variable, then the source address rewritten from
9705 an HTTP header for all requests. If some contents need to be inspected in
9706 order to take the decision, the "tcp-request content" statements must be used
9707 instead.
9708
9709 The "tcp-request session" rules are evaluated in their exact declaration
9710 order. If no rule matches or if there is no rule, the default action is to
9711 accept the incoming session. There is no specific limit to the number of
9712 rules which may be inserted.
9713
9714 Several types of actions are supported :
9715 - accept : the request is accepted
9716 - reject : the request is rejected and the connection is closed
9717 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>]
9718 - sc-inc-gpc0(<sc-id>)
9719 - sc-set-gpt0(<sc-id>) <int>
9720 - set-var(<var-name>) <expr>
Christopher Faulet85d79c92016-11-09 16:54:56 +01009721 - unset-var(<var-name>)
Willy Tarreau4f614292016-10-21 17:49:36 +02009722 - silent-drop
9723
9724 These actions have the same meaning as their respective counter-parts in
9725 "tcp-request connection" and "tcp-request content", so please refer to these
9726 sections for a complete description.
9727
9728 Note that the "if/unless" condition is optional. If no condition is set on
9729 the action, it is simply performed unconditionally. That can be useful for
9730 "track-sc*" actions as well as for changing the default action to a reject.
9731
9732 Example: track the original source address by default, or the one advertised
9733 in the PROXY protocol header for connection coming from the local
9734 proxies. The first connection-level rule enables receipt of the
9735 PROXY protocol for these ones, the second rule tracks whatever
9736 address we decide to keep after optional decoding.
9737
9738 tcp-request connection expect-proxy layer4 if { src -f proxies.lst }
9739 tcp-request session track-sc0 src
9740
9741 Example: accept all sessions from white-listed hosts, reject too fast
9742 sessions without counting them, and track accepted sessions.
9743 This results in session rate being capped from abusive sources.
9744
9745 tcp-request session accept if { src -f /etc/haproxy/whitelist.lst }
9746 tcp-request session reject if { src_sess_rate gt 10 }
9747 tcp-request session track-sc0 src
9748
9749 Example: accept all sessions from white-listed hosts, count all other
9750 sessions and reject too fast ones. This results in abusive ones
9751 being blocked as long as they don't slow down.
9752
9753 tcp-request session accept if { src -f /etc/haproxy/whitelist.lst }
9754 tcp-request session track-sc0 src
9755 tcp-request session reject if { sc0_sess_rate gt 10 }
9756
9757 See section 7 about ACL usage.
9758
9759 See also : "tcp-request connection", "tcp-request content", "stick-table"
9760
9761
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009762tcp-response inspect-delay <timeout>
9763 Set the maximum allowed time to wait for a response during content inspection
9764 May be used in sections : defaults | frontend | listen | backend
9765 no | no | yes | yes
9766 Arguments :
9767 <timeout> is the timeout value specified in milliseconds by default, but
9768 can be in any other unit if the number is suffixed by the unit,
9769 as explained at the top of this document.
9770
9771 See also : "tcp-response content", "tcp-request inspect-delay".
9772
9773
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009774timeout check <timeout>
9775 Set additional check timeout, but only after a connection has been already
9776 established.
9777
9778 May be used in sections: defaults | frontend | listen | backend
9779 yes | no | yes | yes
9780 Arguments:
9781 <timeout> is the timeout value specified in milliseconds by default, but
9782 can be in any other unit if the number is suffixed by the unit,
9783 as explained at the top of this document.
9784
9785 If set, haproxy uses min("timeout connect", "inter") as a connect timeout
9786 for check and "timeout check" as an additional read timeout. The "min" is
9787 used so that people running with *very* long "timeout connect" (eg. those
9788 who needed this due to the queue or tarpit) do not slow down their checks.
Willy Tarreaud7550a22010-02-10 05:10:19 +01009789 (Please also note that there is no valid reason to have such long connect
9790 timeouts, because "timeout queue" and "timeout tarpit" can always be used to
9791 avoid that).
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009792
9793 If "timeout check" is not set haproxy uses "inter" for complete check
9794 timeout (connect + read) exactly like all <1.3.15 version.
9795
9796 In most cases check request is much simpler and faster to handle than normal
9797 requests and people may want to kick out laggy servers so this timeout should
Willy Tarreau41a340d2008-01-22 12:25:31 +01009798 be smaller than "timeout server".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009799
9800 This parameter is specific to backends, but can be specified once for all in
9801 "defaults" sections. This is in fact one of the easiest solutions not to
9802 forget about it.
9803
Willy Tarreau41a340d2008-01-22 12:25:31 +01009804 See also: "timeout connect", "timeout queue", "timeout server",
9805 "timeout tarpit".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009806
9807
Willy Tarreau0ba27502007-12-24 16:55:16 +01009808timeout client <timeout>
9809timeout clitimeout <timeout> (deprecated)
9810 Set the maximum inactivity time on the client side.
9811 May be used in sections : defaults | frontend | listen | backend
9812 yes | yes | yes | no
9813 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01009814 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01009815 can be in any other unit if the number is suffixed by the unit,
9816 as explained at the top of this document.
9817
9818 The inactivity timeout applies when the client is expected to acknowledge or
9819 send data. In HTTP mode, this timeout is particularly important to consider
9820 during the first phase, when the client sends the request, and during the
Baptiste Assmann2e1941e2016-03-06 23:24:12 +01009821 response while it is reading data sent by the server. That said, for the
9822 first phase, it is preferable to set the "timeout http-request" to better
9823 protect HAProxy from Slowloris like attacks. The value is specified in
9824 milliseconds by default, but can be in any other unit if the number is
Willy Tarreau0ba27502007-12-24 16:55:16 +01009825 suffixed by the unit, as specified at the top of this document. In TCP mode
9826 (and to a lesser extent, in HTTP mode), it is highly recommended that the
9827 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01009828 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01009829 losses by specifying timeouts that are slightly above multiples of 3 seconds
Willy Tarreauce887fd2012-05-12 12:50:00 +02009830 (eg: 4 or 5 seconds). If some long-lived sessions are mixed with short-lived
9831 sessions (eg: WebSocket and HTTP), it's worth considering "timeout tunnel",
Willy Tarreau05cdd962014-05-10 14:30:07 +02009832 which overrides "timeout client" and "timeout server" for tunnels, as well as
9833 "timeout client-fin" for half-closed connections.
Willy Tarreau0ba27502007-12-24 16:55:16 +01009834
9835 This parameter is specific to frontends, but can be specified once for all in
9836 "defaults" sections. This is in fact one of the easiest solutions not to
9837 forget about it. An unspecified timeout results in an infinite timeout, which
9838 is not recommended. Such a usage is accepted and works but reports a warning
9839 during startup because it may results in accumulation of expired sessions in
9840 the system if the system's timeouts are not configured either.
9841
9842 This parameter replaces the old, deprecated "clitimeout". It is recommended
9843 to use it to write new configurations. The form "timeout clitimeout" is
9844 provided only by backwards compatibility but its use is strongly discouraged.
9845
Baptiste Assmann2e1941e2016-03-06 23:24:12 +01009846 See also : "clitimeout", "timeout server", "timeout tunnel",
9847 "timeout http-request".
Willy Tarreau0ba27502007-12-24 16:55:16 +01009848
9849
Willy Tarreau05cdd962014-05-10 14:30:07 +02009850timeout client-fin <timeout>
9851 Set the inactivity timeout on the client side for half-closed connections.
9852 May be used in sections : defaults | frontend | listen | backend
9853 yes | yes | yes | no
9854 Arguments :
9855 <timeout> is the timeout value specified in milliseconds by default, but
9856 can be in any other unit if the number is suffixed by the unit,
9857 as explained at the top of this document.
9858
9859 The inactivity timeout applies when the client is expected to acknowledge or
9860 send data while one direction is already shut down. This timeout is different
9861 from "timeout client" in that it only applies to connections which are closed
9862 in one direction. This is particularly useful to avoid keeping connections in
9863 FIN_WAIT state for too long when clients do not disconnect cleanly. This
9864 problem is particularly common long connections such as RDP or WebSocket.
9865 Note that this timeout can override "timeout tunnel" when a connection shuts
Willy Tarreau599391a2017-11-24 10:16:00 +01009866 down in one direction. It is applied to idle HTTP/2 connections once a GOAWAY
9867 frame was sent, often indicating an expectation that the connection quickly
9868 ends.
Willy Tarreau05cdd962014-05-10 14:30:07 +02009869
9870 This parameter is specific to frontends, but can be specified once for all in
9871 "defaults" sections. By default it is not set, so half-closed connections
9872 will use the other timeouts (timeout.client or timeout.tunnel).
9873
9874 See also : "timeout client", "timeout server-fin", and "timeout tunnel".
9875
9876
Willy Tarreau0ba27502007-12-24 16:55:16 +01009877timeout connect <timeout>
9878timeout contimeout <timeout> (deprecated)
9879 Set the maximum time to wait for a connection attempt to a server to succeed.
9880 May be used in sections : defaults | frontend | listen | backend
9881 yes | no | yes | yes
9882 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01009883 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01009884 can be in any other unit if the number is suffixed by the unit,
9885 as explained at the top of this document.
9886
9887 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01009888 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreaud72758d2010-01-12 10:42:19 +01009889 cover one or several TCP packet losses by specifying timeouts that are
Willy Tarreau0ba27502007-12-24 16:55:16 +01009890 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009891 connect timeout also presets both queue and tarpit timeouts to the same value
9892 if these have not been specified.
Willy Tarreau0ba27502007-12-24 16:55:16 +01009893
9894 This parameter is specific to backends, but can be specified once for all in
9895 "defaults" sections. This is in fact one of the easiest solutions not to
9896 forget about it. An unspecified timeout results in an infinite timeout, which
9897 is not recommended. Such a usage is accepted and works but reports a warning
9898 during startup because it may results in accumulation of failed sessions in
9899 the system if the system's timeouts are not configured either.
9900
9901 This parameter replaces the old, deprecated "contimeout". It is recommended
9902 to use it to write new configurations. The form "timeout contimeout" is
9903 provided only by backwards compatibility but its use is strongly discouraged.
9904
Willy Tarreau41a340d2008-01-22 12:25:31 +01009905 See also: "timeout check", "timeout queue", "timeout server", "contimeout",
9906 "timeout tarpit".
Willy Tarreau0ba27502007-12-24 16:55:16 +01009907
9908
Willy Tarreaub16a5742010-01-10 14:46:16 +01009909timeout http-keep-alive <timeout>
9910 Set the maximum allowed time to wait for a new HTTP request to appear
9911 May be used in sections : defaults | frontend | listen | backend
9912 yes | yes | yes | yes
9913 Arguments :
9914 <timeout> is the timeout value specified in milliseconds by default, but
9915 can be in any other unit if the number is suffixed by the unit,
9916 as explained at the top of this document.
9917
9918 By default, the time to wait for a new request in case of keep-alive is set
9919 by "timeout http-request". However this is not always convenient because some
9920 people want very short keep-alive timeouts in order to release connections
9921 faster, and others prefer to have larger ones but still have short timeouts
9922 once the request has started to present itself.
9923
9924 The "http-keep-alive" timeout covers these needs. It will define how long to
9925 wait for a new HTTP request to start coming after a response was sent. Once
9926 the first byte of request has been seen, the "http-request" timeout is used
9927 to wait for the complete request to come. Note that empty lines prior to a
9928 new request do not refresh the timeout and are not counted as a new request.
9929
9930 There is also another difference between the two timeouts : when a connection
9931 expires during timeout http-keep-alive, no error is returned, the connection
9932 just closes. If the connection expires in "http-request" while waiting for a
9933 connection to complete, a HTTP 408 error is returned.
9934
9935 In general it is optimal to set this value to a few tens to hundreds of
9936 milliseconds, to allow users to fetch all objects of a page at once but
9937 without waiting for further clicks. Also, if set to a very small value (eg:
9938 1 millisecond) it will probably only accept pipelined requests but not the
9939 non-pipelined ones. It may be a nice trade-off for very large sites running
Patrick Mézard2382ad62010-05-09 10:43:32 +02009940 with tens to hundreds of thousands of clients.
Willy Tarreaub16a5742010-01-10 14:46:16 +01009941
9942 If this parameter is not set, the "http-request" timeout applies, and if both
9943 are not set, "timeout client" still applies at the lower level. It should be
9944 set in the frontend to take effect, unless the frontend is in TCP mode, in
9945 which case the HTTP backend's timeout will be used.
9946
9947 See also : "timeout http-request", "timeout client".
9948
9949
Willy Tarreau036fae02008-01-06 13:24:40 +01009950timeout http-request <timeout>
9951 Set the maximum allowed time to wait for a complete HTTP request
9952 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaucd7afc02009-07-12 10:03:17 +02009953 yes | yes | yes | yes
Willy Tarreau036fae02008-01-06 13:24:40 +01009954 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01009955 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau036fae02008-01-06 13:24:40 +01009956 can be in any other unit if the number is suffixed by the unit,
9957 as explained at the top of this document.
9958
9959 In order to offer DoS protection, it may be required to lower the maximum
9960 accepted time to receive a complete HTTP request without affecting the client
9961 timeout. This helps protecting against established connections on which
9962 nothing is sent. The client timeout cannot offer a good protection against
9963 this abuse because it is an inactivity timeout, which means that if the
9964 attacker sends one character every now and then, the timeout will not
9965 trigger. With the HTTP request timeout, no matter what speed the client
Willy Tarreau2705a612014-05-23 17:38:34 +02009966 types, the request will be aborted if it does not complete in time. When the
9967 timeout expires, an HTTP 408 response is sent to the client to inform it
9968 about the problem, and the connection is closed. The logs will report
9969 termination codes "cR". Some recent browsers are having problems with this
9970 standard, well-documented behaviour, so it might be needed to hide the 408
Willy Tarreau0f228a02015-05-01 15:37:53 +02009971 code using "option http-ignore-probes" or "errorfile 408 /dev/null". See
9972 more details in the explanations of the "cR" termination code in section 8.5.
Willy Tarreau036fae02008-01-06 13:24:40 +01009973
Baptiste Assmanneccdf432015-10-28 13:49:01 +01009974 By default, this timeout only applies to the header part of the request,
9975 and not to any data. As soon as the empty line is received, this timeout is
9976 not used anymore. When combined with "option http-buffer-request", this
9977 timeout also applies to the body of the request..
9978 It is used again on keep-alive connections to wait for a second
Willy Tarreaub16a5742010-01-10 14:46:16 +01009979 request if "timeout http-keep-alive" is not set.
Willy Tarreau036fae02008-01-06 13:24:40 +01009980
9981 Generally it is enough to set it to a few seconds, as most clients send the
9982 full request immediately upon connection. Add 3 or more seconds to cover TCP
9983 retransmits but that's all. Setting it to very low values (eg: 50 ms) will
9984 generally work on local networks as long as there are no packet losses. This
9985 will prevent people from sending bare HTTP requests using telnet.
9986
9987 If this parameter is not set, the client timeout still applies between each
Willy Tarreaucd7afc02009-07-12 10:03:17 +02009988 chunk of the incoming request. It should be set in the frontend to take
9989 effect, unless the frontend is in TCP mode, in which case the HTTP backend's
9990 timeout will be used.
Willy Tarreau036fae02008-01-06 13:24:40 +01009991
Willy Tarreau0f228a02015-05-01 15:37:53 +02009992 See also : "errorfile", "http-ignore-probes", "timeout http-keep-alive", and
Baptiste Assmanneccdf432015-10-28 13:49:01 +01009993 "timeout client", "option http-buffer-request".
Willy Tarreau036fae02008-01-06 13:24:40 +01009994
Willy Tarreau844e3c52008-01-11 16:28:18 +01009995
9996timeout queue <timeout>
9997 Set the maximum time to wait in the queue for a connection slot to be free
9998 May be used in sections : defaults | frontend | listen | backend
9999 yes | no | yes | yes
10000 Arguments :
10001 <timeout> is the timeout value specified in milliseconds by default, but
10002 can be in any other unit if the number is suffixed by the unit,
10003 as explained at the top of this document.
10004
10005 When a server's maxconn is reached, connections are left pending in a queue
10006 which may be server-specific or global to the backend. In order not to wait
10007 indefinitely, a timeout is applied to requests pending in the queue. If the
10008 timeout is reached, it is considered that the request will almost never be
10009 served, so it is dropped and a 503 error is returned to the client.
10010
10011 The "timeout queue" statement allows to fix the maximum time for a request to
10012 be left pending in a queue. If unspecified, the same value as the backend's
10013 connection timeout ("timeout connect") is used, for backwards compatibility
10014 with older versions with no "timeout queue" parameter.
10015
10016 See also : "timeout connect", "contimeout".
10017
10018
10019timeout server <timeout>
10020timeout srvtimeout <timeout> (deprecated)
10021 Set the maximum inactivity time on the server side.
10022 May be used in sections : defaults | frontend | listen | backend
10023 yes | no | yes | yes
10024 Arguments :
10025 <timeout> is the timeout value specified in milliseconds by default, but
10026 can be in any other unit if the number is suffixed by the unit,
10027 as explained at the top of this document.
10028
10029 The inactivity timeout applies when the server is expected to acknowledge or
10030 send data. In HTTP mode, this timeout is particularly important to consider
10031 during the first phase of the server's response, when it has to send the
10032 headers, as it directly represents the server's processing time for the
10033 request. To find out what value to put there, it's often good to start with
10034 what would be considered as unacceptable response times, then check the logs
10035 to observe the response time distribution, and adjust the value accordingly.
10036
10037 The value is specified in milliseconds by default, but can be in any other
10038 unit if the number is suffixed by the unit, as specified at the top of this
10039 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
10040 recommended that the client timeout remains equal to the server timeout in
10041 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +010010042 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +010010043 packet losses by specifying timeouts that are slightly above multiples of 3
Willy Tarreauce887fd2012-05-12 12:50:00 +020010044 seconds (eg: 4 or 5 seconds minimum). If some long-lived sessions are mixed
10045 with short-lived sessions (eg: WebSocket and HTTP), it's worth considering
10046 "timeout tunnel", which overrides "timeout client" and "timeout server" for
10047 tunnels.
Willy Tarreau844e3c52008-01-11 16:28:18 +010010048
10049 This parameter is specific to backends, but can be specified once for all in
10050 "defaults" sections. This is in fact one of the easiest solutions not to
10051 forget about it. An unspecified timeout results in an infinite timeout, which
10052 is not recommended. Such a usage is accepted and works but reports a warning
10053 during startup because it may results in accumulation of expired sessions in
10054 the system if the system's timeouts are not configured either.
10055
10056 This parameter replaces the old, deprecated "srvtimeout". It is recommended
10057 to use it to write new configurations. The form "timeout srvtimeout" is
10058 provided only by backwards compatibility but its use is strongly discouraged.
10059
Willy Tarreauce887fd2012-05-12 12:50:00 +020010060 See also : "srvtimeout", "timeout client" and "timeout tunnel".
Willy Tarreau844e3c52008-01-11 16:28:18 +010010061
Willy Tarreau05cdd962014-05-10 14:30:07 +020010062
10063timeout server-fin <timeout>
10064 Set the inactivity timeout on the server side for half-closed connections.
10065 May be used in sections : defaults | frontend | listen | backend
10066 yes | no | yes | yes
10067 Arguments :
10068 <timeout> is the timeout value specified in milliseconds by default, but
10069 can be in any other unit if the number is suffixed by the unit,
10070 as explained at the top of this document.
10071
10072 The inactivity timeout applies when the server is expected to acknowledge or
10073 send data while one direction is already shut down. This timeout is different
10074 from "timeout server" in that it only applies to connections which are closed
10075 in one direction. This is particularly useful to avoid keeping connections in
10076 FIN_WAIT state for too long when a remote server does not disconnect cleanly.
10077 This problem is particularly common long connections such as RDP or WebSocket.
10078 Note that this timeout can override "timeout tunnel" when a connection shuts
10079 down in one direction. This setting was provided for completeness, but in most
10080 situations, it should not be needed.
10081
10082 This parameter is specific to backends, but can be specified once for all in
10083 "defaults" sections. By default it is not set, so half-closed connections
10084 will use the other timeouts (timeout.server or timeout.tunnel).
10085
10086 See also : "timeout client-fin", "timeout server", and "timeout tunnel".
10087
Willy Tarreau844e3c52008-01-11 16:28:18 +010010088
10089timeout tarpit <timeout>
Cyril Bonté78caf842010-03-10 22:41:43 +010010090 Set the duration for which tarpitted connections will be maintained
Willy Tarreau844e3c52008-01-11 16:28:18 +010010091 May be used in sections : defaults | frontend | listen | backend
10092 yes | yes | yes | yes
10093 Arguments :
10094 <timeout> is the tarpit duration specified in milliseconds by default, but
10095 can be in any other unit if the number is suffixed by the unit,
10096 as explained at the top of this document.
10097
Jarno Huuskonene5ae7022017-04-03 14:36:21 +030010098 When a connection is tarpitted using "http-request tarpit" or
10099 "reqtarpit", it is maintained open with no activity for a certain
10100 amount of time, then closed. "timeout tarpit" defines how long it will
10101 be maintained open.
Willy Tarreau844e3c52008-01-11 16:28:18 +010010102
10103 The value is specified in milliseconds by default, but can be in any other
10104 unit if the number is suffixed by the unit, as specified at the top of this
10105 document. If unspecified, the same value as the backend's connection timeout
10106 ("timeout connect") is used, for backwards compatibility with older versions
Cyril Bonté78caf842010-03-10 22:41:43 +010010107 with no "timeout tarpit" parameter.
Willy Tarreau844e3c52008-01-11 16:28:18 +010010108
10109 See also : "timeout connect", "contimeout".
10110
10111
Willy Tarreauce887fd2012-05-12 12:50:00 +020010112timeout tunnel <timeout>
10113 Set the maximum inactivity time on the client and server side for tunnels.
10114 May be used in sections : defaults | frontend | listen | backend
10115 yes | no | yes | yes
10116 Arguments :
10117 <timeout> is the timeout value specified in milliseconds by default, but
10118 can be in any other unit if the number is suffixed by the unit,
10119 as explained at the top of this document.
10120
Jamie Gloudonaaa21002012-08-25 00:18:33 -040010121 The tunnel timeout applies when a bidirectional connection is established
Willy Tarreauce887fd2012-05-12 12:50:00 +020010122 between a client and a server, and the connection remains inactive in both
10123 directions. This timeout supersedes both the client and server timeouts once
10124 the connection becomes a tunnel. In TCP, this timeout is used as soon as no
10125 analyser remains attached to either connection (eg: tcp content rules are
10126 accepted). In HTTP, this timeout is used when a connection is upgraded (eg:
10127 when switching to the WebSocket protocol, or forwarding a CONNECT request
10128 to a proxy), or after the first response when no keepalive/close option is
10129 specified.
10130
Willy Tarreau05cdd962014-05-10 14:30:07 +020010131 Since this timeout is usually used in conjunction with long-lived connections,
10132 it usually is a good idea to also set "timeout client-fin" to handle the
10133 situation where a client suddenly disappears from the net and does not
10134 acknowledge a close, or sends a shutdown and does not acknowledge pending
10135 data anymore. This can happen in lossy networks where firewalls are present,
10136 and is detected by the presence of large amounts of sessions in a FIN_WAIT
10137 state.
10138
Willy Tarreauce887fd2012-05-12 12:50:00 +020010139 The value is specified in milliseconds by default, but can be in any other
10140 unit if the number is suffixed by the unit, as specified at the top of this
10141 document. Whatever the expected normal idle time, it is a good practice to
10142 cover at least one or several TCP packet losses by specifying timeouts that
10143 are slightly above multiples of 3 seconds (eg: 4 or 5 seconds minimum).
10144
10145 This parameter is specific to backends, but can be specified once for all in
10146 "defaults" sections. This is in fact one of the easiest solutions not to
10147 forget about it.
10148
10149 Example :
10150 defaults http
10151 option http-server-close
10152 timeout connect 5s
10153 timeout client 30s
Willy Tarreau05cdd962014-05-10 14:30:07 +020010154 timeout client-fin 30s
Willy Tarreauce887fd2012-05-12 12:50:00 +020010155 timeout server 30s
10156 timeout tunnel 1h # timeout to use with WebSocket and CONNECT
10157
Willy Tarreau05cdd962014-05-10 14:30:07 +020010158 See also : "timeout client", "timeout client-fin", "timeout server".
Willy Tarreauce887fd2012-05-12 12:50:00 +020010159
10160
Willy Tarreau844e3c52008-01-11 16:28:18 +010010161transparent (deprecated)
10162 Enable client-side transparent proxying
10163 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau4b1f8592008-12-23 23:13:55 +010010164 yes | no | yes | yes
Willy Tarreau844e3c52008-01-11 16:28:18 +010010165 Arguments : none
10166
10167 This keyword was introduced in order to provide layer 7 persistence to layer
10168 3 load balancers. The idea is to use the OS's ability to redirect an incoming
10169 connection for a remote address to a local process (here HAProxy), and let
10170 this process know what address was initially requested. When this option is
10171 used, sessions without cookies will be forwarded to the original destination
10172 IP address of the incoming request (which should match that of another
10173 equipment), while requests with cookies will still be forwarded to the
10174 appropriate server.
10175
10176 The "transparent" keyword is deprecated, use "option transparent" instead.
10177
10178 Note that contrary to a common belief, this option does NOT make HAProxy
10179 present the client's IP to the server when establishing the connection.
10180
Willy Tarreau844e3c52008-01-11 16:28:18 +010010181 See also: "option transparent"
10182
William Lallemanda73203e2012-03-12 12:48:57 +010010183unique-id-format <string>
10184 Generate a unique ID for each request.
10185 May be used in sections : defaults | frontend | listen | backend
10186 yes | yes | yes | no
10187 Arguments :
10188 <string> is a log-format string.
10189
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010190 This keyword creates a ID for each request using the custom log format. A
10191 unique ID is useful to trace a request passing through many components of
10192 a complex infrastructure. The newly created ID may also be logged using the
10193 %ID tag the log-format string.
William Lallemanda73203e2012-03-12 12:48:57 +010010194
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010195 The format should be composed from elements that are guaranteed to be
10196 unique when combined together. For instance, if multiple haproxy instances
10197 are involved, it might be important to include the node name. It is often
10198 needed to log the incoming connection's source and destination addresses
10199 and ports. Note that since multiple requests may be performed over the same
10200 connection, including a request counter may help differentiate them.
10201 Similarly, a timestamp may protect against a rollover of the counter.
10202 Logging the process ID will avoid collisions after a service restart.
William Lallemanda73203e2012-03-12 12:48:57 +010010203
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010204 It is recommended to use hexadecimal notation for many fields since it
10205 makes them more compact and saves space in logs.
William Lallemanda73203e2012-03-12 12:48:57 +010010206
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010207 Example:
William Lallemanda73203e2012-03-12 12:48:57 +010010208
Julien Vehentf21be322014-03-07 08:27:34 -050010209 unique-id-format %{+X}o\ %ci:%cp_%fi:%fp_%Ts_%rt:%pid
William Lallemanda73203e2012-03-12 12:48:57 +010010210
10211 will generate:
10212
10213 7F000001:8296_7F00001E:1F90_4F7B0A69_0003:790A
10214
10215 See also: "unique-id-header"
10216
10217unique-id-header <name>
10218 Add a unique ID header in the HTTP request.
10219 May be used in sections : defaults | frontend | listen | backend
10220 yes | yes | yes | no
10221 Arguments :
10222 <name> is the name of the header.
10223
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010224 Add a unique-id header in the HTTP request sent to the server, using the
10225 unique-id-format. It can't work if the unique-id-format doesn't exist.
William Lallemanda73203e2012-03-12 12:48:57 +010010226
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010227 Example:
William Lallemanda73203e2012-03-12 12:48:57 +010010228
Julien Vehentf21be322014-03-07 08:27:34 -050010229 unique-id-format %{+X}o\ %ci:%cp_%fi:%fp_%Ts_%rt:%pid
William Lallemanda73203e2012-03-12 12:48:57 +010010230 unique-id-header X-Unique-ID
10231
10232 will generate:
10233
10234 X-Unique-ID: 7F000001:8296_7F00001E:1F90_4F7B0A69_0003:790A
10235
10236 See also: "unique-id-format"
Willy Tarreau844e3c52008-01-11 16:28:18 +010010237
Willy Tarreauf51658d2014-04-23 01:21:56 +020010238use_backend <backend> [{if | unless} <condition>]
Willy Tarreau1d0dfb12009-07-07 15:10:31 +020010239 Switch to a specific backend if/unless an ACL-based condition is matched.
Willy Tarreau844e3c52008-01-11 16:28:18 +010010240 May be used in sections : defaults | frontend | listen | backend
10241 no | yes | yes | no
10242 Arguments :
Bertrand Jacquin702d44f2013-11-19 11:43:06 +010010243 <backend> is the name of a valid backend or "listen" section, or a
10244 "log-format" string resolving to a backend name.
Willy Tarreau844e3c52008-01-11 16:28:18 +010010245
Willy Tarreauf51658d2014-04-23 01:21:56 +020010246 <condition> is a condition composed of ACLs, as described in section 7. If
10247 it is omitted, the rule is unconditionally applied.
Willy Tarreau844e3c52008-01-11 16:28:18 +010010248
10249 When doing content-switching, connections arrive on a frontend and are then
10250 dispatched to various backends depending on a number of conditions. The
10251 relation between the conditions and the backends is described with the
Willy Tarreau1d0dfb12009-07-07 15:10:31 +020010252 "use_backend" keyword. While it is normally used with HTTP processing, it can
10253 also be used in pure TCP, either without content using stateless ACLs (eg:
10254 source address validation) or combined with a "tcp-request" rule to wait for
10255 some payload.
Willy Tarreau844e3c52008-01-11 16:28:18 +010010256
10257 There may be as many "use_backend" rules as desired. All of these rules are
10258 evaluated in their declaration order, and the first one which matches will
10259 assign the backend.
10260
10261 In the first form, the backend will be used if the condition is met. In the
10262 second form, the backend will be used if the condition is not met. If no
10263 condition is valid, the backend defined with "default_backend" will be used.
10264 If no default backend is defined, either the servers in the same section are
10265 used (in case of a "listen" section) or, in case of a frontend, no server is
10266 used and a 503 service unavailable response is returned.
10267
Willy Tarreau51aecc72009-07-12 09:47:04 +020010268 Note that it is possible to switch from a TCP frontend to an HTTP backend. In
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010010269 this case, either the frontend has already checked that the protocol is HTTP,
Willy Tarreau51aecc72009-07-12 09:47:04 +020010270 and backend processing will immediately follow, or the backend will wait for
10271 a complete HTTP request to get in. This feature is useful when a frontend
10272 must decode several protocols on a unique port, one of them being HTTP.
10273
Bertrand Jacquin702d44f2013-11-19 11:43:06 +010010274 When <backend> is a simple name, it is resolved at configuration time, and an
10275 error is reported if the specified backend does not exist. If <backend> is
10276 a log-format string instead, no check may be done at configuration time, so
10277 the backend name is resolved dynamically at run time. If the resulting
10278 backend name does not correspond to any valid backend, no other rule is
10279 evaluated, and the default_backend directive is applied instead. Note that
10280 when using dynamic backend names, it is highly recommended to use a prefix
10281 that no other backend uses in order to ensure that an unauthorized backend
10282 cannot be forced from the request.
10283
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010284 It is worth mentioning that "use_backend" rules with an explicit name are
Bertrand Jacquin702d44f2013-11-19 11:43:06 +010010285 used to detect the association between frontends and backends to compute the
10286 backend's "fullconn" setting. This cannot be done for dynamic names.
10287
10288 See also: "default_backend", "tcp-request", "fullconn", "log-format", and
10289 section 7 about ACLs.
Willy Tarreaud72758d2010-01-12 10:42:19 +010010290
Willy Tarreau036fae02008-01-06 13:24:40 +010010291
Willy Tarreau4a5cade2012-04-05 21:09:48 +020010292use-server <server> if <condition>
10293use-server <server> unless <condition>
10294 Only use a specific server if/unless an ACL-based condition is matched.
10295 May be used in sections : defaults | frontend | listen | backend
10296 no | no | yes | yes
10297 Arguments :
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010298 <server> is the name of a valid server in the same backend section.
Willy Tarreau4a5cade2012-04-05 21:09:48 +020010299
10300 <condition> is a condition composed of ACLs, as described in section 7.
10301
10302 By default, connections which arrive to a backend are load-balanced across
10303 the available servers according to the configured algorithm, unless a
10304 persistence mechanism such as a cookie is used and found in the request.
10305
10306 Sometimes it is desirable to forward a particular request to a specific
10307 server without having to declare a dedicated backend for this server. This
10308 can be achieved using the "use-server" rules. These rules are evaluated after
10309 the "redirect" rules and before evaluating cookies, and they have precedence
10310 on them. There may be as many "use-server" rules as desired. All of these
10311 rules are evaluated in their declaration order, and the first one which
10312 matches will assign the server.
10313
10314 If a rule designates a server which is down, and "option persist" is not used
10315 and no force-persist rule was validated, it is ignored and evaluation goes on
10316 with the next rules until one matches.
10317
10318 In the first form, the server will be used if the condition is met. In the
10319 second form, the server will be used if the condition is not met. If no
10320 condition is valid, the processing continues and the server will be assigned
10321 according to other persistence mechanisms.
10322
10323 Note that even if a rule is matched, cookie processing is still performed but
10324 does not assign the server. This allows prefixed cookies to have their prefix
10325 stripped.
10326
10327 The "use-server" statement works both in HTTP and TCP mode. This makes it
10328 suitable for use with content-based inspection. For instance, a server could
10329 be selected in a farm according to the TLS SNI field. And if these servers
10330 have their weight set to zero, they will not be used for other traffic.
10331
10332 Example :
10333 # intercept incoming TLS requests based on the SNI field
10334 use-server www if { req_ssl_sni -i www.example.com }
10335 server www 192.168.0.1:443 weight 0
10336 use-server mail if { req_ssl_sni -i mail.example.com }
10337 server mail 192.168.0.1:587 weight 0
10338 use-server imap if { req_ssl_sni -i imap.example.com }
Lukas Tribus98a3e3f2017-03-26 12:55:35 +000010339 server imap 192.168.0.1:993 weight 0
Willy Tarreau4a5cade2012-04-05 21:09:48 +020010340 # all the rest is forwarded to this server
10341 server default 192.168.0.2:443 check
10342
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010343 See also: "use_backend", section 5 about server and section 7 about ACLs.
Willy Tarreau4a5cade2012-04-05 21:09:48 +020010344
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010345
103465. Bind and Server options
10347--------------------------
10348
10349The "bind", "server" and "default-server" keywords support a number of settings
10350depending on some build options and on the system HAProxy was built on. These
10351settings generally each consist in one word sometimes followed by a value,
10352written on the same line as the "bind" or "server" line. All these options are
10353described in this section.
10354
10355
103565.1. Bind options
10357-----------------
10358
10359The "bind" keyword supports a certain number of settings which are all passed
10360as arguments on the same line. The order in which those arguments appear makes
10361no importance, provided that they appear after the bind address. All of these
10362parameters are optional. Some of them consist in a single words (booleans),
10363while other ones expect a value after them. In this case, the value must be
10364provided immediately after the setting name.
10365
10366The currently supported settings are the following ones.
10367
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010010368accept-netscaler-cip <magic number>
10369 Enforces the use of the NetScaler Client IP insertion protocol over any
10370 connection accepted by any of the TCP sockets declared on the same line. The
10371 NetScaler Client IP insertion protocol dictates the layer 3/4 addresses of
10372 the incoming connection to be used everywhere an address is used, with the
10373 only exception of "tcp-request connection" rules which will only see the
10374 real connection address. Logs will reflect the addresses indicated in the
10375 protocol, unless it is violated, in which case the real address will still
10376 be used. This keyword combined with support from external components can be
10377 used as an efficient and reliable alternative to the X-Forwarded-For
Bertrand Jacquin90759682016-06-06 15:35:39 +010010378 mechanism which is not always reliable and not even always usable. See also
10379 "tcp-request connection expect-netscaler-cip" for a finer-grained setting of
10380 which client is allowed to use the protocol.
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010010381
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010382accept-proxy
10383 Enforces the use of the PROXY protocol over any connection accepted by any of
Willy Tarreau77992672014-06-14 11:06:17 +020010384 the sockets declared on the same line. Versions 1 and 2 of the PROXY protocol
10385 are supported and correctly detected. The PROXY protocol dictates the layer
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010386 3/4 addresses of the incoming connection to be used everywhere an address is
10387 used, with the only exception of "tcp-request connection" rules which will
10388 only see the real connection address. Logs will reflect the addresses
10389 indicated in the protocol, unless it is violated, in which case the real
10390 address will still be used. This keyword combined with support from external
10391 components can be used as an efficient and reliable alternative to the
10392 X-Forwarded-For mechanism which is not always reliable and not even always
Willy Tarreau4f0d9192013-06-11 20:40:55 +020010393 usable. See also "tcp-request connection expect-proxy" for a finer-grained
10394 setting of which client is allowed to use the protocol.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010395
Olivier Houchardc2aae742017-09-22 18:26:28 +020010396allow-0rtt
10397 Allow receiving early data when using TLS 1.3. This is disabled by default,
10398 due to security considerations.
10399
Willy Tarreauab861d32013-04-02 02:30:41 +020010400alpn <protocols>
10401 This enables the TLS ALPN extension and advertises the specified protocol
10402 list as supported on top of ALPN. The protocol list consists in a comma-
10403 delimited list of protocol names, for instance: "http/1.1,http/1.0" (without
10404 quotes). This requires that the SSL library is build with support for TLS
10405 extensions enabled (check with haproxy -vv). The ALPN extension replaces the
10406 initial NPN extension.
10407
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010408backlog <backlog>
10409 Sets the socket's backlog to this value. If unspecified, the frontend's
10410 backlog is used instead, which generally defaults to the maxconn value.
10411
Emmanuel Hocdete7f2b732017-01-09 16:15:54 +010010412curves <curves>
10413 This setting is only available when support for OpenSSL was built in. It sets
10414 the string describing the list of elliptic curves algorithms ("curve suite")
10415 that are negotiated during the SSL/TLS handshake with ECDHE. The format of the
10416 string is a colon-delimited list of curve name.
10417 Example: "X25519:P-256" (without quote)
10418 When "curves" is set, "ecdhe" parameter is ignored.
10419
Emeric Brun7fb34422012-09-28 15:26:15 +020010420ecdhe <named curve>
10421 This setting is only available when support for OpenSSL was built in. It sets
Emeric Brun6924ef82013-03-06 14:08:53 +010010422 the named curve (RFC 4492) used to generate ECDH ephemeral keys. By default,
10423 used named curve is prime256v1.
Emeric Brun7fb34422012-09-28 15:26:15 +020010424
Emeric Brunfd33a262012-10-11 16:28:27 +020010425ca-file <cafile>
Emeric Brun1a073b42012-09-28 17:07:34 +020010426 This setting is only available when support for OpenSSL was built in. It
10427 designates a PEM file from which to load CA certificates used to verify
10428 client's certificate.
10429
Emeric Brunb6dc9342012-09-28 17:55:37 +020010430ca-ignore-err [all|<errorID>,...]
10431 This setting is only available when support for OpenSSL was built in.
10432 Sets a comma separated list of errorIDs to ignore during verify at depth > 0.
10433 If set to 'all', all errors are ignored. SSL handshake is not aborted if an
10434 error is ignored.
10435
Christopher Faulet31af49d2015-06-09 17:29:50 +020010436ca-sign-file <cafile>
10437 This setting is only available when support for OpenSSL was built in. It
10438 designates a PEM file containing both the CA certificate and the CA private
10439 key used to create and sign server's certificates. This is a mandatory
10440 setting when the dynamic generation of certificates is enabled. See
10441 'generate-certificates' for details.
10442
Bertrand Jacquind4d0a232016-11-13 16:37:12 +000010443ca-sign-pass <passphrase>
Christopher Faulet31af49d2015-06-09 17:29:50 +020010444 This setting is only available when support for OpenSSL was built in. It is
10445 the CA private key passphrase. This setting is optional and used only when
10446 the dynamic generation of certificates is enabled. See
10447 'generate-certificates' for details.
10448
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010449ciphers <ciphers>
10450 This setting is only available when support for OpenSSL was built in. It sets
10451 the string describing the list of cipher algorithms ("cipher suite") that are
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010452 negotiated during the SSL/TLS handshake. The format of the string is defined
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010453 in "man 1 ciphers" from OpenSSL man pages, and can be for instance a string
10454 such as "AES:ALL:!aNULL:!eNULL:+RC4:@STRENGTH" (without quotes).
Daniel Schneller87e43022017-09-01 19:29:57 +020010455 Depending on the compatiblity and security requirements, the list of suitable
10456 ciphers depends on a variety of variables. For background information and
10457 recommendations see e. g. (https://wiki.mozilla.org/Security/Server_Side_TLS)
10458 and (https://mozilla.github.io/server-side-tls/ssl-config-generator/).
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010459
Emeric Brunfd33a262012-10-11 16:28:27 +020010460crl-file <crlfile>
Emeric Brun1a073b42012-09-28 17:07:34 +020010461 This setting is only available when support for OpenSSL was built in. It
10462 designates a PEM file from which to load certificate revocation list used
10463 to verify client's certificate.
10464
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010465crt <cert>
Alex Davies0fbf0162013-03-02 16:04:50 +000010466 This setting is only available when support for OpenSSL was built in. It
10467 designates a PEM file containing both the required certificates and any
10468 associated private keys. This file can be built by concatenating multiple
10469 PEM files into one (e.g. cat cert.pem key.pem > combined.pem). If your CA
10470 requires an intermediate certificate, this can also be concatenated into this
10471 file.
10472
10473 If the OpenSSL used supports Diffie-Hellman, parameters present in this file
10474 are loaded.
10475
10476 If a directory name is used instead of a PEM file, then all files found in
Cyril Bonté3180f7b2015-01-25 00:16:08 +010010477 that directory will be loaded in alphabetic order unless their name ends with
Janusz Dziemidowicz2c701b52015-03-07 23:03:59 +010010478 '.issuer', '.ocsp' or '.sctl' (reserved extensions). This directive may be
10479 specified multiple times in order to load certificates from multiple files or
10480 directories. The certificates will be presented to clients who provide a
10481 valid TLS Server Name Indication field matching one of their CN or alt
10482 subjects. Wildcards are supported, where a wildcard character '*' is used
10483 instead of the first hostname component (eg: *.example.org matches
10484 www.example.org but not www.sub.example.org).
Alex Davies0fbf0162013-03-02 16:04:50 +000010485
10486 If no SNI is provided by the client or if the SSL library does not support
10487 TLS extensions, or if the client provides an SNI hostname which does not
10488 match any certificate, then the first loaded certificate will be presented.
10489 This means that when loading certificates from a directory, it is highly
Cyril Bonté3180f7b2015-01-25 00:16:08 +010010490 recommended to load the default one first as a file or to ensure that it will
10491 always be the first one in the directory.
Alex Davies0fbf0162013-03-02 16:04:50 +000010492
Emeric Brune032bfa2012-09-28 13:01:45 +020010493 Note that the same cert may be loaded multiple times without side effects.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010494
Alex Davies0fbf0162013-03-02 16:04:50 +000010495 Some CAs (such as Godaddy) offer a drop down list of server types that do not
10496 include HAProxy when obtaining a certificate. If this happens be sure to
Godbach8bf60a12014-04-21 21:42:41 +080010497 choose a webserver that the CA believes requires an intermediate CA (for
Alex Davies0fbf0162013-03-02 16:04:50 +000010498 Godaddy, selection Apache Tomcat will get the correct bundle, but many
10499 others, e.g. nginx, result in a wrong bundle that will not work for some
10500 clients).
10501
Emeric Brun4147b2e2014-06-16 18:36:30 +020010502 For each PEM file, haproxy checks for the presence of file at the same path
10503 suffixed by ".ocsp". If such file is found, support for the TLS Certificate
10504 Status Request extension (also known as "OCSP stapling") is automatically
10505 enabled. The content of this file is optional. If not empty, it must contain
10506 a valid OCSP Response in DER format. In order to be valid an OCSP Response
10507 must comply with the following rules: it has to indicate a good status,
10508 it has to be a single response for the certificate of the PEM file, and it
10509 has to be valid at the moment of addition. If these rules are not respected
10510 the OCSP Response is ignored and a warning is emitted. In order to identify
10511 which certificate an OCSP Response applies to, the issuer's certificate is
10512 necessary. If the issuer's certificate is not found in the PEM file, it will
10513 be loaded from a file at the same path as the PEM file suffixed by ".issuer"
10514 if it exists otherwise it will fail with an error.
10515
Janusz Dziemidowicz2c701b52015-03-07 23:03:59 +010010516 For each PEM file, haproxy also checks for the presence of file at the same
10517 path suffixed by ".sctl". If such file is found, support for Certificate
10518 Transparency (RFC6962) TLS extension is enabled. The file must contain a
10519 valid Signed Certificate Timestamp List, as described in RFC. File is parsed
10520 to check basic syntax, but no signatures are verified.
10521
yanbzhu6c25e9e2016-01-05 12:52:02 -050010522 There are cases where it is desirable to support multiple key types, e.g. RSA
10523 and ECDSA in the cipher suites offered to the clients. This allows clients
10524 that support EC certificates to be able to use EC ciphers, while
10525 simultaneously supporting older, RSA only clients.
yanbzhud19630c2015-12-14 15:10:25 -050010526
10527 In order to provide this functionality, multiple PEM files, each with a
10528 different key type, are required. To associate these PEM files into a
10529 "cert bundle" that is recognized by haproxy, they must be named in the
10530 following way: All PEM files that are to be bundled must have the same base
10531 name, with a suffix indicating the key type. Currently, three suffixes are
10532 supported: rsa, dsa and ecdsa. For example, if www.example.com has two PEM
10533 files, an RSA file and an ECDSA file, they must be named: "example.pem.rsa"
10534 and "example.pem.ecdsa". The first part of the filename is arbitrary; only the
10535 suffix matters. To load this bundle into haproxy, specify the base name only:
10536
10537 Example : bind :8443 ssl crt example.pem
10538
yanbzhu6c25e9e2016-01-05 12:52:02 -050010539 Note that the suffix is not given to haproxy; this tells haproxy to look for
yanbzhud19630c2015-12-14 15:10:25 -050010540 a cert bundle.
10541
10542 Haproxy will load all PEM files in the bundle at the same time to try to
10543 support multiple key types. PEM files are combined based on Common Name
10544 (CN) and Subject Alternative Name (SAN) to support SNI lookups. This means
10545 that even if you give haproxy a cert bundle, if there are no shared CN/SAN
10546 entries in the certificates in that bundle, haproxy will not be able to
10547 provide multi-cert support.
10548
10549 Assuming bundle in the example above contained the following:
10550
10551 Filename | CN | SAN
10552 -------------------+-----------------+-------------------
10553 example.pem.rsa | www.example.com | rsa.example.com
yanbzhu6c25e9e2016-01-05 12:52:02 -050010554 -------------------+-----------------+-------------------
yanbzhud19630c2015-12-14 15:10:25 -050010555 example.pem.ecdsa | www.example.com | ecdsa.example.com
10556 -------------------+-----------------+-------------------
10557
10558 Users connecting with an SNI of "www.example.com" will be able
10559 to use both RSA and ECDSA cipher suites. Users connecting with an SNI of
10560 "rsa.example.com" will only be able to use RSA cipher suites, and users
10561 connecting with "ecdsa.example.com" will only be able to use ECDSA cipher
Emmanuel Hocdet84e417d2017-08-16 11:33:17 +020010562 suites. With BoringSSL and Openssl >= 1.1.1 multi-cert is natively supported,
10563 no need to bundle certificates. ECDSA certificate will be preferred if client
10564 support it.
yanbzhud19630c2015-12-14 15:10:25 -050010565
10566 If a directory name is given as the <cert> argument, haproxy will
10567 automatically search and load bundled files in that directory.
10568
10569 OSCP files (.ocsp) and issuer files (.issuer) are supported with multi-cert
10570 bundling. Each certificate can have its own .ocsp and .issuer file. At this
10571 time, sctl is not supported in multi-certificate bundling.
10572
Emeric Brunb6dc9342012-09-28 17:55:37 +020010573crt-ignore-err <errors>
Alex Davies0fbf0162013-03-02 16:04:50 +000010574 This setting is only available when support for OpenSSL was built in. Sets a
10575 comma separated list of errorIDs to ignore during verify at depth == 0. If
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010576 set to 'all', all errors are ignored. SSL handshake is not aborted if an error
Alex Davies0fbf0162013-03-02 16:04:50 +000010577 is ignored.
Emeric Brunb6dc9342012-09-28 17:55:37 +020010578
Emmanuel Hocdetfe616562013-01-22 15:31:15 +010010579crt-list <file>
10580 This setting is only available when support for OpenSSL was built in. It
Emmanuel Hocdet98263292016-12-29 18:26:15 +010010581 designates a list of PEM file with an optional ssl configuration and a SNI
10582 filter per certificate, with the following format for each line :
Emmanuel Hocdetfe616562013-01-22 15:31:15 +010010583
Emmanuel Hocdet98263292016-12-29 18:26:15 +010010584 <crtfile> [\[<sslbindconf> ...\]] [[!]<snifilter> ...]
10585
Emmanuel Hocdet174dfe52017-07-28 15:01:05 +020010586 sslbindconf support "npn", "alpn", "verify", "ca-file", "no-ca-names",
10587 crl-file", "ecdhe", "curves", "ciphers" configuration. With BoringSSL
Emmanuel Hocdet84e417d2017-08-16 11:33:17 +020010588 and Openssl >= 1.1.1 "ssl-min-ver" and "ssl-max-ver" are also supported.
Emmanuel Hocdet98263292016-12-29 18:26:15 +010010589 It override the configuration set in bind line for the certificate.
Emmanuel Hocdetfe616562013-01-22 15:31:15 +010010590
Emmanuel Hocdet7c41a1b2013-05-07 20:20:06 +020010591 Wildcards are supported in the SNI filter. Negative filter are also supported,
10592 only useful in combination with a wildcard filter to exclude a particular SNI.
10593 The certificates will be presented to clients who provide a valid TLS Server
10594 Name Indication field matching one of the SNI filters. If no SNI filter is
10595 specified, the CN and alt subjects are used. This directive may be specified
10596 multiple times. See the "crt" option for more information. The default
10597 certificate is still needed to meet OpenSSL expectations. If it is not used,
10598 the 'strict-sni' option may be used.
Emmanuel Hocdetfe616562013-01-22 15:31:15 +010010599
yanbzhu6c25e9e2016-01-05 12:52:02 -050010600 Multi-cert bundling (see "crt") is supported with crt-list, as long as only
Emmanuel Hocdetd294aea2016-05-13 11:14:06 +020010601 the base name is given in the crt-list. SNI filter will do the same work on
Emmanuel Hocdet84e417d2017-08-16 11:33:17 +020010602 all bundled certificates. With BoringSSL and Openssl >= 1.1.1 multi-cert is
10603 natively supported, avoid multi-cert bundling. RSA and ECDSA certificates can
10604 be declared in a row, and set different ssl and filter parameter.
yanbzhud19630c2015-12-14 15:10:25 -050010605
Emmanuel Hocdet98263292016-12-29 18:26:15 +010010606 crt-list file example:
10607 cert1.pem
Emmanuel Hocdet05942112017-02-20 16:11:50 +010010608 cert2.pem [alpn h2,http/1.1]
Emmanuel Hocdet98263292016-12-29 18:26:15 +010010609 certW.pem *.domain.tld !secure.domain.tld
Emmanuel Hocdet05942112017-02-20 16:11:50 +010010610 certS.pem [curves X25519:P-256 ciphers ECDHE-ECDSA-AES256-GCM-SHA384] secure.domain.tld
Emmanuel Hocdet98263292016-12-29 18:26:15 +010010611
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010612defer-accept
10613 Is an optional keyword which is supported only on certain Linux kernels. It
10614 states that a connection will only be accepted once some data arrive on it,
10615 or at worst after the first retransmit. This should be used only on protocols
10616 for which the client talks first (eg: HTTP). It can slightly improve
10617 performance by ensuring that most of the request is already available when
10618 the connection is accepted. On the other hand, it will not be able to detect
10619 connections which don't talk. It is important to note that this option is
10620 broken in all kernels up to 2.6.31, as the connection is never accepted until
10621 the client talks. This can cause issues with front firewalls which would see
10622 an established connection while the proxy will only see it in SYN_RECV. This
10623 option is only supported on TCPv4/TCPv6 sockets and ignored by other ones.
10624
William Lallemandf6975e92017-05-26 17:42:10 +020010625expose-fd listeners
10626 This option is only usable with the stats socket. It gives your stats socket
10627 the capability to pass listeners FD to another HAProxy process.
William Lallemande202b1e2017-06-01 17:38:56 +020010628 During a reload with the master-worker mode, the process is automatically
10629 reexecuted adding -x and one of the stats socket with this option.
William Lallemandf6975e92017-05-26 17:42:10 +020010630 See alors "-x" in the management guide.
10631
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010632force-sslv3
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010633 This option enforces use of SSLv3 only on SSL connections instantiated from
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010634 this listener. SSLv3 is generally less expensive than the TLS counterparts
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010635 for high connection rates. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010636 "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver".
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010637
10638force-tlsv10
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010639 This option enforces use of TLSv1.0 only on SSL connections instantiated from
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010640 this listener. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010641 "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver".
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010642
10643force-tlsv11
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010644 This option enforces use of TLSv1.1 only on SSL connections instantiated from
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010645 this listener. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010646 "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver".
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010647
10648force-tlsv12
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010649 This option enforces use of TLSv1.2 only on SSL connections instantiated from
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010650 this listener. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010651 "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver".
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010652
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020010653force-tlsv13
10654 This option enforces use of TLSv1.3 only on SSL connections instantiated from
10655 this listener. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010656 "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver".
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020010657
Christopher Faulet31af49d2015-06-09 17:29:50 +020010658generate-certificates
10659 This setting is only available when support for OpenSSL was built in. It
10660 enables the dynamic SSL certificates generation. A CA certificate and its
10661 private key are necessary (see 'ca-sign-file'). When HAProxy is configured as
10662 a transparent forward proxy, SSL requests generate errors because of a common
10663 name mismatch on the certificate presented to the client. With this option
10664 enabled, HAProxy will try to forge a certificate using the SNI hostname
10665 indicated by the client. This is done only if no certificate matches the SNI
10666 hostname (see 'crt-list'). If an error occurs, the default certificate is
10667 used, else the 'strict-sni' option is set.
10668 It can also be used when HAProxy is configured as a reverse proxy to ease the
10669 deployment of an architecture with many backends.
10670
10671 Creating a SSL certificate is an expensive operation, so a LRU cache is used
10672 to store forged certificates (see 'tune.ssl.ssl-ctx-cache-size'). It
10673 increases the HAProxy's memroy footprint to reduce latency when the same
10674 certificate is used many times.
10675
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010676gid <gid>
10677 Sets the group of the UNIX sockets to the designated system gid. It can also
10678 be set by default in the global section's "unix-bind" statement. Note that
10679 some platforms simply ignore this. This setting is equivalent to the "group"
10680 setting except that the group ID is used instead of its name. This setting is
10681 ignored by non UNIX sockets.
10682
10683group <group>
10684 Sets the group of the UNIX sockets to the designated system group. It can
10685 also be set by default in the global section's "unix-bind" statement. Note
10686 that some platforms simply ignore this. This setting is equivalent to the
10687 "gid" setting except that the group name is used instead of its gid. This
10688 setting is ignored by non UNIX sockets.
10689
10690id <id>
10691 Fixes the socket ID. By default, socket IDs are automatically assigned, but
10692 sometimes it is more convenient to fix them to ease monitoring. This value
10693 must be strictly positive and unique within the listener/frontend. This
10694 option can only be used when defining only a single socket.
10695
10696interface <interface>
Lukas Tribusfce2e962013-02-12 22:13:19 +010010697 Restricts the socket to a specific interface. When specified, only packets
10698 received from that particular interface are processed by the socket. This is
10699 currently only supported on Linux. The interface must be a primary system
10700 interface, not an aliased interface. It is also possible to bind multiple
10701 frontends to the same address if they are bound to different interfaces. Note
10702 that binding to a network interface requires root privileges. This parameter
10703 is only compatible with TCPv4/TCPv6 sockets.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010704
Willy Tarreauabb175f2012-09-24 12:43:26 +020010705level <level>
10706 This setting is used with the stats sockets only to restrict the nature of
10707 the commands that can be issued on the socket. It is ignored by other
10708 sockets. <level> can be one of :
10709 - "user" is the least privileged level ; only non-sensitive stats can be
10710 read, and no change is allowed. It would make sense on systems where it
10711 is not easy to restrict access to the socket.
10712 - "operator" is the default level and fits most common uses. All data can
10713 be read, and only non-sensitive changes are permitted (eg: clear max
10714 counters).
10715 - "admin" should be used with care, as everything is permitted (eg: clear
10716 all counters).
10717
Andjelko Iharosc4df59e2017-07-20 11:59:48 +020010718severity-output <format>
10719 This setting is used with the stats sockets only to configure severity
10720 level output prepended to informational feedback messages. Severity
10721 level of messages can range between 0 and 7, conforming to syslog
10722 rfc5424. Valid and successful socket commands requesting data
10723 (i.e. "show map", "get acl foo" etc.) will never have a severity level
10724 prepended. It is ignored by other sockets. <format> can be one of :
10725 - "none" (default) no severity level is prepended to feedback messages.
10726 - "number" severity level is prepended as a number.
10727 - "string" severity level is prepended as a string following the
10728 rfc5424 convention.
10729
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010730maxconn <maxconn>
10731 Limits the sockets to this number of concurrent connections. Extraneous
10732 connections will remain in the system's backlog until a connection is
10733 released. If unspecified, the limit will be the same as the frontend's
10734 maxconn. Note that in case of port ranges or multiple addresses, the same
10735 value will be applied to each socket. This setting enables different
10736 limitations on expensive sockets, for instance SSL entries which may easily
10737 eat all memory.
10738
10739mode <mode>
10740 Sets the octal mode used to define access permissions on the UNIX socket. It
10741 can also be set by default in the global section's "unix-bind" statement.
10742 Note that some platforms simply ignore this. This setting is ignored by non
10743 UNIX sockets.
10744
10745mss <maxseg>
10746 Sets the TCP Maximum Segment Size (MSS) value to be advertised on incoming
10747 connections. This can be used to force a lower MSS for certain specific
10748 ports, for instance for connections passing through a VPN. Note that this
10749 relies on a kernel feature which is theoretically supported under Linux but
10750 was buggy in all versions prior to 2.6.28. It may or may not work on other
10751 operating systems. It may also not change the advertised value but change the
10752 effective size of outgoing segments. The commonly advertised value for TCPv4
10753 over Ethernet networks is 1460 = 1500(MTU) - 40(IP+TCP). If this value is
10754 positive, it will be used as the advertised MSS. If it is negative, it will
10755 indicate by how much to reduce the incoming connection's advertised MSS for
10756 outgoing segments. This parameter is only compatible with TCP v4/v6 sockets.
10757
10758name <name>
10759 Sets an optional name for these sockets, which will be reported on the stats
10760 page.
10761
Willy Tarreaud72f0f32015-10-13 14:50:22 +020010762namespace <name>
10763 On Linux, it is possible to specify which network namespace a socket will
10764 belong to. This directive makes it possible to explicitly bind a listener to
10765 a namespace different from the default one. Please refer to your operating
10766 system's documentation to find more details about network namespaces.
10767
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010768nice <nice>
10769 Sets the 'niceness' of connections initiated from the socket. Value must be
10770 in the range -1024..1024 inclusive, and defaults to zero. Positive values
10771 means that such connections are more friendly to others and easily offer
10772 their place in the scheduler. On the opposite, negative values mean that
10773 connections want to run with a higher priority than others. The difference
10774 only happens under high loads when the system is close to saturation.
10775 Negative values are appropriate for low-latency or administration services,
10776 and high values are generally recommended for CPU intensive tasks such as SSL
10777 processing or bulk transfers which are less sensible to latency. For example,
10778 it may make sense to use a positive value for an SMTP socket and a negative
10779 one for an RDP socket.
10780
Emmanuel Hocdet174dfe52017-07-28 15:01:05 +020010781no-ca-names
10782 This setting is only available when support for OpenSSL was built in. It
10783 prevents from send CA names in server hello message when ca-file is used.
10784
Emeric Brun9b3009b2012-10-05 11:55:06 +020010785no-sslv3
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010786 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010787 disables support for SSLv3 on any sockets instantiated from the listener when
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010788 SSL is supported. Note that SSLv2 is forced disabled in the code and cannot
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010789 be enabled using any configuration option. This option is also available on
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010790 global statement "ssl-default-bind-options". Use "ssl-min-ver" and
10791 "ssl-max-ver" instead.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010792
Emeric Brun90ad8722012-10-02 14:00:59 +020010793no-tls-tickets
10794 This setting is only available when support for OpenSSL was built in. It
10795 disables the stateless session resumption (RFC 5077 TLS Ticket
10796 extension) and force to use stateful session resumption. Stateless
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010797 session resumption is more expensive in CPU usage. This option is also
10798 available on global statement "ssl-default-bind-options".
Emeric Brun90ad8722012-10-02 14:00:59 +020010799
Emeric Brun9b3009b2012-10-05 11:55:06 +020010800no-tlsv10
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010801 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010802 disables support for TLSv1.0 on any sockets instantiated from the listener
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010803 when SSL is supported. Note that SSLv2 is forced disabled in the code and
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010804 cannot be enabled using any configuration option. This option is also
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010805 available on global statement "ssl-default-bind-options". Use "ssl-min-ver"
10806 and "ssl-max-ver" instead.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010807
Emeric Brun9b3009b2012-10-05 11:55:06 +020010808no-tlsv11
Emeric Brunf5da4932012-09-28 19:42:54 +020010809 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010810 disables support for TLSv1.1 on any sockets instantiated from the listener
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010811 when SSL is supported. Note that SSLv2 is forced disabled in the code and
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010812 cannot be enabled using any configuration option. This option is also
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010813 available on global statement "ssl-default-bind-options". Use "ssl-min-ver"
10814 and "ssl-max-ver" instead.
Emeric Brunf5da4932012-09-28 19:42:54 +020010815
Emeric Brun9b3009b2012-10-05 11:55:06 +020010816no-tlsv12
Emeric Brunf5da4932012-09-28 19:42:54 +020010817 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010818 disables support for TLSv1.2 on any sockets instantiated from the listener
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010819 when SSL is supported. Note that SSLv2 is forced disabled in the code and
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010820 cannot be enabled using any configuration option. This option is also
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010821 available on global statement "ssl-default-bind-options". Use "ssl-min-ver"
10822 and "ssl-max-ver" instead.
Emeric Brunf5da4932012-09-28 19:42:54 +020010823
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020010824no-tlsv13
10825 This setting is only available when support for OpenSSL was built in. It
10826 disables support for TLSv1.3 on any sockets instantiated from the listener
10827 when SSL is supported. Note that SSLv2 is forced disabled in the code and
10828 cannot be enabled using any configuration option. This option is also
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010829 available on global statement "ssl-default-bind-options". Use "ssl-min-ver"
10830 and "ssl-max-ver" instead.
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020010831
Willy Tarreau6c9a3d52012-10-18 18:57:14 +020010832npn <protocols>
10833 This enables the NPN TLS extension and advertises the specified protocol list
10834 as supported on top of NPN. The protocol list consists in a comma-delimited
10835 list of protocol names, for instance: "http/1.1,http/1.0" (without quotes).
10836 This requires that the SSL library is build with support for TLS extensions
Willy Tarreauab861d32013-04-02 02:30:41 +020010837 enabled (check with haproxy -vv). Note that the NPN extension has been
10838 replaced with the ALPN extension (see the "alpn" keyword).
Willy Tarreau6c9a3d52012-10-18 18:57:14 +020010839
Lukas Tribus53ae85c2017-05-04 15:45:40 +000010840prefer-client-ciphers
10841 Use the client's preference when selecting the cipher suite, by default
10842 the server's preference is enforced. This option is also available on
10843 global statement "ssl-default-bind-options".
10844
Christopher Fauletff4121f2017-11-22 16:38:49 +010010845process [ all | odd | even | <process_num>[-[<process_num>]] ]
Willy Tarreau6ae1ba62014-05-07 19:01:58 +020010846 This restricts the list of processes on which this listener is allowed to
10847 run. It does not enforce any process but eliminates those which do not match.
10848 If the frontend uses a "bind-process" setting, the intersection between the
10849 two is applied. If in the end the listener is not allowed to run on any
10850 remaining process, a warning is emitted, and the listener will either run on
10851 the first process of the listener if a single process was specified, or on
10852 all of its processes if multiple processes were specified. For the unlikely
Christopher Fauletff4121f2017-11-22 16:38:49 +010010853 case where several ranges are needed, this directive may be repeated. Ranges
10854 can be partially defined. The higher bound can be omitted. In such case, it
10855 is replaced by the corresponding maximum value. The main purpose of this
10856 directive is to be used with the stats sockets and have one different socket
10857 per process. The second purpose is to have multiple bind lines sharing the
10858 same IP:port but not the same process in a listener, so that the system can
10859 distribute the incoming connections into multiple queues and allow a smoother
10860 inter-process load balancing. Currently Linux 3.9 and above is known for
10861 supporting this. See also "bind-process" and "nbproc".
Willy Tarreau6ae1ba62014-05-07 19:01:58 +020010862
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010863ssl
10864 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010865 enables SSL deciphering on connections instantiated from this listener. A
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010866 certificate is necessary (see "crt" above). All contents in the buffers will
10867 appear in clear text, so that ACLs and HTTP processing will only have access
Emmanuel Hocdetbd695fe2017-05-15 15:53:41 +020010868 to deciphered contents. SSLv3 is disabled per default, use "ssl-min-ver SSLv3"
10869 to enable it.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010870
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010871ssl-max-ver [ SSLv3 | TLSv1.0 | TLSv1.1 | TLSv1.2 | TLSv1.3 ]
10872 This option enforces use of <version> or lower on SSL connections instantiated
10873 from this listener. This option is also available on global statement
10874 "ssl-default-bind-options". See also "ssl-min-ver".
10875
10876ssl-min-ver [ SSLv3 | TLSv1.0 | TLSv1.1 | TLSv1.2 | TLSv1.3 ]
10877 This option enforces use of <version> or upper on SSL connections instantiated
10878 from this listener. This option is also available on global statement
10879 "ssl-default-bind-options". See also "ssl-max-ver".
10880
Emmanuel Hocdet65623372013-01-24 17:17:15 +010010881strict-sni
10882 This setting is only available when support for OpenSSL was built in. The
10883 SSL/TLS negotiation is allow only if the client provided an SNI which match
10884 a certificate. The default certificate is not used.
10885 See the "crt" option for more information.
10886
Willy Tarreau2af207a2015-02-04 00:45:58 +010010887tcp-ut <delay>
Tim Düsterhus4896c442016-11-29 02:15:19 +010010888 Sets the TCP User Timeout for all incoming connections instantiated from this
Willy Tarreau2af207a2015-02-04 00:45:58 +010010889 listening socket. This option is available on Linux since version 2.6.37. It
10890 allows haproxy to configure a timeout for sockets which contain data not
Tim Düsterhus4896c442016-11-29 02:15:19 +010010891 receiving an acknowledgement for the configured delay. This is especially
Willy Tarreau2af207a2015-02-04 00:45:58 +010010892 useful on long-lived connections experiencing long idle periods such as
10893 remote terminals or database connection pools, where the client and server
10894 timeouts must remain high to allow a long period of idle, but where it is
10895 important to detect that the client has disappeared in order to release all
10896 resources associated with its connection (and the server's session). The
10897 argument is a delay expressed in milliseconds by default. This only works
10898 for regular TCP connections, and is ignored for other protocols.
10899
Willy Tarreau1c862c52012-10-05 16:21:00 +020010900tfo
Lukas Tribus0defb902013-02-13 23:35:39 +010010901 Is an optional keyword which is supported only on Linux kernels >= 3.7. It
Willy Tarreau1c862c52012-10-05 16:21:00 +020010902 enables TCP Fast Open on the listening socket, which means that clients which
10903 support this feature will be able to send a request and receive a response
10904 during the 3-way handshake starting from second connection, thus saving one
10905 round-trip after the first connection. This only makes sense with protocols
10906 that use high connection rates and where each round trip matters. This can
10907 possibly cause issues with many firewalls which do not accept data on SYN
10908 packets, so this option should only be enabled once well tested. This option
Lukas Tribus0999f762013-04-02 16:43:24 +020010909 is only supported on TCPv4/TCPv6 sockets and ignored by other ones. You may
10910 need to build HAProxy with USE_TFO=1 if your libc doesn't define
10911 TCP_FASTOPEN.
Willy Tarreau1c862c52012-10-05 16:21:00 +020010912
Nenad Merdanovic188ad3e2015-02-27 19:56:50 +010010913tls-ticket-keys <keyfile>
10914 Sets the TLS ticket keys file to load the keys from. The keys need to be 48
10915 bytes long, encoded with base64 (ex. openssl rand -base64 48). Number of keys
10916 is specified by the TLS_TICKETS_NO build option (default 3) and at least as
10917 many keys need to be present in the file. Last TLS_TICKETS_NO keys will be
10918 used for decryption and the penultimate one for encryption. This enables easy
10919 key rotation by just appending new key to the file and reloading the process.
10920 Keys must be periodically rotated (ex. every 12h) or Perfect Forward Secrecy
10921 is compromised. It is also a good idea to keep the keys off any permanent
10922 storage such as hard drives (hint: use tmpfs and don't swap those files).
10923 Lifetime hint can be changed using tune.ssl.timeout.
10924
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010925transparent
10926 Is an optional keyword which is supported only on certain Linux kernels. It
10927 indicates that the addresses will be bound even if they do not belong to the
10928 local machine, and that packets targeting any of these addresses will be
10929 intercepted just as if the addresses were locally configured. This normally
10930 requires that IP forwarding is enabled. Caution! do not use this with the
10931 default address '*', as it would redirect any traffic for the specified port.
10932 This keyword is available only when HAProxy is built with USE_LINUX_TPROXY=1.
10933 This parameter is only compatible with TCPv4 and TCPv6 sockets, depending on
10934 kernel version. Some distribution kernels include backports of the feature,
10935 so check for support with your vendor.
10936
Willy Tarreau77e3af92012-11-24 15:07:23 +010010937v4v6
10938 Is an optional keyword which is supported only on most recent systems
10939 including Linux kernels >= 2.4.21. It is used to bind a socket to both IPv4
10940 and IPv6 when it uses the default address. Doing so is sometimes necessary
10941 on systems which bind to IPv6 only by default. It has no effect on non-IPv6
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010942 sockets, and is overridden by the "v6only" option.
Willy Tarreau77e3af92012-11-24 15:07:23 +010010943
Willy Tarreau9b6700f2012-11-24 11:55:28 +010010944v6only
10945 Is an optional keyword which is supported only on most recent systems
10946 including Linux kernels >= 2.4.21. It is used to bind a socket to IPv6 only
10947 when it uses the default address. Doing so is sometimes preferred to doing it
Willy Tarreau77e3af92012-11-24 15:07:23 +010010948 system-wide as it is per-listener. It has no effect on non-IPv6 sockets and
10949 has precedence over the "v4v6" option.
Willy Tarreau9b6700f2012-11-24 11:55:28 +010010950
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010951uid <uid>
10952 Sets the owner of the UNIX sockets to the designated system uid. It can also
10953 be set by default in the global section's "unix-bind" statement. Note that
10954 some platforms simply ignore this. This setting is equivalent to the "user"
10955 setting except that the user numeric ID is used instead of its name. This
10956 setting is ignored by non UNIX sockets.
10957
10958user <user>
10959 Sets the owner of the UNIX sockets to the designated system user. It can also
10960 be set by default in the global section's "unix-bind" statement. Note that
10961 some platforms simply ignore this. This setting is equivalent to the "uid"
10962 setting except that the user name is used instead of its uid. This setting is
10963 ignored by non UNIX sockets.
10964
Emeric Brun1a073b42012-09-28 17:07:34 +020010965verify [none|optional|required]
10966 This setting is only available when support for OpenSSL was built in. If set
10967 to 'none', client certificate is not requested. This is the default. In other
10968 cases, a client certificate is requested. If the client does not provide a
10969 certificate after the request and if 'verify' is set to 'required', then the
10970 handshake is aborted, while it would have succeeded if set to 'optional'. The
Emeric Brunfd33a262012-10-11 16:28:27 +020010971 certificate provided by the client is always verified using CAs from
10972 'ca-file' and optional CRLs from 'crl-file'. On verify failure the handshake
10973 is aborted, regardless of the 'verify' option, unless the error code exactly
10974 matches one of those listed with 'ca-ignore-err' or 'crt-ignore-err'.
Willy Tarreau4a5cade2012-04-05 21:09:48 +020010975
Willy Tarreaub6205fd2012-09-24 12:27:33 +0200109765.2. Server and default-server options
Cyril Bontéf0c60612010-02-06 14:44:47 +010010977------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +020010978
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +010010979The "server" and "default-server" keywords support a certain number of settings
10980which are all passed as arguments on the server line. The order in which those
10981arguments appear does not count, and they are all optional. Some of those
10982settings are single words (booleans) while others expect one or several values
10983after them. In this case, the values must immediately follow the setting name.
10984Except default-server, all those settings must be specified after the server's
10985address if they are used:
Willy Tarreau6a06a402007-07-15 20:15:28 +020010986
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010987 server <name> <address>[:port] [settings ...]
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +010010988 default-server [settings ...]
Willy Tarreau6a06a402007-07-15 20:15:28 +020010989
Frédéric Lécailled2376272017-03-21 18:52:12 +010010990Note that all these settings are supported both by "server" and "default-server"
10991keywords, except "id" which is only supported by "server".
10992
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010993The currently supported settings are the following ones.
Willy Tarreau0ba27502007-12-24 16:55:16 +010010994
Willy Tarreauceb4ac92012-04-28 00:41:46 +020010995addr <ipv4|ipv6>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010996 Using the "addr" parameter, it becomes possible to use a different IP address
Baptiste Assmann13f83532016-03-06 23:14:36 +010010997 to send health-checks or to probe the agent-check. On some servers, it may be
10998 desirable to dedicate an IP address to specific component able to perform
10999 complex tests which are more suitable to health-checks than the application.
11000 This parameter is ignored if the "check" parameter is not set. See also the
11001 "port" parameter.
Willy Tarreau6a06a402007-07-15 20:15:28 +020011002
Simon Hormand60d6912013-11-25 10:46:36 +090011003agent-check
11004 Enable an auxiliary agent check which is run independently of a regular
Willy Tarreau81f5d942013-12-09 20:51:51 +010011005 health check. An agent health check is performed by making a TCP connection
11006 to the port set by the "agent-port" parameter and reading an ASCII string.
11007 The string is made of a series of words delimited by spaces, tabs or commas
11008 in any order, optionally terminated by '\r' and/or '\n', each consisting of :
Simon Hormand60d6912013-11-25 10:46:36 +090011009
Willy Tarreau81f5d942013-12-09 20:51:51 +010011010 - An ASCII representation of a positive integer percentage, e.g. "75%".
Simon Hormand60d6912013-11-25 10:46:36 +090011011 Values in this format will set the weight proportional to the initial
Willy Tarreauc5af3a62014-10-07 15:27:33 +020011012 weight of a server as configured when haproxy starts. Note that a zero
11013 weight is reported on the stats page as "DRAIN" since it has the same
11014 effect on the server (it's removed from the LB farm).
Simon Hormand60d6912013-11-25 10:46:36 +090011015
Nenad Merdanovic174dd372016-04-24 23:10:06 +020011016 - The string "maxconn:" followed by an integer (no space between). Values in
11017 this format will set the maxconn of a server. The maximum number of
11018 connections advertised needs to be multipled by the number of load balancers
11019 and different backends that use this health check to get the total number
11020 of connections the server might receive. Example: maxconn:30
11021
Willy Tarreau81f5d942013-12-09 20:51:51 +010011022 - The word "ready". This will turn the server's administrative state to the
11023 READY mode, thus cancelling any DRAIN or MAINT state
Simon Hormand60d6912013-11-25 10:46:36 +090011024
Willy Tarreau81f5d942013-12-09 20:51:51 +010011025 - The word "drain". This will turn the server's administrative state to the
11026 DRAIN mode, thus it will not accept any new connections other than those
11027 that are accepted via persistence.
Simon Hormand60d6912013-11-25 10:46:36 +090011028
Willy Tarreau81f5d942013-12-09 20:51:51 +010011029 - The word "maint". This will turn the server's administrative state to the
11030 MAINT mode, thus it will not accept any new connections at all, and health
11031 checks will be stopped.
Simon Hormand60d6912013-11-25 10:46:36 +090011032
Willy Tarreau81f5d942013-12-09 20:51:51 +010011033 - The words "down", "failed", or "stopped", optionally followed by a
11034 description string after a sharp ('#'). All of these mark the server's
11035 operating state as DOWN, but since the word itself is reported on the stats
11036 page, the difference allows an administrator to know if the situation was
11037 expected or not : the service may intentionally be stopped, may appear up
11038 but fail some validity tests, or may be seen as down (eg: missing process,
11039 or port not responding).
Simon Hormand60d6912013-11-25 10:46:36 +090011040
Willy Tarreau81f5d942013-12-09 20:51:51 +010011041 - The word "up" sets back the server's operating state as UP if health checks
11042 also report that the service is accessible.
Simon Hormand60d6912013-11-25 10:46:36 +090011043
Willy Tarreau81f5d942013-12-09 20:51:51 +010011044 Parameters which are not advertised by the agent are not changed. For
11045 example, an agent might be designed to monitor CPU usage and only report a
11046 relative weight and never interact with the operating status. Similarly, an
11047 agent could be designed as an end-user interface with 3 radio buttons
11048 allowing an administrator to change only the administrative state. However,
11049 it is important to consider that only the agent may revert its own actions,
11050 so if a server is set to DRAIN mode or to DOWN state using the agent, the
11051 agent must implement the other equivalent actions to bring the service into
11052 operations again.
Simon Hormand60d6912013-11-25 10:46:36 +090011053
Simon Horman2f1f9552013-11-25 10:46:37 +090011054 Failure to connect to the agent is not considered an error as connectivity
11055 is tested by the regular health check which is enabled by the "check"
Willy Tarreau81f5d942013-12-09 20:51:51 +010011056 parameter. Warning though, it is not a good idea to stop an agent after it
11057 reports "down", since only an agent reporting "up" will be able to turn the
11058 server up again. Note that the CLI on the Unix stats socket is also able to
Willy Tarreau989222a2016-01-15 10:26:26 +010011059 force an agent's result in order to work around a bogus agent if needed.
Simon Horman2f1f9552013-11-25 10:46:37 +090011060
Willy Tarreau81f5d942013-12-09 20:51:51 +010011061 Requires the "agent-port" parameter to be set. See also the "agent-inter"
Frédéric Lécailled2376272017-03-21 18:52:12 +010011062 and "no-agent-check" parameters.
Simon Hormand60d6912013-11-25 10:46:36 +090011063
James Brown55f9ff12015-10-21 18:19:05 -070011064agent-send <string>
11065 If this option is specified, haproxy will send the given string (verbatim)
11066 to the agent server upon connection. You could, for example, encode
11067 the backend name into this string, which would enable your agent to send
11068 different responses based on the backend. Make sure to include a '\n' if
11069 you want to terminate your request with a newline.
11070
Simon Hormand60d6912013-11-25 10:46:36 +090011071agent-inter <delay>
11072 The "agent-inter" parameter sets the interval between two agent checks
11073 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
11074
11075 Just as with every other time-based parameter, it may be entered in any
11076 other explicit unit among { us, ms, s, m, h, d }. The "agent-inter"
11077 parameter also serves as a timeout for agent checks "timeout check" is
11078 not set. In order to reduce "resonance" effects when multiple servers are
11079 hosted on the same hardware, the agent and health checks of all servers
11080 are started with a small time offset between them. It is also possible to
11081 add some random noise in the agent and health checks interval using the
11082 global "spread-checks" keyword. This makes sense for instance when a lot
11083 of backends use the same servers.
11084
11085 See also the "agent-check" and "agent-port" parameters.
11086
Misiek768d8602017-01-09 09:52:43 +010011087agent-addr <addr>
11088 The "agent-addr" parameter sets address for agent check.
11089
11090 You can offload agent-check to another target, so you can make single place
11091 managing status and weights of servers defined in haproxy in case you can't
11092 make self-aware and self-managing services. You can specify both IP or
11093 hostname, it will be resolved.
11094
Simon Hormand60d6912013-11-25 10:46:36 +090011095agent-port <port>
11096 The "agent-port" parameter sets the TCP port used for agent checks.
11097
11098 See also the "agent-check" and "agent-inter" parameters.
11099
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011100backup
11101 When "backup" is present on a server line, the server is only used in load
11102 balancing when all other non-backup servers are unavailable. Requests coming
11103 with a persistence cookie referencing the server will always be served
11104 though. By default, only the first operational backup server is used, unless
Frédéric Lécailled2376272017-03-21 18:52:12 +010011105 the "allbackups" option is set in the backend. See also the "no-backup" and
11106 "allbackups" options.
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011107
Emeric Brunef42d922012-10-11 16:11:36 +020011108ca-file <cafile>
11109 This setting is only available when support for OpenSSL was built in. It
11110 designates a PEM file from which to load CA certificates used to verify
11111 server's certificate.
11112
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011113check
11114 This option enables health checks on the server. By default, a server is
Patrick Mézardb7aeec62012-01-22 16:01:22 +010011115 always considered available. If "check" is set, the server is available when
11116 accepting periodic TCP connections, to ensure that it is really able to serve
11117 requests. The default address and port to send the tests to are those of the
11118 server, and the default source is the same as the one defined in the
11119 backend. It is possible to change the address using the "addr" parameter, the
11120 port using the "port" parameter, the source address using the "source"
11121 address, and the interval and timers using the "inter", "rise" and "fall"
Simon Hormanafc47ee2013-11-25 10:46:35 +090011122 parameters. The request method is define in the backend using the "httpchk",
11123 "smtpchk", "mysql-check", "pgsql-check" and "ssl-hello-chk" options. Please
Frédéric Lécailled2376272017-03-21 18:52:12 +010011124 refer to those options and parameters for more information. See also
11125 "no-check" option.
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011126
Willy Tarreau6c16adc2012-10-05 00:04:16 +020011127check-send-proxy
11128 This option forces emission of a PROXY protocol line with outgoing health
11129 checks, regardless of whether the server uses send-proxy or not for the
11130 normal traffic. By default, the PROXY protocol is enabled for health checks
11131 if it is already enabled for normal traffic and if no "port" nor "addr"
11132 directive is present. However, if such a directive is present, the
11133 "check-send-proxy" option needs to be used to force the use of the
11134 protocol. See also the "send-proxy" option for more information.
11135
Olivier Houchard9130a962017-10-17 17:33:43 +020011136check-sni
11137 This option allows you to specify the SNI to be used when doing health checks
11138 over SSL.
11139
Willy Tarreau763a95b2012-10-04 23:15:39 +020011140check-ssl
11141 This option forces encryption of all health checks over SSL, regardless of
11142 whether the server uses SSL or not for the normal traffic. This is generally
11143 used when an explicit "port" or "addr" directive is specified and SSL health
11144 checks are not inherited. It is important to understand that this option
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030011145 inserts an SSL transport layer below the checks, so that a simple TCP connect
Willy Tarreau763a95b2012-10-04 23:15:39 +020011146 check becomes an SSL connect, which replaces the old ssl-hello-chk. The most
11147 common use is to send HTTPS checks by combining "httpchk" with SSL checks.
11148 All SSL settings are common to health checks and traffic (eg: ciphers).
Frédéric Lécailled2376272017-03-21 18:52:12 +010011149 See the "ssl" option for more information and "no-check-ssl" to disable
11150 this option.
Willy Tarreau763a95b2012-10-04 23:15:39 +020011151
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011152ciphers <ciphers>
11153 This option sets the string describing the list of cipher algorithms that is
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030011154 is negotiated during the SSL/TLS handshake with the server. The format of the
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011155 string is defined in "man 1 ciphers". When SSL is used to communicate with
11156 servers on the local network, it is common to see a weaker set of algorithms
11157 than what is used over the internet. Doing so reduces CPU usage on both the
11158 server and haproxy while still keeping it compatible with deployed software.
11159 Some algorithms such as RC4-SHA1 are reasonably cheap. If no security at all
11160 is needed and just connectivity, using DES can be appropriate.
11161
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011162cookie <value>
11163 The "cookie" parameter sets the cookie value assigned to the server to
11164 <value>. This value will be checked in incoming requests, and the first
11165 operational server possessing the same value will be selected. In return, in
11166 cookie insertion or rewrite modes, this value will be assigned to the cookie
11167 sent to the client. There is nothing wrong in having several servers sharing
11168 the same cookie value, and it is in fact somewhat common between normal and
11169 backup servers. See also the "cookie" keyword in backend section.
11170
Emeric Brunef42d922012-10-11 16:11:36 +020011171crl-file <crlfile>
11172 This setting is only available when support for OpenSSL was built in. It
11173 designates a PEM file from which to load certificate revocation list used
11174 to verify server's certificate.
11175
Emeric Bruna7aa3092012-10-26 12:58:00 +020011176crt <cert>
11177 This setting is only available when support for OpenSSL was built in.
11178 It designates a PEM file from which to load both a certificate and the
11179 associated private key. This file can be built by concatenating both PEM
11180 files into one. This certificate will be sent if the server send a client
11181 certificate request.
11182
Willy Tarreau96839092010-03-29 10:02:24 +020011183disabled
11184 The "disabled" keyword starts the server in the "disabled" state. That means
11185 that it is marked down in maintenance mode, and no connection other than the
11186 ones allowed by persist mode will reach it. It is very well suited to setup
11187 new servers, because normal traffic will never reach them, while it is still
11188 possible to test the service by making use of the force-persist mechanism.
Frédéric Lécailled2376272017-03-21 18:52:12 +010011189 See also "enabled" setting.
Willy Tarreau96839092010-03-29 10:02:24 +020011190
Frédéric Lécailled2376272017-03-21 18:52:12 +010011191enabled
11192 This option may be used as 'server' setting to reset any 'disabled'
11193 setting which would have been inherited from 'default-server' directive as
11194 default value.
11195 It may also be used as 'default-server' setting to reset any previous
11196 'default-server' 'disabled' setting.
Willy Tarreau96839092010-03-29 10:02:24 +020011197
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011198error-limit <count>
Willy Tarreau983e01e2010-01-11 18:42:06 +010011199 If health observing is enabled, the "error-limit" parameter specifies the
11200 number of consecutive errors that triggers event selected by the "on-error"
11201 option. By default it is set to 10 consecutive errors.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010011202
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011203 See also the "check", "error-limit" and "on-error".
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010011204
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011205fall <count>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011206 The "fall" parameter states that a server will be considered as dead after
11207 <count> consecutive unsuccessful health checks. This value defaults to 3 if
11208 unspecified. See also the "check", "inter" and "rise" parameters.
11209
Emeric Brun8694b9a2012-10-05 14:39:07 +020011210force-sslv3
11211 This option enforces use of SSLv3 only when SSL is used to communicate with
11212 the server. SSLv3 is generally less expensive than the TLS counterparts for
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011213 high connection rates. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011214 "ssl-default-server-options". See also "ssl-min-ver" and ssl-max-ver".
Emeric Brun8694b9a2012-10-05 14:39:07 +020011215
11216force-tlsv10
11217 This option enforces use of TLSv1.0 only when SSL is used to communicate with
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011218 the server. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011219 "ssl-default-server-options". See also "ssl-min-ver" and ssl-max-ver".
Emeric Brun8694b9a2012-10-05 14:39:07 +020011220
11221force-tlsv11
11222 This option enforces use of TLSv1.1 only when SSL is used to communicate with
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011223 the server. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011224 "ssl-default-server-options". See also "ssl-min-ver" and ssl-max-ver".
Emeric Brun8694b9a2012-10-05 14:39:07 +020011225
11226force-tlsv12
11227 This option enforces use of TLSv1.2 only when SSL is used to communicate with
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011228 the server. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011229 "ssl-default-server-options". See also "ssl-min-ver" and ssl-max-ver".
Emeric Brun8694b9a2012-10-05 14:39:07 +020011230
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020011231force-tlsv13
11232 This option enforces use of TLSv1.3 only when SSL is used to communicate with
11233 the server. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011234 "ssl-default-server-options". See also "ssl-min-ver" and ssl-max-ver".
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020011235
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011236id <value>
Willy Tarreau53fb4ae2009-10-04 23:04:08 +020011237 Set a persistent ID for the server. This ID must be positive and unique for
11238 the proxy. An unused ID will automatically be assigned if unset. The first
11239 assigned value will be 1. This ID is currently only returned in statistics.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011240
Willy Tarreau6a031d12016-11-07 19:42:35 +010011241init-addr {last | libc | none | <ip>},[...]*
11242 Indicate in what order the server's address should be resolved upon startup
11243 if it uses an FQDN. Attempts are made to resolve the address by applying in
11244 turn each of the methods mentionned in the comma-delimited list. The first
11245 method which succeeds is used. If the end of the list is reached without
11246 finding a working method, an error is thrown. Method "last" suggests to pick
11247 the address which appears in the state file (see "server-state-file"). Method
11248 "libc" uses the libc's internal resolver (gethostbyname() or getaddrinfo()
11249 depending on the operating system and build options). Method "none"
11250 specifically indicates that the server should start without any valid IP
11251 address in a down state. It can be useful to ignore some DNS issues upon
11252 startup, waiting for the situation to get fixed later. Finally, an IP address
11253 (IPv4 or IPv6) may be provided. It can be the currently known address of the
11254 server (eg: filled by a configuration generator), or the address of a dummy
11255 server used to catch old sessions and present them with a decent error
11256 message for example. When the "first" load balancing algorithm is used, this
11257 IP address could point to a fake server used to trigger the creation of new
11258 instances on the fly. This option defaults to "last,libc" indicating that the
11259 previous address found in the state file (if any) is used first, otherwise
11260 the libc's resolver is used. This ensures continued compatibility with the
11261 historic behaviour.
11262
11263 Example:
11264 defaults
11265 # never fail on address resolution
11266 default-server init-addr last,libc,none
11267
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011268inter <delay>
11269fastinter <delay>
11270downinter <delay>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011271 The "inter" parameter sets the interval between two consecutive health checks
11272 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
11273 It is also possible to use "fastinter" and "downinter" to optimize delays
11274 between checks depending on the server state :
11275
Pieter Baauw44fc9df2015-09-17 21:30:46 +020011276 Server state | Interval used
11277 ----------------------------------------+----------------------------------
11278 UP 100% (non-transitional) | "inter"
11279 ----------------------------------------+----------------------------------
11280 Transitionally UP (going down "fall"), | "fastinter" if set,
11281 Transitionally DOWN (going up "rise"), | "inter" otherwise.
11282 or yet unchecked. |
11283 ----------------------------------------+----------------------------------
11284 DOWN 100% (non-transitional) | "downinter" if set,
11285 | "inter" otherwise.
11286 ----------------------------------------+----------------------------------
Willy Tarreaud72758d2010-01-12 10:42:19 +010011287
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011288 Just as with every other time-based parameter, they can be entered in any
11289 other explicit unit among { us, ms, s, m, h, d }. The "inter" parameter also
11290 serves as a timeout for health checks sent to servers if "timeout check" is
11291 not set. In order to reduce "resonance" effects when multiple servers are
Simon Hormand60d6912013-11-25 10:46:36 +090011292 hosted on the same hardware, the agent and health checks of all servers
11293 are started with a small time offset between them. It is also possible to
11294 add some random noise in the agent and health checks interval using the
11295 global "spread-checks" keyword. This makes sense for instance when a lot
11296 of backends use the same servers.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011297
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011298maxconn <maxconn>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011299 The "maxconn" parameter specifies the maximal number of concurrent
11300 connections that will be sent to this server. If the number of incoming
11301 concurrent requests goes higher than this value, they will be queued, waiting
11302 for a connection to be released. This parameter is very important as it can
11303 save fragile servers from going down under extreme loads. If a "minconn"
11304 parameter is specified, the limit becomes dynamic. The default value is "0"
11305 which means unlimited. See also the "minconn" and "maxqueue" parameters, and
11306 the backend's "fullconn" keyword.
11307
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011308maxqueue <maxqueue>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011309 The "maxqueue" parameter specifies the maximal number of connections which
11310 will wait in the queue for this server. If this limit is reached, next
11311 requests will be redispatched to other servers instead of indefinitely
11312 waiting to be served. This will break persistence but may allow people to
11313 quickly re-log in when the server they try to connect to is dying. The
11314 default value is "0" which means the queue is unlimited. See also the
11315 "maxconn" and "minconn" parameters.
11316
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011317minconn <minconn>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011318 When the "minconn" parameter is set, the maxconn limit becomes a dynamic
11319 limit following the backend's load. The server will always accept at least
11320 <minconn> connections, never more than <maxconn>, and the limit will be on
11321 the ramp between both values when the backend has less than <fullconn>
11322 concurrent connections. This makes it possible to limit the load on the
11323 server during normal loads, but push it further for important loads without
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010011324 overloading the server during exceptional loads. See also the "maxconn"
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011325 and "maxqueue" parameters, as well as the "fullconn" backend keyword.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010011326
Willy Tarreaud72f0f32015-10-13 14:50:22 +020011327namespace <name>
11328 On Linux, it is possible to specify which network namespace a socket will
11329 belong to. This directive makes it possible to explicitly bind a server to
11330 a namespace different from the default one. Please refer to your operating
11331 system's documentation to find more details about network namespaces.
11332
Frédéric Lécailled2376272017-03-21 18:52:12 +010011333no-agent-check
11334 This option may be used as "server" setting to reset any "agent-check"
11335 setting which would have been inherited from "default-server" directive as
11336 default value.
11337 It may also be used as "default-server" setting to reset any previous
11338 "default-server" "agent-check" setting.
11339
11340no-backup
11341 This option may be used as "server" setting to reset any "backup"
11342 setting which would have been inherited from "default-server" directive as
11343 default value.
11344 It may also be used as "default-server" setting to reset any previous
11345 "default-server" "backup" setting.
11346
11347no-check
11348 This option may be used as "server" setting to reset any "check"
11349 setting which would have been inherited from "default-server" directive as
11350 default value.
11351 It may also be used as "default-server" setting to reset any previous
11352 "default-server" "check" setting.
11353
11354no-check-ssl
11355 This option may be used as "server" setting to reset any "check-ssl"
11356 setting which would have been inherited from "default-server" directive as
11357 default value.
11358 It may also be used as "default-server" setting to reset any previous
11359 "default-server" "check-ssl" setting.
11360
Frédéric Lécailled2376272017-03-21 18:52:12 +010011361no-send-proxy
11362 This option may be used as "server" setting to reset any "send-proxy"
11363 setting which would have been inherited from "default-server" directive as
11364 default value.
11365 It may also be used as "default-server" setting to reset any previous
11366 "default-server" "send-proxy" setting.
11367
11368no-send-proxy-v2
11369 This option may be used as "server" setting to reset any "send-proxy-v2"
11370 setting which would have been inherited from "default-server" directive as
11371 default value.
11372 It may also be used as "default-server" setting to reset any previous
11373 "default-server" "send-proxy-v2" setting.
11374
11375no-send-proxy-v2-ssl
11376 This option may be used as "server" setting to reset any "send-proxy-v2-ssl"
11377 setting which would have been inherited from "default-server" directive as
11378 default value.
11379 It may also be used as "default-server" setting to reset any previous
11380 "default-server" "send-proxy-v2-ssl" setting.
11381
11382no-send-proxy-v2-ssl-cn
11383 This option may be used as "server" setting to reset any "send-proxy-v2-ssl-cn"
11384 setting which would have been inherited from "default-server" directive as
11385 default value.
11386 It may also be used as "default-server" setting to reset any previous
11387 "default-server" "send-proxy-v2-ssl-cn" setting.
11388
11389no-ssl
11390 This option may be used as "server" setting to reset any "ssl"
11391 setting which would have been inherited from "default-server" directive as
11392 default value.
11393 It may also be used as "default-server" setting to reset any previous
11394 "default-server" "ssl" setting.
11395
Willy Tarreau2a3fb1c2015-02-05 16:47:07 +010011396no-ssl-reuse
11397 This option disables SSL session reuse when SSL is used to communicate with
11398 the server. It will force the server to perform a full handshake for every
11399 new connection. It's probably only useful for benchmarking, troubleshooting,
11400 and for paranoid users.
11401
Emeric Brun9b3009b2012-10-05 11:55:06 +020011402no-sslv3
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011403 This option disables support for SSLv3 when SSL is used to communicate with
11404 the server. Note that SSLv2 is disabled in the code and cannot be enabled
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011405 using any configuration option. Use "ssl-min-ver" and "ssl-max-ver" instead.
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011406
Emmanuel Hocdet6cb2d1e2017-03-30 14:43:31 +020011407 Supported in default-server: No
11408
Emeric Brunf9c5c472012-10-11 15:28:34 +020011409no-tls-tickets
11410 This setting is only available when support for OpenSSL was built in. It
11411 disables the stateless session resumption (RFC 5077 TLS Ticket
11412 extension) and force to use stateful session resumption. Stateless
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011413 session resumption is more expensive in CPU usage for servers. This option
11414 is also available on global statement "ssl-default-server-options".
Frédéric Lécailled2376272017-03-21 18:52:12 +010011415 See also "tls-tickets".
Emeric Brunf9c5c472012-10-11 15:28:34 +020011416
Emeric Brun9b3009b2012-10-05 11:55:06 +020011417no-tlsv10
Emeric Brun8694b9a2012-10-05 14:39:07 +020011418 This option disables support for TLSv1.0 when SSL is used to communicate with
Emeric Brunf5da4932012-09-28 19:42:54 +020011419 the server. Note that SSLv2 is disabled in the code and cannot be enabled
11420 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011421 often makes sense to disable it when communicating with local servers. This
11422 option is also available on global statement "ssl-default-server-options".
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011423 Use "ssl-min-ver" and "ssl-max-ver" instead.
Willy Tarreau763a95b2012-10-04 23:15:39 +020011424
Emmanuel Hocdet6cb2d1e2017-03-30 14:43:31 +020011425 Supported in default-server: No
11426
Emeric Brun9b3009b2012-10-05 11:55:06 +020011427no-tlsv11
Emeric Brun8694b9a2012-10-05 14:39:07 +020011428 This option disables support for TLSv1.1 when SSL is used to communicate with
Emeric Brunf5da4932012-09-28 19:42:54 +020011429 the server. Note that SSLv2 is disabled in the code and cannot be enabled
11430 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011431 often makes sense to disable it when communicating with local servers. This
11432 option is also available on global statement "ssl-default-server-options".
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011433 Use "ssl-min-ver" and "ssl-max-ver" instead.
Willy Tarreau763a95b2012-10-04 23:15:39 +020011434
Emmanuel Hocdet6cb2d1e2017-03-30 14:43:31 +020011435 Supported in default-server: No
11436
Emeric Brun9b3009b2012-10-05 11:55:06 +020011437no-tlsv12
Emeric Brun8694b9a2012-10-05 14:39:07 +020011438 This option disables support for TLSv1.2 when SSL is used to communicate with
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011439 the server. Note that SSLv2 is disabled in the code and cannot be enabled
11440 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011441 often makes sense to disable it when communicating with local servers. This
11442 option is also available on global statement "ssl-default-server-options".
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011443 Use "ssl-min-ver" and "ssl-max-ver" instead.
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020011444
11445 Supported in default-server: No
11446
11447no-tlsv13
11448 This option disables support for TLSv1.3 when SSL is used to communicate with
11449 the server. Note that SSLv2 is disabled in the code and cannot be enabled
11450 using any configuration option. TLSv1 is more expensive than SSLv3 so it
11451 often makes sense to disable it when communicating with local servers. This
11452 option is also available on global statement "ssl-default-server-options".
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011453 Use "ssl-min-ver" and "ssl-max-ver" instead.
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011454
Emmanuel Hocdet6cb2d1e2017-03-30 14:43:31 +020011455 Supported in default-server: No
11456
Frédéric Lécailled2376272017-03-21 18:52:12 +010011457no-verifyhost
11458 This option may be used as "server" setting to reset any "verifyhost"
11459 setting which would have been inherited from "default-server" directive as
11460 default value.
11461 It may also be used as "default-server" setting to reset any previous
11462 "default-server" "verifyhost" setting.
Willy Tarreau763a95b2012-10-04 23:15:39 +020011463
Simon Hormanfa461682011-06-25 09:39:49 +090011464non-stick
11465 Never add connections allocated to this sever to a stick-table.
11466 This may be used in conjunction with backup to ensure that
11467 stick-table persistence is disabled for backup servers.
11468
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010011469observe <mode>
11470 This option enables health adjusting based on observing communication with
11471 the server. By default this functionality is disabled and enabling it also
11472 requires to enable health checks. There are two supported modes: "layer4" and
11473 "layer7". In layer4 mode, only successful/unsuccessful tcp connections are
11474 significant. In layer7, which is only allowed for http proxies, responses
11475 received from server are verified, like valid/wrong http code, unparsable
Willy Tarreau150d1462012-03-10 08:19:02 +010011476 headers, a timeout, etc. Valid status codes include 100 to 499, 501 and 505.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010011477
11478 See also the "check", "on-error" and "error-limit".
11479
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011480on-error <mode>
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010011481 Select what should happen when enough consecutive errors are detected.
11482 Currently, four modes are available:
11483 - fastinter: force fastinter
11484 - fail-check: simulate a failed check, also forces fastinter (default)
11485 - sudden-death: simulate a pre-fatal failed health check, one more failed
11486 check will mark a server down, forces fastinter
11487 - mark-down: mark the server immediately down and force fastinter
11488
11489 See also the "check", "observe" and "error-limit".
11490
Simon Hormane0d1bfb2011-06-21 14:34:58 +090011491on-marked-down <action>
11492 Modify what occurs when a server is marked down.
11493 Currently one action is available:
Justin Karnegeseb2c24a2012-05-24 15:28:52 -070011494 - shutdown-sessions: Shutdown peer sessions. When this setting is enabled,
11495 all connections to the server are immediately terminated when the server
11496 goes down. It might be used if the health check detects more complex cases
11497 than a simple connection status, and long timeouts would cause the service
11498 to remain unresponsive for too long a time. For instance, a health check
11499 might detect that a database is stuck and that there's no chance to reuse
11500 existing connections anymore. Connections killed this way are logged with
11501 a 'D' termination code (for "Down").
Simon Hormane0d1bfb2011-06-21 14:34:58 +090011502
11503 Actions are disabled by default
11504
Justin Karnegeseb2c24a2012-05-24 15:28:52 -070011505on-marked-up <action>
11506 Modify what occurs when a server is marked up.
11507 Currently one action is available:
11508 - shutdown-backup-sessions: Shutdown sessions on all backup servers. This is
11509 done only if the server is not in backup state and if it is not disabled
11510 (it must have an effective weight > 0). This can be used sometimes to force
11511 an active server to take all the traffic back after recovery when dealing
11512 with long sessions (eg: LDAP, SQL, ...). Doing this can cause more trouble
11513 than it tries to solve (eg: incomplete transactions), so use this feature
11514 with extreme care. Sessions killed because a server comes up are logged
11515 with an 'U' termination code (for "Up").
11516
11517 Actions are disabled by default
11518
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011519port <port>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011520 Using the "port" parameter, it becomes possible to use a different port to
11521 send health-checks. On some servers, it may be desirable to dedicate a port
11522 to a specific component able to perform complex tests which are more suitable
11523 to health-checks than the application. It is common to run a simple script in
11524 inetd for instance. This parameter is ignored if the "check" parameter is not
11525 set. See also the "addr" parameter.
11526
11527redir <prefix>
11528 The "redir" parameter enables the redirection mode for all GET and HEAD
11529 requests addressing this server. This means that instead of having HAProxy
11530 forward the request to the server, it will send an "HTTP 302" response with
11531 the "Location" header composed of this prefix immediately followed by the
11532 requested URI beginning at the leading '/' of the path component. That means
11533 that no trailing slash should be used after <prefix>. All invalid requests
11534 will be rejected, and all non-GET or HEAD requests will be normally served by
11535 the server. Note that since the response is completely forged, no header
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010011536 mangling nor cookie insertion is possible in the response. However, cookies in
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011537 requests are still analysed, making this solution completely usable to direct
11538 users to a remote location in case of local disaster. Main use consists in
11539 increasing bandwidth for static servers by having the clients directly
11540 connect to them. Note: never use a relative location here, it would cause a
11541 loop between the client and HAProxy!
11542
11543 Example : server srv1 192.168.1.1:80 redir http://image1.mydomain.com check
11544
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011545rise <count>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011546 The "rise" parameter states that a server will be considered as operational
11547 after <count> consecutive successful health checks. This value defaults to 2
11548 if unspecified. See also the "check", "inter" and "fall" parameters.
11549
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011550resolve-prefer <family>
11551 When DNS resolution is enabled for a server and multiple IP addresses from
11552 different families are returned, HAProxy will prefer using an IP address
11553 from the family mentioned in the "resolve-prefer" parameter.
11554 Available families: "ipv4" and "ipv6"
11555
Baptiste Assmannc4aabae2015-08-04 22:43:06 +020011556 Default value: ipv6
11557
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011558 Example:
11559
11560 server s1 app1.domain.com:80 resolvers mydns resolve-prefer ipv6
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011561
Thierry Fournierac88cfe2016-02-17 22:05:30 +010011562resolve-net <network>[,<network[,...]]
11563 This options prioritize th choice of an ip address matching a network. This is
11564 useful with clouds to prefer a local ip. In some cases, a cloud high
Tim Düsterhus4896c442016-11-29 02:15:19 +010011565 availability service can be announced with many ip addresses on many
Thierry Fournierac88cfe2016-02-17 22:05:30 +010011566 differents datacenters. The latency between datacenter is not negligible, so
11567 this patch permitsto prefers a local datacenter. If none address matchs the
11568 configured network, another address is selected.
11569
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011570 Example:
11571
11572 server s1 app1.domain.com:80 resolvers mydns resolve-net 10.0.0.0/8
Thierry Fournierac88cfe2016-02-17 22:05:30 +010011573
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011574resolvers <id>
11575 Points to an existing "resolvers" section to resolve current server's
11576 hostname.
11577
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011578 Example:
11579
11580 server s1 app1.domain.com:80 check resolvers mydns
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011581
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011582 See also section 5.3
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011583
Willy Tarreau5ab04ec2011-03-20 10:32:26 +010011584send-proxy
11585 The "send-proxy" parameter enforces use of the PROXY protocol over any
11586 connection established to this server. The PROXY protocol informs the other
11587 end about the layer 3/4 addresses of the incoming connection, so that it can
11588 know the client's address or the public address it accessed to, whatever the
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010011589 upper layer protocol. For connections accepted by an "accept-proxy" or
11590 "accept-netscaler-cip" listener, the advertised address will be used. Only
11591 TCPv4 and TCPv6 address families are supported. Other families such as
11592 Unix sockets, will report an UNKNOWN family. Servers using this option can
11593 fully be chained to another instance of haproxy listening with an
11594 "accept-proxy" setting. This setting must not be used if the server isn't
11595 aware of the protocol. When health checks are sent to the server, the PROXY
11596 protocol is automatically used when this option is set, unless there is an
11597 explicit "port" or "addr" directive, in which case an explicit
11598 "check-send-proxy" directive would also be needed to use the PROXY protocol.
Frédéric Lécailled2376272017-03-21 18:52:12 +010011599 See also the "no-send-proxy" option of this section and "accept-proxy" and
11600 "accept-netscaler-cip" option of the "bind" keyword.
Willy Tarreau5ab04ec2011-03-20 10:32:26 +010011601
David Safb76832014-05-08 23:42:08 -040011602send-proxy-v2
11603 The "send-proxy-v2" parameter enforces use of the PROXY protocol version 2
11604 over any connection established to this server. The PROXY protocol informs
11605 the other end about the layer 3/4 addresses of the incoming connection, so
11606 that it can know the client's address or the public address it accessed to,
Emmanuel Hocdet404d9782017-10-24 10:55:14 +020011607 whatever the upper layer protocol. It also send ALPN information if an alpn
11608 have been negotiated. This setting must not be used if the server isn't aware
11609 of this version of the protocol. See also the "no-send-proxy-v2" option of
11610 this section and send-proxy" option of the "bind" keyword.
David Safb76832014-05-08 23:42:08 -040011611
11612send-proxy-v2-ssl
11613 The "send-proxy-v2-ssl" parameter enforces use of the PROXY protocol version
11614 2 over any connection established to this server. The PROXY protocol informs
11615 the other end about the layer 3/4 addresses of the incoming connection, so
11616 that it can know the client's address or the public address it accessed to,
11617 whatever the upper layer protocol. In addition, the SSL information extension
11618 of the PROXY protocol is added to the PROXY protocol header. This setting
11619 must not be used if the server isn't aware of this version of the protocol.
Frédéric Lécailled2376272017-03-21 18:52:12 +010011620 See also the "no-send-proxy-v2-ssl" option of this section and the
11621 "send-proxy-v2" option of the "bind" keyword.
David Safb76832014-05-08 23:42:08 -040011622
11623send-proxy-v2-ssl-cn
11624 The "send-proxy-v2-ssl" parameter enforces use of the PROXY protocol version
11625 2 over any connection established to this server. The PROXY protocol informs
11626 the other end about the layer 3/4 addresses of the incoming connection, so
11627 that it can know the client's address or the public address it accessed to,
11628 whatever the upper layer protocol. In addition, the SSL information extension
11629 of the PROXY protocol, along along with the Common Name from the subject of
11630 the client certificate (if any), is added to the PROXY protocol header. This
11631 setting must not be used if the server isn't aware of this version of the
Frédéric Lécailled2376272017-03-21 18:52:12 +010011632 protocol. See also the "no-send-proxy-v2-ssl-cn" option of this section and the
11633 "send-proxy-v2" option of the "bind" keyword.
David Safb76832014-05-08 23:42:08 -040011634
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011635slowstart <start_time_in_ms>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011636 The "slowstart" parameter for a server accepts a value in milliseconds which
11637 indicates after how long a server which has just come back up will run at
11638 full speed. Just as with every other time-based parameter, it can be entered
11639 in any other explicit unit among { us, ms, s, m, h, d }. The speed grows
11640 linearly from 0 to 100% during this time. The limitation applies to two
11641 parameters :
11642
11643 - maxconn: the number of connections accepted by the server will grow from 1
11644 to 100% of the usual dynamic limit defined by (minconn,maxconn,fullconn).
11645
11646 - weight: when the backend uses a dynamic weighted algorithm, the weight
11647 grows linearly from 1 to 100%. In this case, the weight is updated at every
11648 health-check. For this reason, it is important that the "inter" parameter
11649 is smaller than the "slowstart", in order to maximize the number of steps.
11650
11651 The slowstart never applies when haproxy starts, otherwise it would cause
11652 trouble to running servers. It only applies when a server has been previously
11653 seen as failed.
11654
Willy Tarreau732eac42015-07-09 11:40:25 +020011655sni <expression>
11656 The "sni" parameter evaluates the sample fetch expression, converts it to a
11657 string and uses the result as the host name sent in the SNI TLS extension to
11658 the server. A typical use case is to send the SNI received from the client in
11659 a bridged HTTPS scenario, using the "ssl_fc_sni" sample fetch for the
Willy Tarreau2ab88672017-07-05 18:23:03 +020011660 expression, though alternatives such as req.hdr(host) can also make sense. If
11661 "verify required" is set (which is the recommended setting), the resulting
Willy Tarreauad92a9a2017-07-28 11:38:41 +020011662 name will also be matched against the server certificate's names. See the
11663 "verify" directive for more details.
Willy Tarreau732eac42015-07-09 11:40:25 +020011664
Willy Tarreauc6f4ce82009-06-10 11:09:37 +020011665source <addr>[:<pl>[-<ph>]] [usesrc { <addr2>[:<port2>] | client | clientip } ]
Willy Tarreaubce70882009-09-07 11:51:47 +020011666source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | hdr_ip(<hdr>[,<occ>]) } ]
Willy Tarreauc6f4ce82009-06-10 11:09:37 +020011667source <addr>[:<pl>[-<ph>]] [interface <name>] ...
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011668 The "source" parameter sets the source address which will be used when
11669 connecting to the server. It follows the exact same parameters and principle
11670 as the backend "source" keyword, except that it only applies to the server
11671 referencing it. Please consult the "source" keyword for details.
11672
Willy Tarreauc6f4ce82009-06-10 11:09:37 +020011673 Additionally, the "source" statement on a server line allows one to specify a
11674 source port range by indicating the lower and higher bounds delimited by a
11675 dash ('-'). Some operating systems might require a valid IP address when a
11676 source port range is specified. It is permitted to have the same IP/range for
11677 several servers. Doing so makes it possible to bypass the maximum of 64k
11678 total concurrent connections. The limit will then reach 64k connections per
11679 server.
11680
Lukas Tribus7d56c6d2016-09-13 09:51:15 +000011681 Since Linux 4.2/libc 2.23 IP_BIND_ADDRESS_NO_PORT is set for connections
11682 specifying the source address without port(s).
11683
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011684ssl
Willy Tarreau44f65392013-06-25 07:56:20 +020011685 This option enables SSL ciphering on outgoing connections to the server. It
11686 is critical to verify server certificates using "verify" when using SSL to
11687 connect to servers, otherwise the communication is prone to trivial man in
11688 the-middle attacks rendering SSL useless. When this option is used, health
11689 checks are automatically sent in SSL too unless there is a "port" or an
11690 "addr" directive indicating the check should be sent to a different location.
Frédéric Lécailled2376272017-03-21 18:52:12 +010011691 See the "no-ssl" to disable "ssl" option and "check-ssl" option to force
11692 SSL health checks.
Willy Tarreau763a95b2012-10-04 23:15:39 +020011693
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011694ssl-max-ver [ SSLv3 | TLSv1.0 | TLSv1.1 | TLSv1.2 | TLSv1.3 ]
11695 This option enforces use of <version> or lower when SSL is used to communicate
11696 with the server. This option is also available on global statement
11697 "ssl-default-server-options". See also "ssl-min-ver".
11698
11699ssl-min-ver [ SSLv3 | TLSv1.0 | TLSv1.1 | TLSv1.2 | TLSv1.3 ]
11700 This option enforces use of <version> or upper when SSL is used to communicate
11701 with the server. This option is also available on global statement
11702 "ssl-default-server-options". See also "ssl-max-ver".
11703
Frédéric Lécailled2376272017-03-21 18:52:12 +010011704ssl-reuse
11705 This option may be used as "server" setting to reset any "no-ssl-reuse"
11706 setting which would have been inherited from "default-server" directive as
11707 default value.
11708 It may also be used as "default-server" setting to reset any previous
11709 "default-server" "no-ssl-reuse" setting.
11710
11711stick
11712 This option may be used as "server" setting to reset any "non-stick"
11713 setting which would have been inherited from "default-server" directive as
11714 default value.
11715 It may also be used as "default-server" setting to reset any previous
11716 "default-server" "non-stick" setting.
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011717
Willy Tarreau163d4622015-10-13 16:16:41 +020011718tcp-ut <delay>
11719 Sets the TCP User Timeout for all outgoing connections to this server. This
11720 option is available on Linux since version 2.6.37. It allows haproxy to
11721 configure a timeout for sockets which contain data not receiving an
Tim Düsterhus4896c442016-11-29 02:15:19 +010011722 acknowledgement for the configured delay. This is especially useful on
Willy Tarreau163d4622015-10-13 16:16:41 +020011723 long-lived connections experiencing long idle periods such as remote
11724 terminals or database connection pools, where the client and server timeouts
11725 must remain high to allow a long period of idle, but where it is important to
11726 detect that the server has disappeared in order to release all resources
11727 associated with its connection (and the client's session). One typical use
11728 case is also to force dead server connections to die when health checks are
11729 too slow or during a soft reload since health checks are then disabled. The
11730 argument is a delay expressed in milliseconds by default. This only works for
11731 regular TCP connections, and is ignored for other protocols.
11732
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011733track [<proxy>/]<server>
Willy Tarreau32091232014-05-16 13:52:00 +020011734 This option enables ability to set the current state of the server by tracking
11735 another one. It is possible to track a server which itself tracks another
11736 server, provided that at the end of the chain, a server has health checks
11737 enabled. If <proxy> is omitted the current one is used. If disable-on-404 is
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011738 used, it has to be enabled on both proxies.
11739
Frédéric Lécailled2376272017-03-21 18:52:12 +010011740tls-tickets
11741 This option may be used as "server" setting to reset any "no-tls-tickets"
11742 setting which would have been inherited from "default-server" directive as
11743 default value.
11744 It may also be used as "default-server" setting to reset any previous
11745 "default-server" "no-tlsv-tickets" setting.
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011746
Emeric Brunef42d922012-10-11 16:11:36 +020011747verify [none|required]
11748 This setting is only available when support for OpenSSL was built in. If set
Emeric Brun850efd52014-01-29 12:24:34 +010011749 to 'none', server certificate is not verified. In the other case, The
Willy Tarreauad92a9a2017-07-28 11:38:41 +020011750 certificate provided by the server is verified using CAs from 'ca-file' and
11751 optional CRLs from 'crl-file' after having checked that the names provided in
11752 the certificate's subject and subjectAlternateNames attributs match either
11753 the name passed using the "sni" directive, or if not provided, the static
11754 host name passed using the "verifyhost" directive. When no name is found, the
11755 certificate's names are ignored. For this reason, without SNI it's important
11756 to use "verifyhost". On verification failure the handshake is aborted. It is
11757 critically important to verify server certificates when using SSL to connect
11758 to servers, otherwise the communication is prone to trivial man-in-the-middle
11759 attacks rendering SSL totally useless. Unless "ssl_server_verify" appears in
11760 the global section, "verify" is set to "required" by default.
Emeric Brunef42d922012-10-11 16:11:36 +020011761
Evan Broderbe554312013-06-27 00:05:25 -070011762verifyhost <hostname>
11763 This setting is only available when support for OpenSSL was built in, and
Willy Tarreauad92a9a2017-07-28 11:38:41 +020011764 only takes effect if 'verify required' is also specified. This directive sets
11765 a default static hostname to check the server's certificate against when no
11766 SNI was used to connect to the server. If SNI is not used, this is the only
11767 way to enable hostname verification. This static hostname, when set, will
11768 also be used for health checks (which cannot provide an SNI value). If none
11769 of the hostnames in the certificate match the specified hostname, the
11770 handshake is aborted. The hostnames in the server-provided certificate may
11771 include wildcards. See also "verify", "sni" and "no-verifyhost" options.
Evan Broderbe554312013-06-27 00:05:25 -070011772
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011773weight <weight>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011774 The "weight" parameter is used to adjust the server's weight relative to
11775 other servers. All servers will receive a load proportional to their weight
11776 relative to the sum of all weights, so the higher the weight, the higher the
Willy Tarreau6704d672009-06-15 10:56:05 +020011777 load. The default weight is 1, and the maximal value is 256. A value of 0
11778 means the server will not participate in load-balancing but will still accept
11779 persistent connections. If this parameter is used to distribute the load
11780 according to server's capacity, it is recommended to start with values which
11781 can both grow and shrink, for instance between 10 and 100 to leave enough
11782 room above and below for later adjustments.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011783
11784
Cyril Bonté46175dd2015-07-02 22:45:32 +0200117855.3. Server IP address resolution using DNS
11786-------------------------------------------
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011787
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011788HAProxy allows using a host name on the server line to retrieve its IP address
11789using name servers. By default, HAProxy resolves the name when parsing the
11790configuration file, at startup and cache the result for the process' life.
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011791This is not sufficient in some cases, such as in Amazon where a server's IP
11792can change after a reboot or an ELB Virtual IP can change based on current
11793workload.
11794This chapter describes how HAProxy can be configured to process server's name
11795resolution at run time.
11796Whether run time server name resolution has been enable or not, HAProxy will
11797carry on doing the first resolution when parsing the configuration.
11798
11799
Cyril Bonté46175dd2015-07-02 22:45:32 +0200118005.3.1. Global overview
11801----------------------
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011802
11803As we've seen in introduction, name resolution in HAProxy occurs at two
11804different steps of the process life:
11805
11806 1. when starting up, HAProxy parses the server line definition and matches a
11807 host name. It uses libc functions to get the host name resolved. This
11808 resolution relies on /etc/resolv.conf file.
11809
Christopher Faulet67957bd2017-09-27 11:00:59 +020011810 2. at run time, HAProxy performs periodically name resolutions for servers
11811 requiring DNS resolutions.
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011812
11813A few other events can trigger a name resolution at run time:
11814 - when a server's health check ends up in a connection timeout: this may be
11815 because the server has a new IP address. So we need to trigger a name
11816 resolution to know this new IP.
11817
Christopher Faulet67957bd2017-09-27 11:00:59 +020011818When using resolvers, the server name can either be a hostname, or a SRV label.
11819HAProxy considers anything that starts with an underscore as a SRV label. If a
11820SRV label is specified, then the corresponding SRV records will be retrieved
11821from the DNS server, and the provided hostnames will be used. The SRV label
11822will be checked periodically, and if any server are added or removed, haproxy
11823will automatically do the same.
Olivier Houchardecfa18d2017-08-07 17:30:03 +020011824
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011825A few things important to notice:
11826 - all the name servers are queried in the mean time. HAProxy will process the
11827 first valid response.
11828
11829 - a resolution is considered as invalid (NX, timeout, refused), when all the
11830 servers return an error.
11831
11832
Cyril Bonté46175dd2015-07-02 22:45:32 +0200118335.3.2. The resolvers section
11834----------------------------
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011835
11836This section is dedicated to host information related to name resolution in
Christopher Faulet67957bd2017-09-27 11:00:59 +020011837HAProxy. There can be as many as resolvers section as needed. Each section can
11838contain many name servers.
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011839
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011840When multiple name servers are configured in a resolvers section, then HAProxy
11841uses the first valid response. In case of invalid responses, only the last one
11842is treated. Purpose is to give the chance to a slow server to deliver a valid
11843answer after a fast faulty or outdated server.
11844
11845When each server returns a different error type, then only the last error is
Christopher Faulet67957bd2017-09-27 11:00:59 +020011846used by HAProxy. The following processing is applied on this error:
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011847
Christopher Faulet67957bd2017-09-27 11:00:59 +020011848 1. HAProxy retries the same DNS query with a new query type. The A queries are
11849 switch to AAAA or the opposite. SRV queries are not concerned here. Timeout
11850 errors are also excluded.
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011851
Christopher Faulet67957bd2017-09-27 11:00:59 +020011852 2. When the fallback on the query type was done (or not applicable), HAProxy
11853 retries the original DNS query, with the preferred query type.
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011854
Christopher Faulet67957bd2017-09-27 11:00:59 +020011855 3. HAProxy retries previous steps <resolve_retires> times. If no valid
11856 response is received after that, it stops the DNS resolution and reports
11857 the error.
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011858
Christopher Faulet67957bd2017-09-27 11:00:59 +020011859For example, with 2 name servers configured in a resolvers section, the
11860following scenarios are possible:
11861
11862 - First response is valid and is applied directly, second response is
11863 ignored
11864
11865 - First response is invalid and second one is valid, then second response is
11866 applied
11867
11868 - First response is a NX domain and second one a truncated response, then
11869 HAProxy retries the query with a new type
11870
11871 - First response is a NX domain and second one is a timeout, then HAProxy
11872 retries the query with a new type
11873
11874 - Query timed out for both name servers, then HAProxy retries it with the
11875 same query type
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011876
Olivier Houcharda8c6db82017-07-06 18:46:47 +020011877As a DNS server may not answer all the IPs in one DNS request, haproxy keeps
11878a cache of previous answers, an answer will be considered obsolete after
Christopher Faulet67957bd2017-09-27 11:00:59 +020011879<hold obsolete> seconds without the IP returned.
Olivier Houcharda8c6db82017-07-06 18:46:47 +020011880
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011881
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011882resolvers <resolvers id>
11883 Creates a new name server list labelled <resolvers id>
11884
11885A resolvers section accept the following parameters:
11886
Baptiste Assmann2af08fe2017-08-14 00:13:01 +020011887accepted_payload_size <nb>
11888 Defines the maxium payload size accepted by HAProxy and announced to all the
Christopher Faulet67957bd2017-09-27 11:00:59 +020011889 name servers configured in this resolvers section.
Baptiste Assmann2af08fe2017-08-14 00:13:01 +020011890 <nb> is in bytes. If not set, HAProxy announces 512. (minimal value defined
11891 by RFC 6891)
11892
Baptiste Assmann9d8dbbc2017-08-18 23:35:08 +020011893 Note: to get bigger responses but still be sure that responses won't be
Baptiste Assmann2af08fe2017-08-14 00:13:01 +020011894 dropped on the wire, one can choose a value between 1280 and 1410.
11895
Baptiste Assmann9d8dbbc2017-08-18 23:35:08 +020011896 Note: the maximum allowed value is 8192.
11897
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011898nameserver <id> <ip>:<port>
11899 DNS server description:
11900 <id> : label of the server, should be unique
11901 <ip> : IP address of the server
11902 <port> : port where the DNS service actually runs
11903
11904hold <status> <period>
11905 Defines <period> during which the last name resolution should be kept based
11906 on last resolution <status>
Baptiste Assmann987e16d2016-11-02 22:23:31 +010011907 <status> : last name resolution status. Acceptable values are "nx",
Olivier Houcharda8c6db82017-07-06 18:46:47 +020011908 "other", "refused", "timeout", "valid", "obsolete".
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011909 <period> : interval between two successive name resolution when the last
11910 answer was in <status>. It follows the HAProxy time format.
11911 <period> is in milliseconds by default.
11912
Baptiste Assmann686408b2017-08-18 10:15:42 +020011913 Default value is 10s for "valid", 0s for "obsolete" and 30s for others.
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011914
Christopher Faulet67957bd2017-09-27 11:00:59 +020011915resolution_pool_size <nb> (deprecated)
Baptiste Assmann201c07f2017-05-22 15:17:15 +020011916 Defines the number of resolutions available in the pool for this resolvers.
11917 If not defines, it defaults to 64. If your configuration requires more than
11918 <nb>, then HAProxy will return an error when parsing the configuration.
11919
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011920resolve_retries <nb>
11921 Defines the number <nb> of queries to send to resolve a server name before
11922 giving up.
11923 Default value: 3
11924
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011925 A retry occurs on name server timeout or when the full sequence of DNS query
11926 type failover is over and we need to start up from the default ANY query
11927 type.
11928
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011929timeout <event> <time>
11930 Defines timeouts related to name resolution
11931 <event> : the event on which the <time> timeout period applies to.
11932 events available are:
Christopher Faulet67957bd2017-09-27 11:00:59 +020011933 - resolve : default time to trigger name resolutions when no
11934 other time applied.
11935 Default value: 1s
11936 - retry : time between two DNS queries, when no valid response
11937 have been received.
11938 Default value: 1s
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011939 <time> : time related to the event. It follows the HAProxy time format.
11940 <time> is expressed in milliseconds.
11941
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011942 Example:
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011943
11944 resolvers mydns
11945 nameserver dns1 10.0.0.1:53
11946 nameserver dns2 10.0.0.2:53
11947 resolve_retries 3
Christopher Faulet67957bd2017-09-27 11:00:59 +020011948 timeout resolve 1s
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011949 timeout retry 1s
Baptiste Assmann987e16d2016-11-02 22:23:31 +010011950 hold other 30s
11951 hold refused 30s
11952 hold nx 30s
11953 hold timeout 30s
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011954 hold valid 10s
Olivier Houcharda8c6db82017-07-06 18:46:47 +020011955 hold obsolete 30s
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011956
11957
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200119586. HTTP header manipulation
11959---------------------------
11960
11961In HTTP mode, it is possible to rewrite, add or delete some of the request and
11962response headers based on regular expressions. It is also possible to block a
11963request or a response if a particular header matches a regular expression,
11964which is enough to stop most elementary protocol attacks, and to protect
Willy Tarreau70dffda2014-01-30 03:07:23 +010011965against information leak from the internal network.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011966
Willy Tarreau70dffda2014-01-30 03:07:23 +010011967If HAProxy encounters an "Informational Response" (status code 1xx), it is able
11968to process all rsp* rules which can allow, deny, rewrite or delete a header,
11969but it will refuse to add a header to any such messages as this is not
11970HTTP-compliant. The reason for still processing headers in such responses is to
11971stop and/or fix any possible information leak which may happen, for instance
11972because another downstream equipment would unconditionally add a header, or if
11973a server name appears there. When such messages are seen, normal processing
11974still occurs on the next non-informational messages.
Willy Tarreau816b9792009-09-15 21:25:21 +020011975
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011976This section covers common usage of the following keywords, described in detail
11977in section 4.2 :
11978
11979 - reqadd <string>
11980 - reqallow <search>
11981 - reqiallow <search>
11982 - reqdel <search>
11983 - reqidel <search>
11984 - reqdeny <search>
11985 - reqideny <search>
11986 - reqpass <search>
11987 - reqipass <search>
11988 - reqrep <search> <replace>
11989 - reqirep <search> <replace>
11990 - reqtarpit <search>
11991 - reqitarpit <search>
11992 - rspadd <string>
11993 - rspdel <search>
11994 - rspidel <search>
11995 - rspdeny <search>
11996 - rspideny <search>
11997 - rsprep <search> <replace>
11998 - rspirep <search> <replace>
11999
12000With all these keywords, the same conventions are used. The <search> parameter
12001is a POSIX extended regular expression (regex) which supports grouping through
12002parenthesis (without the backslash). Spaces and other delimiters must be
12003prefixed with a backslash ('\') to avoid confusion with a field delimiter.
12004Other characters may be prefixed with a backslash to change their meaning :
12005
12006 \t for a tab
12007 \r for a carriage return (CR)
12008 \n for a new line (LF)
12009 \ to mark a space and differentiate it from a delimiter
12010 \# to mark a sharp and differentiate it from a comment
12011 \\ to use a backslash in a regex
12012 \\\\ to use a backslash in the text (*2 for regex, *2 for haproxy)
12013 \xXX to write the ASCII hex code XX as in the C language
12014
12015The <replace> parameter contains the string to be used to replace the largest
12016portion of text matching the regex. It can make use of the special characters
12017above, and can reference a substring which is delimited by parenthesis in the
12018regex, by writing a backslash ('\') immediately followed by one digit from 0 to
120199 indicating the group position (0 designating the entire line). This practice
12020is very common to users of the "sed" program.
12021
12022The <string> parameter represents the string which will systematically be added
12023after the last header line. It can also use special character sequences above.
12024
12025Notes related to these keywords :
12026---------------------------------
12027 - these keywords are not always convenient to allow/deny based on header
12028 contents. It is strongly recommended to use ACLs with the "block" keyword
12029 instead, resulting in far more flexible and manageable rules.
12030
12031 - lines are always considered as a whole. It is not possible to reference
12032 a header name only or a value only. This is important because of the way
12033 headers are written (notably the number of spaces after the colon).
12034
12035 - the first line is always considered as a header, which makes it possible to
12036 rewrite or filter HTTP requests URIs or response codes, but in turn makes
12037 it harder to distinguish between headers and request line. The regex prefix
12038 ^[^\ \t]*[\ \t] matches any HTTP method followed by a space, and the prefix
12039 ^[^ \t:]*: matches any header name followed by a colon.
12040
12041 - for performances reasons, the number of characters added to a request or to
12042 a response is limited at build time to values between 1 and 4 kB. This
12043 should normally be far more than enough for most usages. If it is too short
12044 on occasional usages, it is possible to gain some space by removing some
12045 useless headers before adding new ones.
12046
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010012047 - keywords beginning with "reqi" and "rspi" are the same as their counterpart
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012048 without the 'i' letter except that they ignore case when matching patterns.
12049
12050 - when a request passes through a frontend then a backend, all req* rules
12051 from the frontend will be evaluated, then all req* rules from the backend
12052 will be evaluated. The reverse path is applied to responses.
12053
12054 - req* statements are applied after "block" statements, so that "block" is
12055 always the first one, but before "use_backend" in order to permit rewriting
Willy Tarreaud72758d2010-01-12 10:42:19 +010012056 before switching.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012057
12058
Willy Tarreau74ca5042013-06-11 23:12:07 +0200120597. Using ACLs and fetching samples
12060----------------------------------
12061
12062Haproxy is capable of extracting data from request or response streams, from
12063client or server information, from tables, environmental information etc...
12064The action of extracting such data is called fetching a sample. Once retrieved,
12065these samples may be used for various purposes such as a key to a stick-table,
12066but most common usages consist in matching them against predefined constant
12067data called patterns.
12068
12069
120707.1. ACL basics
12071---------------
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012072
12073The use of Access Control Lists (ACL) provides a flexible solution to perform
12074content switching and generally to take decisions based on content extracted
12075from the request, the response or any environmental status. The principle is
12076simple :
12077
Willy Tarreau74ca5042013-06-11 23:12:07 +020012078 - extract a data sample from a stream, table or the environment
Willy Tarreaue6b11e42013-11-26 19:02:32 +010012079 - optionally apply some format conversion to the extracted sample
Willy Tarreau74ca5042013-06-11 23:12:07 +020012080 - apply one or multiple pattern matching methods on this sample
12081 - perform actions only when a pattern matches the sample
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012082
Willy Tarreau74ca5042013-06-11 23:12:07 +020012083The actions generally consist in blocking a request, selecting a backend, or
12084adding a header.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012085
12086In order to define a test, the "acl" keyword is used. The syntax is :
12087
Willy Tarreau74ca5042013-06-11 23:12:07 +020012088 acl <aclname> <criterion> [flags] [operator] [<value>] ...
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012089
12090This creates a new ACL <aclname> or completes an existing one with new tests.
12091Those tests apply to the portion of request/response specified in <criterion>
12092and may be adjusted with optional flags [flags]. Some criteria also support
Willy Tarreaue6b11e42013-11-26 19:02:32 +010012093an operator which may be specified before the set of values. Optionally some
12094conversion operators may be applied to the sample, and they will be specified
12095as a comma-delimited list of keywords just after the first keyword. The values
12096are of the type supported by the criterion, and are separated by spaces.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012097
12098ACL names must be formed from upper and lower case letters, digits, '-' (dash),
12099'_' (underscore) , '.' (dot) and ':' (colon). ACL names are case-sensitive,
12100which means that "my_acl" and "My_Acl" are two different ACLs.
12101
12102There is no enforced limit to the number of ACLs. The unused ones do not affect
12103performance, they just consume a small amount of memory.
12104
Willy Tarreau74ca5042013-06-11 23:12:07 +020012105The criterion generally is the name of a sample fetch method, or one of its ACL
12106specific declinations. The default test method is implied by the output type of
12107this sample fetch method. The ACL declinations can describe alternate matching
Willy Tarreaue6b11e42013-11-26 19:02:32 +010012108methods of a same sample fetch method. The sample fetch methods are the only
12109ones supporting a conversion.
Willy Tarreau74ca5042013-06-11 23:12:07 +020012110
12111Sample fetch methods return data which can be of the following types :
12112 - boolean
12113 - integer (signed or unsigned)
12114 - IPv4 or IPv6 address
12115 - string
12116 - data block
12117
Willy Tarreaue6b11e42013-11-26 19:02:32 +010012118Converters transform any of these data into any of these. For example, some
12119converters might convert a string to a lower-case string while other ones
12120would turn a string to an IPv4 address, or apply a netmask to an IP address.
12121The resulting sample is of the type of the last converter applied to the list,
12122which defaults to the type of the sample fetch method.
12123
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012124Each sample or converter returns data of a specific type, specified with its
12125keyword in this documentation. When an ACL is declared using a standard sample
12126fetch method, certain types automatically involved a default matching method
12127which are summarized in the table below :
12128
12129 +---------------------+-----------------+
12130 | Sample or converter | Default |
12131 | output type | matching method |
12132 +---------------------+-----------------+
12133 | boolean | bool |
12134 +---------------------+-----------------+
12135 | integer | int |
12136 +---------------------+-----------------+
12137 | ip | ip |
12138 +---------------------+-----------------+
12139 | string | str |
12140 +---------------------+-----------------+
12141 | binary | none, use "-m" |
12142 +---------------------+-----------------+
12143
12144Note that in order to match a binary samples, it is mandatory to specify a
12145matching method, see below.
12146
Willy Tarreau74ca5042013-06-11 23:12:07 +020012147The ACL engine can match these types against patterns of the following types :
12148 - boolean
12149 - integer or integer range
12150 - IP address / network
12151 - string (exact, substring, suffix, prefix, subdir, domain)
12152 - regular expression
12153 - hex block
12154
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012155The following ACL flags are currently supported :
12156
Willy Tarreau2b5285d2010-05-09 23:45:24 +020012157 -i : ignore case during matching of all subsequent patterns.
12158 -f : load patterns from a file.
Willy Tarreau74ca5042013-06-11 23:12:07 +020012159 -m : use a specific pattern matching method
Thierry FOURNIERb7729c92014-02-11 16:24:41 +010012160 -n : forbid the DNS resolutions
Thierry FOURNIER9860c412014-01-29 14:23:29 +010012161 -M : load the file pointed by -f like a map file.
Thierry FOURNIER3534d882014-01-20 17:01:44 +010012162 -u : force the unique id of the ACL
Willy Tarreau6a06a402007-07-15 20:15:28 +020012163 -- : force end of flags. Useful when a string looks like one of the flags.
12164
Willy Tarreau74ca5042013-06-11 23:12:07 +020012165The "-f" flag is followed by the name of a file from which all lines will be
12166read as individual values. It is even possible to pass multiple "-f" arguments
12167if the patterns are to be loaded from multiple files. Empty lines as well as
12168lines beginning with a sharp ('#') will be ignored. All leading spaces and tabs
12169will be stripped. If it is absolutely necessary to insert a valid pattern
12170beginning with a sharp, just prefix it with a space so that it is not taken for
12171a comment. Depending on the data type and match method, haproxy may load the
12172lines into a binary tree, allowing very fast lookups. This is true for IPv4 and
12173exact string matching. In this case, duplicates will automatically be removed.
12174
Thierry FOURNIER9860c412014-01-29 14:23:29 +010012175The "-M" flag allows an ACL to use a map file. If this flag is set, the file is
12176parsed as two column file. The first column contains the patterns used by the
12177ACL, and the second column contain the samples. The sample can be used later by
12178a map. This can be useful in some rare cases where an ACL would just be used to
12179check for the existence of a pattern in a map before a mapping is applied.
12180
Thierry FOURNIER3534d882014-01-20 17:01:44 +010012181The "-u" flag forces the unique id of the ACL. This unique id is used with the
12182socket interface to identify ACL and dynamically change its values. Note that a
12183file is always identified by its name even if an id is set.
12184
Willy Tarreau74ca5042013-06-11 23:12:07 +020012185Also, note that the "-i" flag applies to subsequent entries and not to entries
12186loaded from files preceding it. For instance :
12187
12188 acl valid-ua hdr(user-agent) -f exact-ua.lst -i -f generic-ua.lst test
12189
12190In this example, each line of "exact-ua.lst" will be exactly matched against
12191the "user-agent" header of the request. Then each line of "generic-ua" will be
12192case-insensitively matched. Then the word "test" will be insensitively matched
12193as well.
12194
12195The "-m" flag is used to select a specific pattern matching method on the input
12196sample. All ACL-specific criteria imply a pattern matching method and generally
12197do not need this flag. However, this flag is useful with generic sample fetch
12198methods to describe how they're going to be matched against the patterns. This
12199is required for sample fetches which return data type for which there is no
12200obvious matching method (eg: string or binary). When "-m" is specified and
12201followed by a pattern matching method name, this method is used instead of the
12202default one for the criterion. This makes it possible to match contents in ways
12203that were not initially planned, or with sample fetch methods which return a
12204string. The matching method also affects the way the patterns are parsed.
12205
Thierry FOURNIERb7729c92014-02-11 16:24:41 +010012206The "-n" flag forbids the dns resolutions. It is used with the load of ip files.
12207By default, if the parser cannot parse ip address it considers that the parsed
12208string is maybe a domain name and try dns resolution. The flag "-n" disable this
12209resolution. It is useful for detecting malformed ip lists. Note that if the DNS
12210server is not reachable, the haproxy configuration parsing may last many minutes
12211waiting fir the timeout. During this time no error messages are displayed. The
12212flag "-n" disable this behavior. Note also that during the runtime, this
12213function is disabled for the dynamic acl modifications.
12214
Willy Tarreau74ca5042013-06-11 23:12:07 +020012215There are some restrictions however. Not all methods can be used with all
12216sample fetch methods. Also, if "-m" is used in conjunction with "-f", it must
12217be placed first. The pattern matching method must be one of the following :
Willy Tarreau5adeda12013-03-31 22:13:34 +020012218
12219 - "found" : only check if the requested sample could be found in the stream,
12220 but do not compare it against any pattern. It is recommended not
Willy Tarreau74ca5042013-06-11 23:12:07 +020012221 to pass any pattern to avoid confusion. This matching method is
12222 particularly useful to detect presence of certain contents such
12223 as headers, cookies, etc... even if they are empty and without
12224 comparing them to anything nor counting them.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012225
12226 - "bool" : check the value as a boolean. It can only be applied to fetches
12227 which return a boolean or integer value, and takes no pattern.
Willy Tarreau74ca5042013-06-11 23:12:07 +020012228 Value zero or false does not match, all other values do match.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012229
12230 - "int" : match the value as an integer. It can be used with integer and
Willy Tarreau74ca5042013-06-11 23:12:07 +020012231 boolean samples. Boolean false is integer 0, true is integer 1.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012232
12233 - "ip" : match the value as an IPv4 or IPv6 address. It is compatible
Willy Tarreau74ca5042013-06-11 23:12:07 +020012234 with IP address samples only, so it is implied and never needed.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012235
12236 - "bin" : match the contents against an hexadecimal string representing a
12237 binary sequence. This may be used with binary or string samples.
12238
12239 - "len" : match the sample's length as an integer. This may be used with
12240 binary or string samples.
12241
Willy Tarreau74ca5042013-06-11 23:12:07 +020012242 - "str" : exact match : match the contents against a string. This may be
12243 used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012244
Willy Tarreau74ca5042013-06-11 23:12:07 +020012245 - "sub" : substring match : check that the contents contain at least one of
12246 the provided string patterns. This may be used with binary or
12247 string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012248
Willy Tarreau74ca5042013-06-11 23:12:07 +020012249 - "reg" : regex match : match the contents against a list of regular
12250 expressions. This may be used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012251
Willy Tarreau74ca5042013-06-11 23:12:07 +020012252 - "beg" : prefix match : check that the contents begin like the provided
12253 string patterns. This may be used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012254
Willy Tarreau74ca5042013-06-11 23:12:07 +020012255 - "end" : suffix match : check that the contents end like the provided
12256 string patterns. This may be used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012257
Willy Tarreau74ca5042013-06-11 23:12:07 +020012258 - "dir" : subdir match : check that a slash-delimited portion of the
12259 contents exactly matches one of the provided string patterns.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012260 This may be used with binary or string samples.
12261
Willy Tarreau74ca5042013-06-11 23:12:07 +020012262 - "dom" : domain match : check that a dot-delimited portion of the contents
12263 exactly match one of the provided string patterns. This may be
12264 used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012265
12266For example, to quickly detect the presence of cookie "JSESSIONID" in an HTTP
12267request, it is possible to do :
12268
12269 acl jsess_present cook(JSESSIONID) -m found
12270
12271In order to apply a regular expression on the 500 first bytes of data in the
12272buffer, one would use the following acl :
12273
12274 acl script_tag payload(0,500) -m reg -i <script>
12275
Willy Tarreaue6b11e42013-11-26 19:02:32 +010012276On systems where the regex library is much slower when using "-i", it is
12277possible to convert the sample to lowercase before matching, like this :
12278
12279 acl script_tag payload(0,500),lower -m reg <script>
12280
Willy Tarreau74ca5042013-06-11 23:12:07 +020012281All ACL-specific criteria imply a default matching method. Most often, these
12282criteria are composed by concatenating the name of the original sample fetch
12283method and the matching method. For example, "hdr_beg" applies the "beg" match
12284to samples retrieved using the "hdr" fetch method. Since all ACL-specific
12285criteria rely on a sample fetch method, it is always possible instead to use
12286the original sample fetch method and the explicit matching method using "-m".
Willy Tarreau2b5285d2010-05-09 23:45:24 +020012287
Willy Tarreau74ca5042013-06-11 23:12:07 +020012288If an alternate match is specified using "-m" on an ACL-specific criterion,
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030012289the matching method is simply applied to the underlying sample fetch method.
12290For example, all ACLs below are exact equivalent :
Willy Tarreau2b5285d2010-05-09 23:45:24 +020012291
Willy Tarreau74ca5042013-06-11 23:12:07 +020012292 acl short_form hdr_beg(host) www.
12293 acl alternate1 hdr_beg(host) -m beg www.
12294 acl alternate2 hdr_dom(host) -m beg www.
12295 acl alternate3 hdr(host) -m beg www.
Willy Tarreau2b5285d2010-05-09 23:45:24 +020012296
Willy Tarreau2b5285d2010-05-09 23:45:24 +020012297
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012298The table below summarizes the compatibility matrix between sample or converter
12299types and the pattern types to fetch against. It indicates for each compatible
12300combination the name of the matching method to be used, surrounded with angle
12301brackets ">" and "<" when the method is the default one and will work by
12302default without "-m".
Willy Tarreau0ba27502007-12-24 16:55:16 +010012303
Willy Tarreau74ca5042013-06-11 23:12:07 +020012304 +-------------------------------------------------+
12305 | Input sample type |
12306 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012307 | pattern type | boolean | integer | ip | string | binary |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012308 +----------------------+---------+---------+---------+---------+---------+
12309 | none (presence only) | found | found | found | found | found |
12310 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012311 | none (boolean value) |> bool <| bool | | bool | |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012312 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012313 | integer (value) | int |> int <| int | int | |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012314 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012315 | integer (length) | len | len | len | len | len |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012316 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012317 | IP address | | |> ip <| ip | ip |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012318 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012319 | exact string | str | str | str |> str <| str |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012320 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012321 | prefix | beg | beg | beg | beg | beg |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012322 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012323 | suffix | end | end | end | end | end |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012324 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012325 | substring | sub | sub | sub | sub | sub |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012326 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012327 | subdir | dir | dir | dir | dir | dir |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012328 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012329 | domain | dom | dom | dom | dom | dom |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012330 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012331 | regex | reg | reg | reg | reg | reg |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012332 +----------------------+---------+---------+---------+---------+---------+
12333 | hex block | | | | bin | bin |
12334 +----------------------+---------+---------+---------+---------+---------+
Willy Tarreau6a06a402007-07-15 20:15:28 +020012335
12336
Willy Tarreau74ca5042013-06-11 23:12:07 +0200123377.1.1. Matching booleans
12338------------------------
12339
12340In order to match a boolean, no value is needed and all values are ignored.
12341Boolean matching is used by default for all fetch methods of type "boolean".
12342When boolean matching is used, the fetched value is returned as-is, which means
12343that a boolean "true" will always match and a boolean "false" will never match.
12344
12345Boolean matching may also be enforced using "-m bool" on fetch methods which
12346return an integer value. Then, integer value 0 is converted to the boolean
12347"false" and all other values are converted to "true".
12348
Willy Tarreau6a06a402007-07-15 20:15:28 +020012349
Willy Tarreau74ca5042013-06-11 23:12:07 +0200123507.1.2. Matching integers
12351------------------------
12352
12353Integer matching applies by default to integer fetch methods. It can also be
12354enforced on boolean fetches using "-m int". In this case, "false" is converted
12355to the integer 0, and "true" is converted to the integer 1.
12356
12357Integer matching also supports integer ranges and operators. Note that integer
12358matching only applies to positive values. A range is a value expressed with a
12359lower and an upper bound separated with a colon, both of which may be omitted.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012360
12361For instance, "1024:65535" is a valid range to represent a range of
12362unprivileged ports, and "1024:" would also work. "0:1023" is a valid
12363representation of privileged ports, and ":1023" would also work.
12364
Willy Tarreau62644772008-07-16 18:36:06 +020012365As a special case, some ACL functions support decimal numbers which are in fact
12366two integers separated by a dot. This is used with some version checks for
12367instance. All integer properties apply to those decimal numbers, including
12368ranges and operators.
12369
Willy Tarreau6a06a402007-07-15 20:15:28 +020012370For an easier usage, comparison operators are also supported. Note that using
Willy Tarreau0ba27502007-12-24 16:55:16 +010012371operators with ranges does not make much sense and is strongly discouraged.
12372Similarly, it does not make much sense to perform order comparisons with a set
12373of values.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012374
Willy Tarreau0ba27502007-12-24 16:55:16 +010012375Available operators for integer matching are :
Willy Tarreau6a06a402007-07-15 20:15:28 +020012376
12377 eq : true if the tested value equals at least one value
12378 ge : true if the tested value is greater than or equal to at least one value
12379 gt : true if the tested value is greater than at least one value
12380 le : true if the tested value is less than or equal to at least one value
12381 lt : true if the tested value is less than at least one value
12382
Willy Tarreau0ba27502007-12-24 16:55:16 +010012383For instance, the following ACL matches any negative Content-Length header :
Willy Tarreau6a06a402007-07-15 20:15:28 +020012384
12385 acl negative-length hdr_val(content-length) lt 0
12386
Willy Tarreau62644772008-07-16 18:36:06 +020012387This one matches SSL versions between 3.0 and 3.1 (inclusive) :
12388
12389 acl sslv3 req_ssl_ver 3:3.1
12390
Willy Tarreau6a06a402007-07-15 20:15:28 +020012391
Willy Tarreau74ca5042013-06-11 23:12:07 +0200123927.1.3. Matching strings
12393-----------------------
12394
12395String matching applies to string or binary fetch methods, and exists in 6
12396different forms :
12397
12398 - exact match (-m str) : the extracted string must exactly match the
12399 patterns ;
12400
12401 - substring match (-m sub) : the patterns are looked up inside the
12402 extracted string, and the ACL matches if any of them is found inside ;
12403
12404 - prefix match (-m beg) : the patterns are compared with the beginning of
12405 the extracted string, and the ACL matches if any of them matches.
12406
12407 - suffix match (-m end) : the patterns are compared with the end of the
12408 extracted string, and the ACL matches if any of them matches.
12409
Baptiste Assmann33db6002016-03-06 23:32:10 +010012410 - subdir match (-m dir) : the patterns are looked up inside the extracted
Willy Tarreau74ca5042013-06-11 23:12:07 +020012411 string, delimited with slashes ("/"), and the ACL matches if any of them
12412 matches.
12413
12414 - domain match (-m dom) : the patterns are looked up inside the extracted
12415 string, delimited with dots ("."), and the ACL matches if any of them
12416 matches.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012417
12418String matching applies to verbatim strings as they are passed, with the
12419exception of the backslash ("\") which makes it possible to escape some
12420characters such as the space. If the "-i" flag is passed before the first
12421string, then the matching will be performed ignoring the case. In order
12422to match the string "-i", either set it second, or pass the "--" flag
Willy Tarreau0ba27502007-12-24 16:55:16 +010012423before the first string. Same applies of course to match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +020012424
12425
Willy Tarreau74ca5042013-06-11 23:12:07 +0200124267.1.4. Matching regular expressions (regexes)
12427---------------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +020012428
12429Just like with string matching, regex matching applies to verbatim strings as
12430they are passed, with the exception of the backslash ("\") which makes it
12431possible to escape some characters such as the space. If the "-i" flag is
12432passed before the first regex, then the matching will be performed ignoring
12433the case. In order to match the string "-i", either set it second, or pass
Willy Tarreau0ba27502007-12-24 16:55:16 +010012434the "--" flag before the first string. Same principle applies of course to
12435match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +020012436
12437
Willy Tarreau74ca5042013-06-11 23:12:07 +0200124387.1.5. Matching arbitrary data blocks
12439-------------------------------------
12440
12441It is possible to match some extracted samples against a binary block which may
12442not safely be represented as a string. For this, the patterns must be passed as
12443a series of hexadecimal digits in an even number, when the match method is set
12444to binary. Each sequence of two digits will represent a byte. The hexadecimal
12445digits may be used upper or lower case.
12446
12447Example :
12448 # match "Hello\n" in the input stream (\x48 \x65 \x6c \x6c \x6f \x0a)
12449 acl hello payload(0,6) -m bin 48656c6c6f0a
12450
12451
124527.1.6. Matching IPv4 and IPv6 addresses
12453---------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +020012454
12455IPv4 addresses values can be specified either as plain addresses or with a
12456netmask appended, in which case the IPv4 address matches whenever it is
12457within the network. Plain addresses may also be replaced with a resolvable
Willy Tarreaud2a4aa22008-01-31 15:28:22 +010012458host name, but this practice is generally discouraged as it makes it more
Willy Tarreau0ba27502007-12-24 16:55:16 +010012459difficult to read and debug configurations. If hostnames are used, you should
12460at least ensure that they are present in /etc/hosts so that the configuration
12461does not depend on any random DNS match at the moment the configuration is
12462parsed.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012463
Daniel Schnellereba56342016-04-13 00:26:52 +020012464The dotted IPv4 address notation is supported in both regular as well as the
12465abbreviated form with all-0-octets omitted:
12466
12467 +------------------+------------------+------------------+
12468 | Example 1 | Example 2 | Example 3 |
12469 +------------------+------------------+------------------+
12470 | 192.168.0.1 | 10.0.0.12 | 127.0.0.1 |
12471 | 192.168.1 | 10.12 | 127.1 |
12472 | 192.168.0.1/22 | 10.0.0.12/8 | 127.0.0.1/8 |
12473 | 192.168.1/22 | 10.12/8 | 127.1/8 |
12474 +------------------+------------------+------------------+
12475
12476Notice that this is different from RFC 4632 CIDR address notation in which
12477192.168.42/24 would be equivalent to 192.168.42.0/24.
12478
Willy Tarreauceb4ac92012-04-28 00:41:46 +020012479IPv6 may be entered in their usual form, with or without a netmask appended.
12480Only bit counts are accepted for IPv6 netmasks. In order to avoid any risk of
12481trouble with randomly resolved IP addresses, host names are never allowed in
12482IPv6 patterns.
12483
12484HAProxy is also able to match IPv4 addresses with IPv6 addresses in the
12485following situations :
12486 - tested address is IPv4, pattern address is IPv4, the match applies
12487 in IPv4 using the supplied mask if any.
12488 - tested address is IPv6, pattern address is IPv6, the match applies
12489 in IPv6 using the supplied mask if any.
12490 - tested address is IPv6, pattern address is IPv4, the match applies in IPv4
12491 using the pattern's mask if the IPv6 address matches with 2002:IPV4::,
12492 ::IPV4 or ::ffff:IPV4, otherwise it fails.
12493 - tested address is IPv4, pattern address is IPv6, the IPv4 address is first
12494 converted to IPv6 by prefixing ::ffff: in front of it, then the match is
12495 applied in IPv6 using the supplied IPv6 mask.
12496
Willy Tarreau74ca5042013-06-11 23:12:07 +020012497
124987.2. Using ACLs to form conditions
12499----------------------------------
12500
12501Some actions are only performed upon a valid condition. A condition is a
12502combination of ACLs with operators. 3 operators are supported :
12503
12504 - AND (implicit)
12505 - OR (explicit with the "or" keyword or the "||" operator)
12506 - Negation with the exclamation mark ("!")
Willy Tarreau6a06a402007-07-15 20:15:28 +020012507
Willy Tarreau74ca5042013-06-11 23:12:07 +020012508A condition is formed as a disjunctive form:
Willy Tarreau6a06a402007-07-15 20:15:28 +020012509
Willy Tarreau74ca5042013-06-11 23:12:07 +020012510 [!]acl1 [!]acl2 ... [!]acln { or [!]acl1 [!]acl2 ... [!]acln } ...
Willy Tarreaubef91e72013-03-31 23:14:46 +020012511
Willy Tarreau74ca5042013-06-11 23:12:07 +020012512Such conditions are generally used after an "if" or "unless" statement,
12513indicating when the condition will trigger the action.
Willy Tarreaubef91e72013-03-31 23:14:46 +020012514
Willy Tarreau74ca5042013-06-11 23:12:07 +020012515For instance, to block HTTP requests to the "*" URL with methods other than
12516"OPTIONS", as well as POST requests without content-length, and GET or HEAD
12517requests with a content-length greater than 0, and finally every request which
12518is not either GET/HEAD/POST/OPTIONS !
12519
12520 acl missing_cl hdr_cnt(Content-length) eq 0
Jarno Huuskonen84c51ec2017-04-03 14:20:34 +030012521 http-request deny if HTTP_URL_STAR !METH_OPTIONS || METH_POST missing_cl
12522 http-request deny if METH_GET HTTP_CONTENT
12523 http-request deny unless METH_GET or METH_POST or METH_OPTIONS
Willy Tarreau74ca5042013-06-11 23:12:07 +020012524
12525To select a different backend for requests to static contents on the "www" site
12526and to every request on the "img", "video", "download" and "ftp" hosts :
12527
12528 acl url_static path_beg /static /images /img /css
12529 acl url_static path_end .gif .png .jpg .css .js
12530 acl host_www hdr_beg(host) -i www
12531 acl host_static hdr_beg(host) -i img. video. download. ftp.
12532
12533 # now use backend "static" for all static-only hosts, and for static urls
12534 # of host "www". Use backend "www" for the rest.
12535 use_backend static if host_static or host_www url_static
12536 use_backend www if host_www
12537
12538It is also possible to form rules using "anonymous ACLs". Those are unnamed ACL
12539expressions that are built on the fly without needing to be declared. They must
12540be enclosed between braces, with a space before and after each brace (because
12541the braces must be seen as independent words). Example :
12542
12543 The following rule :
12544
12545 acl missing_cl hdr_cnt(Content-length) eq 0
Jarno Huuskonen84c51ec2017-04-03 14:20:34 +030012546 http-request deny if METH_POST missing_cl
Willy Tarreau74ca5042013-06-11 23:12:07 +020012547
12548 Can also be written that way :
12549
Jarno Huuskonen84c51ec2017-04-03 14:20:34 +030012550 http-request deny if METH_POST { hdr_cnt(Content-length) eq 0 }
Willy Tarreau74ca5042013-06-11 23:12:07 +020012551
12552It is generally not recommended to use this construct because it's a lot easier
12553to leave errors in the configuration when written that way. However, for very
12554simple rules matching only one source IP address for instance, it can make more
12555sense to use them than to declare ACLs with random names. Another example of
12556good use is the following :
12557
12558 With named ACLs :
12559
12560 acl site_dead nbsrv(dynamic) lt 2
12561 acl site_dead nbsrv(static) lt 2
12562 monitor fail if site_dead
12563
12564 With anonymous ACLs :
12565
12566 monitor fail if { nbsrv(dynamic) lt 2 } || { nbsrv(static) lt 2 }
12567
Jarno Huuskonen84c51ec2017-04-03 14:20:34 +030012568See section 4.2 for detailed help on the "http-request deny" and "use_backend"
12569keywords.
Willy Tarreau74ca5042013-06-11 23:12:07 +020012570
12571
125727.3. Fetching samples
12573---------------------
12574
12575Historically, sample fetch methods were only used to retrieve data to match
12576against patterns using ACLs. With the arrival of stick-tables, a new class of
12577sample fetch methods was created, most often sharing the same syntax as their
12578ACL counterpart. These sample fetch methods are also known as "fetches". As
12579of now, ACLs and fetches have converged. All ACL fetch methods have been made
12580available as fetch methods, and ACLs may use any sample fetch method as well.
12581
12582This section details all available sample fetch methods and their output type.
12583Some sample fetch methods have deprecated aliases that are used to maintain
12584compatibility with existing configurations. They are then explicitly marked as
12585deprecated and should not be used in new setups.
12586
12587The ACL derivatives are also indicated when available, with their respective
12588matching methods. These ones all have a well defined default pattern matching
12589method, so it is never necessary (though allowed) to pass the "-m" option to
12590indicate how the sample will be matched using ACLs.
12591
12592As indicated in the sample type versus matching compatibility matrix above,
12593when using a generic sample fetch method in an ACL, the "-m" option is
12594mandatory unless the sample type is one of boolean, integer, IPv4 or IPv6. When
12595the same keyword exists as an ACL keyword and as a standard fetch method, the
12596ACL engine will automatically pick the ACL-only one by default.
12597
12598Some of these keywords support one or multiple mandatory arguments, and one or
12599multiple optional arguments. These arguments are strongly typed and are checked
12600when the configuration is parsed so that there is no risk of running with an
12601incorrect argument (eg: an unresolved backend name). Fetch function arguments
12602are passed between parenthesis and are delimited by commas. When an argument
12603is optional, it will be indicated below between square brackets ('[ ]'). When
12604all arguments are optional, the parenthesis may be omitted.
12605
12606Thus, the syntax of a standard sample fetch method is one of the following :
12607 - name
12608 - name(arg1)
12609 - name(arg1,arg2)
12610
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012611
126127.3.1. Converters
12613-----------------
12614
Willy Tarreaue6b11e42013-11-26 19:02:32 +010012615Sample fetch methods may be combined with transformations to be applied on top
12616of the fetched sample (also called "converters"). These combinations form what
12617is called "sample expressions" and the result is a "sample". Initially this
12618was only supported by "stick on" and "stick store-request" directives but this
12619has now be extended to all places where samples may be used (acls, log-format,
12620unique-id-format, add-header, ...).
12621
12622These transformations are enumerated as a series of specific keywords after the
12623sample fetch method. These keywords may equally be appended immediately after
12624the fetch keyword's argument, delimited by a comma. These keywords can also
12625support some arguments (eg: a netmask) which must be passed in parenthesis.
Willy Tarreau0ba27502007-12-24 16:55:16 +010012626
Willy Tarreau97707872015-01-27 15:12:13 +010012627A certain category of converters are bitwise and arithmetic operators which
12628support performing basic operations on integers. Some bitwise operations are
12629supported (and, or, xor, cpl) and some arithmetic operations are supported
12630(add, sub, mul, div, mod, neg). Some comparators are provided (odd, even, not,
12631bool) which make it possible to report a match without having to write an ACL.
12632
Willy Tarreau74ca5042013-06-11 23:12:07 +020012633The currently available list of transformation keywords include :
Willy Tarreau0ba27502007-12-24 16:55:16 +010012634
Ben Shillitof25e8e52016-12-02 14:25:37 +00001263551d.single(<prop>[,<prop>*])
12636 Returns values for the properties requested as a string, where values are
12637 separated by the delimiter specified with "51degrees-property-separator".
12638 The device is identified using the User-Agent header passed to the
12639 converter. The function can be passed up to five property names, and if a
12640 property name can't be found, the value "NoData" is returned.
12641
12642 Example :
12643 # Here the header "X-51D-DeviceTypeMobileTablet" is added to the request
12644 # containg values for the three properties requested by using the
12645 # User-Agent passed to the converter.
12646 frontend http-in
12647 bind *:8081
12648 default_backend servers
12649 http-request set-header X-51D-DeviceTypeMobileTablet \
12650 %[req.fhdr(User-Agent),51d.single(DeviceType,IsMobile,IsTablet)]
12651
Willy Tarreau97707872015-01-27 15:12:13 +010012652add(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012653 Adds <value> to the input value of type signed integer, and returns the
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012654 result as a signed integer. <value> can be a numeric value or a variable
Daniel Schneller0b547052016-03-21 20:46:57 +010012655 name. The name of the variable starts with an indication about its scope. The
12656 scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012657 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012658 "sess" : the variable is shared with the whole session
12659 "txn" : the variable is shared with the transaction (request and response)
12660 "req" : the variable is shared only during request processing
12661 "res" : the variable is shared only during response processing
12662 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012663 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012664
12665and(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012666 Performs a bitwise "AND" between <value> and the input value of type signed
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012667 integer, and returns the result as an signed integer. <value> can be a
Daniel Schneller0b547052016-03-21 20:46:57 +010012668 numeric value or a variable name. The name of the variable starts with an
12669 indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012670 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012671 "sess" : the variable is shared with the whole session
12672 "txn" : the variable is shared with the transaction (request and response)
12673 "req" : the variable is shared only during request processing
12674 "res" : the variable is shared only during response processing
12675 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012676 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012677
Holger Just1bfc24b2017-05-06 00:56:53 +020012678b64dec
12679 Converts (decodes) a base64 encoded input string to its binary
12680 representation. It performs the inverse operation of base64().
12681
Emeric Brun53d1a982014-04-30 18:21:37 +020012682base64
12683 Converts a binary input sample to a base64 string. It is used to log or
12684 transfer binary content in a way that can be reliably transferred (eg:
12685 an SSL ID can be copied in a header).
12686
Willy Tarreau97707872015-01-27 15:12:13 +010012687bool
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012688 Returns a boolean TRUE if the input value of type signed integer is
Willy Tarreau97707872015-01-27 15:12:13 +010012689 non-null, otherwise returns FALSE. Used in conjunction with and(), it can be
12690 used to report true/false for bit testing on input values (eg: verify the
12691 presence of a flag).
12692
Emeric Brun54c4ac82014-11-03 15:32:43 +010012693bytes(<offset>[,<length>])
12694 Extracts some bytes from an input binary sample. The result is a binary
12695 sample starting at an offset (in bytes) of the original sample and
Tim Düsterhus4896c442016-11-29 02:15:19 +010012696 optionally truncated at the given length.
Emeric Brun54c4ac82014-11-03 15:32:43 +010012697
Willy Tarreau97707872015-01-27 15:12:13 +010012698cpl
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012699 Takes the input value of type signed integer, applies a ones-complement
12700 (flips all bits) and returns the result as an signed integer.
Willy Tarreau97707872015-01-27 15:12:13 +010012701
Willy Tarreau80599772015-01-20 19:35:24 +010012702crc32([<avalanche>])
12703 Hashes a binary input sample into an unsigned 32-bit quantity using the CRC32
12704 hash function. Optionally, it is possible to apply a full avalanche hash
12705 function to the output if the optional <avalanche> argument equals 1. This
12706 converter uses the same functions as used by the various hash-based load
12707 balancing algorithms, so it will provide exactly the same results. It is
12708 provided for compatibility with other software which want a CRC32 to be
12709 computed on some input keys, so it follows the most common implementation as
12710 found in Ethernet, Gzip, PNG, etc... It is slower than the other algorithms
12711 but may provide a better or at least less predictable distribution. It must
12712 not be used for security purposes as a 32-bit hash is trivial to break. See
12713 also "djb2", "sdbm", "wt6" and the "hash-type" directive.
12714
David Carlier29b3ca32015-09-25 14:09:21 +010012715da-csv-conv(<prop>[,<prop>*])
David Carlier4542b102015-06-01 13:54:29 +020012716 Asks the DeviceAtlas converter to identify the User Agent string passed on
12717 input, and to emit a string made of the concatenation of the properties
12718 enumerated in argument, delimited by the separator defined by the global
12719 keyword "deviceatlas-property-separator", or by default the pipe character
David Carlier840b0242016-03-16 10:09:55 +000012720 ('|'). There's a limit of 12 different properties imposed by the haproxy
David Carlier4542b102015-06-01 13:54:29 +020012721 configuration language.
12722
12723 Example:
12724 frontend www
Cyril Bonté307ee1e2015-09-28 23:16:06 +020012725 bind *:8881
12726 default_backend servers
David Carlier840b0242016-03-16 10:09:55 +000012727 http-request set-header X-DeviceAtlas-Data %[req.fhdr(User-Agent),da-csv(primaryHardwareType,osName,osVersion,browserName,browserVersion,browserRenderingEngine)]
David Carlier4542b102015-06-01 13:54:29 +020012728
Thierry FOURNIER9687c772015-05-07 15:46:29 +020012729debug
12730 This converter is used as debug tool. It dumps on screen the content and the
12731 type of the input sample. The sample is returned as is on its output. This
12732 converter only exists when haproxy was built with debugging enabled.
12733
Willy Tarreau97707872015-01-27 15:12:13 +010012734div(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012735 Divides the input value of type signed integer by <value>, and returns the
12736 result as an signed integer. If <value> is null, the largest unsigned
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012737 integer is returned (typically 2^63-1). <value> can be a numeric value or a
Daniel Schneller0b547052016-03-21 20:46:57 +010012738 variable name. The name of the variable starts with an indication about its
12739 scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012740 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012741 "sess" : the variable is shared with the whole session
12742 "txn" : the variable is shared with the transaction (request and response)
12743 "req" : the variable is shared only during request processing
12744 "res" : the variable is shared only during response processing
12745 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012746 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012747
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020012748djb2([<avalanche>])
12749 Hashes a binary input sample into an unsigned 32-bit quantity using the DJB2
12750 hash function. Optionally, it is possible to apply a full avalanche hash
12751 function to the output if the optional <avalanche> argument equals 1. This
12752 converter uses the same functions as used by the various hash-based load
12753 balancing algorithms, so it will provide exactly the same results. It is
12754 mostly intended for debugging, but can be used as a stick-table entry to
12755 collect rough statistics. It must not be used for security purposes as a
Willy Tarreau80599772015-01-20 19:35:24 +010012756 32-bit hash is trivial to break. See also "crc32", "sdbm", "wt6" and the
12757 "hash-type" directive.
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020012758
Willy Tarreau97707872015-01-27 15:12:13 +010012759even
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012760 Returns a boolean TRUE if the input value of type signed integer is even
Willy Tarreau97707872015-01-27 15:12:13 +010012761 otherwise returns FALSE. It is functionally equivalent to "not,and(1),bool".
12762
Emeric Brunf399b0d2014-11-03 17:07:03 +010012763field(<index>,<delimiters>)
12764 Extracts the substring at the given index considering given delimiters from
12765 an input string. Indexes start at 1 and delimiters are a string formatted
12766 list of chars.
12767
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012768hex
12769 Converts a binary input sample to an hex string containing two hex digits per
12770 input byte. It is used to log or transfer hex dumps of some binary input data
12771 in a way that can be reliably transferred (eg: an SSL ID can be copied in a
12772 header).
Thierry FOURNIER2f49d6d2014-03-12 15:01:52 +010012773
Dragan Dosen3f957b22017-10-24 09:27:34 +020012774hex2i
12775 Converts a hex string containing two hex digits per input byte to an
12776 integer. If the input value can not be converted, then zero is returned.
12777
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012778http_date([<offset>])
12779 Converts an integer supposed to contain a date since epoch to a string
12780 representing this date in a format suitable for use in HTTP header fields. If
12781 an offset value is specified, then it is a number of seconds that is added to
12782 the date before the conversion is operated. This is particularly useful to
12783 emit Date header fields, Expires values in responses when combined with a
12784 positive offset, or Last-Modified values when the offset is negative.
Willy Tarreau74ca5042013-06-11 23:12:07 +020012785
Willy Tarreaud9f316a2014-07-10 14:03:38 +020012786in_table(<table>)
12787 Uses the string representation of the input sample to perform a look up in
12788 the specified table. If the key is not found in the table, a boolean false
12789 is returned. Otherwise a boolean true is returned. This can be used to verify
12790 the presence of a certain key in a table tracking some elements (eg: whether
12791 or not a source IP address or an Authorization header was already seen).
12792
Willy Tarreauffcb2e42014-07-10 16:29:08 +020012793ipmask(<mask>)
12794 Apply a mask to an IPv4 address, and use the result for lookups and storage.
12795 This can be used to make all hosts within a certain mask to share the same
12796 table entries and as such use the same server. The mask can be passed in
12797 dotted form (eg: 255.255.255.0) or in CIDR form (eg: 24).
12798
Thierry FOURNIER317e1c42014-08-12 10:20:47 +020012799json([<input-code>])
12800 Escapes the input string and produces an ASCII ouput string ready to use as a
12801 JSON string. The converter tries to decode the input string according to the
Herve COMMOWICK8dfe8632016-08-05 12:01:20 +020012802 <input-code> parameter. It can be "ascii", "utf8", "utf8s", "utf8p" or
Thierry FOURNIER317e1c42014-08-12 10:20:47 +020012803 "utf8ps". The "ascii" decoder never fails. The "utf8" decoder detects 3 types
12804 of errors:
12805 - bad UTF-8 sequence (lone continuation byte, bad number of continuation
12806 bytes, ...)
12807 - invalid range (the decoded value is within a UTF-8 prohibited range),
12808 - code overlong (the value is encoded with more bytes than necessary).
12809
12810 The UTF-8 JSON encoding can produce a "too long value" error when the UTF-8
12811 character is greater than 0xffff because the JSON string escape specification
12812 only authorizes 4 hex digits for the value encoding. The UTF-8 decoder exists
12813 in 4 variants designated by a combination of two suffix letters : "p" for
12814 "permissive" and "s" for "silently ignore". The behaviors of the decoders
12815 are :
12816 - "ascii" : never fails ;
12817 - "utf8" : fails on any detected errors ;
12818 - "utf8s" : never fails, but removes characters corresponding to errors ;
12819 - "utf8p" : accepts and fixes the overlong errors, but fails on any other
12820 error ;
12821 - "utf8ps" : never fails, accepts and fixes the overlong errors, but removes
12822 characters corresponding to the other errors.
12823
12824 This converter is particularly useful for building properly escaped JSON for
12825 logging to servers which consume JSON-formated traffic logs.
12826
12827 Example:
Thierry FOURNIER317e1c42014-08-12 10:20:47 +020012828 capture request header Host len 15
Herve COMMOWICK8dfe8632016-08-05 12:01:20 +020012829 capture request header user-agent len 150
12830 log-format '{"ip":"%[src]","user-agent":"%[capture.req.hdr(1),json(utf8s)]"}'
Thierry FOURNIER317e1c42014-08-12 10:20:47 +020012831
12832 Input request from client 127.0.0.1:
12833 GET / HTTP/1.0
12834 User-Agent: Very "Ugly" UA 1/2
12835
12836 Output log:
12837 {"ip":"127.0.0.1","user-agent":"Very \"Ugly\" UA 1\/2"}
12838
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012839language(<value>[,<default>])
12840 Returns the value with the highest q-factor from a list as extracted from the
12841 "accept-language" header using "req.fhdr". Values with no q-factor have a
12842 q-factor of 1. Values with a q-factor of 0 are dropped. Only values which
12843 belong to the list of semi-colon delimited <values> will be considered. The
12844 argument <value> syntax is "lang[;lang[;lang[;...]]]". If no value matches the
12845 given list and a default value is provided, it is returned. Note that language
12846 names may have a variant after a dash ('-'). If this variant is present in the
12847 list, it will be matched, but if it is not, only the base language is checked.
12848 The match is case-sensitive, and the output string is always one of those
12849 provided in arguments. The ordering of arguments is meaningless, only the
12850 ordering of the values in the request counts, as the first value among
12851 multiple sharing the same q-factor is used.
Thierry FOURNIERad903512014-04-11 17:51:01 +020012852
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012853 Example :
Thierry FOURNIERad903512014-04-11 17:51:01 +020012854
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012855 # this configuration switches to the backend matching a
12856 # given language based on the request :
Thierry FOURNIERad903512014-04-11 17:51:01 +020012857
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012858 acl es req.fhdr(accept-language),language(es;fr;en) -m str es
12859 acl fr req.fhdr(accept-language),language(es;fr;en) -m str fr
12860 acl en req.fhdr(accept-language),language(es;fr;en) -m str en
12861 use_backend spanish if es
12862 use_backend french if fr
12863 use_backend english if en
12864 default_backend choose_your_language
Thierry FOURNIERad903512014-04-11 17:51:01 +020012865
Willy Tarreauffcb2e42014-07-10 16:29:08 +020012866lower
12867 Convert a string sample to lower case. This can only be placed after a string
12868 sample fetch function or after a transformation keyword returning a string
12869 type. The result is of type string.
12870
Willy Tarreau0dbfdba2014-07-10 16:37:47 +020012871ltime(<format>[,<offset>])
12872 Converts an integer supposed to contain a date since epoch to a string
12873 representing this date in local time using a format defined by the <format>
12874 string using strftime(3). The purpose is to allow any date format to be used
12875 in logs. An optional <offset> in seconds may be applied to the input date
12876 (positive or negative). See the strftime() man page for the format supported
12877 by your operating system. See also the utime converter.
12878
12879 Example :
12880
12881 # Emit two colons, one with the local time and another with ip:port
12882 # Eg: 20140710162350 127.0.0.1:57325
12883 log-format %[date,ltime(%Y%m%d%H%M%S)]\ %ci:%cp
12884
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012885map(<map_file>[,<default_value>])
12886map_<match_type>(<map_file>[,<default_value>])
12887map_<match_type>_<output_type>(<map_file>[,<default_value>])
12888 Search the input value from <map_file> using the <match_type> matching method,
12889 and return the associated value converted to the type <output_type>. If the
12890 input value cannot be found in the <map_file>, the converter returns the
12891 <default_value>. If the <default_value> is not set, the converter fails and
12892 acts as if no input value could be fetched. If the <match_type> is not set, it
12893 defaults to "str". Likewise, if the <output_type> is not set, it defaults to
12894 "str". For convenience, the "map" keyword is an alias for "map_str" and maps a
12895 string to another string.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012896
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012897 It is important to avoid overlapping between the keys : IP addresses and
12898 strings are stored in trees, so the first of the finest match will be used.
12899 Other keys are stored in lists, so the first matching occurrence will be used.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012900
Tim Düsterhus4896c442016-11-29 02:15:19 +010012901 The following array contains the list of all map functions available sorted by
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012902 input type, match type and output type.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012903
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012904 input type | match method | output type str | output type int | output type ip
12905 -----------+--------------+-----------------+-----------------+---------------
12906 str | str | map_str | map_str_int | map_str_ip
12907 -----------+--------------+-----------------+-----------------+---------------
Willy Tarreau787a4c02014-05-10 07:55:30 +020012908 str | beg | map_beg | map_beg_int | map_end_ip
12909 -----------+--------------+-----------------+-----------------+---------------
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012910 str | sub | map_sub | map_sub_int | map_sub_ip
12911 -----------+--------------+-----------------+-----------------+---------------
12912 str | dir | map_dir | map_dir_int | map_dir_ip
12913 -----------+--------------+-----------------+-----------------+---------------
12914 str | dom | map_dom | map_dom_int | map_dom_ip
12915 -----------+--------------+-----------------+-----------------+---------------
12916 str | end | map_end | map_end_int | map_end_ip
12917 -----------+--------------+-----------------+-----------------+---------------
Ruoshan Huang3c5e3742016-12-02 16:25:31 +080012918 str | reg | map_reg | map_reg_int | map_reg_ip
12919 -----------+--------------+-----------------+-----------------+---------------
12920 str | reg | map_regm | map_reg_int | map_reg_ip
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012921 -----------+--------------+-----------------+-----------------+---------------
12922 int | int | map_int | map_int_int | map_int_ip
12923 -----------+--------------+-----------------+-----------------+---------------
12924 ip | ip | map_ip | map_ip_int | map_ip_ip
12925 -----------+--------------+-----------------+-----------------+---------------
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012926
Thierry Fournier8feaa662016-02-10 22:55:20 +010012927 The special map called "map_regm" expect matching zone in the regular
12928 expression and modify the output replacing back reference (like "\1") by
12929 the corresponding match text.
12930
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012931 The file contains one key + value per line. Lines which start with '#' are
12932 ignored, just like empty lines. Leading tabs and spaces are stripped. The key
12933 is then the first "word" (series of non-space/tabs characters), and the value
12934 is what follows this series of space/tab till the end of the line excluding
12935 trailing spaces/tabs.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012936
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012937 Example :
12938
12939 # this is a comment and is ignored
12940 2.22.246.0/23 United Kingdom \n
12941 <-><-----------><--><------------><---->
12942 | | | | `- trailing spaces ignored
12943 | | | `---------- value
12944 | | `-------------------- middle spaces ignored
12945 | `---------------------------- key
12946 `------------------------------------ leading spaces ignored
12947
Willy Tarreau97707872015-01-27 15:12:13 +010012948mod(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012949 Divides the input value of type signed integer by <value>, and returns the
12950 remainder as an signed integer. If <value> is null, then zero is returned.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012951 <value> can be a numeric value or a variable name. The name of the variable
Daniel Schneller0b547052016-03-21 20:46:57 +010012952 starts with an indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012953 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012954 "sess" : the variable is shared with the whole session
12955 "txn" : the variable is shared with the transaction (request and response)
12956 "req" : the variable is shared only during request processing
12957 "res" : the variable is shared only during response processing
12958 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012959 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012960
12961mul(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012962 Multiplies the input value of type signed integer by <value>, and returns
Thierry FOURNIER00c005c2015-07-08 01:10:21 +020012963 the product as an signed integer. In case of overflow, the largest possible
12964 value for the sign is returned so that the operation doesn't wrap around.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012965 <value> can be a numeric value or a variable name. The name of the variable
Daniel Schneller0b547052016-03-21 20:46:57 +010012966 starts with an indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012967 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012968 "sess" : the variable is shared with the whole session
12969 "txn" : the variable is shared with the transaction (request and response)
12970 "req" : the variable is shared only during request processing
12971 "res" : the variable is shared only during response processing
12972 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012973 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012974
Nenad Merdanovicb7e7c472017-03-12 21:56:55 +010012975nbsrv
12976 Takes an input value of type string, interprets it as a backend name and
12977 returns the number of usable servers in that backend. Can be used in places
12978 where we want to look up a backend from a dynamic name, like a result of a
12979 map lookup.
12980
Willy Tarreau97707872015-01-27 15:12:13 +010012981neg
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012982 Takes the input value of type signed integer, computes the opposite value,
12983 and returns the remainder as an signed integer. 0 is identity. This operator
12984 is provided for reversed subtracts : in order to subtract the input from a
12985 constant, simply perform a "neg,add(value)".
Willy Tarreau97707872015-01-27 15:12:13 +010012986
12987not
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012988 Returns a boolean FALSE if the input value of type signed integer is
Willy Tarreau97707872015-01-27 15:12:13 +010012989 non-null, otherwise returns TRUE. Used in conjunction with and(), it can be
12990 used to report true/false for bit testing on input values (eg: verify the
12991 absence of a flag).
12992
12993odd
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012994 Returns a boolean TRUE if the input value of type signed integer is odd
Willy Tarreau97707872015-01-27 15:12:13 +010012995 otherwise returns FALSE. It is functionally equivalent to "and(1),bool".
12996
12997or(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012998 Performs a bitwise "OR" between <value> and the input value of type signed
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012999 integer, and returns the result as an signed integer. <value> can be a
Daniel Schneller0b547052016-03-21 20:46:57 +010013000 numeric value or a variable name. The name of the variable starts with an
13001 indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010013002 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010013003 "sess" : the variable is shared with the whole session
13004 "txn" : the variable is shared with the transaction (request and response)
13005 "req" : the variable is shared only during request processing
13006 "res" : the variable is shared only during response processing
13007 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010013008 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010013009
Willy Tarreauc4dc3502015-01-23 20:39:28 +010013010regsub(<regex>,<subst>[,<flags>])
Willy Tarreau7eda8492015-01-20 19:47:06 +010013011 Applies a regex-based substitution to the input string. It does the same
13012 operation as the well-known "sed" utility with "s/<regex>/<subst>/". By
13013 default it will replace in the input string the first occurrence of the
13014 largest part matching the regular expression <regex> with the substitution
13015 string <subst>. It is possible to replace all occurrences instead by adding
13016 the flag "g" in the third argument <flags>. It is also possible to make the
13017 regex case insensitive by adding the flag "i" in <flags>. Since <flags> is a
13018 string, it is made up from the concatenation of all desired flags. Thus if
13019 both "i" and "g" are desired, using "gi" or "ig" will have the same effect.
13020 It is important to note that due to the current limitations of the
Baptiste Assmann66025d82016-03-06 23:36:48 +010013021 configuration parser, some characters such as closing parenthesis, closing
13022 square brackets or comma are not possible to use in the arguments. The first
13023 use of this converter is to replace certain characters or sequence of
13024 characters with other ones.
Willy Tarreau7eda8492015-01-20 19:47:06 +010013025
13026 Example :
13027
13028 # de-duplicate "/" in header "x-path".
13029 # input: x-path: /////a///b/c/xzxyz/
13030 # output: x-path: /a/b/c/xzxyz/
13031 http-request set-header x-path %[hdr(x-path),regsub(/+,/,g)]
13032
Thierry FOURNIER35ab2752015-05-28 13:22:03 +020013033capture-req(<id>)
13034 Capture the string entry in the request slot <id> and returns the entry as
13035 is. If the slot doesn't exist, the capture fails silently.
13036
13037 See also: "declare capture", "http-request capture",
Baptiste Assmann5ac425c2015-10-21 23:13:46 +020013038 "http-response capture", "capture.req.hdr" and
13039 "capture.res.hdr" (sample fetches).
Thierry FOURNIER35ab2752015-05-28 13:22:03 +020013040
13041capture-res(<id>)
13042 Capture the string entry in the response slot <id> and returns the entry as
13043 is. If the slot doesn't exist, the capture fails silently.
13044
13045 See also: "declare capture", "http-request capture",
Baptiste Assmann5ac425c2015-10-21 23:13:46 +020013046 "http-response capture", "capture.req.hdr" and
13047 "capture.res.hdr" (sample fetches).
Thierry FOURNIER35ab2752015-05-28 13:22:03 +020013048
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020013049sdbm([<avalanche>])
13050 Hashes a binary input sample into an unsigned 32-bit quantity using the SDBM
13051 hash function. Optionally, it is possible to apply a full avalanche hash
13052 function to the output if the optional <avalanche> argument equals 1. This
13053 converter uses the same functions as used by the various hash-based load
13054 balancing algorithms, so it will provide exactly the same results. It is
13055 mostly intended for debugging, but can be used as a stick-table entry to
13056 collect rough statistics. It must not be used for security purposes as a
Willy Tarreau80599772015-01-20 19:35:24 +010013057 32-bit hash is trivial to break. See also "crc32", "djb2", "wt6" and the
13058 "hash-type" directive.
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020013059
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013060set-var(<var name>)
Daniel Schneller0b547052016-03-21 20:46:57 +010013061 Sets a variable with the input content and returns the content on the output as
13062 is. The variable keeps the value and the associated input type. The name of the
13063 variable starts with an indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010013064 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010013065 "sess" : the variable is shared with the whole session
13066 "txn" : the variable is shared with the transaction (request and
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013067 response),
Daniel Schneller0b547052016-03-21 20:46:57 +010013068 "req" : the variable is shared only during request processing,
13069 "res" : the variable is shared only during response processing.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013070 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010013071 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013072
Dragan Dosen6e5a9ca2017-10-24 09:18:23 +020013073sha1
13074 Converts a binary input sample to a SHA1 digest. The result is a binary
13075 sample with length of 20 bytes.
13076
Willy Tarreau97707872015-01-27 15:12:13 +010013077sub(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020013078 Subtracts <value> from the input value of type signed integer, and returns
13079 the result as an signed integer. Note: in order to subtract the input from
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020013080 a constant, simply perform a "neg,add(value)". <value> can be a numeric value
Daniel Schneller0b547052016-03-21 20:46:57 +010013081 or a variable name. The name of the variable starts with an indication about
13082 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010013083 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010013084 "sess" : the variable is shared with the whole session
13085 "txn" : the variable is shared with the transaction (request and
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020013086 response),
Daniel Schneller0b547052016-03-21 20:46:57 +010013087 "req" : the variable is shared only during request processing,
13088 "res" : the variable is shared only during response processing.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020013089 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010013090 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010013091
Willy Tarreaud9f316a2014-07-10 14:03:38 +020013092table_bytes_in_rate(<table>)
13093 Uses the string representation of the input sample to perform a look up in
13094 the specified table. If the key is not found in the table, integer value zero
13095 is returned. Otherwise the converter returns the average client-to-server
13096 bytes rate associated with the input sample in the designated table, measured
13097 in amount of bytes over the period configured in the table. See also the
13098 sc_bytes_in_rate sample fetch keyword.
13099
13100
13101table_bytes_out_rate(<table>)
13102 Uses the string representation of the input sample to perform a look up in
13103 the specified table. If the key is not found in the table, integer value zero
13104 is returned. Otherwise the converter returns the average server-to-client
13105 bytes rate associated with the input sample in the designated table, measured
13106 in amount of bytes over the period configured in the table. See also the
13107 sc_bytes_out_rate sample fetch keyword.
13108
13109table_conn_cnt(<table>)
13110 Uses the string representation of the input sample to perform a look up in
13111 the specified table. If the key is not found in the table, integer value zero
13112 is returned. Otherwise the converter returns the cumulated amount of incoming
13113 connections associated with the input sample in the designated table. See
13114 also the sc_conn_cnt sample fetch keyword.
13115
13116table_conn_cur(<table>)
13117 Uses the string representation of the input sample to perform a look up in
13118 the specified table. If the key is not found in the table, integer value zero
13119 is returned. Otherwise the converter returns the current amount of concurrent
13120 tracked connections associated with the input sample in the designated table.
13121 See also the sc_conn_cur sample fetch keyword.
13122
13123table_conn_rate(<table>)
13124 Uses the string representation of the input sample to perform a look up in
13125 the specified table. If the key is not found in the table, integer value zero
13126 is returned. Otherwise the converter returns the average incoming connection
13127 rate associated with the input sample in the designated table. See also the
13128 sc_conn_rate sample fetch keyword.
13129
Thierry FOURNIER236657b2015-08-19 08:25:14 +020013130table_gpt0(<table>)
13131 Uses the string representation of the input sample to perform a look up in
13132 the specified table. If the key is not found in the table, boolean value zero
13133 is returned. Otherwise the converter returns the current value of the first
13134 general purpose tag associated with the input sample in the designated table.
13135 See also the sc_get_gpt0 sample fetch keyword.
13136
Willy Tarreaud9f316a2014-07-10 14:03:38 +020013137table_gpc0(<table>)
13138 Uses the string representation of the input sample to perform a look up in
13139 the specified table. If the key is not found in the table, integer value zero
13140 is returned. Otherwise the converter returns the current value of the first
13141 general purpose counter associated with the input sample in the designated
13142 table. See also the sc_get_gpc0 sample fetch keyword.
13143
13144table_gpc0_rate(<table>)
13145 Uses the string representation of the input sample to perform a look up in
13146 the specified table. If the key is not found in the table, integer value zero
13147 is returned. Otherwise the converter returns the frequency which the gpc0
13148 counter was incremented over the configured period in the table, associated
13149 with the input sample in the designated table. See also the sc_get_gpc0_rate
13150 sample fetch keyword.
13151
13152table_http_err_cnt(<table>)
13153 Uses the string representation of the input sample to perform a look up in
13154 the specified table. If the key is not found in the table, integer value zero
13155 is returned. Otherwise the converter returns the cumulated amount of HTTP
13156 errors associated with the input sample in the designated table. See also the
13157 sc_http_err_cnt sample fetch keyword.
13158
13159table_http_err_rate(<table>)
13160 Uses the string representation of the input sample to perform a look up in
13161 the specified table. If the key is not found in the table, integer value zero
13162 is returned. Otherwise the average rate of HTTP errors associated with the
13163 input sample in the designated table, measured in amount of errors over the
13164 period configured in the table. See also the sc_http_err_rate sample fetch
13165 keyword.
13166
13167table_http_req_cnt(<table>)
13168 Uses the string representation of the input sample to perform a look up in
13169 the specified table. If the key is not found in the table, integer value zero
13170 is returned. Otherwise the converter returns the cumulated amount of HTTP
13171 requests associated with the input sample in the designated table. See also
13172 the sc_http_req_cnt sample fetch keyword.
13173
13174table_http_req_rate(<table>)
13175 Uses the string representation of the input sample to perform a look up in
13176 the specified table. If the key is not found in the table, integer value zero
13177 is returned. Otherwise the average rate of HTTP requests associated with the
13178 input sample in the designated table, measured in amount of requests over the
13179 period configured in the table. See also the sc_http_req_rate sample fetch
13180 keyword.
13181
13182table_kbytes_in(<table>)
13183 Uses the string representation of the input sample to perform a look up in
13184 the specified table. If the key is not found in the table, integer value zero
13185 is returned. Otherwise the converter returns the cumulated amount of client-
13186 to-server data associated with the input sample in the designated table,
13187 measured in kilobytes. The test is currently performed on 32-bit integers,
13188 which limits values to 4 terabytes. See also the sc_kbytes_in sample fetch
13189 keyword.
13190
13191table_kbytes_out(<table>)
13192 Uses the string representation of the input sample to perform a look up in
13193 the specified table. If the key is not found in the table, integer value zero
13194 is returned. Otherwise the converter returns the cumulated amount of server-
13195 to-client data associated with the input sample in the designated table,
13196 measured in kilobytes. The test is currently performed on 32-bit integers,
13197 which limits values to 4 terabytes. See also the sc_kbytes_out sample fetch
13198 keyword.
13199
13200table_server_id(<table>)
13201 Uses the string representation of the input sample to perform a look up in
13202 the specified table. If the key is not found in the table, integer value zero
13203 is returned. Otherwise the converter returns the server ID associated with
13204 the input sample in the designated table. A server ID is associated to a
13205 sample by a "stick" rule when a connection to a server succeeds. A server ID
13206 zero means that no server is associated with this key.
13207
13208table_sess_cnt(<table>)
13209 Uses the string representation of the input sample to perform a look up in
13210 the specified table. If the key is not found in the table, integer value zero
13211 is returned. Otherwise the converter returns the cumulated amount of incoming
13212 sessions associated with the input sample in the designated table. Note that
13213 a session here refers to an incoming connection being accepted by the
13214 "tcp-request connection" rulesets. See also the sc_sess_cnt sample fetch
13215 keyword.
13216
13217table_sess_rate(<table>)
13218 Uses the string representation of the input sample to perform a look up in
13219 the specified table. If the key is not found in the table, integer value zero
13220 is returned. Otherwise the converter returns the average incoming session
13221 rate associated with the input sample in the designated table. Note that a
13222 session here refers to an incoming connection being accepted by the
13223 "tcp-request connection" rulesets. See also the sc_sess_rate sample fetch
13224 keyword.
13225
13226table_trackers(<table>)
13227 Uses the string representation of the input sample to perform a look up in
13228 the specified table. If the key is not found in the table, integer value zero
13229 is returned. Otherwise the converter returns the current amount of concurrent
13230 connections tracking the same key as the input sample in the designated
13231 table. It differs from table_conn_cur in that it does not rely on any stored
13232 information but on the table's reference count (the "use" value which is
13233 returned by "show table" on the CLI). This may sometimes be more suited for
13234 layer7 tracking. It can be used to tell a server how many concurrent
13235 connections there are from a given address for example. See also the
13236 sc_trackers sample fetch keyword.
13237
Willy Tarreauffcb2e42014-07-10 16:29:08 +020013238upper
13239 Convert a string sample to upper case. This can only be placed after a string
13240 sample fetch function or after a transformation keyword returning a string
13241 type. The result is of type string.
13242
Thierry FOURNIER82ff3c92015-05-07 15:46:20 +020013243url_dec
13244 Takes an url-encoded string provided as input and returns the decoded
13245 version as output. The input and the output are of type string.
13246
Christopher Faulet85d79c92016-11-09 16:54:56 +010013247unset-var(<var name>)
13248 Unsets a variable if the input content is defined. The name of the variable
13249 starts with an indication about its scope. The scopes allowed are:
13250 "proc" : the variable is shared with the whole process
13251 "sess" : the variable is shared with the whole session
13252 "txn" : the variable is shared with the transaction (request and
13253 response),
13254 "req" : the variable is shared only during request processing,
13255 "res" : the variable is shared only during response processing.
13256 This prefix is followed by a name. The separator is a '.'. The name may only
13257 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
13258
Willy Tarreau0dbfdba2014-07-10 16:37:47 +020013259utime(<format>[,<offset>])
13260 Converts an integer supposed to contain a date since epoch to a string
13261 representing this date in UTC time using a format defined by the <format>
13262 string using strftime(3). The purpose is to allow any date format to be used
13263 in logs. An optional <offset> in seconds may be applied to the input date
13264 (positive or negative). See the strftime() man page for the format supported
13265 by your operating system. See also the ltime converter.
13266
13267 Example :
13268
13269 # Emit two colons, one with the UTC time and another with ip:port
13270 # Eg: 20140710162350 127.0.0.1:57325
13271 log-format %[date,utime(%Y%m%d%H%M%S)]\ %ci:%cp
13272
Emeric Brunc9a0f6d2014-11-25 14:09:01 +010013273word(<index>,<delimiters>)
13274 Extracts the nth word considering given delimiters from an input string.
13275 Indexes start at 1 and delimiters are a string formatted list of chars.
13276
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020013277wt6([<avalanche>])
13278 Hashes a binary input sample into an unsigned 32-bit quantity using the WT6
13279 hash function. Optionally, it is possible to apply a full avalanche hash
13280 function to the output if the optional <avalanche> argument equals 1. This
13281 converter uses the same functions as used by the various hash-based load
13282 balancing algorithms, so it will provide exactly the same results. It is
13283 mostly intended for debugging, but can be used as a stick-table entry to
13284 collect rough statistics. It must not be used for security purposes as a
Willy Tarreau80599772015-01-20 19:35:24 +010013285 32-bit hash is trivial to break. See also "crc32", "djb2", "sdbm", and the
13286 "hash-type" directive.
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020013287
Willy Tarreau97707872015-01-27 15:12:13 +010013288xor(<value>)
13289 Performs a bitwise "XOR" (exclusive OR) between <value> and the input value
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020013290 of type signed integer, and returns the result as an signed integer.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020013291 <value> can be a numeric value or a variable name. The name of the variable
Daniel Schneller0b547052016-03-21 20:46:57 +010013292 starts with an indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010013293 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010013294 "sess" : the variable is shared with the whole session
13295 "txn" : the variable is shared with the transaction (request and
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020013296 response),
Daniel Schneller0b547052016-03-21 20:46:57 +010013297 "req" : the variable is shared only during request processing,
13298 "res" : the variable is shared only during response processing.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020013299 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010013300 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010013301
Thierry FOURNIER01e09742016-12-26 11:46:11 +010013302xxh32([<seed>])
13303 Hashes a binary input sample into an unsigned 32-bit quantity using the 32-bit
13304 variant of the XXHash hash function. This hash supports a seed which defaults
13305 to zero but a different value maybe passed as the <seed> argument. This hash
13306 is known to be very good and very fast so it can be used to hash URLs and/or
13307 URL parameters for use as stick-table keys to collect statistics with a low
13308 collision rate, though care must be taken as the algorithm is not considered
13309 as cryptographically secure.
13310
13311xxh64([<seed>])
13312 Hashes a binary input sample into a signed 64-bit quantity using the 64-bit
13313 variant of the XXHash hash function. This hash supports a seed which defaults
13314 to zero but a different value maybe passed as the <seed> argument. This hash
13315 is known to be very good and very fast so it can be used to hash URLs and/or
13316 URL parameters for use as stick-table keys to collect statistics with a low
13317 collision rate, though care must be taken as the algorithm is not considered
13318 as cryptographically secure.
13319
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010013320
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200133217.3.2. Fetching samples from internal states
Willy Tarreau74ca5042013-06-11 23:12:07 +020013322--------------------------------------------
13323
13324A first set of sample fetch methods applies to internal information which does
13325not even relate to any client information. These ones are sometimes used with
13326"monitor-fail" directives to report an internal status to external watchers.
13327The sample fetch methods described in this section are usable anywhere.
13328
13329always_false : boolean
13330 Always returns the boolean "false" value. It may be used with ACLs as a
13331 temporary replacement for another one when adjusting configurations.
13332
13333always_true : boolean
13334 Always returns the boolean "true" value. It may be used with ACLs as a
13335 temporary replacement for another one when adjusting configurations.
13336
13337avg_queue([<backend>]) : integer
Willy Tarreaud63335a2010-02-26 12:56:52 +010013338 Returns the total number of queued connections of the designated backend
Willy Tarreau74ca5042013-06-11 23:12:07 +020013339 divided by the number of active servers. The current backend is used if no
13340 backend is specified. This is very similar to "queue" except that the size of
13341 the farm is considered, in order to give a more accurate measurement of the
13342 time it may take for a new connection to be processed. The main usage is with
13343 ACL to return a sorry page to new users when it becomes certain they will get
13344 a degraded service, or to pass to the backend servers in a header so that
13345 they decide to work in degraded mode or to disable some functions to speed up
13346 the processing a bit. Note that in the event there would not be any active
13347 server anymore, twice the number of queued connections would be considered as
13348 the measured value. This is a fair estimate, as we expect one server to get
13349 back soon anyway, but we still prefer to send new traffic to another backend
13350 if in better shape. See also the "queue", "be_conn", and "be_sess_rate"
13351 sample fetches.
Krzysztof Piotr Oledzki346f76d2010-01-12 21:59:30 +010013352
Willy Tarreau74ca5042013-06-11 23:12:07 +020013353be_conn([<backend>]) : integer
Willy Tarreaua36af912009-10-10 12:02:45 +020013354 Applies to the number of currently established connections on the backend,
13355 possibly including the connection being evaluated. If no backend name is
13356 specified, the current one is used. But it is also possible to check another
13357 backend. It can be used to use a specific farm when the nominal one is full.
13358 See also the "fe_conn", "queue" and "be_sess_rate" criteria.
Willy Tarreau6a06a402007-07-15 20:15:28 +020013359
Willy Tarreau74ca5042013-06-11 23:12:07 +020013360be_sess_rate([<backend>]) : integer
13361 Returns an integer value corresponding to the sessions creation rate on the
13362 backend, in number of new sessions per second. This is used with ACLs to
13363 switch to an alternate backend when an expensive or fragile one reaches too
13364 high a session rate, or to limit abuse of service (eg. prevent sucking of an
13365 online dictionary). It can also be useful to add this element to logs using a
13366 log-format directive.
Willy Tarreaud63335a2010-02-26 12:56:52 +010013367
13368 Example :
13369 # Redirect to an error page if the dictionary is requested too often
13370 backend dynamic
13371 mode http
13372 acl being_scanned be_sess_rate gt 100
13373 redirect location /denied.html if being_scanned
Willy Tarreau0ba27502007-12-24 16:55:16 +010013374
Thierry FOURNIERcc103292015-06-06 19:30:17 +020013375bin(<hexa>) : bin
13376 Returns a binary chain. The input is the hexadecimal representation
13377 of the string.
13378
13379bool(<bool>) : bool
13380 Returns a boolean value. <bool> can be 'true', 'false', '1' or '0'.
13381 'false' and '0' are the same. 'true' and '1' are the same.
13382
Willy Tarreau74ca5042013-06-11 23:12:07 +020013383connslots([<backend>]) : integer
13384 Returns an integer value corresponding to the number of connection slots
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030013385 still available in the backend, by totaling the maximum amount of
Willy Tarreau74ca5042013-06-11 23:12:07 +020013386 connections on all servers and the maximum queue size. This is probably only
13387 used with ACLs.
Tait Clarridge7896d522012-12-05 21:39:31 -050013388
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080013389 The basic idea here is to be able to measure the number of connection "slots"
Willy Tarreau55165fe2009-05-10 12:02:55 +020013390 still available (connection + queue), so that anything beyond that (intended
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080013391 usage; see "use_backend" keyword) can be redirected to a different backend.
13392
Willy Tarreau55165fe2009-05-10 12:02:55 +020013393 'connslots' = number of available server connection slots, + number of
13394 available server queue slots.
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080013395
Willy Tarreaua36af912009-10-10 12:02:45 +020013396 Note that while "fe_conn" may be used, "connslots" comes in especially
Willy Tarreau55165fe2009-05-10 12:02:55 +020013397 useful when you have a case of traffic going to one single ip, splitting into
Willy Tarreau74ca5042013-06-11 23:12:07 +020013398 multiple backends (perhaps using ACLs to do name-based load balancing) and
Willy Tarreau55165fe2009-05-10 12:02:55 +020013399 you want to be able to differentiate between different backends, and their
13400 available "connslots". Also, whereas "nbsrv" only measures servers that are
Willy Tarreau74ca5042013-06-11 23:12:07 +020013401 actually *down*, this fetch is more fine-grained and looks into the number of
Willy Tarreaua36af912009-10-10 12:02:45 +020013402 available connection slots as well. See also "queue" and "avg_queue".
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080013403
Willy Tarreau55165fe2009-05-10 12:02:55 +020013404 OTHER CAVEATS AND NOTES: at this point in time, the code does not take care
13405 of dynamic connections. Also, if any of the server maxconn, or maxqueue is 0,
Willy Tarreau74ca5042013-06-11 23:12:07 +020013406 then this fetch clearly does not make sense, in which case the value returned
Willy Tarreau55165fe2009-05-10 12:02:55 +020013407 will be -1.
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080013408
Willy Tarreau6236d3a2013-07-25 14:28:25 +020013409date([<offset>]) : integer
13410 Returns the current date as the epoch (number of seconds since 01/01/1970).
13411 If an offset value is specified, then it is a number of seconds that is added
13412 to the current date before returning the value. This is particularly useful
13413 to compute relative dates, as both positive and negative offsets are allowed.
Willy Tarreau276fae92013-07-25 14:36:01 +020013414 It is useful combined with the http_date converter.
13415
13416 Example :
13417
13418 # set an expires header to now+1 hour in every response
13419 http-response set-header Expires %[date(3600),http_date]
Willy Tarreau6236d3a2013-07-25 14:28:25 +020013420
Willy Tarreaud716f9b2017-10-13 11:03:15 +020013421distcc_body(<token>[,<occ>]) : binary
13422 Parses a distcc message and returns the body associated to occurrence #<occ>
13423 of the token <token>. Occurrences start at 1, and when unspecified, any may
13424 match though in practice only the first one is checked for now. This can be
13425 used to extract file names or arguments in files built using distcc through
13426 haproxy. Please refer to distcc's protocol documentation for the complete
13427 list of supported tokens.
13428
13429distcc_param(<token>[,<occ>]) : integer
13430 Parses a distcc message and returns the parameter associated to occurrence
13431 #<occ> of the token <token>. Occurrences start at 1, and when unspecified,
13432 any may match though in practice only the first one is checked for now. This
13433 can be used to extract certain information such as the protocol version, the
13434 file size or the argument in files built using distcc through haproxy.
13435 Another use case consists in waiting for the start of the preprocessed file
13436 contents before connecting to the server to avoid keeping idle connections.
13437 Please refer to distcc's protocol documentation for the complete list of
13438 supported tokens.
13439
13440 Example :
13441 # wait up to 20s for the pre-processed file to be uploaded
13442 tcp-request inspect-delay 20s
13443 tcp-request content accept if { distcc_param(DOTI) -m found }
13444 # send large files to the big farm
13445 use_backend big_farm if { distcc_param(DOTI) gt 1000000 }
13446
Willy Tarreau595ec542013-06-12 21:34:28 +020013447env(<name>) : string
13448 Returns a string containing the value of environment variable <name>. As a
13449 reminder, environment variables are per-process and are sampled when the
13450 process starts. This can be useful to pass some information to a next hop
13451 server, or with ACLs to take specific action when the process is started a
13452 certain way.
13453
13454 Examples :
13455 # Pass the Via header to next hop with the local hostname in it
13456 http-request add-header Via 1.1\ %[env(HOSTNAME)]
13457
13458 # reject cookie-less requests when the STOP environment variable is set
13459 http-request deny if !{ cook(SESSIONID) -m found } { env(STOP) -m found }
13460
Willy Tarreau74ca5042013-06-11 23:12:07 +020013461fe_conn([<frontend>]) : integer
13462 Returns the number of currently established connections on the frontend,
Willy Tarreaud63335a2010-02-26 12:56:52 +010013463 possibly including the connection being evaluated. If no frontend name is
13464 specified, the current one is used. But it is also possible to check another
Willy Tarreau74ca5042013-06-11 23:12:07 +020013465 frontend. It can be used to return a sorry page before hard-blocking, or to
13466 use a specific backend to drain new requests when the farm is considered
13467 full. This is mostly used with ACLs but can also be used to pass some
13468 statistics to servers in HTTP headers. See also the "dst_conn", "be_conn",
13469 "fe_sess_rate" fetches.
Willy Tarreaua36af912009-10-10 12:02:45 +020013470
Nenad Merdanovicad9a7e92016-10-03 04:57:37 +020013471fe_req_rate([<frontend>]) : integer
13472 Returns an integer value corresponding to the number of HTTP requests per
13473 second sent to a frontend. This number can differ from "fe_sess_rate" in
13474 situations where client-side keep-alive is enabled.
13475
Willy Tarreau74ca5042013-06-11 23:12:07 +020013476fe_sess_rate([<frontend>]) : integer
13477 Returns an integer value corresponding to the sessions creation rate on the
13478 frontend, in number of new sessions per second. This is used with ACLs to
13479 limit the incoming session rate to an acceptable range in order to prevent
13480 abuse of service at the earliest moment, for example when combined with other
13481 layer 4 ACLs in order to force the clients to wait a bit for the rate to go
13482 down below the limit. It can also be useful to add this element to logs using
13483 a log-format directive. See also the "rate-limit sessions" directive for use
13484 in frontends.
Willy Tarreau079ff0a2009-03-05 21:34:28 +010013485
13486 Example :
13487 # This frontend limits incoming mails to 10/s with a max of 100
13488 # concurrent connections. We accept any connection below 10/s, and
13489 # force excess clients to wait for 100 ms. Since clients are limited to
13490 # 100 max, there cannot be more than 10 incoming mails per second.
13491 frontend mail
13492 bind :25
13493 mode tcp
13494 maxconn 100
13495 acl too_fast fe_sess_rate ge 10
13496 tcp-request inspect-delay 100ms
13497 tcp-request content accept if ! too_fast
13498 tcp-request content accept if WAIT_END
Willy Tarreaud72758d2010-01-12 10:42:19 +010013499
Nenad Merdanovic807a6e72017-03-12 22:00:00 +010013500hostname : string
13501 Returns the system hostname.
13502
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020013503int(<integer>) : signed integer
13504 Returns a signed integer.
13505
Thierry FOURNIERcc103292015-06-06 19:30:17 +020013506ipv4(<ipv4>) : ipv4
13507 Returns an ipv4.
13508
13509ipv6(<ipv6>) : ipv6
13510 Returns an ipv6.
13511
13512meth(<method>) : method
13513 Returns a method.
13514
Willy Tarreau0f30d262014-11-24 16:02:05 +010013515nbproc : integer
13516 Returns an integer value corresponding to the number of processes that were
13517 started (it equals the global "nbproc" setting). This is useful for logging
13518 and debugging purposes.
13519
Willy Tarreau74ca5042013-06-11 23:12:07 +020013520nbsrv([<backend>]) : integer
13521 Returns an integer value corresponding to the number of usable servers of
13522 either the current backend or the named backend. This is mostly used with
13523 ACLs but can also be useful when added to logs. This is normally used to
Willy Tarreaud63335a2010-02-26 12:56:52 +010013524 switch to an alternate backend when the number of servers is too low to
13525 to handle some load. It is useful to report a failure when combined with
13526 "monitor fail".
Willy Tarreau079ff0a2009-03-05 21:34:28 +010013527
Willy Tarreau0f30d262014-11-24 16:02:05 +010013528proc : integer
13529 Returns an integer value corresponding to the position of the process calling
13530 the function, between 1 and global.nbproc. This is useful for logging and
13531 debugging purposes.
13532
Willy Tarreau74ca5042013-06-11 23:12:07 +020013533queue([<backend>]) : integer
Willy Tarreaud63335a2010-02-26 12:56:52 +010013534 Returns the total number of queued connections of the designated backend,
13535 including all the connections in server queues. If no backend name is
13536 specified, the current one is used, but it is also possible to check another
Willy Tarreau74ca5042013-06-11 23:12:07 +020013537 one. This is useful with ACLs or to pass statistics to backend servers. This
13538 can be used to take actions when queuing goes above a known level, generally
13539 indicating a surge of traffic or a massive slowdown on the servers. One
13540 possible action could be to reject new users but still accept old ones. See
13541 also the "avg_queue", "be_conn", and "be_sess_rate" fetches.
13542
Willy Tarreau84310e22014-02-14 11:59:04 +010013543rand([<range>]) : integer
13544 Returns a random integer value within a range of <range> possible values,
13545 starting at zero. If the range is not specified, it defaults to 2^32, which
13546 gives numbers between 0 and 4294967295. It can be useful to pass some values
13547 needed to take some routing decisions for example, or just for debugging
13548 purposes. This random must not be used for security purposes.
13549
Willy Tarreau74ca5042013-06-11 23:12:07 +020013550srv_conn([<backend>/]<server>) : integer
13551 Returns an integer value corresponding to the number of currently established
13552 connections on the designated server, possibly including the connection being
13553 evaluated. If <backend> is omitted, then the server is looked up in the
13554 current backend. It can be used to use a specific farm when one server is
13555 full, or to inform the server about our view of the number of active
13556 connections with it. See also the "fe_conn", "be_conn" and "queue" fetch
13557 methods.
13558
13559srv_is_up([<backend>/]<server>) : boolean
13560 Returns true when the designated server is UP, and false when it is either
13561 DOWN or in maintenance mode. If <backend> is omitted, then the server is
13562 looked up in the current backend. It is mainly used to take action based on
13563 an external status reported via a health check (eg: a geographical site's
13564 availability). Another possible use which is more of a hack consists in
13565 using dummy servers as boolean variables that can be enabled or disabled from
13566 the CLI, so that rules depending on those ACLs can be tweaked in realtime.
13567
Willy Tarreauff2b7af2017-10-13 11:46:26 +020013568srv_queue([<backend>/]<server>) : integer
13569 Returns an integer value corresponding to the number of connections currently
13570 pending in the designated server's queue. If <backend> is omitted, then the
13571 server is looked up in the current backend. It can sometimes be used together
13572 with the "use-server" directive to force to use a known faster server when it
13573 is not much loaded. See also the "srv_conn", "avg_queue" and "queue" sample
13574 fetch methods.
13575
Willy Tarreau74ca5042013-06-11 23:12:07 +020013576srv_sess_rate([<backend>/]<server>) : integer
13577 Returns an integer corresponding to the sessions creation rate on the
13578 designated server, in number of new sessions per second. If <backend> is
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030013579 omitted, then the server is looked up in the current backend. This is mostly
Willy Tarreau74ca5042013-06-11 23:12:07 +020013580 used with ACLs but can make sense with logs too. This is used to switch to an
13581 alternate backend when an expensive or fragile one reaches too high a session
13582 rate, or to limit abuse of service (eg. prevent latent requests from
13583 overloading servers).
13584
13585 Example :
13586 # Redirect to a separate back
13587 acl srv1_full srv_sess_rate(be1/srv1) gt 50
13588 acl srv2_full srv_sess_rate(be1/srv2) gt 50
13589 use_backend be2 if srv1_full or srv2_full
13590
Willy Tarreau0f30d262014-11-24 16:02:05 +010013591stopping : boolean
13592 Returns TRUE if the process calling the function is currently stopping. This
13593 can be useful for logging, or for relaxing certain checks or helping close
13594 certain connections upon graceful shutdown.
13595
Thierry FOURNIERcc103292015-06-06 19:30:17 +020013596str(<string>) : string
13597 Returns a string.
13598
Willy Tarreau74ca5042013-06-11 23:12:07 +020013599table_avl([<table>]) : integer
13600 Returns the total number of available entries in the current proxy's
13601 stick-table or in the designated stick-table. See also table_cnt.
13602
13603table_cnt([<table>]) : integer
13604 Returns the total number of entries currently in use in the current proxy's
13605 stick-table or in the designated stick-table. See also src_conn_cnt and
13606 table_avl for other entry counting methods.
13607
Christopher Faulet34adb2a2017-11-21 21:45:38 +010013608thread : integer
13609 Returns an integer value corresponding to the position of the thread calling
13610 the function, between 0 and (global.nbthread-1). This is useful for logging
13611 and debugging purposes.
13612
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013613var(<var-name>) : undefined
13614 Returns a variable with the stored type. If the variable is not set, the
Daniel Schneller0b547052016-03-21 20:46:57 +010013615 sample fetch fails. The name of the variable starts with an indication
13616 about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010013617 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010013618 "sess" : the variable is shared with the whole session
13619 "txn" : the variable is shared with the transaction (request and
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013620 response),
Daniel Schneller0b547052016-03-21 20:46:57 +010013621 "req" : the variable is shared only during request processing,
13622 "res" : the variable is shared only during response processing.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013623 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010013624 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013625
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200136267.3.3. Fetching samples at Layer 4
Willy Tarreau74ca5042013-06-11 23:12:07 +020013627----------------------------------
13628
13629The layer 4 usually describes just the transport layer which in haproxy is
13630closest to the connection, where no content is yet made available. The fetch
13631methods described here are usable as low as the "tcp-request connection" rule
13632sets unless they require some future information. Those generally include
13633TCP/IP addresses and ports, as well as elements from stick-tables related to
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013634the incoming connection. For retrieving a value from a sticky counters, the
13635counter number can be explicitly set as 0, 1, or 2 using the pre-defined
13636"sc0_", "sc1_", or "sc2_" prefix, or it can be specified as the first integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013637argument when using the "sc_" prefix. An optional table may be specified with
13638the "sc*" form, in which case the currently tracked key will be looked up into
13639this alternate table instead of the table currently being tracked.
Willy Tarreau74ca5042013-06-11 23:12:07 +020013640
13641be_id : integer
13642 Returns an integer containing the current backend's id. It can be used in
13643 frontends with responses to check which backend processed the request.
13644
Marcin Deranekd2471c22016-12-12 14:08:05 +010013645be_name : string
13646 Returns a string containing the current backend's name. It can be used in
13647 frontends with responses to check which backend processed the request.
13648
Willy Tarreau74ca5042013-06-11 23:12:07 +020013649dst : ip
13650 This is the destination IPv4 address of the connection on the client side,
13651 which is the address the client connected to. It can be useful when running
13652 in transparent mode. It is of type IP and works on both IPv4 and IPv6 tables.
13653 On IPv6 tables, IPv4 address is mapped to its IPv6 equivalent, according to
13654 RFC 4291.
13655
13656dst_conn : integer
13657 Returns an integer value corresponding to the number of currently established
13658 connections on the same socket including the one being evaluated. It is
13659 normally used with ACLs but can as well be used to pass the information to
13660 servers in an HTTP header or in logs. It can be used to either return a sorry
13661 page before hard-blocking, or to use a specific backend to drain new requests
13662 when the socket is considered saturated. This offers the ability to assign
13663 different limits to different listening ports or addresses. See also the
13664 "fe_conn" and "be_conn" fetches.
Willy Tarreaud63335a2010-02-26 12:56:52 +010013665
Willy Tarreau16e01562016-08-09 16:46:18 +020013666dst_is_local : boolean
13667 Returns true if the destination address of the incoming connection is local
13668 to the system, or false if the address doesn't exist on the system, meaning
13669 that it was intercepted in transparent mode. It can be useful to apply
13670 certain rules by default to forwarded traffic and other rules to the traffic
13671 targetting the real address of the machine. For example the stats page could
13672 be delivered only on this address, or SSH access could be locally redirected.
13673 Please note that the check involves a few system calls, so it's better to do
13674 it only once per connection.
13675
Willy Tarreau74ca5042013-06-11 23:12:07 +020013676dst_port : integer
13677 Returns an integer value corresponding to the destination TCP port of the
13678 connection on the client side, which is the port the client connected to.
13679 This might be used when running in transparent mode, when assigning dynamic
13680 ports to some clients for a whole application session, to stick all users to
13681 a same server, or to pass the destination port information to a server using
13682 an HTTP header.
13683
Willy Tarreau60ca10a2017-08-18 15:26:54 +020013684fc_http_major : integer
13685 Reports the front connection's HTTP major version encoding, which may be 1
13686 for HTTP/0.9 to HTTP/1.1 or 2 for HTTP/2. Note, this is based on the on-wire
13687 encoding and not on the version present in the request header.
13688
Emeric Brun4f603012017-01-05 15:11:44 +010013689fc_rcvd_proxy : boolean
13690 Returns true if the client initiated the connection with a PROXY protocol
13691 header.
13692
Thierry Fournier / OZON.IO6310bef2016-07-24 20:16:50 +020013693fc_rtt(<unit>) : integer
13694 Returns the Round Trip Time (RTT) measured by the kernel for the client
13695 connection. <unit> is facultative, by default the unit is milliseconds. <unit>
13696 can be set to "ms" for milliseconds or "us" for microseconds. If the server
13697 connection is not established, if the connection is not TCP or if the
13698 operating system does not support TCP_INFO, for example Linux kernels before
13699 2.4, the sample fetch fails.
13700
13701fc_rttvar(<unit>) : integer
13702 Returns the Round Trip Time (RTT) variance measured by the kernel for the
13703 client connection. <unit> is facultative, by default the unit is milliseconds.
13704 <unit> can be set to "ms" for milliseconds or "us" for microseconds. If the
13705 server connection is not established, if the connection is not TCP or if the
13706 operating system does not support TCP_INFO, for example Linux kernels before
13707 2.4, the sample fetch fails.
13708
Joe Williams30fcd392016-08-10 07:06:44 -070013709fc_unacked(<unit>) : integer
13710 Returns the unacked counter measured by the kernel for the client connection.
13711 If the server connection is not established, if the connection is not TCP or
13712 if the operating system does not support TCP_INFO, for example Linux kernels
13713 before 2.4, the sample fetch fails.
13714
13715fc_sacked(<unit>) : integer
13716 Returns the sacked counter measured by the kernel for the client connection.
13717 If the server connection is not established, if the connection is not TCP or
13718 if the operating system does not support TCP_INFO, for example Linux kernels
13719 before 2.4, the sample fetch fails.
13720
13721fc_retrans(<unit>) : integer
13722 Returns the retransmits counter measured by the kernel for the client
13723 connection. If the server connection is not established, if the connection is
13724 not TCP or if the operating system does not support TCP_INFO, for example
13725 Linux kernels before 2.4, the sample fetch fails.
13726
13727fc_fackets(<unit>) : integer
13728 Returns the fack counter measured by the kernel for the client
13729 connection. If the server connection is not established, if the connection is
13730 not TCP or if the operating system does not support TCP_INFO, for example
13731 Linux kernels before 2.4, the sample fetch fails.
13732
13733fc_lost(<unit>) : integer
13734 Returns the lost counter measured by the kernel for the client
13735 connection. If the server connection is not established, if the connection is
13736 not TCP or if the operating system does not support TCP_INFO, for example
13737 Linux kernels before 2.4, the sample fetch fails.
13738
13739fc_reordering(<unit>) : integer
13740 Returns the reordering counter measured by the kernel for the client
13741 connection. If the server connection is not established, if the connection is
13742 not TCP or if the operating system does not support TCP_INFO, for example
13743 Linux kernels before 2.4, the sample fetch fails.
13744
Willy Tarreau74ca5042013-06-11 23:12:07 +020013745fe_id : integer
13746 Returns an integer containing the current frontend's id. It can be used in
Marcin Deranek6e413ed2016-12-13 12:40:01 +010013747 backends to check from which frontend it was called, or to stick all users
Willy Tarreau74ca5042013-06-11 23:12:07 +020013748 coming via a same frontend to the same server.
13749
Marcin Deranekd2471c22016-12-12 14:08:05 +010013750fe_name : string
13751 Returns a string containing the current frontend's name. It can be used in
13752 backends to check from which frontend it was called, or to stick all users
13753 coming via a same frontend to the same server.
13754
Cyril Bonté62ba8702014-04-22 23:52:25 +020013755sc_bytes_in_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013756sc0_bytes_in_rate([<table>]) : integer
13757sc1_bytes_in_rate([<table>]) : integer
13758sc2_bytes_in_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013759 Returns the average client-to-server bytes rate from the currently tracked
13760 counters, measured in amount of bytes over the period configured in the
13761 table. See also src_bytes_in_rate.
13762
Cyril Bonté62ba8702014-04-22 23:52:25 +020013763sc_bytes_out_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013764sc0_bytes_out_rate([<table>]) : integer
13765sc1_bytes_out_rate([<table>]) : integer
13766sc2_bytes_out_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013767 Returns the average server-to-client bytes rate from the currently tracked
13768 counters, measured in amount of bytes over the period configured in the
13769 table. See also src_bytes_out_rate.
13770
Cyril Bonté62ba8702014-04-22 23:52:25 +020013771sc_clr_gpc0(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013772sc0_clr_gpc0([<table>]) : integer
13773sc1_clr_gpc0([<table>]) : integer
13774sc2_clr_gpc0([<table>]) : integer
Willy Tarreauf73cd112011-08-13 01:45:16 +020013775 Clears the first General Purpose Counter associated to the currently tracked
13776 counters, and returns its previous value. Before the first invocation, the
Willy Tarreau869948b2013-01-04 14:14:57 +010013777 stored value is zero, so first invocation will always return zero. This is
13778 typically used as a second ACL in an expression in order to mark a connection
13779 when a first ACL was verified :
Willy Tarreauf73cd112011-08-13 01:45:16 +020013780
Jarno Huuskonen676f6222017-03-30 09:19:45 +030013781 Example:
Willy Tarreauf73cd112011-08-13 01:45:16 +020013782 # block if 5 consecutive requests continue to come faster than 10 sess
13783 # per second, and reset the counter as soon as the traffic slows down.
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020013784 acl abuse sc0_http_req_rate gt 10
13785 acl kill sc0_inc_gpc0 gt 5
13786 acl save sc0_clr_gpc0 ge 0
Willy Tarreauf73cd112011-08-13 01:45:16 +020013787 tcp-request connection accept if !abuse save
13788 tcp-request connection reject if abuse kill
13789
Cyril Bonté62ba8702014-04-22 23:52:25 +020013790sc_conn_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013791sc0_conn_cnt([<table>]) : integer
13792sc1_conn_cnt([<table>]) : integer
13793sc2_conn_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013794 Returns the cumulated number of incoming connections from currently tracked
13795 counters. See also src_conn_cnt.
13796
Cyril Bonté62ba8702014-04-22 23:52:25 +020013797sc_conn_cur(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013798sc0_conn_cur([<table>]) : integer
13799sc1_conn_cur([<table>]) : integer
13800sc2_conn_cur([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013801 Returns the current amount of concurrent connections tracking the same
13802 tracked counters. This number is automatically incremented when tracking
13803 begins and decremented when tracking stops. See also src_conn_cur.
13804
Cyril Bonté62ba8702014-04-22 23:52:25 +020013805sc_conn_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013806sc0_conn_rate([<table>]) : integer
13807sc1_conn_rate([<table>]) : integer
13808sc2_conn_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013809 Returns the average connection rate from the currently tracked counters,
13810 measured in amount of connections over the period configured in the table.
13811 See also src_conn_rate.
13812
Cyril Bonté62ba8702014-04-22 23:52:25 +020013813sc_get_gpc0(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013814sc0_get_gpc0([<table>]) : integer
13815sc1_get_gpc0([<table>]) : integer
13816sc2_get_gpc0([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013817 Returns the value of the first General Purpose Counter associated to the
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013818 currently tracked counters. See also src_get_gpc0 and sc/sc0/sc1/sc2_inc_gpc0.
Willy Tarreauba2ffd12013-05-29 15:54:14 +020013819
Thierry FOURNIER236657b2015-08-19 08:25:14 +020013820sc_get_gpt0(<ctr>[,<table>]) : integer
13821sc0_get_gpt0([<table>]) : integer
13822sc1_get_gpt0([<table>]) : integer
13823sc2_get_gpt0([<table>]) : integer
13824 Returns the value of the first General Purpose Tag associated to the
13825 currently tracked counters. See also src_get_gpt0.
13826
Cyril Bonté62ba8702014-04-22 23:52:25 +020013827sc_gpc0_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013828sc0_gpc0_rate([<table>]) : integer
13829sc1_gpc0_rate([<table>]) : integer
13830sc2_gpc0_rate([<table>]) : integer
Willy Tarreauba2ffd12013-05-29 15:54:14 +020013831 Returns the average increment rate of the first General Purpose Counter
13832 associated to the currently tracked counters. It reports the frequency
13833 which the gpc0 counter was incremented over the configured period. See also
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013834 src_gpc0_rate, sc/sc0/sc1/sc2_get_gpc0, and sc/sc0/sc1/sc2_inc_gpc0. Note
13835 that the "gpc0_rate" counter must be stored in the stick-table for a value to
13836 be returned, as "gpc0" only holds the event count.
Willy Tarreaue9656522010-08-17 15:40:09 +020013837
Cyril Bonté62ba8702014-04-22 23:52:25 +020013838sc_http_err_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013839sc0_http_err_cnt([<table>]) : integer
13840sc1_http_err_cnt([<table>]) : integer
13841sc2_http_err_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013842 Returns the cumulated number of HTTP errors from the currently tracked
13843 counters. This includes the both request errors and 4xx error responses.
13844 See also src_http_err_cnt.
13845
Cyril Bonté62ba8702014-04-22 23:52:25 +020013846sc_http_err_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013847sc0_http_err_rate([<table>]) : integer
13848sc1_http_err_rate([<table>]) : integer
13849sc2_http_err_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013850 Returns the average rate of HTTP errors from the currently tracked counters,
13851 measured in amount of errors over the period configured in the table. This
13852 includes the both request errors and 4xx error responses. See also
13853 src_http_err_rate.
13854
Cyril Bonté62ba8702014-04-22 23:52:25 +020013855sc_http_req_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013856sc0_http_req_cnt([<table>]) : integer
13857sc1_http_req_cnt([<table>]) : integer
13858sc2_http_req_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013859 Returns the cumulated number of HTTP requests from the currently tracked
13860 counters. This includes every started request, valid or not. See also
13861 src_http_req_cnt.
13862
Cyril Bonté62ba8702014-04-22 23:52:25 +020013863sc_http_req_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013864sc0_http_req_rate([<table>]) : integer
13865sc1_http_req_rate([<table>]) : integer
13866sc2_http_req_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013867 Returns the average rate of HTTP requests from the currently tracked
13868 counters, measured in amount of requests over the period configured in
13869 the table. This includes every started request, valid or not. See also
13870 src_http_req_rate.
13871
Cyril Bonté62ba8702014-04-22 23:52:25 +020013872sc_inc_gpc0(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013873sc0_inc_gpc0([<table>]) : integer
13874sc1_inc_gpc0([<table>]) : integer
13875sc2_inc_gpc0([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013876 Increments the first General Purpose Counter associated to the currently
Willy Tarreau869948b2013-01-04 14:14:57 +010013877 tracked counters, and returns its new value. Before the first invocation,
13878 the stored value is zero, so first invocation will increase it to 1 and will
13879 return 1. This is typically used as a second ACL in an expression in order
13880 to mark a connection when a first ACL was verified :
Willy Tarreaue9656522010-08-17 15:40:09 +020013881
Jarno Huuskonen676f6222017-03-30 09:19:45 +030013882 Example:
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020013883 acl abuse sc0_http_req_rate gt 10
13884 acl kill sc0_inc_gpc0 gt 0
Willy Tarreaue9656522010-08-17 15:40:09 +020013885 tcp-request connection reject if abuse kill
13886
Cyril Bonté62ba8702014-04-22 23:52:25 +020013887sc_kbytes_in(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013888sc0_kbytes_in([<table>]) : integer
13889sc1_kbytes_in([<table>]) : integer
13890sc2_kbytes_in([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020013891 Returns the total amount of client-to-server data from the currently tracked
13892 counters, measured in kilobytes. The test is currently performed on 32-bit
13893 integers, which limits values to 4 terabytes. See also src_kbytes_in.
Willy Tarreaue9656522010-08-17 15:40:09 +020013894
Cyril Bonté62ba8702014-04-22 23:52:25 +020013895sc_kbytes_out(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013896sc0_kbytes_out([<table>]) : integer
13897sc1_kbytes_out([<table>]) : integer
13898sc2_kbytes_out([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020013899 Returns the total amount of server-to-client data from the currently tracked
13900 counters, measured in kilobytes. The test is currently performed on 32-bit
13901 integers, which limits values to 4 terabytes. See also src_kbytes_out.
Willy Tarreaue9656522010-08-17 15:40:09 +020013902
Cyril Bonté62ba8702014-04-22 23:52:25 +020013903sc_sess_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013904sc0_sess_cnt([<table>]) : integer
13905sc1_sess_cnt([<table>]) : integer
13906sc2_sess_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013907 Returns the cumulated number of incoming connections that were transformed
13908 into sessions, which means that they were accepted by a "tcp-request
13909 connection" rule, from the currently tracked counters. A backend may count
13910 more sessions than connections because each connection could result in many
Jamie Gloudonaaa21002012-08-25 00:18:33 -040013911 backend sessions if some HTTP keep-alive is performed over the connection
Willy Tarreaue9656522010-08-17 15:40:09 +020013912 with the client. See also src_sess_cnt.
13913
Cyril Bonté62ba8702014-04-22 23:52:25 +020013914sc_sess_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013915sc0_sess_rate([<table>]) : integer
13916sc1_sess_rate([<table>]) : integer
13917sc2_sess_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013918 Returns the average session rate from the currently tracked counters,
13919 measured in amount of sessions over the period configured in the table. A
13920 session is a connection that got past the early "tcp-request connection"
13921 rules. A backend may count more sessions than connections because each
13922 connection could result in many backend sessions if some HTTP keep-alive is
Jamie Gloudonaaa21002012-08-25 00:18:33 -040013923 performed over the connection with the client. See also src_sess_rate.
Willy Tarreaue9656522010-08-17 15:40:09 +020013924
Cyril Bonté62ba8702014-04-22 23:52:25 +020013925sc_tracked(<ctr>[,<table>]) : boolean
Willy Tarreau0f791d42013-07-23 19:56:43 +020013926sc0_tracked([<table>]) : boolean
13927sc1_tracked([<table>]) : boolean
13928sc2_tracked([<table>]) : boolean
Willy Tarreau6f1615f2013-06-03 15:15:22 +020013929 Returns true if the designated session counter is currently being tracked by
13930 the current session. This can be useful when deciding whether or not we want
13931 to set some values in a header passed to the server.
13932
Cyril Bonté62ba8702014-04-22 23:52:25 +020013933sc_trackers(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013934sc0_trackers([<table>]) : integer
13935sc1_trackers([<table>]) : integer
13936sc2_trackers([<table>]) : integer
Willy Tarreau2406db42012-12-09 12:16:43 +010013937 Returns the current amount of concurrent connections tracking the same
13938 tracked counters. This number is automatically incremented when tracking
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020013939 begins and decremented when tracking stops. It differs from sc0_conn_cur in
Willy Tarreau2406db42012-12-09 12:16:43 +010013940 that it does not rely on any stored information but on the table's reference
13941 count (the "use" value which is returned by "show table" on the CLI). This
Willy Tarreau74ca5042013-06-11 23:12:07 +020013942 may sometimes be more suited for layer7 tracking. It can be used to tell a
13943 server how many concurrent connections there are from a given address for
13944 example.
Willy Tarreau2406db42012-12-09 12:16:43 +010013945
Willy Tarreau74ca5042013-06-11 23:12:07 +020013946so_id : integer
13947 Returns an integer containing the current listening socket's id. It is useful
13948 in frontends involving many "bind" lines, or to stick all users coming via a
13949 same socket to the same server.
Willy Tarreaud63335a2010-02-26 12:56:52 +010013950
Willy Tarreau74ca5042013-06-11 23:12:07 +020013951src : ip
13952 This is the source IPv4 address of the client of the session. It is of type
13953 IP and works on both IPv4 and IPv6 tables. On IPv6 tables, IPv4 addresses are
13954 mapped to their IPv6 equivalent, according to RFC 4291. Note that it is the
13955 TCP-level source address which is used, and not the address of a client
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010013956 behind a proxy. However if the "accept-proxy" or "accept-netscaler-cip" bind
13957 directive is used, it can be the address of a client behind another
13958 PROXY-protocol compatible component for all rule sets except
13959 "tcp-request connection" which sees the real address.
Willy Tarreaud63335a2010-02-26 12:56:52 +010013960
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010013961 Example:
13962 # add an HTTP header in requests with the originating address' country
13963 http-request set-header X-Country %[src,map_ip(geoip.lst)]
13964
Willy Tarreau74ca5042013-06-11 23:12:07 +020013965src_bytes_in_rate([<table>]) : integer
13966 Returns the average bytes rate from the incoming connection's source address
13967 in the current proxy's stick-table or in the designated stick-table, measured
13968 in amount of bytes over the period configured in the table. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013969 not found, zero is returned. See also sc/sc0/sc1/sc2_bytes_in_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013970
Willy Tarreau74ca5042013-06-11 23:12:07 +020013971src_bytes_out_rate([<table>]) : integer
13972 Returns the average bytes rate to the incoming connection's source address in
13973 the current proxy's stick-table or in the designated stick-table, measured in
Willy Tarreauc9705a12010-07-27 20:05:50 +020013974 amount of bytes over the period configured in the table. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013975 not found, zero is returned. See also sc/sc0/sc1/sc2_bytes_out_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013976
Willy Tarreau74ca5042013-06-11 23:12:07 +020013977src_clr_gpc0([<table>]) : integer
13978 Clears the first General Purpose Counter associated to the incoming
13979 connection's source address in the current proxy's stick-table or in the
13980 designated stick-table, and returns its previous value. If the address is not
13981 found, an entry is created and 0 is returned. This is typically used as a
13982 second ACL in an expression in order to mark a connection when a first ACL
13983 was verified :
Willy Tarreauf73cd112011-08-13 01:45:16 +020013984
Jarno Huuskonen676f6222017-03-30 09:19:45 +030013985 Example:
Willy Tarreauf73cd112011-08-13 01:45:16 +020013986 # block if 5 consecutive requests continue to come faster than 10 sess
13987 # per second, and reset the counter as soon as the traffic slows down.
13988 acl abuse src_http_req_rate gt 10
13989 acl kill src_inc_gpc0 gt 5
Willy Tarreau869948b2013-01-04 14:14:57 +010013990 acl save src_clr_gpc0 ge 0
Willy Tarreauf73cd112011-08-13 01:45:16 +020013991 tcp-request connection accept if !abuse save
13992 tcp-request connection reject if abuse kill
13993
Willy Tarreau74ca5042013-06-11 23:12:07 +020013994src_conn_cnt([<table>]) : integer
Willy Tarreauc9705a12010-07-27 20:05:50 +020013995 Returns the cumulated number of connections initiated from the current
Willy Tarreau74ca5042013-06-11 23:12:07 +020013996 incoming connection's source address in the current proxy's stick-table or in
Willy Tarreauc9705a12010-07-27 20:05:50 +020013997 the designated stick-table. If the address is not found, zero is returned.
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013998 See also sc/sc0/sc1/sc2_conn_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013999
Willy Tarreau74ca5042013-06-11 23:12:07 +020014000src_conn_cur([<table>]) : integer
Willy Tarreauc9705a12010-07-27 20:05:50 +020014001 Returns the current amount of concurrent connections initiated from the
Willy Tarreau74ca5042013-06-11 23:12:07 +020014002 current incoming connection's source address in the current proxy's
14003 stick-table or in the designated stick-table. If the address is not found,
Willy Tarreau4d4149c2013-07-23 19:33:46 +020014004 zero is returned. See also sc/sc0/sc1/sc2_conn_cur.
Willy Tarreauc9705a12010-07-27 20:05:50 +020014005
Willy Tarreau74ca5042013-06-11 23:12:07 +020014006src_conn_rate([<table>]) : integer
14007 Returns the average connection rate from the incoming connection's source
14008 address in the current proxy's stick-table or in the designated stick-table,
14009 measured in amount of connections over the period configured in the table. If
Willy Tarreau4d4149c2013-07-23 19:33:46 +020014010 the address is not found, zero is returned. See also sc/sc0/sc1/sc2_conn_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020014011
Willy Tarreau74ca5042013-06-11 23:12:07 +020014012src_get_gpc0([<table>]) : integer
Willy Tarreauc9705a12010-07-27 20:05:50 +020014013 Returns the value of the first General Purpose Counter associated to the
Willy Tarreau74ca5042013-06-11 23:12:07 +020014014 incoming connection's source address in the current proxy's stick-table or in
Willy Tarreauc9705a12010-07-27 20:05:50 +020014015 the designated stick-table. If the address is not found, zero is returned.
Willy Tarreau4d4149c2013-07-23 19:33:46 +020014016 See also sc/sc0/sc1/sc2_get_gpc0 and src_inc_gpc0.
Willy Tarreauc9705a12010-07-27 20:05:50 +020014017
Thierry FOURNIER236657b2015-08-19 08:25:14 +020014018src_get_gpt0([<table>]) : integer
14019 Returns the value of the first General Purpose Tag associated to the
14020 incoming connection's source address in the current proxy's stick-table or in
14021 the designated stick-table. If the address is not found, zero is returned.
14022 See also sc/sc0/sc1/sc2_get_gpt0.
14023
Willy Tarreau74ca5042013-06-11 23:12:07 +020014024src_gpc0_rate([<table>]) : integer
Willy Tarreauba2ffd12013-05-29 15:54:14 +020014025 Returns the average increment rate of the first General Purpose Counter
Willy Tarreau74ca5042013-06-11 23:12:07 +020014026 associated to the incoming connection's source address in the current proxy's
Willy Tarreauba2ffd12013-05-29 15:54:14 +020014027 stick-table or in the designated stick-table. It reports the frequency
14028 which the gpc0 counter was incremented over the configured period. See also
Willy Tarreau4d4149c2013-07-23 19:33:46 +020014029 sc/sc0/sc1/sc2_gpc0_rate, src_get_gpc0, and sc/sc0/sc1/sc2_inc_gpc0. Note
14030 that the "gpc0_rate" counter must be stored in the stick-table for a value to
14031 be returned, as "gpc0" only holds the event count.
Willy Tarreauba2ffd12013-05-29 15:54:14 +020014032
Willy Tarreau74ca5042013-06-11 23:12:07 +020014033src_http_err_cnt([<table>]) : integer
14034 Returns the cumulated number of HTTP errors from the incoming connection's
14035 source address in the current proxy's stick-table or in the designated
Willy Tarreauc9705a12010-07-27 20:05:50 +020014036 stick-table. This includes the both request errors and 4xx error responses.
Willy Tarreau4d4149c2013-07-23 19:33:46 +020014037 See also sc/sc0/sc1/sc2_http_err_cnt. If the address is not found, zero is
Willy Tarreau74ca5042013-06-11 23:12:07 +020014038 returned.
Willy Tarreauc9705a12010-07-27 20:05:50 +020014039
Willy Tarreau74ca5042013-06-11 23:12:07 +020014040src_http_err_rate([<table>]) : integer
14041 Returns the average rate of HTTP errors from the incoming connection's source
14042 address in the current proxy's stick-table or in the designated stick-table,
14043 measured in amount of errors over the period configured in the table. This
14044 includes the both request errors and 4xx error responses. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020014045 not found, zero is returned. See also sc/sc0/sc1/sc2_http_err_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020014046
Willy Tarreau74ca5042013-06-11 23:12:07 +020014047src_http_req_cnt([<table>]) : integer
14048 Returns the cumulated number of HTTP requests from the incoming connection's
14049 source address in the current proxy's stick-table or in the designated stick-
14050 table. This includes every started request, valid or not. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020014051 not found, zero is returned. See also sc/sc0/sc1/sc2_http_req_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +020014052
Willy Tarreau74ca5042013-06-11 23:12:07 +020014053src_http_req_rate([<table>]) : integer
14054 Returns the average rate of HTTP requests from the incoming connection's
14055 source address in the current proxy's stick-table or in the designated stick-
14056 table, measured in amount of requests over the period configured in the
Willy Tarreauc9705a12010-07-27 20:05:50 +020014057 table. This includes every started request, valid or not. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020014058 not found, zero is returned. See also sc/sc0/sc1/sc2_http_req_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020014059
Willy Tarreau74ca5042013-06-11 23:12:07 +020014060src_inc_gpc0([<table>]) : integer
14061 Increments the first General Purpose Counter associated to the incoming
14062 connection's source address in the current proxy's stick-table or in the
14063 designated stick-table, and returns its new value. If the address is not
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020014064 found, an entry is created and 1 is returned. See also sc0/sc2/sc2_inc_gpc0.
Willy Tarreau74ca5042013-06-11 23:12:07 +020014065 This is typically used as a second ACL in an expression in order to mark a
14066 connection when a first ACL was verified :
Willy Tarreauc9705a12010-07-27 20:05:50 +020014067
Jarno Huuskonen676f6222017-03-30 09:19:45 +030014068 Example:
Willy Tarreauc9705a12010-07-27 20:05:50 +020014069 acl abuse src_http_req_rate gt 10
Willy Tarreau869948b2013-01-04 14:14:57 +010014070 acl kill src_inc_gpc0 gt 0
Willy Tarreaue9656522010-08-17 15:40:09 +020014071 tcp-request connection reject if abuse kill
Willy Tarreauc9705a12010-07-27 20:05:50 +020014072
Willy Tarreau16e01562016-08-09 16:46:18 +020014073src_is_local : boolean
14074 Returns true if the source address of the incoming connection is local to the
14075 system, or false if the address doesn't exist on the system, meaning that it
14076 comes from a remote machine. Note that UNIX addresses are considered local.
14077 It can be useful to apply certain access restrictions based on where the
14078 client comes from (eg: require auth or https for remote machines). Please
14079 note that the check involves a few system calls, so it's better to do it only
14080 once per connection.
14081
Willy Tarreau74ca5042013-06-11 23:12:07 +020014082src_kbytes_in([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020014083 Returns the total amount of data received from the incoming connection's
14084 source address in the current proxy's stick-table or in the designated
14085 stick-table, measured in kilobytes. If the address is not found, zero is
14086 returned. The test is currently performed on 32-bit integers, which limits
14087 values to 4 terabytes. See also sc/sc0/sc1/sc2_kbytes_in.
Willy Tarreauc9705a12010-07-27 20:05:50 +020014088
Willy Tarreau74ca5042013-06-11 23:12:07 +020014089src_kbytes_out([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020014090 Returns the total amount of data sent to the incoming connection's source
14091 address in the current proxy's stick-table or in the designated stick-table,
14092 measured in kilobytes. If the address is not found, zero is returned. The
14093 test is currently performed on 32-bit integers, which limits values to 4
14094 terabytes. See also sc/sc0/sc1/sc2_kbytes_out.
Willy Tarreaua975b8f2010-06-05 19:13:27 +020014095
Willy Tarreau74ca5042013-06-11 23:12:07 +020014096src_port : integer
14097 Returns an integer value corresponding to the TCP source port of the
14098 connection on the client side, which is the port the client connected from.
14099 Usage of this function is very limited as modern protocols do not care much
14100 about source ports nowadays.
Willy Tarreau079ff0a2009-03-05 21:34:28 +010014101
Willy Tarreau74ca5042013-06-11 23:12:07 +020014102src_sess_cnt([<table>]) : integer
14103 Returns the cumulated number of connections initiated from the incoming
Willy Tarreauc9705a12010-07-27 20:05:50 +020014104 connection's source IPv4 address in the current proxy's stick-table or in the
14105 designated stick-table, that were transformed into sessions, which means that
14106 they were accepted by "tcp-request" rules. If the address is not found, zero
Willy Tarreau4d4149c2013-07-23 19:33:46 +020014107 is returned. See also sc/sc0/sc1/sc2_sess_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +020014108
Willy Tarreau74ca5042013-06-11 23:12:07 +020014109src_sess_rate([<table>]) : integer
14110 Returns the average session rate from the incoming connection's source
14111 address in the current proxy's stick-table or in the designated stick-table,
14112 measured in amount of sessions over the period configured in the table. A
14113 session is a connection that went past the early "tcp-request" rules. If the
Willy Tarreau4d4149c2013-07-23 19:33:46 +020014114 address is not found, zero is returned. See also sc/sc0/sc1/sc2_sess_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020014115
Willy Tarreau74ca5042013-06-11 23:12:07 +020014116src_updt_conn_cnt([<table>]) : integer
14117 Creates or updates the entry associated to the incoming connection's source
14118 address in the current proxy's stick-table or in the designated stick-table.
14119 This table must be configured to store the "conn_cnt" data type, otherwise
14120 the match will be ignored. The current count is incremented by one, and the
14121 expiration timer refreshed. The updated count is returned, so this match
14122 can't return zero. This was used to reject service abusers based on their
14123 source address. Note: it is recommended to use the more complete "track-sc*"
14124 actions in "tcp-request" rules instead.
Willy Tarreaua975b8f2010-06-05 19:13:27 +020014125
14126 Example :
14127 # This frontend limits incoming SSH connections to 3 per 10 second for
14128 # each source address, and rejects excess connections until a 10 second
14129 # silence is observed. At most 20 addresses are tracked.
14130 listen ssh
14131 bind :22
14132 mode tcp
14133 maxconn 100
Willy Tarreauc9705a12010-07-27 20:05:50 +020014134 stick-table type ip size 20 expire 10s store conn_cnt
Willy Tarreau74ca5042013-06-11 23:12:07 +020014135 tcp-request content reject if { src_updt_conn_cnt gt 3 }
Willy Tarreaua975b8f2010-06-05 19:13:27 +020014136 server local 127.0.0.1:22
14137
Willy Tarreau74ca5042013-06-11 23:12:07 +020014138srv_id : integer
14139 Returns an integer containing the server's id when processing the response.
14140 While it's almost only used with ACLs, it may be used for logging or
14141 debugging.
Hervé COMMOWICKdaa824e2011-08-05 12:09:44 +020014142
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200141437.3.4. Fetching samples at Layer 5
Willy Tarreau74ca5042013-06-11 23:12:07 +020014144----------------------------------
Willy Tarreau0b1cd942010-05-16 22:18:27 +020014145
Willy Tarreau74ca5042013-06-11 23:12:07 +020014146The layer 5 usually describes just the session layer which in haproxy is
14147closest to the session once all the connection handshakes are finished, but
14148when no content is yet made available. The fetch methods described here are
14149usable as low as the "tcp-request content" rule sets unless they require some
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030014150future information. Those generally include the results of SSL negotiations.
Willy Tarreauc735a072011-03-29 00:57:02 +020014151
Ben Shillitof25e8e52016-12-02 14:25:37 +00001415251d.all(<prop>[,<prop>*]) : string
14153 Returns values for the properties requested as a string, where values are
14154 separated by the delimiter specified with "51degrees-property-separator".
14155 The device is identified using all the important HTTP headers from the
14156 request. The function can be passed up to five property names, and if a
14157 property name can't be found, the value "NoData" is returned.
14158
14159 Example :
14160 # Here the header "X-51D-DeviceTypeMobileTablet" is added to the request
14161 # containing the three properties requested using all relevant headers from
14162 # the request.
14163 frontend http-in
14164 bind *:8081
14165 default_backend servers
14166 http-request set-header X-51D-DeviceTypeMobileTablet \
14167 %[51d.all(DeviceType,IsMobile,IsTablet)]
14168
Emeric Brun645ae792014-04-30 14:21:06 +020014169ssl_bc : boolean
14170 Returns true when the back connection was made via an SSL/TLS transport
14171 layer and is locally deciphered. This means the outgoing connection was made
14172 other a server with the "ssl" option.
14173
14174ssl_bc_alg_keysize : integer
14175 Returns the symmetric cipher key size supported in bits when the outgoing
14176 connection was made over an SSL/TLS transport layer.
14177
14178ssl_bc_cipher : string
14179 Returns the name of the used cipher when the outgoing connection was made
14180 over an SSL/TLS transport layer.
14181
14182ssl_bc_protocol : string
14183 Returns the name of the used protocol when the outgoing connection was made
14184 over an SSL/TLS transport layer.
14185
Emeric Brunb73a9b02014-04-30 18:49:19 +020014186ssl_bc_unique_id : binary
Emeric Brun645ae792014-04-30 14:21:06 +020014187 When the outgoing connection was made over an SSL/TLS transport layer,
Emeric Brunb73a9b02014-04-30 18:49:19 +020014188 returns the TLS unique ID as defined in RFC5929 section 3. The unique id
14189 can be encoded to base64 using the converter: "ssl_bc_unique_id,base64".
Emeric Brun645ae792014-04-30 14:21:06 +020014190
14191ssl_bc_session_id : binary
14192 Returns the SSL ID of the back connection when the outgoing connection was
14193 made over an SSL/TLS transport layer. It is useful to log if we want to know
14194 if session was reused or not.
14195
14196ssl_bc_use_keysize : integer
14197 Returns the symmetric cipher key size used in bits when the outgoing
14198 connection was made over an SSL/TLS transport layer.
14199
Willy Tarreau74ca5042013-06-11 23:12:07 +020014200ssl_c_ca_err : integer
14201 When the incoming connection was made over an SSL/TLS transport layer,
14202 returns the ID of the first error detected during verification of the client
14203 certificate at depth > 0, or 0 if no error was encountered during this
14204 verification process. Please refer to your SSL library's documentation to
14205 find the exhaustive list of error codes.
Willy Tarreauc735a072011-03-29 00:57:02 +020014206
Willy Tarreau74ca5042013-06-11 23:12:07 +020014207ssl_c_ca_err_depth : integer
14208 When the incoming connection was made over an SSL/TLS transport layer,
14209 returns the depth in the CA chain of the first error detected during the
14210 verification of the client certificate. If no error is encountered, 0 is
14211 returned.
Willy Tarreau0ba27502007-12-24 16:55:16 +010014212
Emeric Brun43e79582014-10-29 19:03:26 +010014213ssl_c_der : binary
14214 Returns the DER formatted certificate presented by the client when the
14215 incoming connection was made over an SSL/TLS transport layer. When used for
14216 an ACL, the value(s) to match against can be passed in hexadecimal form.
14217
Willy Tarreau74ca5042013-06-11 23:12:07 +020014218ssl_c_err : integer
14219 When the incoming connection was made over an SSL/TLS transport layer,
14220 returns the ID of the first error detected during verification at depth 0, or
14221 0 if no error was encountered during this verification process. Please refer
14222 to your SSL library's documentation to find the exhaustive list of error
14223 codes.
Willy Tarreau62644772008-07-16 18:36:06 +020014224
Willy Tarreau74ca5042013-06-11 23:12:07 +020014225ssl_c_i_dn([<entry>[,<occ>]]) : string
14226 When the incoming connection was made over an SSL/TLS transport layer,
14227 returns the full distinguished name of the issuer of the certificate
14228 presented by the client when no <entry> is specified, or the value of the
14229 first given entry found from the beginning of the DN. If a positive/negative
14230 occurrence number is specified as the optional second argument, it returns
14231 the value of the nth given entry value from the beginning/end of the DN.
14232 For instance, "ssl_c_i_dn(OU,2)" the second organization unit, and
14233 "ssl_c_i_dn(CN)" retrieves the common name.
Willy Tarreau62644772008-07-16 18:36:06 +020014234
Willy Tarreau74ca5042013-06-11 23:12:07 +020014235ssl_c_key_alg : string
14236 Returns the name of the algorithm used to generate the key of the certificate
14237 presented by the client when the incoming connection was made over an SSL/TLS
14238 transport layer.
Willy Tarreau62644772008-07-16 18:36:06 +020014239
Willy Tarreau74ca5042013-06-11 23:12:07 +020014240ssl_c_notafter : string
14241 Returns the end date presented by the client as a formatted string
14242 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
14243 transport layer.
Emeric Brunbede3d02009-06-30 17:54:00 +020014244
Willy Tarreau74ca5042013-06-11 23:12:07 +020014245ssl_c_notbefore : string
14246 Returns the start date presented by the client as a formatted string
14247 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
14248 transport layer.
Willy Tarreaub6672b52011-12-12 17:23:41 +010014249
Willy Tarreau74ca5042013-06-11 23:12:07 +020014250ssl_c_s_dn([<entry>[,<occ>]]) : string
14251 When the incoming connection was made over an SSL/TLS transport layer,
14252 returns the full distinguished name of the subject of the certificate
14253 presented by the client when no <entry> is specified, or the value of the
14254 first given entry found from the beginning of the DN. If a positive/negative
14255 occurrence number is specified as the optional second argument, it returns
14256 the value of the nth given entry value from the beginning/end of the DN.
14257 For instance, "ssl_c_s_dn(OU,2)" the second organization unit, and
14258 "ssl_c_s_dn(CN)" retrieves the common name.
Willy Tarreaub6672b52011-12-12 17:23:41 +010014259
Willy Tarreau74ca5042013-06-11 23:12:07 +020014260ssl_c_serial : binary
14261 Returns the serial of the certificate presented by the client when the
14262 incoming connection was made over an SSL/TLS transport layer. When used for
14263 an ACL, the value(s) to match against can be passed in hexadecimal form.
Emeric Brun2525b6b2012-10-18 15:59:43 +020014264
Willy Tarreau74ca5042013-06-11 23:12:07 +020014265ssl_c_sha1 : binary
14266 Returns the SHA-1 fingerprint of the certificate presented by the client when
14267 the incoming connection was made over an SSL/TLS transport layer. This can be
14268 used to stick a client to a server, or to pass this information to a server.
Willy Tarreau2d0caa32014-07-02 19:01:22 +020014269 Note that the output is binary, so if you want to pass that signature to the
14270 server, you need to encode it in hex or base64, such as in the example below:
14271
Jarno Huuskonen676f6222017-03-30 09:19:45 +030014272 Example:
Willy Tarreau2d0caa32014-07-02 19:01:22 +020014273 http-request set-header X-SSL-Client-SHA1 %[ssl_c_sha1,hex]
Emeric Brun2525b6b2012-10-18 15:59:43 +020014274
Willy Tarreau74ca5042013-06-11 23:12:07 +020014275ssl_c_sig_alg : string
14276 Returns the name of the algorithm used to sign the certificate presented by
14277 the client when the incoming connection was made over an SSL/TLS transport
14278 layer.
Emeric Brun87855892012-10-17 17:39:35 +020014279
Willy Tarreau74ca5042013-06-11 23:12:07 +020014280ssl_c_used : boolean
14281 Returns true if current SSL session uses a client certificate even if current
14282 connection uses SSL session resumption. See also "ssl_fc_has_crt".
Emeric Brun7f56e742012-10-19 18:15:40 +020014283
Willy Tarreau74ca5042013-06-11 23:12:07 +020014284ssl_c_verify : integer
14285 Returns the verify result error ID when the incoming connection was made over
14286 an SSL/TLS transport layer, otherwise zero if no error is encountered. Please
14287 refer to your SSL library's documentation for an exhaustive list of error
14288 codes.
Emeric Brunce5ad802012-10-22 14:11:22 +020014289
Willy Tarreau74ca5042013-06-11 23:12:07 +020014290ssl_c_version : integer
14291 Returns the version of the certificate presented by the client when the
14292 incoming connection was made over an SSL/TLS transport layer.
Emeric Brunce5ad802012-10-22 14:11:22 +020014293
Emeric Brun43e79582014-10-29 19:03:26 +010014294ssl_f_der : binary
14295 Returns the DER formatted certificate presented by the frontend when the
14296 incoming connection was made over an SSL/TLS transport layer. When used for
14297 an ACL, the value(s) to match against can be passed in hexadecimal form.
14298
Willy Tarreau74ca5042013-06-11 23:12:07 +020014299ssl_f_i_dn([<entry>[,<occ>]]) : string
14300 When the incoming connection was made over an SSL/TLS transport layer,
14301 returns the full distinguished name of the issuer of the certificate
14302 presented by the frontend when no <entry> is specified, or the value of the
14303 first given entry found from the beginning of the DN. If a positive/negative
Emeric Brun87855892012-10-17 17:39:35 +020014304 occurrence number is specified as the optional second argument, it returns
Willy Tarreau74ca5042013-06-11 23:12:07 +020014305 the value of the nth given entry value from the beginning/end of the DN.
14306 For instance, "ssl_f_i_dn(OU,2)" the second organization unit, and
14307 "ssl_f_i_dn(CN)" retrieves the common name.
Emeric Brun87855892012-10-17 17:39:35 +020014308
Willy Tarreau74ca5042013-06-11 23:12:07 +020014309ssl_f_key_alg : string
14310 Returns the name of the algorithm used to generate the key of the certificate
14311 presented by the frontend when the incoming connection was made over an
14312 SSL/TLS transport layer.
Emeric Brun7f56e742012-10-19 18:15:40 +020014313
Willy Tarreau74ca5042013-06-11 23:12:07 +020014314ssl_f_notafter : string
14315 Returns the end date presented by the frontend as a formatted string
14316 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
14317 transport layer.
Emeric Brun2525b6b2012-10-18 15:59:43 +020014318
Willy Tarreau74ca5042013-06-11 23:12:07 +020014319ssl_f_notbefore : string
14320 Returns the start date presented by the frontend as a formatted string
14321 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
14322 transport layer.
Emeric Brun87855892012-10-17 17:39:35 +020014323
Willy Tarreau74ca5042013-06-11 23:12:07 +020014324ssl_f_s_dn([<entry>[,<occ>]]) : string
14325 When the incoming connection was made over an SSL/TLS transport layer,
14326 returns the full distinguished name of the subject of the certificate
14327 presented by the frontend when no <entry> is specified, or the value of the
14328 first given entry found from the beginning of the DN. If a positive/negative
14329 occurrence number is specified as the optional second argument, it returns
14330 the value of the nth given entry value from the beginning/end of the DN.
14331 For instance, "ssl_f_s_dn(OU,2)" the second organization unit, and
14332 "ssl_f_s_dn(CN)" retrieves the common name.
Emeric Brunce5ad802012-10-22 14:11:22 +020014333
Willy Tarreau74ca5042013-06-11 23:12:07 +020014334ssl_f_serial : binary
14335 Returns the serial of the certificate presented by the frontend when the
14336 incoming connection was made over an SSL/TLS transport layer. When used for
14337 an ACL, the value(s) to match against can be passed in hexadecimal form.
Emeric Brun87855892012-10-17 17:39:35 +020014338
Emeric Brun55f4fa82014-04-30 17:11:25 +020014339ssl_f_sha1 : binary
14340 Returns the SHA-1 fingerprint of the certificate presented by the frontend
14341 when the incoming connection was made over an SSL/TLS transport layer. This
14342 can be used to know which certificate was chosen using SNI.
14343
Willy Tarreau74ca5042013-06-11 23:12:07 +020014344ssl_f_sig_alg : string
14345 Returns the name of the algorithm used to sign the certificate presented by
14346 the frontend when the incoming connection was made over an SSL/TLS transport
14347 layer.
Emeric Brun7f56e742012-10-19 18:15:40 +020014348
Willy Tarreau74ca5042013-06-11 23:12:07 +020014349ssl_f_version : integer
14350 Returns the version of the certificate presented by the frontend when the
14351 incoming connection was made over an SSL/TLS transport layer.
14352
14353ssl_fc : boolean
Emeric Brun2525b6b2012-10-18 15:59:43 +020014354 Returns true when the front connection was made via an SSL/TLS transport
14355 layer and is locally deciphered. This means it has matched a socket declared
14356 with a "bind" line having the "ssl" option.
14357
Willy Tarreau74ca5042013-06-11 23:12:07 +020014358 Example :
14359 # This passes "X-Proto: https" to servers when client connects over SSL
14360 listen http-https
14361 bind :80
14362 bind :443 ssl crt /etc/haproxy.pem
14363 http-request add-header X-Proto https if { ssl_fc }
14364
14365ssl_fc_alg_keysize : integer
14366 Returns the symmetric cipher key size supported in bits when the incoming
14367 connection was made over an SSL/TLS transport layer.
14368
14369ssl_fc_alpn : string
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030014370 This extracts the Application Layer Protocol Negotiation field from an
Willy Tarreau74ca5042013-06-11 23:12:07 +020014371 incoming connection made via a TLS transport layer and locally deciphered by
14372 haproxy. The result is a string containing the protocol name advertised by
14373 the client. The SSL library must have been built with support for TLS
14374 extensions enabled (check haproxy -vv). Note that the TLS ALPN extension is
14375 not advertised unless the "alpn" keyword on the "bind" line specifies a
14376 protocol list. Also, nothing forces the client to pick a protocol from this
14377 list, any other one may be requested. The TLS ALPN extension is meant to
14378 replace the TLS NPN extension. See also "ssl_fc_npn".
14379
Willy Tarreau74ca5042013-06-11 23:12:07 +020014380ssl_fc_cipher : string
14381 Returns the name of the used cipher when the incoming connection was made
14382 over an SSL/TLS transport layer.
Willy Tarreauab861d32013-04-02 02:30:41 +020014383
Thierry FOURNIER5bf77322017-02-25 12:45:22 +010014384ssl_fc_cipherlist_bin : binary
14385 Returns the binary form of the client hello cipher list. The maximum returned
14386 value length is according with the value of
Emmanuel Hocdetaaee7502017-03-07 18:34:58 +010014387 "tune.ssl.capture-cipherlist-size".
Thierry FOURNIER5bf77322017-02-25 12:45:22 +010014388
14389ssl_fc_cipherlist_hex : string
14390 Returns the binary form of the client hello cipher list encoded as
14391 hexadecimal. The maximum returned value length is according with the value of
Emmanuel Hocdetaaee7502017-03-07 18:34:58 +010014392 "tune.ssl.capture-cipherlist-size".
Thierry FOURNIER5bf77322017-02-25 12:45:22 +010014393
14394ssl_fc_cipherlist_str : string
14395 Returns the decoded text form of the client hello cipher list. The maximum
14396 number of ciphers returned is according with the value of
14397 "tune.ssl.capture-cipherlist-size". Note that this sample-fetch is only
Emmanuel Hocdetddcde192017-09-01 17:32:08 +020014398 avaible with OpenSSL >= 1.0.2. If the function is not enabled, this
14399 sample-fetch returns the hash like "ssl_fc_cipherlist_xxh".
Thierry FOURNIER5bf77322017-02-25 12:45:22 +010014400
14401ssl_fc_cipherlist_xxh : integer
14402 Returns a xxh64 of the cipher list. This hash can be return only is the value
14403 "tune.ssl.capture-cipherlist-size" is set greater than 0, however the hash
Emmanuel Hocdetaaee7502017-03-07 18:34:58 +010014404 take in account all the data of the cipher list.
Thierry FOURNIER5bf77322017-02-25 12:45:22 +010014405
Willy Tarreau74ca5042013-06-11 23:12:07 +020014406ssl_fc_has_crt : boolean
Emeric Brun2525b6b2012-10-18 15:59:43 +020014407 Returns true if a client certificate is present in an incoming connection over
14408 SSL/TLS transport layer. Useful if 'verify' statement is set to 'optional'.
Emeric Brun9143d372012-12-20 15:44:16 +010014409 Note: on SSL session resumption with Session ID or TLS ticket, client
14410 certificate is not present in the current connection but may be retrieved
14411 from the cache or the ticket. So prefer "ssl_c_used" if you want to check if
14412 current SSL session uses a client certificate.
Emeric Brun2525b6b2012-10-18 15:59:43 +020014413
Olivier Houchardccaa7de2017-10-02 11:51:03 +020014414ssl_fc_has_early : boolean
14415 Returns true if early data were sent, and the handshake didn't happen yet. As
14416 it has security implications, it is useful to be able to refuse those, or
14417 wait until the handshake happened.
14418
Willy Tarreau74ca5042013-06-11 23:12:07 +020014419ssl_fc_has_sni : boolean
14420 This checks for the presence of a Server Name Indication TLS extension (SNI)
Willy Tarreauf7bc57c2012-10-03 00:19:48 +020014421 in an incoming connection was made over an SSL/TLS transport layer. Returns
14422 true when the incoming connection presents a TLS SNI field. This requires
14423 that the SSL library is build with support for TLS extensions enabled (check
14424 haproxy -vv).
Willy Tarreau7875d092012-09-10 08:20:03 +020014425
Nenad Merdanovic1516fe32016-05-17 03:31:21 +020014426ssl_fc_is_resumed : boolean
Nenad Merdanovic26ea8222015-05-18 02:28:57 +020014427 Returns true if the SSL/TLS session has been resumed through the use of
14428 SSL session cache or TLS tickets.
14429
Willy Tarreau74ca5042013-06-11 23:12:07 +020014430ssl_fc_npn : string
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030014431 This extracts the Next Protocol Negotiation field from an incoming connection
Willy Tarreau74ca5042013-06-11 23:12:07 +020014432 made via a TLS transport layer and locally deciphered by haproxy. The result
14433 is a string containing the protocol name advertised by the client. The SSL
14434 library must have been built with support for TLS extensions enabled (check
14435 haproxy -vv). Note that the TLS NPN extension is not advertised unless the
14436 "npn" keyword on the "bind" line specifies a protocol list. Also, nothing
14437 forces the client to pick a protocol from this list, any other one may be
14438 requested. Please note that the TLS NPN extension was replaced with ALPN.
Willy Tarreaua33c6542012-10-15 13:19:06 +020014439
Willy Tarreau74ca5042013-06-11 23:12:07 +020014440ssl_fc_protocol : string
14441 Returns the name of the used protocol when the incoming connection was made
14442 over an SSL/TLS transport layer.
Willy Tarreau7875d092012-09-10 08:20:03 +020014443
Emeric Brunb73a9b02014-04-30 18:49:19 +020014444ssl_fc_unique_id : binary
David Sc1ad52e2014-04-08 18:48:47 -040014445 When the incoming connection was made over an SSL/TLS transport layer,
Emeric Brunb73a9b02014-04-30 18:49:19 +020014446 returns the TLS unique ID as defined in RFC5929 section 3. The unique id
14447 can be encoded to base64 using the converter: "ssl_bc_unique_id,base64".
David Sc1ad52e2014-04-08 18:48:47 -040014448
Willy Tarreau74ca5042013-06-11 23:12:07 +020014449ssl_fc_session_id : binary
14450 Returns the SSL ID of the front connection when the incoming connection was
14451 made over an SSL/TLS transport layer. It is useful to stick a given client to
14452 a server. It is important to note that some browsers refresh their session ID
14453 every few minutes.
Willy Tarreau7875d092012-09-10 08:20:03 +020014454
Willy Tarreau74ca5042013-06-11 23:12:07 +020014455ssl_fc_sni : string
14456 This extracts the Server Name Indication TLS extension (SNI) field from an
14457 incoming connection made via an SSL/TLS transport layer and locally
14458 deciphered by haproxy. The result (when present) typically is a string
14459 matching the HTTPS host name (253 chars or less). The SSL library must have
14460 been built with support for TLS extensions enabled (check haproxy -vv).
14461
14462 This fetch is different from "req_ssl_sni" above in that it applies to the
14463 connection being deciphered by haproxy and not to SSL contents being blindly
14464 forwarded. See also "ssl_fc_sni_end" and "ssl_fc_sni_reg" below. This
Cyril Bonté9c1eb1e2012-10-09 22:45:34 +020014465 requires that the SSL library is build with support for TLS extensions
14466 enabled (check haproxy -vv).
Willy Tarreau62644772008-07-16 18:36:06 +020014467
Willy Tarreau74ca5042013-06-11 23:12:07 +020014468 ACL derivatives :
Willy Tarreau74ca5042013-06-11 23:12:07 +020014469 ssl_fc_sni_end : suffix match
14470 ssl_fc_sni_reg : regex match
Emeric Brun589fcad2012-10-16 14:13:26 +020014471
Willy Tarreau74ca5042013-06-11 23:12:07 +020014472ssl_fc_use_keysize : integer
14473 Returns the symmetric cipher key size used in bits when the incoming
14474 connection was made over an SSL/TLS transport layer.
Willy Tarreaub6fb4202008-07-20 11:18:28 +020014475
Willy Tarreaub6fb4202008-07-20 11:18:28 +020014476
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200144777.3.5. Fetching samples from buffer contents (Layer 6)
Willy Tarreau74ca5042013-06-11 23:12:07 +020014478------------------------------------------------------
Willy Tarreaub6fb4202008-07-20 11:18:28 +020014479
Willy Tarreau74ca5042013-06-11 23:12:07 +020014480Fetching samples from buffer contents is a bit different from the previous
14481sample fetches above because the sampled data are ephemeral. These data can
14482only be used when they're available and will be lost when they're forwarded.
14483For this reason, samples fetched from buffer contents during a request cannot
14484be used in a response for example. Even while the data are being fetched, they
14485can change. Sometimes it is necessary to set some delays or combine multiple
14486sample fetch methods to ensure that the expected data are complete and usable,
14487for example through TCP request content inspection. Please see the "tcp-request
14488content" keyword for more detailed information on the subject.
Willy Tarreau62644772008-07-16 18:36:06 +020014489
Willy Tarreau74ca5042013-06-11 23:12:07 +020014490payload(<offset>,<length>) : binary (deprecated)
14491 This is an alias for "req.payload" when used in the context of a request (eg:
14492 "stick on", "stick match"), and for "res.payload" when used in the context of
14493 a response such as in "stick store response".
Willy Tarreau0ba27502007-12-24 16:55:16 +010014494
Willy Tarreau74ca5042013-06-11 23:12:07 +020014495payload_lv(<offset1>,<length>[,<offset2>]) : binary (deprecated)
14496 This is an alias for "req.payload_lv" when used in the context of a request
14497 (eg: "stick on", "stick match"), and for "res.payload_lv" when used in the
14498 context of a response such as in "stick store response".
Willy Tarreau0ba27502007-12-24 16:55:16 +010014499
Thierry FOURNIERd7d88812017-04-19 15:15:14 +020014500req.hdrs : string
14501 Returns the current request headers as string including the last empty line
14502 separating headers from the request body. The last empty line can be used to
14503 detect a truncated header block. This sample fetch is useful for some SPOE
14504 headers analyzers and for advanced logging.
14505
Thierry FOURNIER5617dce2017-04-09 05:38:19 +020014506req.hdrs_bin : binary
14507 Returns the current request headers contained in preparsed binary form. This
14508 is useful for offloading some processing with SPOE. Each string is described
14509 by a length followed by the number of bytes indicated in the length. The
14510 length is represented using the variable integer encoding detailed in the
14511 SPOE documentation. The end of the list is marked by a couple of empty header
14512 names and values (length of 0 for both).
14513
14514 *(<str:header-name><str:header-value>)<empty string><empty string>
14515
14516 int: refer to the SPOE documentation for the encoding
14517 str: <int:length><bytes>
14518
Willy Tarreau74ca5042013-06-11 23:12:07 +020014519req.len : integer
14520req_len : integer (deprecated)
14521 Returns an integer value corresponding to the number of bytes present in the
14522 request buffer. This is mostly used in ACL. It is important to understand
14523 that this test does not return false as long as the buffer is changing. This
14524 means that a check with equality to zero will almost always immediately match
14525 at the beginning of the session, while a test for more data will wait for
14526 that data to come in and return false only when haproxy is certain that no
14527 more data will come in. This test was designed to be used with TCP request
14528 content inspection.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014529
Willy Tarreau74ca5042013-06-11 23:12:07 +020014530req.payload(<offset>,<length>) : binary
14531 This extracts a binary block of <length> bytes and starting at byte <offset>
Willy Tarreau00f00842013-08-02 11:07:32 +020014532 in the request buffer. As a special case, if the <length> argument is zero,
14533 the the whole buffer from <offset> to the end is extracted. This can be used
14534 with ACLs in order to check for the presence of some content in a buffer at
14535 any location.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014536
Willy Tarreau74ca5042013-06-11 23:12:07 +020014537 ACL alternatives :
14538 payload(<offset>,<length>) : hex binary match
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014539
Willy Tarreau74ca5042013-06-11 23:12:07 +020014540req.payload_lv(<offset1>,<length>[,<offset2>]) : binary
14541 This extracts a binary block whose size is specified at <offset1> for <length>
14542 bytes, and which starts at <offset2> if specified or just after the length in
14543 the request buffer. The <offset2> parameter also supports relative offsets if
14544 prepended with a '+' or '-' sign.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014545
Willy Tarreau74ca5042013-06-11 23:12:07 +020014546 ACL alternatives :
14547 payload_lv(<offset1>,<length>[,<offset2>]) : hex binary match
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014548
Willy Tarreau74ca5042013-06-11 23:12:07 +020014549 Example : please consult the example from the "stick store-response" keyword.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014550
Willy Tarreau74ca5042013-06-11 23:12:07 +020014551req.proto_http : boolean
14552req_proto_http : boolean (deprecated)
14553 Returns true when data in the request buffer look like HTTP and correctly
14554 parses as such. It is the same parser as the common HTTP request parser which
14555 is used so there should be no surprises. The test does not match until the
14556 request is complete, failed or timed out. This test may be used to report the
14557 protocol in TCP logs, but the biggest use is to block TCP request analysis
14558 until a complete HTTP request is present in the buffer, for example to track
14559 a header.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014560
Willy Tarreau74ca5042013-06-11 23:12:07 +020014561 Example:
14562 # track request counts per "base" (concatenation of Host+URL)
14563 tcp-request inspect-delay 10s
14564 tcp-request content reject if !HTTP
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020014565 tcp-request content track-sc0 base table req-rate
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014566
Willy Tarreau74ca5042013-06-11 23:12:07 +020014567req.rdp_cookie([<name>]) : string
14568rdp_cookie([<name>]) : string (deprecated)
14569 When the request buffer looks like the RDP protocol, extracts the RDP cookie
14570 <name>, or any cookie if unspecified. The parser only checks for the first
14571 cookie, as illustrated in the RDP protocol specification. The cookie name is
14572 case insensitive. Generally the "MSTS" cookie name will be used, as it can
14573 contain the user name of the client connecting to the server if properly
14574 configured on the client. The "MSTSHASH" cookie is often used as well for
14575 session stickiness to servers.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014576
Willy Tarreau74ca5042013-06-11 23:12:07 +020014577 This differs from "balance rdp-cookie" in that any balancing algorithm may be
14578 used and thus the distribution of clients to backend servers is not linked to
14579 a hash of the RDP cookie. It is envisaged that using a balancing algorithm
14580 such as "balance roundrobin" or "balance leastconn" will lead to a more even
14581 distribution of clients to backend servers than the hash used by "balance
14582 rdp-cookie".
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014583
Willy Tarreau74ca5042013-06-11 23:12:07 +020014584 ACL derivatives :
14585 req_rdp_cookie([<name>]) : exact string match
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014586
Willy Tarreau74ca5042013-06-11 23:12:07 +020014587 Example :
14588 listen tse-farm
14589 bind 0.0.0.0:3389
14590 # wait up to 5s for an RDP cookie in the request
14591 tcp-request inspect-delay 5s
14592 tcp-request content accept if RDP_COOKIE
14593 # apply RDP cookie persistence
14594 persist rdp-cookie
14595 # Persist based on the mstshash cookie
14596 # This is only useful makes sense if
14597 # balance rdp-cookie is not used
14598 stick-table type string size 204800
14599 stick on req.rdp_cookie(mstshash)
14600 server srv1 1.1.1.1:3389
14601 server srv1 1.1.1.2:3389
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014602
Willy Tarreau74ca5042013-06-11 23:12:07 +020014603 See also : "balance rdp-cookie", "persist rdp-cookie", "tcp-request" and the
14604 "req_rdp_cookie" ACL.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014605
Willy Tarreau74ca5042013-06-11 23:12:07 +020014606req.rdp_cookie_cnt([name]) : integer
14607rdp_cookie_cnt([name]) : integer (deprecated)
14608 Tries to parse the request buffer as RDP protocol, then returns an integer
14609 corresponding to the number of RDP cookies found. If an optional cookie name
14610 is passed, only cookies matching this name are considered. This is mostly
14611 used in ACL.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014612
Willy Tarreau74ca5042013-06-11 23:12:07 +020014613 ACL derivatives :
14614 req_rdp_cookie_cnt([<name>]) : integer match
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014615
Nenad Merdanovic5fc7d7e2015-07-07 22:00:17 +020014616req.ssl_ec_ext : boolean
14617 Returns a boolean identifying if client sent the Supported Elliptic Curves
14618 Extension as defined in RFC4492, section 5.1. within the SSL ClientHello
Cyril Bonté307ee1e2015-09-28 23:16:06 +020014619 message. This can be used to present ECC compatible clients with EC
14620 certificate and to use RSA for all others, on the same IP address. Note that
14621 this only applies to raw contents found in the request buffer and not to
14622 contents deciphered via an SSL data layer, so this will not work with "bind"
14623 lines having the "ssl" option.
Nenad Merdanovic5fc7d7e2015-07-07 22:00:17 +020014624
Willy Tarreau74ca5042013-06-11 23:12:07 +020014625req.ssl_hello_type : integer
14626req_ssl_hello_type : integer (deprecated)
14627 Returns an integer value containing the type of the SSL hello message found
14628 in the request buffer if the buffer contains data that parse as a complete
14629 SSL (v3 or superior) client hello message. Note that this only applies to raw
14630 contents found in the request buffer and not to contents deciphered via an
14631 SSL data layer, so this will not work with "bind" lines having the "ssl"
14632 option. This is mostly used in ACL to detect presence of an SSL hello message
14633 that is supposed to contain an SSL session ID usable for stickiness.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014634
Willy Tarreau74ca5042013-06-11 23:12:07 +020014635req.ssl_sni : string
14636req_ssl_sni : string (deprecated)
14637 Returns a string containing the value of the Server Name TLS extension sent
14638 by a client in a TLS stream passing through the request buffer if the buffer
14639 contains data that parse as a complete SSL (v3 or superior) client hello
14640 message. Note that this only applies to raw contents found in the request
14641 buffer and not to contents deciphered via an SSL data layer, so this will not
14642 work with "bind" lines having the "ssl" option. SNI normally contains the
14643 name of the host the client tries to connect to (for recent browsers). SNI is
14644 useful for allowing or denying access to certain hosts when SSL/TLS is used
14645 by the client. This test was designed to be used with TCP request content
14646 inspection. If content switching is needed, it is recommended to first wait
14647 for a complete client hello (type 1), like in the example below. See also
14648 "ssl_fc_sni".
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014649
Willy Tarreau74ca5042013-06-11 23:12:07 +020014650 ACL derivatives :
14651 req_ssl_sni : exact string match
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014652
Willy Tarreau74ca5042013-06-11 23:12:07 +020014653 Examples :
14654 # Wait for a client hello for at most 5 seconds
14655 tcp-request inspect-delay 5s
14656 tcp-request content accept if { req_ssl_hello_type 1 }
14657 use_backend bk_allow if { req_ssl_sni -f allowed_sites }
14658 default_backend bk_sorry_page
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014659
Pradeep Jindalbb2acf52015-09-29 10:12:57 +053014660req.ssl_st_ext : integer
14661 Returns 0 if the client didn't send a SessionTicket TLS Extension (RFC5077)
14662 Returns 1 if the client sent SessionTicket TLS Extension
14663 Returns 2 if the client also sent non-zero length TLS SessionTicket
14664 Note that this only applies to raw contents found in the request buffer and
14665 not to contents deciphered via an SSL data layer, so this will not work with
14666 "bind" lines having the "ssl" option. This can for example be used to detect
14667 whether the client sent a SessionTicket or not and stick it accordingly, if
14668 no SessionTicket then stick on SessionID or don't stick as there's no server
14669 side state is there when SessionTickets are in use.
14670
Willy Tarreau74ca5042013-06-11 23:12:07 +020014671req.ssl_ver : integer
14672req_ssl_ver : integer (deprecated)
14673 Returns an integer value containing the version of the SSL/TLS protocol of a
14674 stream present in the request buffer. Both SSLv2 hello messages and SSLv3
14675 messages are supported. TLSv1 is announced as SSL version 3.1. The value is
14676 composed of the major version multiplied by 65536, added to the minor
14677 version. Note that this only applies to raw contents found in the request
14678 buffer and not to contents deciphered via an SSL data layer, so this will not
14679 work with "bind" lines having the "ssl" option. The ACL version of the test
14680 matches against a decimal notation in the form MAJOR.MINOR (eg: 3.1). This
14681 fetch is mostly used in ACL.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014682
Willy Tarreau74ca5042013-06-11 23:12:07 +020014683 ACL derivatives :
14684 req_ssl_ver : decimal match
Willy Tarreaud63335a2010-02-26 12:56:52 +010014685
Willy Tarreau47e8eba2013-09-11 23:28:46 +020014686res.len : integer
14687 Returns an integer value corresponding to the number of bytes present in the
14688 response buffer. This is mostly used in ACL. It is important to understand
14689 that this test does not return false as long as the buffer is changing. This
14690 means that a check with equality to zero will almost always immediately match
14691 at the beginning of the session, while a test for more data will wait for
14692 that data to come in and return false only when haproxy is certain that no
14693 more data will come in. This test was designed to be used with TCP response
14694 content inspection.
14695
Willy Tarreau74ca5042013-06-11 23:12:07 +020014696res.payload(<offset>,<length>) : binary
14697 This extracts a binary block of <length> bytes and starting at byte <offset>
Willy Tarreau00f00842013-08-02 11:07:32 +020014698 in the response buffer. As a special case, if the <length> argument is zero,
14699 the the whole buffer from <offset> to the end is extracted. This can be used
14700 with ACLs in order to check for the presence of some content in a buffer at
14701 any location.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014702
Willy Tarreau74ca5042013-06-11 23:12:07 +020014703res.payload_lv(<offset1>,<length>[,<offset2>]) : binary
14704 This extracts a binary block whose size is specified at <offset1> for <length>
14705 bytes, and which starts at <offset2> if specified or just after the length in
14706 the response buffer. The <offset2> parameter also supports relative offsets
14707 if prepended with a '+' or '-' sign.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014708
Willy Tarreau74ca5042013-06-11 23:12:07 +020014709 Example : please consult the example from the "stick store-response" keyword.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014710
Willy Tarreau971f7b62015-09-29 14:06:59 +020014711res.ssl_hello_type : integer
14712rep_ssl_hello_type : integer (deprecated)
14713 Returns an integer value containing the type of the SSL hello message found
14714 in the response buffer if the buffer contains data that parses as a complete
14715 SSL (v3 or superior) hello message. Note that this only applies to raw
14716 contents found in the response buffer and not to contents deciphered via an
14717 SSL data layer, so this will not work with "server" lines having the "ssl"
14718 option. This is mostly used in ACL to detect presence of an SSL hello message
14719 that is supposed to contain an SSL session ID usable for stickiness.
14720
Willy Tarreau74ca5042013-06-11 23:12:07 +020014721wait_end : boolean
14722 This fetch either returns true when the inspection period is over, or does
14723 not fetch. It is only used in ACLs, in conjunction with content analysis to
14724 avoid returning a wrong verdict early. It may also be used to delay some
14725 actions, such as a delayed reject for some special addresses. Since it either
14726 stops the rules evaluation or immediately returns true, it is recommended to
14727 use this acl as the last one in a rule. Please note that the default ACL
14728 "WAIT_END" is always usable without prior declaration. This test was designed
14729 to be used with TCP request content inspection.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014730
Willy Tarreau74ca5042013-06-11 23:12:07 +020014731 Examples :
14732 # delay every incoming request by 2 seconds
14733 tcp-request inspect-delay 2s
14734 tcp-request content accept if WAIT_END
Willy Tarreaud63335a2010-02-26 12:56:52 +010014735
Willy Tarreau74ca5042013-06-11 23:12:07 +020014736 # don't immediately tell bad guys they are rejected
14737 tcp-request inspect-delay 10s
14738 acl goodguys src 10.0.0.0/24
14739 acl badguys src 10.0.1.0/24
14740 tcp-request content accept if goodguys
14741 tcp-request content reject if badguys WAIT_END
14742 tcp-request content reject
14743
14744
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200147457.3.6. Fetching HTTP samples (Layer 7)
Willy Tarreau74ca5042013-06-11 23:12:07 +020014746--------------------------------------
14747
14748It is possible to fetch samples from HTTP contents, requests and responses.
14749This application layer is also called layer 7. It is only possible to fetch the
14750data in this section when a full HTTP request or response has been parsed from
14751its respective request or response buffer. This is always the case with all
14752HTTP specific rules and for sections running with "mode http". When using TCP
14753content inspection, it may be necessary to support an inspection delay in order
14754to let the request or response come in first. These fetches may require a bit
14755more CPU resources than the layer 4 ones, but not much since the request and
14756response are indexed.
14757
14758base : string
14759 This returns the concatenation of the first Host header and the path part of
14760 the request, which starts at the first slash and ends before the question
14761 mark. It can be useful in virtual hosted environments to detect URL abuses as
14762 well as to improve shared caches efficiency. Using this with a limited size
14763 stick table also allows one to collect statistics about most commonly
14764 requested objects by host/path. With ACLs it can allow simple content
14765 switching rules involving the host and the path at the same time, such as
14766 "www.example.com/favicon.ico". See also "path" and "uri".
14767
14768 ACL derivatives :
14769 base : exact string match
14770 base_beg : prefix match
14771 base_dir : subdir match
14772 base_dom : domain match
14773 base_end : suffix match
14774 base_len : length match
14775 base_reg : regex match
14776 base_sub : substring match
14777
14778base32 : integer
14779 This returns a 32-bit hash of the value returned by the "base" fetch method
14780 above. This is useful to track per-URL activity on high traffic sites without
14781 having to store all URLs. Instead a shorter hash is stored, saving a lot of
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020014782 memory. The output type is an unsigned integer. The hash function used is
14783 SDBM with full avalanche on the output. Technically, base32 is exactly equal
14784 to "base,sdbm(1)".
Willy Tarreau74ca5042013-06-11 23:12:07 +020014785
14786base32+src : binary
14787 This returns the concatenation of the base32 fetch above and the src fetch
14788 below. The resulting type is of type binary, with a size of 8 or 20 bytes
14789 depending on the source address family. This can be used to track per-IP,
14790 per-URL counters.
14791
William Lallemand65ad6e12014-01-31 15:08:02 +010014792capture.req.hdr(<idx>) : string
14793 This extracts the content of the header captured by the "capture request
14794 header", idx is the position of the capture keyword in the configuration.
14795 The first entry is an index of 0. See also: "capture request header".
14796
14797capture.req.method : string
14798 This extracts the METHOD of an HTTP request. It can be used in both request
14799 and response. Unlike "method", it can be used in both request and response
14800 because it's allocated.
14801
14802capture.req.uri : string
14803 This extracts the request's URI, which starts at the first slash and ends
14804 before the first space in the request (without the host part). Unlike "path"
14805 and "url", it can be used in both request and response because it's
14806 allocated.
14807
Willy Tarreau3c1b5ec2014-04-24 23:41:57 +020014808capture.req.ver : string
14809 This extracts the request's HTTP version and returns either "HTTP/1.0" or
14810 "HTTP/1.1". Unlike "req.ver", it can be used in both request, response, and
14811 logs because it relies on a persistent flag.
14812
William Lallemand65ad6e12014-01-31 15:08:02 +010014813capture.res.hdr(<idx>) : string
14814 This extracts the content of the header captured by the "capture response
14815 header", idx is the position of the capture keyword in the configuration.
14816 The first entry is an index of 0.
14817 See also: "capture response header"
14818
Willy Tarreau3c1b5ec2014-04-24 23:41:57 +020014819capture.res.ver : string
14820 This extracts the response's HTTP version and returns either "HTTP/1.0" or
14821 "HTTP/1.1". Unlike "res.ver", it can be used in logs because it relies on a
14822 persistent flag.
14823
Willy Tarreaua5910cc2015-05-02 00:46:08 +020014824req.body : binary
14825 This returns the HTTP request's available body as a block of data. It
14826 requires that the request body has been buffered made available using
14827 "option http-buffer-request". In case of chunked-encoded body, currently only
14828 the first chunk is analyzed.
14829
Thierry FOURNIER9826c772015-05-20 15:50:54 +020014830req.body_param([<name>) : string
14831 This fetch assumes that the body of the POST request is url-encoded. The user
14832 can check if the "content-type" contains the value
14833 "application/x-www-form-urlencoded". This extracts the first occurrence of the
14834 parameter <name> in the body, which ends before '&'. The parameter name is
14835 case-sensitive. If no name is given, any parameter will match, and the first
14836 one will be returned. The result is a string corresponding to the value of the
14837 parameter <name> as presented in the request body (no URL decoding is
14838 performed). Note that the ACL version of this fetch iterates over multiple
14839 parameters and will iteratively report all parameters values if no name is
14840 given.
14841
Willy Tarreaua5910cc2015-05-02 00:46:08 +020014842req.body_len : integer
14843 This returns the length of the HTTP request's available body in bytes. It may
14844 be lower than the advertised length if the body is larger than the buffer. It
14845 requires that the request body has been buffered made available using
14846 "option http-buffer-request".
14847
14848req.body_size : integer
14849 This returns the advertised length of the HTTP request's body in bytes. It
14850 will represent the advertised Content-Length header, or the size of the first
14851 chunk in case of chunked encoding. In order to parse the chunks, it requires
14852 that the request body has been buffered made available using
14853 "option http-buffer-request".
14854
Willy Tarreau74ca5042013-06-11 23:12:07 +020014855req.cook([<name>]) : string
14856cook([<name>]) : string (deprecated)
14857 This extracts the last occurrence of the cookie name <name> on a "Cookie"
14858 header line from the request, and returns its value as string. If no name is
14859 specified, the first cookie value is returned. When used with ACLs, all
14860 matching cookies are evaluated. Spaces around the name and the value are
14861 ignored as requested by the Cookie header specification (RFC6265). The cookie
14862 name is case-sensitive. Empty cookies are valid, so an empty cookie may very
14863 well return an empty value if it is present. Use the "found" match to detect
14864 presence. Use the res.cook() variant for response cookies sent by the server.
14865
14866 ACL derivatives :
14867 cook([<name>]) : exact string match
14868 cook_beg([<name>]) : prefix match
14869 cook_dir([<name>]) : subdir match
14870 cook_dom([<name>]) : domain match
14871 cook_end([<name>]) : suffix match
14872 cook_len([<name>]) : length match
14873 cook_reg([<name>]) : regex match
14874 cook_sub([<name>]) : substring match
Willy Tarreaud63335a2010-02-26 12:56:52 +010014875
Willy Tarreau74ca5042013-06-11 23:12:07 +020014876req.cook_cnt([<name>]) : integer
14877cook_cnt([<name>]) : integer (deprecated)
14878 Returns an integer value representing the number of occurrences of the cookie
14879 <name> in the request, or all cookies if <name> is not specified.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014880
Willy Tarreau74ca5042013-06-11 23:12:07 +020014881req.cook_val([<name>]) : integer
14882cook_val([<name>]) : integer (deprecated)
14883 This extracts the last occurrence of the cookie name <name> on a "Cookie"
14884 header line from the request, and converts its value to an integer which is
14885 returned. If no name is specified, the first cookie value is returned. When
14886 used in ACLs, all matching names are iterated over until a value matches.
Willy Tarreau0e698542011-09-16 08:32:32 +020014887
Willy Tarreau74ca5042013-06-11 23:12:07 +020014888cookie([<name>]) : string (deprecated)
14889 This extracts the last occurrence of the cookie name <name> on a "Cookie"
14890 header line from the request, or a "Set-Cookie" header from the response, and
14891 returns its value as a string. A typical use is to get multiple clients
14892 sharing a same profile use the same server. This can be similar to what
Willy Tarreau294d0f02015-08-10 19:40:12 +020014893 "appsession" did with the "request-learn" statement, but with support for
Willy Tarreau74ca5042013-06-11 23:12:07 +020014894 multi-peer synchronization and state keeping across restarts. If no name is
14895 specified, the first cookie value is returned. This fetch should not be used
14896 anymore and should be replaced by req.cook() or res.cook() instead as it
14897 ambiguously uses the direction based on the context where it is used.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014898
Willy Tarreau74ca5042013-06-11 23:12:07 +020014899hdr([<name>[,<occ>]]) : string
14900 This is equivalent to req.hdr() when used on requests, and to res.hdr() when
14901 used on responses. Please refer to these respective fetches for more details.
14902 In case of doubt about the fetch direction, please use the explicit ones.
14903 Note that contrary to the hdr() sample fetch method, the hdr_* ACL keywords
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030014904 unambiguously apply to the request headers.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014905
Willy Tarreau74ca5042013-06-11 23:12:07 +020014906req.fhdr(<name>[,<occ>]) : string
14907 This extracts the last occurrence of header <name> in an HTTP request. When
14908 used from an ACL, all occurrences are iterated over until a match is found.
14909 Optionally, a specific occurrence might be specified as a position number.
14910 Positive values indicate a position from the first occurrence, with 1 being
14911 the first one. Negative values indicate positions relative to the last one,
14912 with -1 being the last one. It differs from req.hdr() in that any commas
14913 present in the value are returned and are not used as delimiters. This is
14914 sometimes useful with headers such as User-Agent.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014915
Willy Tarreau74ca5042013-06-11 23:12:07 +020014916req.fhdr_cnt([<name>]) : integer
14917 Returns an integer value representing the number of occurrences of request
14918 header field name <name>, or the total number of header fields if <name> is
14919 not specified. Contrary to its req.hdr_cnt() cousin, this function returns
14920 the number of full line headers and does not stop on commas.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014921
Willy Tarreau74ca5042013-06-11 23:12:07 +020014922req.hdr([<name>[,<occ>]]) : string
14923 This extracts the last occurrence of header <name> in an HTTP request. When
14924 used from an ACL, all occurrences are iterated over until a match is found.
14925 Optionally, a specific occurrence might be specified as a position number.
14926 Positive values indicate a position from the first occurrence, with 1 being
14927 the first one. Negative values indicate positions relative to the last one,
14928 with -1 being the last one. A typical use is with the X-Forwarded-For header
14929 once converted to IP, associated with an IP stick-table. The function
14930 considers any comma as a delimiter for distinct values. If full-line headers
Lukas Tribus23953682017-04-28 13:24:30 +000014931 are desired instead, use req.fhdr(). Please carefully check RFC7231 to know
Willy Tarreau74ca5042013-06-11 23:12:07 +020014932 how certain headers are supposed to be parsed. Also, some of them are case
14933 insensitive (eg: Connection).
Willy Tarreaud63335a2010-02-26 12:56:52 +010014934
Willy Tarreau74ca5042013-06-11 23:12:07 +020014935 ACL derivatives :
14936 hdr([<name>[,<occ>]]) : exact string match
14937 hdr_beg([<name>[,<occ>]]) : prefix match
14938 hdr_dir([<name>[,<occ>]]) : subdir match
14939 hdr_dom([<name>[,<occ>]]) : domain match
14940 hdr_end([<name>[,<occ>]]) : suffix match
14941 hdr_len([<name>[,<occ>]]) : length match
14942 hdr_reg([<name>[,<occ>]]) : regex match
14943 hdr_sub([<name>[,<occ>]]) : substring match
14944
14945req.hdr_cnt([<name>]) : integer
14946hdr_cnt([<header>]) : integer (deprecated)
14947 Returns an integer value representing the number of occurrences of request
14948 header field name <name>, or the total number of header field values if
14949 <name> is not specified. It is important to remember that one header line may
14950 count as several headers if it has several values. The function considers any
14951 comma as a delimiter for distinct values. If full-line headers are desired
14952 instead, req.fhdr_cnt() should be used instead. With ACLs, it can be used to
14953 detect presence, absence or abuse of a specific header, as well as to block
14954 request smuggling attacks by rejecting requests which contain more than one
14955 of certain headers. See "req.hdr" for more information on header matching.
14956
14957req.hdr_ip([<name>[,<occ>]]) : ip
14958hdr_ip([<name>[,<occ>]]) : ip (deprecated)
14959 This extracts the last occurrence of header <name> in an HTTP request,
14960 converts it to an IPv4 or IPv6 address and returns this address. When used
14961 with ACLs, all occurrences are checked, and if <name> is omitted, every value
14962 of every header is checked. Optionally, a specific occurrence might be
14963 specified as a position number. Positive values indicate a position from the
14964 first occurrence, with 1 being the first one. Negative values indicate
14965 positions relative to the last one, with -1 being the last one. A typical use
14966 is with the X-Forwarded-For and X-Client-IP headers.
14967
14968req.hdr_val([<name>[,<occ>]]) : integer
14969hdr_val([<name>[,<occ>]]) : integer (deprecated)
14970 This extracts the last occurrence of header <name> in an HTTP request, and
14971 converts it to an integer value. When used with ACLs, all occurrences are
14972 checked, and if <name> is omitted, every value of every header is checked.
14973 Optionally, a specific occurrence might be specified as a position number.
14974 Positive values indicate a position from the first occurrence, with 1 being
14975 the first one. Negative values indicate positions relative to the last one,
14976 with -1 being the last one. A typical use is with the X-Forwarded-For header.
14977
14978http_auth(<userlist>) : boolean
14979 Returns a boolean indicating whether the authentication data received from
14980 the client match a username & password stored in the specified userlist. This
14981 fetch function is not really useful outside of ACLs. Currently only http
14982 basic auth is supported.
14983
Thierry FOURNIER9eec0a62014-01-22 18:38:02 +010014984http_auth_group(<userlist>) : string
14985 Returns a string corresponding to the user name found in the authentication
14986 data received from the client if both the user name and password are valid
14987 according to the specified userlist. The main purpose is to use it in ACLs
14988 where it is then checked whether the user belongs to any group within a list.
Willy Tarreau74ca5042013-06-11 23:12:07 +020014989 This fetch function is not really useful outside of ACLs. Currently only http
14990 basic auth is supported.
14991
14992 ACL derivatives :
Thierry FOURNIER9eec0a62014-01-22 18:38:02 +010014993 http_auth_group(<userlist>) : group ...
14994 Returns true when the user extracted from the request and whose password is
14995 valid according to the specified userlist belongs to at least one of the
14996 groups.
Willy Tarreau74ca5042013-06-11 23:12:07 +020014997
14998http_first_req : boolean
Willy Tarreau7f18e522010-10-22 20:04:13 +020014999 Returns true when the request being processed is the first one of the
15000 connection. This can be used to add or remove headers that may be missing
Willy Tarreau74ca5042013-06-11 23:12:07 +020015001 from some requests when a request is not the first one, or to help grouping
15002 requests in the logs.
Willy Tarreau7f18e522010-10-22 20:04:13 +020015003
Willy Tarreau74ca5042013-06-11 23:12:07 +020015004method : integer + string
15005 Returns an integer value corresponding to the method in the HTTP request. For
15006 example, "GET" equals 1 (check sources to establish the matching). Value 9
15007 means "other method" and may be converted to a string extracted from the
15008 stream. This should not be used directly as a sample, this is only meant to
15009 be used from ACLs, which transparently convert methods from patterns to these
15010 integer + string values. Some predefined ACL already check for most common
15011 methods.
Willy Tarreau6a06a402007-07-15 20:15:28 +020015012
Willy Tarreau74ca5042013-06-11 23:12:07 +020015013 ACL derivatives :
15014 method : case insensitive method match
Willy Tarreau6a06a402007-07-15 20:15:28 +020015015
Willy Tarreau74ca5042013-06-11 23:12:07 +020015016 Example :
15017 # only accept GET and HEAD requests
15018 acl valid_method method GET HEAD
15019 http-request deny if ! valid_method
Willy Tarreau6a06a402007-07-15 20:15:28 +020015020
Willy Tarreau74ca5042013-06-11 23:12:07 +020015021path : string
15022 This extracts the request's URL path, which starts at the first slash and
15023 ends before the question mark (without the host part). A typical use is with
15024 prefetch-capable caches, and with portals which need to aggregate multiple
15025 information from databases and keep them in caches. Note that with outgoing
15026 caches, it would be wiser to use "url" instead. With ACLs, it's typically
15027 used to match exact file names (eg: "/login.php"), or directory parts using
15028 the derivative forms. See also the "url" and "base" fetch methods.
Willy Tarreau6a06a402007-07-15 20:15:28 +020015029
Willy Tarreau74ca5042013-06-11 23:12:07 +020015030 ACL derivatives :
15031 path : exact string match
15032 path_beg : prefix match
15033 path_dir : subdir match
15034 path_dom : domain match
15035 path_end : suffix match
15036 path_len : length match
15037 path_reg : regex match
15038 path_sub : substring match
Willy Tarreau6a06a402007-07-15 20:15:28 +020015039
Willy Tarreau49ad95c2015-01-19 15:06:26 +010015040query : string
15041 This extracts the request's query string, which starts after the first
15042 question mark. If no question mark is present, this fetch returns nothing. If
15043 a question mark is present but nothing follows, it returns an empty string.
15044 This means it's possible to easily know whether a query string is present
Tim Düsterhus4896c442016-11-29 02:15:19 +010015045 using the "found" matching method. This fetch is the complement of "path"
Willy Tarreau49ad95c2015-01-19 15:06:26 +010015046 which stops before the question mark.
15047
Willy Tarreaueb27ec72015-02-20 13:55:29 +010015048req.hdr_names([<delim>]) : string
15049 This builds a string made from the concatenation of all header names as they
15050 appear in the request when the rule is evaluated. The default delimiter is
15051 the comma (',') but it may be overridden as an optional argument <delim>. In
15052 this case, only the first character of <delim> is considered.
15053
Willy Tarreau74ca5042013-06-11 23:12:07 +020015054req.ver : string
15055req_ver : string (deprecated)
15056 Returns the version string from the HTTP request, for example "1.1". This can
15057 be useful for logs, but is mostly there for ACL. Some predefined ACL already
15058 check for versions 1.0 and 1.1.
Willy Tarreaud63335a2010-02-26 12:56:52 +010015059
Willy Tarreau74ca5042013-06-11 23:12:07 +020015060 ACL derivatives :
15061 req_ver : exact string match
Willy Tarreau0e698542011-09-16 08:32:32 +020015062
Willy Tarreau74ca5042013-06-11 23:12:07 +020015063res.comp : boolean
15064 Returns the boolean "true" value if the response has been compressed by
15065 HAProxy, otherwise returns boolean "false". This may be used to add
15066 information in the logs.
Willy Tarreau6a06a402007-07-15 20:15:28 +020015067
Willy Tarreau74ca5042013-06-11 23:12:07 +020015068res.comp_algo : string
15069 Returns a string containing the name of the algorithm used if the response
15070 was compressed by HAProxy, for example : "deflate". This may be used to add
15071 some information in the logs.
Willy Tarreaud63335a2010-02-26 12:56:52 +010015072
Willy Tarreau74ca5042013-06-11 23:12:07 +020015073res.cook([<name>]) : string
15074scook([<name>]) : string (deprecated)
15075 This extracts the last occurrence of the cookie name <name> on a "Set-Cookie"
15076 header line from the response, and returns its value as string. If no name is
15077 specified, the first cookie value is returned.
Willy Tarreau0ce3aa02012-04-25 18:46:33 +020015078
Willy Tarreau74ca5042013-06-11 23:12:07 +020015079 ACL derivatives :
15080 scook([<name>] : exact string match
Willy Tarreau0ce3aa02012-04-25 18:46:33 +020015081
Willy Tarreau74ca5042013-06-11 23:12:07 +020015082res.cook_cnt([<name>]) : integer
15083scook_cnt([<name>]) : integer (deprecated)
15084 Returns an integer value representing the number of occurrences of the cookie
15085 <name> in the response, or all cookies if <name> is not specified. This is
15086 mostly useful when combined with ACLs to detect suspicious responses.
Willy Tarreaud63335a2010-02-26 12:56:52 +010015087
Willy Tarreau74ca5042013-06-11 23:12:07 +020015088res.cook_val([<name>]) : integer
15089scook_val([<name>]) : integer (deprecated)
15090 This extracts the last occurrence of the cookie name <name> on a "Set-Cookie"
15091 header line from the response, and converts its value to an integer which is
15092 returned. If no name is specified, the first cookie value is returned.
Willy Tarreaud63335a2010-02-26 12:56:52 +010015093
Willy Tarreau74ca5042013-06-11 23:12:07 +020015094res.fhdr([<name>[,<occ>]]) : string
15095 This extracts the last occurrence of header <name> in an HTTP response, or of
15096 the last header if no <name> is specified. Optionally, a specific occurrence
15097 might be specified as a position number. Positive values indicate a position
15098 from the first occurrence, with 1 being the first one. Negative values
15099 indicate positions relative to the last one, with -1 being the last one. It
15100 differs from res.hdr() in that any commas present in the value are returned
15101 and are not used as delimiters. If this is not desired, the res.hdr() fetch
15102 should be used instead. This is sometimes useful with headers such as Date or
15103 Expires.
Willy Tarreau6a06a402007-07-15 20:15:28 +020015104
Willy Tarreau74ca5042013-06-11 23:12:07 +020015105res.fhdr_cnt([<name>]) : integer
15106 Returns an integer value representing the number of occurrences of response
15107 header field name <name>, or the total number of header fields if <name> is
15108 not specified. Contrary to its res.hdr_cnt() cousin, this function returns
15109 the number of full line headers and does not stop on commas. If this is not
15110 desired, the res.hdr_cnt() fetch should be used instead.
Willy Tarreau6a06a402007-07-15 20:15:28 +020015111
Willy Tarreau74ca5042013-06-11 23:12:07 +020015112res.hdr([<name>[,<occ>]]) : string
15113shdr([<name>[,<occ>]]) : string (deprecated)
15114 This extracts the last occurrence of header <name> in an HTTP response, or of
15115 the last header if no <name> is specified. Optionally, a specific occurrence
15116 might be specified as a position number. Positive values indicate a position
15117 from the first occurrence, with 1 being the first one. Negative values
15118 indicate positions relative to the last one, with -1 being the last one. This
15119 can be useful to learn some data into a stick-table. The function considers
15120 any comma as a delimiter for distinct values. If this is not desired, the
15121 res.fhdr() fetch should be used instead.
Willy Tarreau6a06a402007-07-15 20:15:28 +020015122
Willy Tarreau74ca5042013-06-11 23:12:07 +020015123 ACL derivatives :
15124 shdr([<name>[,<occ>]]) : exact string match
15125 shdr_beg([<name>[,<occ>]]) : prefix match
15126 shdr_dir([<name>[,<occ>]]) : subdir match
15127 shdr_dom([<name>[,<occ>]]) : domain match
15128 shdr_end([<name>[,<occ>]]) : suffix match
15129 shdr_len([<name>[,<occ>]]) : length match
15130 shdr_reg([<name>[,<occ>]]) : regex match
15131 shdr_sub([<name>[,<occ>]]) : substring match
15132
15133res.hdr_cnt([<name>]) : integer
15134shdr_cnt([<name>]) : integer (deprecated)
15135 Returns an integer value representing the number of occurrences of response
15136 header field name <name>, or the total number of header fields if <name> is
15137 not specified. The function considers any comma as a delimiter for distinct
15138 values. If this is not desired, the res.fhdr_cnt() fetch should be used
15139 instead.
Willy Tarreau6a06a402007-07-15 20:15:28 +020015140
Willy Tarreau74ca5042013-06-11 23:12:07 +020015141res.hdr_ip([<name>[,<occ>]]) : ip
15142shdr_ip([<name>[,<occ>]]) : ip (deprecated)
15143 This extracts the last occurrence of header <name> in an HTTP response,
15144 convert it to an IPv4 or IPv6 address and returns this address. Optionally, a
15145 specific occurrence might be specified as a position number. Positive values
15146 indicate a position from the first occurrence, with 1 being the first one.
15147 Negative values indicate positions relative to the last one, with -1 being
15148 the last one. This can be useful to learn some data into a stick table.
Willy Tarreau6a06a402007-07-15 20:15:28 +020015149
Willy Tarreaueb27ec72015-02-20 13:55:29 +010015150res.hdr_names([<delim>]) : string
15151 This builds a string made from the concatenation of all header names as they
15152 appear in the response when the rule is evaluated. The default delimiter is
15153 the comma (',') but it may be overridden as an optional argument <delim>. In
15154 this case, only the first character of <delim> is considered.
15155
Willy Tarreau74ca5042013-06-11 23:12:07 +020015156res.hdr_val([<name>[,<occ>]]) : integer
15157shdr_val([<name>[,<occ>]]) : integer (deprecated)
15158 This extracts the last occurrence of header <name> in an HTTP response, and
15159 converts it to an integer value. Optionally, a specific occurrence might be
15160 specified as a position number. Positive values indicate a position from the
15161 first occurrence, with 1 being the first one. Negative values indicate
15162 positions relative to the last one, with -1 being the last one. This can be
15163 useful to learn some data into a stick table.
Alexandre Cassen5eb1a902007-11-29 15:43:32 +010015164
Willy Tarreau74ca5042013-06-11 23:12:07 +020015165res.ver : string
15166resp_ver : string (deprecated)
15167 Returns the version string from the HTTP response, for example "1.1". This
15168 can be useful for logs, but is mostly there for ACL.
Willy Tarreau0e698542011-09-16 08:32:32 +020015169
Willy Tarreau74ca5042013-06-11 23:12:07 +020015170 ACL derivatives :
15171 resp_ver : exact string match
Alexandre Cassen5eb1a902007-11-29 15:43:32 +010015172
Willy Tarreau74ca5042013-06-11 23:12:07 +020015173set-cookie([<name>]) : string (deprecated)
15174 This extracts the last occurrence of the cookie name <name> on a "Set-Cookie"
15175 header line from the response and uses the corresponding value to match. This
Willy Tarreau294d0f02015-08-10 19:40:12 +020015176 can be comparable to what "appsession" did with default options, but with
Willy Tarreau74ca5042013-06-11 23:12:07 +020015177 support for multi-peer synchronization and state keeping across restarts.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +010015178
Willy Tarreau74ca5042013-06-11 23:12:07 +020015179 This fetch function is deprecated and has been superseded by the "res.cook"
15180 fetch. This keyword will disappear soon.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +010015181
Willy Tarreau74ca5042013-06-11 23:12:07 +020015182status : integer
15183 Returns an integer containing the HTTP status code in the HTTP response, for
15184 example, 302. It is mostly used within ACLs and integer ranges, for example,
15185 to remove any Location header if the response is not a 3xx.
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015186
Thierry Fournier0e00dca2016-04-07 15:47:40 +020015187unique-id : string
15188 Returns the unique-id attached to the request. The directive
15189 "unique-id-format" must be set. If it is not set, the unique-id sample fetch
15190 fails. Note that the unique-id is usually used with HTTP requests, however this
15191 sample fetch can be used with other protocols. Obviously, if it is used with
15192 other protocols than HTTP, the unique-id-format directive must not contain
15193 HTTP parts. See: unique-id-format and unique-id-header
15194
Willy Tarreau74ca5042013-06-11 23:12:07 +020015195url : string
15196 This extracts the request's URL as presented in the request. A typical use is
15197 with prefetch-capable caches, and with portals which need to aggregate
15198 multiple information from databases and keep them in caches. With ACLs, using
15199 "path" is preferred over using "url", because clients may send a full URL as
15200 is normally done with proxies. The only real use is to match "*" which does
15201 not match in "path", and for which there is already a predefined ACL. See
15202 also "path" and "base".
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015203
Willy Tarreau74ca5042013-06-11 23:12:07 +020015204 ACL derivatives :
15205 url : exact string match
15206 url_beg : prefix match
15207 url_dir : subdir match
15208 url_dom : domain match
15209 url_end : suffix match
15210 url_len : length match
15211 url_reg : regex match
15212 url_sub : substring match
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015213
Willy Tarreau74ca5042013-06-11 23:12:07 +020015214url_ip : ip
15215 This extracts the IP address from the request's URL when the host part is
15216 presented as an IP address. Its use is very limited. For instance, a
15217 monitoring system might use this field as an alternative for the source IP in
15218 order to test what path a given source address would follow, or to force an
15219 entry in a table for a given source address. With ACLs it can be used to
15220 restrict access to certain systems through a proxy, for example when combined
15221 with option "http_proxy".
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015222
Willy Tarreau74ca5042013-06-11 23:12:07 +020015223url_port : integer
15224 This extracts the port part from the request's URL. Note that if the port is
15225 not specified in the request, port 80 is assumed. With ACLs it can be used to
15226 restrict access to certain systems through a proxy, for example when combined
15227 with option "http_proxy".
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015228
Willy Tarreau1ede1da2015-05-07 16:06:18 +020015229urlp([<name>[,<delim>]]) : string
15230url_param([<name>[,<delim>]]) : string
Willy Tarreau74ca5042013-06-11 23:12:07 +020015231 This extracts the first occurrence of the parameter <name> in the query
15232 string, which begins after either '?' or <delim>, and which ends before '&',
Willy Tarreau1ede1da2015-05-07 16:06:18 +020015233 ';' or <delim>. The parameter name is case-sensitive. If no name is given,
15234 any parameter will match, and the first one will be returned. The result is
15235 a string corresponding to the value of the parameter <name> as presented in
15236 the request (no URL decoding is performed). This can be used for session
Willy Tarreau74ca5042013-06-11 23:12:07 +020015237 stickiness based on a client ID, to extract an application cookie passed as a
15238 URL parameter, or in ACLs to apply some checks. Note that the ACL version of
Willy Tarreau1ede1da2015-05-07 16:06:18 +020015239 this fetch iterates over multiple parameters and will iteratively report all
15240 parameters values if no name is given
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015241
Willy Tarreau74ca5042013-06-11 23:12:07 +020015242 ACL derivatives :
15243 urlp(<name>[,<delim>]) : exact string match
15244 urlp_beg(<name>[,<delim>]) : prefix match
15245 urlp_dir(<name>[,<delim>]) : subdir match
15246 urlp_dom(<name>[,<delim>]) : domain match
15247 urlp_end(<name>[,<delim>]) : suffix match
15248 urlp_len(<name>[,<delim>]) : length match
15249 urlp_reg(<name>[,<delim>]) : regex match
15250 urlp_sub(<name>[,<delim>]) : substring match
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015251
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015252
Willy Tarreau74ca5042013-06-11 23:12:07 +020015253 Example :
15254 # match http://example.com/foo?PHPSESSIONID=some_id
15255 stick on urlp(PHPSESSIONID)
15256 # match http://example.com/foo;JSESSIONID=some_id
15257 stick on urlp(JSESSIONID,;)
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015258
Jarno Huuskonen676f6222017-03-30 09:19:45 +030015259urlp_val([<name>[,<delim>]]) : integer
Willy Tarreau74ca5042013-06-11 23:12:07 +020015260 See "urlp" above. This one extracts the URL parameter <name> in the request
15261 and converts it to an integer value. This can be used for session stickiness
15262 based on a user ID for example, or with ACLs to match a page number or price.
Willy Tarreaua9fddca2012-07-31 07:51:48 +020015263
Dragan Dosen0070cd52016-06-16 12:19:49 +020015264url32 : integer
15265 This returns a 32-bit hash of the value obtained by concatenating the first
15266 Host header and the whole URL including parameters (not only the path part of
15267 the request, as in the "base32" fetch above). This is useful to track per-URL
15268 activity. A shorter hash is stored, saving a lot of memory. The output type
15269 is an unsigned integer.
15270
15271url32+src : binary
15272 This returns the concatenation of the "url32" fetch and the "src" fetch. The
15273 resulting type is of type binary, with a size of 8 or 20 bytes depending on
15274 the source address family. This can be used to track per-IP, per-URL counters.
15275
Willy Tarreau198a7442008-01-17 12:05:32 +010015276
Willy Tarreau74ca5042013-06-11 23:12:07 +0200152777.4. Pre-defined ACLs
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015278---------------------
Willy Tarreauced27012008-01-17 20:35:34 +010015279
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015280Some predefined ACLs are hard-coded so that they do not have to be declared in
15281every frontend which needs them. They all have their names in upper case in
Patrick Mézard2382ad62010-05-09 10:43:32 +020015282order to avoid confusion. Their equivalence is provided below.
Willy Tarreauced27012008-01-17 20:35:34 +010015283
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015284ACL name Equivalent to Usage
15285---------------+-----------------------------+---------------------------------
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015286FALSE always_false never match
Willy Tarreau2492d5b2009-07-11 00:06:00 +020015287HTTP req_proto_http match if protocol is valid HTTP
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015288HTTP_1.0 req_ver 1.0 match HTTP version 1.0
15289HTTP_1.1 req_ver 1.1 match HTTP version 1.1
Willy Tarreaud63335a2010-02-26 12:56:52 +010015290HTTP_CONTENT hdr_val(content-length) gt 0 match an existing content-length
15291HTTP_URL_ABS url_reg ^[^/:]*:// match absolute URL with scheme
15292HTTP_URL_SLASH url_beg / match URL beginning with "/"
15293HTTP_URL_STAR url * match URL equal to "*"
15294LOCALHOST src 127.0.0.1/8 match connection from local host
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015295METH_CONNECT method CONNECT match HTTP CONNECT method
Daniel Schneller9ff96c72016-04-11 17:45:29 +020015296METH_DELETE method DELETE match HTTP DELETE method
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015297METH_GET method GET HEAD match HTTP GET or HEAD method
15298METH_HEAD method HEAD match HTTP HEAD method
15299METH_OPTIONS method OPTIONS match HTTP OPTIONS method
15300METH_POST method POST match HTTP POST method
Daniel Schneller9ff96c72016-04-11 17:45:29 +020015301METH_PUT method PUT match HTTP PUT method
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015302METH_TRACE method TRACE match HTTP TRACE method
Emeric Brunbede3d02009-06-30 17:54:00 +020015303RDP_COOKIE req_rdp_cookie_cnt gt 0 match presence of an RDP cookie
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015304REQ_CONTENT req_len gt 0 match data in the request buffer
Willy Tarreaud63335a2010-02-26 12:56:52 +010015305TRUE always_true always match
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015306WAIT_END wait_end wait for end of content analysis
15307---------------+-----------------------------+---------------------------------
Willy Tarreauced27012008-01-17 20:35:34 +010015308
Willy Tarreaub937b7e2010-01-12 15:27:54 +010015309
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200153108. Logging
15311----------
Willy Tarreau844e3c52008-01-11 16:28:18 +010015312
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015313One of HAProxy's strong points certainly lies is its precise logs. It probably
15314provides the finest level of information available for such a product, which is
15315very important for troubleshooting complex environments. Standard information
15316provided in logs include client ports, TCP/HTTP state timers, precise session
15317state at termination and precise termination cause, information about decisions
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010015318to direct traffic to a server, and of course the ability to capture arbitrary
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015319headers.
15320
15321In order to improve administrators reactivity, it offers a great transparency
15322about encountered problems, both internal and external, and it is possible to
15323send logs to different sources at the same time with different level filters :
15324
15325 - global process-level logs (system errors, start/stop, etc..)
15326 - per-instance system and internal errors (lack of resource, bugs, ...)
15327 - per-instance external troubles (servers up/down, max connections)
15328 - per-instance activity (client connections), either at the establishment or
15329 at the termination.
Jim Freeman9e8714b2015-05-26 09:16:34 -060015330 - per-request control of log-level, eg:
15331 http-request set-log-level silent if sensitive_request
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015332
15333The ability to distribute different levels of logs to different log servers
15334allow several production teams to interact and to fix their problems as soon
15335as possible. For example, the system team might monitor system-wide errors,
15336while the application team might be monitoring the up/down for their servers in
15337real time, and the security team might analyze the activity logs with one hour
15338delay.
15339
15340
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200153418.1. Log levels
15342---------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015343
Simon Hormandf791f52011-05-29 15:01:10 +090015344TCP and HTTP connections can be logged with information such as the date, time,
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015345source IP address, destination address, connection duration, response times,
Simon Hormandf791f52011-05-29 15:01:10 +090015346HTTP request, HTTP return code, number of bytes transmitted, conditions
15347in which the session ended, and even exchanged cookies values. For example
15348track a particular user's problems. All messages may be sent to up to two
15349syslog servers. Check the "log" keyword in section 4.2 for more information
15350about log facilities.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015351
15352
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200153538.2. Log formats
15354----------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015355
William Lallemand48940402012-01-30 16:47:22 +010015356HAProxy supports 5 log formats. Several fields are common between these formats
Simon Hormandf791f52011-05-29 15:01:10 +090015357and will be detailed in the following sections. A few of them may vary
15358slightly with the configuration, due to indicators specific to certain
15359options. The supported formats are as follows :
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015360
15361 - the default format, which is very basic and very rarely used. It only
15362 provides very basic information about the incoming connection at the moment
15363 it is accepted : source IP:port, destination IP:port, and frontend-name.
15364 This mode will eventually disappear so it will not be described to great
15365 extents.
15366
15367 - the TCP format, which is more advanced. This format is enabled when "option
15368 tcplog" is set on the frontend. HAProxy will then usually wait for the
15369 connection to terminate before logging. This format provides much richer
15370 information, such as timers, connection counts, queue size, etc... This
15371 format is recommended for pure TCP proxies.
15372
15373 - the HTTP format, which is the most advanced for HTTP proxying. This format
15374 is enabled when "option httplog" is set on the frontend. It provides the
15375 same information as the TCP format with some HTTP-specific fields such as
15376 the request, the status code, and captures of headers and cookies. This
15377 format is recommended for HTTP proxies.
15378
Emeric Brun3a058f32009-06-30 18:26:00 +020015379 - the CLF HTTP format, which is equivalent to the HTTP format, but with the
15380 fields arranged in the same order as the CLF format. In this mode, all
15381 timers, captures, flags, etc... appear one per field after the end of the
15382 common fields, in the same order they appear in the standard HTTP format.
15383
William Lallemand48940402012-01-30 16:47:22 +010015384 - the custom log format, allows you to make your own log line.
15385
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015386Next sections will go deeper into details for each of these formats. Format
15387specification will be performed on a "field" basis. Unless stated otherwise, a
15388field is a portion of text delimited by any number of spaces. Since syslog
15389servers are susceptible of inserting fields at the beginning of a line, it is
15390always assumed that the first field is the one containing the process name and
15391identifier.
15392
15393Note : Since log lines may be quite long, the log examples in sections below
15394 might be broken into multiple lines. The example log lines will be
15395 prefixed with 3 closing angle brackets ('>>>') and each time a log is
15396 broken into multiple lines, each non-final line will end with a
15397 backslash ('\') and the next line will start indented by two characters.
15398
15399
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200154008.2.1. Default log format
15401-------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015402
15403This format is used when no specific option is set. The log is emitted as soon
15404as the connection is accepted. One should note that this currently is the only
15405format which logs the request's destination IP and ports.
15406
15407 Example :
15408 listen www
15409 mode http
15410 log global
15411 server srv1 127.0.0.1:8000
15412
15413 >>> Feb 6 12:12:09 localhost \
15414 haproxy[14385]: Connect from 10.0.1.2:33312 to 10.0.3.31:8012 \
15415 (www/HTTP)
15416
15417 Field Format Extract from the example above
15418 1 process_name '[' pid ']:' haproxy[14385]:
15419 2 'Connect from' Connect from
15420 3 source_ip ':' source_port 10.0.1.2:33312
15421 4 'to' to
15422 5 destination_ip ':' destination_port 10.0.3.31:8012
15423 6 '(' frontend_name '/' mode ')' (www/HTTP)
15424
15425Detailed fields description :
15426 - "source_ip" is the IP address of the client which initiated the connection.
15427 - "source_port" is the TCP port of the client which initiated the connection.
15428 - "destination_ip" is the IP address the client connected to.
15429 - "destination_port" is the TCP port the client connected to.
15430 - "frontend_name" is the name of the frontend (or listener) which received
15431 and processed the connection.
15432 - "mode is the mode the frontend is operating (TCP or HTTP).
15433
Willy Tarreauceb24bc2010-11-09 12:46:41 +010015434In case of a UNIX socket, the source and destination addresses are marked as
15435"unix:" and the ports reflect the internal ID of the socket which accepted the
15436connection (the same ID as reported in the stats).
15437
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015438It is advised not to use this deprecated format for newer installations as it
15439will eventually disappear.
15440
15441
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200154428.2.2. TCP log format
15443---------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015444
15445The TCP format is used when "option tcplog" is specified in the frontend, and
15446is the recommended format for pure TCP proxies. It provides a lot of precious
15447information for troubleshooting. Since this format includes timers and byte
15448counts, the log is normally emitted at the end of the session. It can be
15449emitted earlier if "option logasap" is specified, which makes sense in most
15450environments with long sessions such as remote terminals. Sessions which match
15451the "monitor" rules are never logged. It is also possible not to emit logs for
15452sessions for which no data were exchanged between the client and the server, by
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020015453specifying "option dontlognull" in the frontend. Successful connections will
15454not be logged if "option dontlog-normal" is specified in the frontend. A few
15455fields may slightly vary depending on some configuration options, those are
15456marked with a star ('*') after the field name below.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015457
15458 Example :
15459 frontend fnt
15460 mode tcp
15461 option tcplog
15462 log global
15463 default_backend bck
15464
15465 backend bck
15466 server srv1 127.0.0.1:8000
15467
15468 >>> Feb 6 12:12:56 localhost \
15469 haproxy[14387]: 10.0.1.2:33313 [06/Feb/2009:12:12:51.443] fnt \
15470 bck/srv1 0/0/5007 212 -- 0/0/0/0/3 0/0
15471
15472 Field Format Extract from the example above
15473 1 process_name '[' pid ']:' haproxy[14387]:
15474 2 client_ip ':' client_port 10.0.1.2:33313
15475 3 '[' accept_date ']' [06/Feb/2009:12:12:51.443]
15476 4 frontend_name fnt
15477 5 backend_name '/' server_name bck/srv1
15478 6 Tw '/' Tc '/' Tt* 0/0/5007
15479 7 bytes_read* 212
15480 8 termination_state --
15481 9 actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 0/0/0/0/3
15482 10 srv_queue '/' backend_queue 0/0
15483
15484Detailed fields description :
15485 - "client_ip" is the IP address of the client which initiated the TCP
Willy Tarreauceb24bc2010-11-09 12:46:41 +010015486 connection to haproxy. If the connection was accepted on a UNIX socket
15487 instead, the IP address would be replaced with the word "unix". Note that
15488 when the connection is accepted on a socket configured with "accept-proxy"
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010015489 and the PROXY protocol is correctly used, or with a "accept-netscaler-cip"
15490 and the NetScaler Client IP insetion protocol is correctly used, then the
15491 logs will reflect the forwarded connection's information.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015492
15493 - "client_port" is the TCP port of the client which initiated the connection.
Willy Tarreauceb24bc2010-11-09 12:46:41 +010015494 If the connection was accepted on a UNIX socket instead, the port would be
15495 replaced with the ID of the accepting socket, which is also reported in the
15496 stats interface.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015497
15498 - "accept_date" is the exact date when the connection was received by haproxy
15499 (which might be very slightly different from the date observed on the
15500 network if there was some queuing in the system's backlog). This is usually
15501 the same date which may appear in any upstream firewall's log.
15502
15503 - "frontend_name" is the name of the frontend (or listener) which received
15504 and processed the connection.
15505
15506 - "backend_name" is the name of the backend (or listener) which was selected
15507 to manage the connection to the server. This will be the same as the
15508 frontend if no switching rule has been applied, which is common for TCP
15509 applications.
15510
15511 - "server_name" is the name of the last server to which the connection was
15512 sent, which might differ from the first one if there were connection errors
15513 and a redispatch occurred. Note that this server belongs to the backend
15514 which processed the request. If the connection was aborted before reaching
15515 a server, "<NOSRV>" is indicated instead of a server name.
15516
15517 - "Tw" is the total time in milliseconds spent waiting in the various queues.
15518 It can be "-1" if the connection was aborted before reaching the queue.
15519 See "Timers" below for more details.
15520
15521 - "Tc" is the total time in milliseconds spent waiting for the connection to
15522 establish to the final server, including retries. It can be "-1" if the
15523 connection was aborted before a connection could be established. See
15524 "Timers" below for more details.
15525
15526 - "Tt" is the total time in milliseconds elapsed between the accept and the
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030015527 last close. It covers all possible processing. There is one exception, if
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015528 "option logasap" was specified, then the time counting stops at the moment
15529 the log is emitted. In this case, a '+' sign is prepended before the value,
15530 indicating that the final one will be larger. See "Timers" below for more
15531 details.
15532
15533 - "bytes_read" is the total number of bytes transmitted from the server to
15534 the client when the log is emitted. If "option logasap" is specified, the
15535 this value will be prefixed with a '+' sign indicating that the final one
15536 may be larger. Please note that this value is a 64-bit counter, so log
15537 analysis tools must be able to handle it without overflowing.
15538
15539 - "termination_state" is the condition the session was in when the session
15540 ended. This indicates the session state, which side caused the end of
15541 session to happen, and for what reason (timeout, error, ...). The normal
15542 flags should be "--", indicating the session was closed by either end with
15543 no data remaining in buffers. See below "Session state at disconnection"
15544 for more details.
15545
15546 - "actconn" is the total number of concurrent connections on the process when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040015547 the session was logged. It is useful to detect when some per-process system
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015548 limits have been reached. For instance, if actconn is close to 512 when
15549 multiple connection errors occur, chances are high that the system limits
15550 the process to use a maximum of 1024 file descriptors and that all of them
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015551 are used. See section 3 "Global parameters" to find how to tune the system.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015552
15553 - "feconn" is the total number of concurrent connections on the frontend when
15554 the session was logged. It is useful to estimate the amount of resource
15555 required to sustain high loads, and to detect when the frontend's "maxconn"
15556 has been reached. Most often when this value increases by huge jumps, it is
15557 because there is congestion on the backend servers, but sometimes it can be
15558 caused by a denial of service attack.
15559
15560 - "beconn" is the total number of concurrent connections handled by the
15561 backend when the session was logged. It includes the total number of
15562 concurrent connections active on servers as well as the number of
15563 connections pending in queues. It is useful to estimate the amount of
15564 additional servers needed to support high loads for a given application.
15565 Most often when this value increases by huge jumps, it is because there is
15566 congestion on the backend servers, but sometimes it can be caused by a
15567 denial of service attack.
15568
15569 - "srv_conn" is the total number of concurrent connections still active on
15570 the server when the session was logged. It can never exceed the server's
15571 configured "maxconn" parameter. If this value is very often close or equal
15572 to the server's "maxconn", it means that traffic regulation is involved a
15573 lot, meaning that either the server's maxconn value is too low, or that
15574 there aren't enough servers to process the load with an optimal response
15575 time. When only one of the server's "srv_conn" is high, it usually means
15576 that this server has some trouble causing the connections to take longer to
15577 be processed than on other servers.
15578
15579 - "retries" is the number of connection retries experienced by this session
15580 when trying to connect to the server. It must normally be zero, unless a
15581 server is being stopped at the same moment the connection was attempted.
15582 Frequent retries generally indicate either a network problem between
15583 haproxy and the server, or a misconfigured system backlog on the server
15584 preventing new connections from being queued. This field may optionally be
15585 prefixed with a '+' sign, indicating that the session has experienced a
15586 redispatch after the maximal retry count has been reached on the initial
15587 server. In this case, the server name appearing in the log is the one the
15588 connection was redispatched to, and not the first one, though both may
15589 sometimes be the same in case of hashing for instance. So as a general rule
15590 of thumb, when a '+' is present in front of the retry count, this count
15591 should not be attributed to the logged server.
15592
15593 - "srv_queue" is the total number of requests which were processed before
15594 this one in the server queue. It is zero when the request has not gone
15595 through the server queue. It makes it possible to estimate the approximate
15596 server's response time by dividing the time spent in queue by the number of
15597 requests in the queue. It is worth noting that if a session experiences a
15598 redispatch and passes through two server queues, their positions will be
15599 cumulated. A request should not pass through both the server queue and the
15600 backend queue unless a redispatch occurs.
15601
15602 - "backend_queue" is the total number of requests which were processed before
15603 this one in the backend's global queue. It is zero when the request has not
15604 gone through the global queue. It makes it possible to estimate the average
15605 queue length, which easily translates into a number of missing servers when
15606 divided by a server's "maxconn" parameter. It is worth noting that if a
15607 session experiences a redispatch, it may pass twice in the backend's queue,
15608 and then both positions will be cumulated. A request should not pass
15609 through both the server queue and the backend queue unless a redispatch
15610 occurs.
15611
15612
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200156138.2.3. HTTP log format
15614----------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015615
15616The HTTP format is the most complete and the best suited for HTTP proxies. It
15617is enabled by when "option httplog" is specified in the frontend. It provides
15618the same level of information as the TCP format with additional features which
15619are specific to the HTTP protocol. Just like the TCP format, the log is usually
15620emitted at the end of the session, unless "option logasap" is specified, which
15621generally only makes sense for download sites. A session which matches the
15622"monitor" rules will never logged. It is also possible not to log sessions for
15623which no data were sent by the client by specifying "option dontlognull" in the
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020015624frontend. Successful connections will not be logged if "option dontlog-normal"
15625is specified in the frontend.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015626
15627Most fields are shared with the TCP log, some being different. A few fields may
15628slightly vary depending on some configuration options. Those ones are marked
15629with a star ('*') after the field name below.
15630
15631 Example :
15632 frontend http-in
15633 mode http
15634 option httplog
15635 log global
15636 default_backend bck
15637
15638 backend static
15639 server srv1 127.0.0.1:8000
15640
15641 >>> Feb 6 12:14:14 localhost \
15642 haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
15643 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 +010015644 {} "GET /index.html HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015645
15646 Field Format Extract from the example above
15647 1 process_name '[' pid ']:' haproxy[14389]:
15648 2 client_ip ':' client_port 10.0.1.2:33317
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015649 3 '[' request_date ']' [06/Feb/2009:12:14:14.655]
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015650 4 frontend_name http-in
15651 5 backend_name '/' server_name static/srv1
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015652 6 TR '/' Tw '/' Tc '/' Tr '/' Ta* 10/0/30/69/109
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015653 7 status_code 200
15654 8 bytes_read* 2750
15655 9 captured_request_cookie -
15656 10 captured_response_cookie -
15657 11 termination_state ----
15658 12 actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 1/1/1/1/0
15659 13 srv_queue '/' backend_queue 0/0
15660 14 '{' captured_request_headers* '}' {haproxy.1wt.eu}
15661 15 '{' captured_response_headers* '}' {}
15662 16 '"' http_request '"' "GET /index.html HTTP/1.1"
Willy Tarreaud72758d2010-01-12 10:42:19 +010015663
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015664Detailed fields description :
15665 - "client_ip" is the IP address of the client which initiated the TCP
Willy Tarreauceb24bc2010-11-09 12:46:41 +010015666 connection to haproxy. If the connection was accepted on a UNIX socket
15667 instead, the IP address would be replaced with the word "unix". Note that
15668 when the connection is accepted on a socket configured with "accept-proxy"
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010015669 and the PROXY protocol is correctly used, or with a "accept-netscaler-cip"
15670 and the NetScaler Client IP insetion protocol is correctly used, then the
15671 logs will reflect the forwarded connection's information.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015672
15673 - "client_port" is the TCP port of the client which initiated the connection.
Willy Tarreauceb24bc2010-11-09 12:46:41 +010015674 If the connection was accepted on a UNIX socket instead, the port would be
15675 replaced with the ID of the accepting socket, which is also reported in the
15676 stats interface.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015677
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015678 - "request_date" is the exact date when the first byte of the HTTP request
15679 was received by haproxy (log field %tr).
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015680
15681 - "frontend_name" is the name of the frontend (or listener) which received
15682 and processed the connection.
15683
15684 - "backend_name" is the name of the backend (or listener) which was selected
15685 to manage the connection to the server. This will be the same as the
15686 frontend if no switching rule has been applied.
15687
15688 - "server_name" is the name of the last server to which the connection was
15689 sent, which might differ from the first one if there were connection errors
15690 and a redispatch occurred. Note that this server belongs to the backend
15691 which processed the request. If the request was aborted before reaching a
15692 server, "<NOSRV>" is indicated instead of a server name. If the request was
15693 intercepted by the stats subsystem, "<STATS>" is indicated instead.
15694
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015695 - "TR" is the total time in milliseconds spent waiting for a full HTTP
15696 request from the client (not counting body) after the first byte was
15697 received. It can be "-1" if the connection was aborted before a complete
15698 request could be received or the a bad request was received. It should
15699 always be very small because a request generally fits in one single packet.
15700 Large times here generally indicate network issues between the client and
15701 haproxy or requests being typed by hand. See "Timers" below for more details.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015702
15703 - "Tw" is the total time in milliseconds spent waiting in the various queues.
15704 It can be "-1" if the connection was aborted before reaching the queue.
15705 See "Timers" below for more details.
15706
15707 - "Tc" is the total time in milliseconds spent waiting for the connection to
15708 establish to the final server, including retries. It can be "-1" if the
15709 request was aborted before a connection could be established. See "Timers"
15710 below for more details.
15711
15712 - "Tr" is the total time in milliseconds spent waiting for the server to send
15713 a full HTTP response, not counting data. It can be "-1" if the request was
15714 aborted before a complete response could be received. It generally matches
15715 the server's processing time for the request, though it may be altered by
15716 the amount of data sent by the client to the server. Large times here on
15717 "GET" requests generally indicate an overloaded server. See "Timers" below
15718 for more details.
15719
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015720 - "Ta" is the time the request remained active in haproxy, which is the total
15721 time in milliseconds elapsed between the first byte of the request was
15722 received and the last byte of response was sent. It covers all possible
15723 processing except the handshake (see Th) and idle time (see Ti). There is
15724 one exception, if "option logasap" was specified, then the time counting
15725 stops at the moment the log is emitted. In this case, a '+' sign is
15726 prepended before the value, indicating that the final one will be larger.
15727 See "Timers" below for more details.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015728
15729 - "status_code" is the HTTP status code returned to the client. This status
15730 is generally set by the server, but it might also be set by haproxy when
15731 the server cannot be reached or when its response is blocked by haproxy.
15732
15733 - "bytes_read" is the total number of bytes transmitted to the client when
15734 the log is emitted. This does include HTTP headers. If "option logasap" is
15735 specified, the this value will be prefixed with a '+' sign indicating that
15736 the final one may be larger. Please note that this value is a 64-bit
15737 counter, so log analysis tools must be able to handle it without
15738 overflowing.
15739
15740 - "captured_request_cookie" is an optional "name=value" entry indicating that
15741 the client had this cookie in the request. The cookie name and its maximum
15742 length are defined by the "capture cookie" statement in the frontend
15743 configuration. The field is a single dash ('-') when the option is not
15744 set. Only one cookie may be captured, it is generally used to track session
15745 ID exchanges between a client and a server to detect session crossing
15746 between clients due to application bugs. For more details, please consult
15747 the section "Capturing HTTP headers and cookies" below.
15748
15749 - "captured_response_cookie" is an optional "name=value" entry indicating
15750 that the server has returned a cookie with its response. The cookie name
15751 and its maximum length are defined by the "capture cookie" statement in the
15752 frontend configuration. The field is a single dash ('-') when the option is
15753 not set. Only one cookie may be captured, it is generally used to track
15754 session ID exchanges between a client and a server to detect session
15755 crossing between clients due to application bugs. For more details, please
15756 consult the section "Capturing HTTP headers and cookies" below.
15757
15758 - "termination_state" is the condition the session was in when the session
15759 ended. This indicates the session state, which side caused the end of
15760 session to happen, for what reason (timeout, error, ...), just like in TCP
15761 logs, and information about persistence operations on cookies in the last
15762 two characters. The normal flags should begin with "--", indicating the
15763 session was closed by either end with no data remaining in buffers. See
15764 below "Session state at disconnection" for more details.
15765
15766 - "actconn" is the total number of concurrent connections on the process when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040015767 the session was logged. It is useful to detect when some per-process system
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015768 limits have been reached. For instance, if actconn is close to 512 or 1024
15769 when multiple connection errors occur, chances are high that the system
15770 limits the process to use a maximum of 1024 file descriptors and that all
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015771 of them are used. See section 3 "Global parameters" to find how to tune the
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015772 system.
15773
15774 - "feconn" is the total number of concurrent connections on the frontend when
15775 the session was logged. It is useful to estimate the amount of resource
15776 required to sustain high loads, and to detect when the frontend's "maxconn"
15777 has been reached. Most often when this value increases by huge jumps, it is
15778 because there is congestion on the backend servers, but sometimes it can be
15779 caused by a denial of service attack.
15780
15781 - "beconn" is the total number of concurrent connections handled by the
15782 backend when the session was logged. It includes the total number of
15783 concurrent connections active on servers as well as the number of
15784 connections pending in queues. It is useful to estimate the amount of
15785 additional servers needed to support high loads for a given application.
15786 Most often when this value increases by huge jumps, it is because there is
15787 congestion on the backend servers, but sometimes it can be caused by a
15788 denial of service attack.
15789
15790 - "srv_conn" is the total number of concurrent connections still active on
15791 the server when the session was logged. It can never exceed the server's
15792 configured "maxconn" parameter. If this value is very often close or equal
15793 to the server's "maxconn", it means that traffic regulation is involved a
15794 lot, meaning that either the server's maxconn value is too low, or that
15795 there aren't enough servers to process the load with an optimal response
15796 time. When only one of the server's "srv_conn" is high, it usually means
15797 that this server has some trouble causing the requests to take longer to be
15798 processed than on other servers.
15799
15800 - "retries" is the number of connection retries experienced by this session
15801 when trying to connect to the server. It must normally be zero, unless a
15802 server is being stopped at the same moment the connection was attempted.
15803 Frequent retries generally indicate either a network problem between
15804 haproxy and the server, or a misconfigured system backlog on the server
15805 preventing new connections from being queued. This field may optionally be
15806 prefixed with a '+' sign, indicating that the session has experienced a
15807 redispatch after the maximal retry count has been reached on the initial
15808 server. In this case, the server name appearing in the log is the one the
15809 connection was redispatched to, and not the first one, though both may
15810 sometimes be the same in case of hashing for instance. So as a general rule
15811 of thumb, when a '+' is present in front of the retry count, this count
15812 should not be attributed to the logged server.
15813
15814 - "srv_queue" is the total number of requests which were processed before
15815 this one in the server queue. It is zero when the request has not gone
15816 through the server queue. It makes it possible to estimate the approximate
15817 server's response time by dividing the time spent in queue by the number of
15818 requests in the queue. It is worth noting that if a session experiences a
15819 redispatch and passes through two server queues, their positions will be
15820 cumulated. A request should not pass through both the server queue and the
15821 backend queue unless a redispatch occurs.
15822
15823 - "backend_queue" is the total number of requests which were processed before
15824 this one in the backend's global queue. It is zero when the request has not
15825 gone through the global queue. It makes it possible to estimate the average
15826 queue length, which easily translates into a number of missing servers when
15827 divided by a server's "maxconn" parameter. It is worth noting that if a
15828 session experiences a redispatch, it may pass twice in the backend's queue,
15829 and then both positions will be cumulated. A request should not pass
15830 through both the server queue and the backend queue unless a redispatch
15831 occurs.
15832
15833 - "captured_request_headers" is a list of headers captured in the request due
15834 to the presence of the "capture request header" statement in the frontend.
15835 Multiple headers can be captured, they will be delimited by a vertical bar
15836 ('|'). When no capture is enabled, the braces do not appear, causing a
15837 shift of remaining fields. It is important to note that this field may
15838 contain spaces, and that using it requires a smarter log parser than when
15839 it's not used. Please consult the section "Capturing HTTP headers and
15840 cookies" below for more details.
15841
15842 - "captured_response_headers" is a list of headers captured in the response
15843 due to the presence of the "capture response header" statement in the
15844 frontend. Multiple headers can be captured, they will be delimited by a
15845 vertical bar ('|'). When no capture is enabled, the braces do not appear,
15846 causing a shift of remaining fields. It is important to note that this
15847 field may contain spaces, and that using it requires a smarter log parser
15848 than when it's not used. Please consult the section "Capturing HTTP headers
15849 and cookies" below for more details.
15850
15851 - "http_request" is the complete HTTP request line, including the method,
15852 request and HTTP version string. Non-printable characters are encoded (see
15853 below the section "Non-printable characters"). This is always the last
15854 field, and it is always delimited by quotes and is the only one which can
15855 contain quotes. If new fields are added to the log format, they will be
15856 added before this field. This field might be truncated if the request is
15857 huge and does not fit in the standard syslog buffer (1024 characters). This
15858 is the reason why this field must always remain the last one.
15859
15860
Cyril Bontédc4d9032012-04-08 21:57:39 +0200158618.2.4. Custom log format
15862------------------------
William Lallemand48940402012-01-30 16:47:22 +010015863
Willy Tarreau2beef582012-12-20 17:22:52 +010015864The directive log-format allows you to customize the logs in http mode and tcp
William Lallemandbddd4fd2012-02-27 11:23:10 +010015865mode. It takes a string as argument.
William Lallemand48940402012-01-30 16:47:22 +010015866
15867HAproxy understands some log format variables. % precedes log format variables.
15868Variables can take arguments using braces ('{}'), and multiple arguments are
15869separated by commas within the braces. Flags may be added or removed by
15870prefixing them with a '+' or '-' sign.
15871
15872Special variable "%o" may be used to propagate its flags to all other
15873variables on the same format string. This is particularly handy with quoted
Dragan Dosen835b9212016-02-12 13:23:03 +010015874("Q") and escaped ("E") string formats.
William Lallemand48940402012-01-30 16:47:22 +010015875
Willy Tarreauc8368452012-12-21 00:09:23 +010015876If a variable is named between square brackets ('[' .. ']') then it is used
Willy Tarreaube722a22014-06-13 16:31:59 +020015877as a sample expression rule (see section 7.3). This it useful to add some
Willy Tarreauc8368452012-12-21 00:09:23 +010015878less common information such as the client's SSL certificate's DN, or to log
15879the key that would be used to store an entry into a stick table.
15880
William Lallemand48940402012-01-30 16:47:22 +010015881Note: spaces must be escaped. A space character is considered as a separator.
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030015882In order to emit a verbatim '%', it must be preceded by another '%' resulting
Willy Tarreau06d97f92013-12-02 17:45:48 +010015883in '%%'. HAProxy will automatically merge consecutive separators.
William Lallemand48940402012-01-30 16:47:22 +010015884
Dragan Dosen835b9212016-02-12 13:23:03 +010015885Note: when using the RFC5424 syslog message format, the characters '"',
15886'\' and ']' inside PARAM-VALUE should be escaped with '\' as prefix (see
15887https://tools.ietf.org/html/rfc5424#section-6.3.3 for more details). In
15888such cases, the use of the flag "E" should be considered.
15889
William Lallemand48940402012-01-30 16:47:22 +010015890Flags are :
15891 * Q: quote a string
Jamie Gloudonaaa21002012-08-25 00:18:33 -040015892 * X: hexadecimal representation (IPs, Ports, %Ts, %rt, %pid)
Dragan Dosen835b9212016-02-12 13:23:03 +010015893 * E: escape characters '"', '\' and ']' in a string with '\' as prefix
15894 (intended purpose is for the RFC5424 structured-data log formats)
William Lallemand48940402012-01-30 16:47:22 +010015895
15896 Example:
15897
15898 log-format %T\ %t\ Some\ Text
15899 log-format %{+Q}o\ %t\ %s\ %{-Q}r
15900
Dragan Dosen835b9212016-02-12 13:23:03 +010015901 log-format-sd %{+Q,+E}o\ [exampleSDID@1234\ header=%[capture.req.hdr(0)]]
15902
William Lallemand48940402012-01-30 16:47:22 +010015903At the moment, the default HTTP format is defined this way :
15904
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015905 log-format "%ci:%cp [%tr] %ft %b/%s %TR/%Tw/%Tc/%Tr/%Ta %ST %B %CC \
15906 %CS %tsc %ac/%fc/%bc/%sc/%rc %sq/%bq %hr %hs %{+Q}r"
William Lallemand48940402012-01-30 16:47:22 +010015907
William Lallemandbddd4fd2012-02-27 11:23:10 +010015908the default CLF format is defined this way :
William Lallemand48940402012-01-30 16:47:22 +010015909
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015910 log-format "%{+Q}o %{-Q}ci - - [%trg] %r %ST %B \"\" \"\" %cp \
15911 %ms %ft %b %s %TR %Tw %Tc %Tr %Ta %tsc %ac %fc \
15912 %bc %sc %rc %sq %bq %CC %CS %hrl %hsl"
William Lallemand48940402012-01-30 16:47:22 +010015913
William Lallemandbddd4fd2012-02-27 11:23:10 +010015914and the default TCP format is defined this way :
15915
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015916 log-format "%ci:%cp [%t] %ft %b/%s %Tw/%Tc/%Tt %B %ts \
15917 %ac/%fc/%bc/%sc/%rc %sq/%bq"
William Lallemandbddd4fd2012-02-27 11:23:10 +010015918
William Lallemand48940402012-01-30 16:47:22 +010015919Please refer to the table below for currently defined variables :
15920
William Lallemandbddd4fd2012-02-27 11:23:10 +010015921 +---+------+-----------------------------------------------+-------------+
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015922 | R | var | field name (8.2.2 and 8.2.3 for description) | type |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015923 +---+------+-----------------------------------------------+-------------+
15924 | | %o | special variable, apply flags on all next var | |
15925 +---+------+-----------------------------------------------+-------------+
Willy Tarreau2beef582012-12-20 17:22:52 +010015926 | | %B | bytes_read (from server to client) | numeric |
15927 | H | %CC | captured_request_cookie | string |
15928 | H | %CS | captured_response_cookie | string |
William Lallemand5f232402012-04-05 18:02:55 +020015929 | | %H | hostname | string |
Andrew Hayworth0ebc55f2015-04-27 21:37:03 +000015930 | H | %HM | HTTP method (ex: POST) | string |
15931 | H | %HP | HTTP request URI without query string (path) | string |
Andrew Hayworthe63ac872015-07-31 16:14:16 +000015932 | H | %HQ | HTTP request URI query string (ex: ?bar=baz) | string |
Andrew Hayworth0ebc55f2015-04-27 21:37:03 +000015933 | H | %HU | HTTP request URI (ex: /foo?bar=baz) | string |
15934 | H | %HV | HTTP version (ex: HTTP/1.0) | string |
William Lallemanda73203e2012-03-12 12:48:57 +010015935 | | %ID | unique-id | string |
Willy Tarreau4bf99632014-06-13 12:21:40 +020015936 | | %ST | status_code | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020015937 | | %T | gmt_date_time | date |
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015938 | | %Ta | Active time of the request (from TR to end) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015939 | | %Tc | Tc | numeric |
Willy Tarreau27b639d2016-05-17 17:55:27 +020015940 | | %Td | Td = Tt - (Tq + Tw + Tc + Tr) | numeric |
Yuxans Yao4e25b012012-10-19 10:36:09 +080015941 | | %Tl | local_date_time | date |
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015942 | | %Th | connection handshake time (SSL, PROXY proto) | numeric |
15943 | H | %Ti | idle time before the HTTP request | numeric |
15944 | H | %Tq | Th + Ti + TR | numeric |
15945 | H | %TR | time to receive the full request from 1st byte| numeric |
15946 | H | %Tr | Tr (response time) | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020015947 | | %Ts | timestamp | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015948 | | %Tt | Tt | numeric |
15949 | | %Tw | Tw | numeric |
Willy Tarreau2beef582012-12-20 17:22:52 +010015950 | | %U | bytes_uploaded (from client to server) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015951 | | %ac | actconn | numeric |
15952 | | %b | backend_name | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010015953 | | %bc | beconn (backend concurrent connections) | numeric |
15954 | | %bi | backend_source_ip (connecting address) | IP |
15955 | | %bp | backend_source_port (connecting address) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015956 | | %bq | backend_queue | numeric |
Willy Tarreau2beef582012-12-20 17:22:52 +010015957 | | %ci | client_ip (accepted address) | IP |
15958 | | %cp | client_port (accepted address) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015959 | | %f | frontend_name | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010015960 | | %fc | feconn (frontend concurrent connections) | numeric |
15961 | | %fi | frontend_ip (accepting address) | IP |
15962 | | %fp | frontend_port (accepting address) | numeric |
Willy Tarreau773d65f2012-10-12 14:56:11 +020015963 | | %ft | frontend_name_transport ('~' suffix for SSL) | string |
Willy Tarreau7346acb2014-08-28 15:03:15 +020015964 | | %lc | frontend_log_counter | numeric |
Willy Tarreaud9ed3d22014-06-13 12:23:06 +020015965 | | %hr | captured_request_headers default style | string |
15966 | | %hrl | captured_request_headers CLF style | string list |
15967 | | %hs | captured_response_headers default style | string |
15968 | | %hsl | captured_response_headers CLF style | string list |
Willy Tarreau812c88e2015-08-09 10:56:35 +020015969 | | %ms | accept date milliseconds (left-padded with 0) | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020015970 | | %pid | PID | numeric |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015971 | H | %r | http_request | string |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015972 | | %rc | retries | numeric |
Willy Tarreau1f0da242014-01-25 11:01:50 +010015973 | | %rt | request_counter (HTTP req or TCP session) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015974 | | %s | server_name | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010015975 | | %sc | srv_conn (server concurrent connections) | numeric |
15976 | | %si | server_IP (target address) | IP |
15977 | | %sp | server_port (target address) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015978 | | %sq | srv_queue | numeric |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015979 | S | %sslc| ssl_ciphers (ex: AES-SHA) | string |
15980 | S | %sslv| ssl_version (ex: TLSv1) | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010015981 | | %t | date_time (with millisecond resolution) | date |
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015982 | H | %tr | date_time of HTTP request | date |
15983 | H | %trg | gmt_date_time of start of HTTP request | date |
15984 | H | %trl | locla_date_time of start of HTTP request | date |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015985 | | %ts | termination_state | string |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015986 | H | %tsc | termination_state with cookie status | string |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015987 +---+------+-----------------------------------------------+-------------+
William Lallemand48940402012-01-30 16:47:22 +010015988
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015989 R = Restrictions : H = mode http only ; S = SSL only
William Lallemand48940402012-01-30 16:47:22 +010015990
Willy Tarreau5f51e1a2012-12-03 18:40:10 +010015991
159928.2.5. Error log format
15993-----------------------
15994
15995When an incoming connection fails due to an SSL handshake or an invalid PROXY
15996protocol header, haproxy will log the event using a shorter, fixed line format.
15997By default, logs are emitted at the LOG_INFO level, unless the option
15998"log-separate-errors" is set in the backend, in which case the LOG_ERR level
15999will be used. Connections on which no data are exchanged (eg: probes) are not
16000logged if the "dontlognull" option is set.
16001
16002The format looks like this :
16003
16004 >>> Dec 3 18:27:14 localhost \
16005 haproxy[6103]: 127.0.0.1:56059 [03/Dec/2012:17:35:10.380] frt/f1: \
16006 Connection error during SSL handshake
16007
16008 Field Format Extract from the example above
16009 1 process_name '[' pid ']:' haproxy[6103]:
16010 2 client_ip ':' client_port 127.0.0.1:56059
16011 3 '[' accept_date ']' [03/Dec/2012:17:35:10.380]
16012 4 frontend_name "/" bind_name ":" frt/f1:
16013 5 message Connection error during SSL handshake
16014
16015These fields just provide minimal information to help debugging connection
16016failures.
16017
16018
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200160198.3. Advanced logging options
16020-----------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016021
16022Some advanced logging options are often looked for but are not easy to find out
16023just by looking at the various options. Here is an entry point for the few
16024options which can enable better logging. Please refer to the keywords reference
16025for more information about their usage.
16026
16027
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200160288.3.1. Disabling logging of external tests
16029------------------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016030
16031It is quite common to have some monitoring tools perform health checks on
16032haproxy. Sometimes it will be a layer 3 load-balancer such as LVS or any
16033commercial load-balancer, and sometimes it will simply be a more complete
16034monitoring system such as Nagios. When the tests are very frequent, users often
16035ask how to disable logging for those checks. There are three possibilities :
16036
16037 - if connections come from everywhere and are just TCP probes, it is often
16038 desired to simply disable logging of connections without data exchange, by
16039 setting "option dontlognull" in the frontend. It also disables logging of
16040 port scans, which may or may not be desired.
16041
16042 - if the connection come from a known source network, use "monitor-net" to
16043 declare this network as monitoring only. Any host in this network will then
16044 only be able to perform health checks, and their requests will not be
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030016045 logged. This is generally appropriate to designate a list of equipment
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016046 such as other load-balancers.
16047
16048 - if the tests are performed on a known URI, use "monitor-uri" to declare
16049 this URI as dedicated to monitoring. Any host sending this request will
16050 only get the result of a health-check, and the request will not be logged.
16051
16052
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200160538.3.2. Logging before waiting for the session to terminate
16054----------------------------------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016055
16056The problem with logging at end of connection is that you have no clue about
16057what is happening during very long sessions, such as remote terminal sessions
16058or large file downloads. This problem can be worked around by specifying
16059"option logasap" in the frontend. Haproxy will then log as soon as possible,
16060just before data transfer begins. This means that in case of TCP, it will still
16061log the connection status to the server, and in case of HTTP, it will log just
16062after processing the server headers. In this case, the number of bytes reported
16063is the number of header bytes sent to the client. In order to avoid confusion
16064with normal logs, the total time field and the number of bytes are prefixed
16065with a '+' sign which means that real numbers are certainly larger.
16066
16067
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200160688.3.3. Raising log level upon errors
16069------------------------------------
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020016070
16071Sometimes it is more convenient to separate normal traffic from errors logs,
16072for instance in order to ease error monitoring from log files. When the option
16073"log-separate-errors" is used, connections which experience errors, timeouts,
16074retries, redispatches or HTTP status codes 5xx will see their syslog level
16075raised from "info" to "err". This will help a syslog daemon store the log in
16076a separate file. It is very important to keep the errors in the normal traffic
16077file too, so that log ordering is not altered. You should also be careful if
16078you already have configured your syslog daemon to store all logs higher than
16079"notice" in an "admin" file, because the "err" level is higher than "notice".
16080
16081
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200160828.3.4. Disabling logging of successful connections
16083--------------------------------------------------
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020016084
16085Although this may sound strange at first, some large sites have to deal with
16086multiple thousands of logs per second and are experiencing difficulties keeping
16087them intact for a long time or detecting errors within them. If the option
16088"dontlog-normal" is set on the frontend, all normal connections will not be
16089logged. In this regard, a normal connection is defined as one without any
16090error, timeout, retry nor redispatch. In HTTP, the status code is checked too,
16091and a response with a status 5xx is not considered normal and will be logged
16092too. Of course, doing is is really discouraged as it will remove most of the
16093useful information from the logs. Do this only if you have no other
16094alternative.
16095
16096
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200160978.4. Timing events
16098------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016099
16100Timers provide a great help in troubleshooting network problems. All values are
16101reported in milliseconds (ms). These timers should be used in conjunction with
16102the session termination flags. In TCP mode with "option tcplog" set on the
16103frontend, 3 control points are reported under the form "Tw/Tc/Tt", and in HTTP
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016104mode, 5 control points are reported under the form "TR/Tw/Tc/Tr/Ta". In
16105addition, three other measures are provided, "Th", "Ti", and "Tq".
16106
Guillaume de Lafondf27cddc2016-12-23 17:32:43 +010016107Timings events in HTTP mode:
16108
16109 first request 2nd request
16110 |<-------------------------------->|<-------------- ...
16111 t tr t tr ...
16112 ---|----|----|----|----|----|----|----|----|--
16113 : Th Ti TR Tw Tc Tr Td : Ti ...
16114 :<---- Tq ---->: :
16115 :<-------------- Tt -------------->:
16116 :<--------- Ta --------->:
16117
16118Timings events in TCP mode:
16119
16120 TCP session
16121 |<----------------->|
16122 t t
16123 ---|----|----|----|----|---
16124 | Th Tw Tc Td |
16125 |<------ Tt ------->|
16126
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016127 - Th: total time to accept tcp connection and execute handshakes for low level
16128 protocols. Currently, these protocoles are proxy-protocol and SSL. This may
16129 only happen once during the whole connection's lifetime. A large time here
16130 may indicate that the client only pre-established the connection without
16131 speaking, that it is experiencing network issues preventing it from
16132 completing a handshake in a reasonable time (eg: MTU issues), or that an
16133 SSL handshake was very expensive to compute.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016134
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016135 - Ti: is the idle time before the HTTP request (HTTP mode only). This timer
16136 counts between the end of the handshakes and the first byte of the HTTP
16137 request. When dealing with a second request in keep-alive mode, it starts
16138 to count after the end of the transmission the previous response. Some
16139 browsers pre-establish connections to a server in order to reduce the
16140 latency of a future request, and keep them pending until they need it. This
16141 delay will be reported as the idle time. A value of -1 indicates that
16142 nothing was received on the connection.
16143
16144 - TR: total time to get the client request (HTTP mode only). It's the time
16145 elapsed between the first bytes received and the moment the proxy received
16146 the empty line marking the end of the HTTP headers. The value "-1"
16147 indicates that the end of headers has never been seen. This happens when
16148 the client closes prematurely or times out. This time is usually very short
16149 since most requests fit in a single packet. A large time may indicate a
16150 request typed by hand during a test.
16151
16152 - Tq: total time to get the client request from the accept date or since the
16153 emission of the last byte of the previous response (HTTP mode only). It's
16154 exactly equalt to Th + Ti + TR unless any of them is -1, in which case it
16155 returns -1 as well. This timer used to be very useful before the arrival of
16156 HTTP keep-alive and browsers' pre-connect feature. It's recommended to drop
16157 it in favor of TR nowadays, as the idle time adds a lot of noise to the
16158 reports.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016159
16160 - Tw: total time spent in the queues waiting for a connection slot. It
16161 accounts for backend queue as well as the server queues, and depends on the
16162 queue size, and the time needed for the server to complete previous
16163 requests. The value "-1" means that the request was killed before reaching
16164 the queue, which is generally what happens with invalid or denied requests.
16165
16166 - Tc: total time to establish the TCP connection to the server. It's the time
16167 elapsed between the moment the proxy sent the connection request, and the
16168 moment it was acknowledged by the server, or between the TCP SYN packet and
16169 the matching SYN/ACK packet in return. The value "-1" means that the
16170 connection never established.
16171
16172 - Tr: server response time (HTTP mode only). It's the time elapsed between
16173 the moment the TCP connection was established to the server and the moment
16174 the server sent its complete response headers. It purely shows its request
16175 processing time, without the network overhead due to the data transmission.
16176 It is worth noting that when the client has data to send to the server, for
16177 instance during a POST request, the time already runs, and this can distort
16178 apparent response time. For this reason, it's generally wise not to trust
16179 too much this field for POST requests initiated from clients behind an
16180 untrusted network. A value of "-1" here means that the last the response
16181 header (empty line) was never seen, most likely because the server timeout
16182 stroke before the server managed to process the request.
16183
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016184 - Ta: total active time for the HTTP request, between the moment the proxy
16185 received the first byte of the request header and the emission of the last
16186 byte of the response body. The exception is when the "logasap" option is
16187 specified. In this case, it only equals (TR+Tw+Tc+Tr), and is prefixed with
16188 a '+' sign. From this field, we can deduce "Td", the data transmission time,
16189 by subtracting other timers when valid :
16190
16191 Td = Ta - (TR + Tw + Tc + Tr)
16192
16193 Timers with "-1" values have to be excluded from this equation. Note that
16194 "Ta" can never be negative.
16195
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016196 - Tt: total session duration time, between the moment the proxy accepted it
16197 and the moment both ends were closed. The exception is when the "logasap"
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016198 option is specified. In this case, it only equals (Th+Ti+TR+Tw+Tc+Tr), and
16199 is prefixed with a '+' sign. From this field, we can deduce "Td", the data
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030016200 transmission time, by subtracting other timers when valid :
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016201
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016202 Td = Tt - (Th + Ti + TR + Tw + Tc + Tr)
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016203
16204 Timers with "-1" values have to be excluded from this equation. In TCP
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016205 mode, "Ti", "Tq" and "Tr" have to be excluded too. Note that "Tt" can never
16206 be negative and that for HTTP, Tt is simply equal to (Th+Ti+Ta).
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016207
16208These timers provide precious indications on trouble causes. Since the TCP
16209protocol defines retransmit delays of 3, 6, 12... seconds, we know for sure
16210that timers close to multiples of 3s are nearly always related to lost packets
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016211due to network problems (wires, negotiation, congestion). Moreover, if "Ta" or
16212"Tt" is close to a timeout value specified in the configuration, it often means
16213that a session has been aborted on timeout.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016214
16215Most common cases :
16216
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016217 - If "Th" or "Ti" are close to 3000, a packet has probably been lost between
16218 the client and the proxy. This is very rare on local networks but might
16219 happen when clients are on far remote networks and send large requests. It
16220 may happen that values larger than usual appear here without any network
16221 cause. Sometimes, during an attack or just after a resource starvation has
16222 ended, haproxy may accept thousands of connections in a few milliseconds.
16223 The time spent accepting these connections will inevitably slightly delay
16224 processing of other connections, and it can happen that request times in the
16225 order of a few tens of milliseconds are measured after a few thousands of
16226 new connections have been accepted at once. Using one of the keep-alive
16227 modes may display larger idle times since "Ti" measures the time spent
Patrick Mezard105faca2010-06-12 17:02:46 +020016228 waiting for additional requests.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016229
16230 - If "Tc" is close to 3000, a packet has probably been lost between the
16231 server and the proxy during the server connection phase. This value should
16232 always be very low, such as 1 ms on local networks and less than a few tens
16233 of ms on remote networks.
16234
Willy Tarreau55165fe2009-05-10 12:02:55 +020016235 - If "Tr" is nearly always lower than 3000 except some rare values which seem
16236 to be the average majored by 3000, there are probably some packets lost
16237 between the proxy and the server.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016238
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016239 - If "Ta" is large even for small byte counts, it generally is because
16240 neither the client nor the server decides to close the connection while
16241 haproxy is running in tunnel mode and both have agreed on a keep-alive
16242 connection mode. In order to solve this issue, it will be needed to specify
16243 one of the HTTP options to manipulate keep-alive or close options on either
16244 the frontend or the backend. Having the smallest possible 'Ta' or 'Tt' is
16245 important when connection regulation is used with the "maxconn" option on
16246 the servers, since no new connection will be sent to the server until
16247 another one is released.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016248
16249Other noticeable HTTP log cases ('xx' means any value to be ignored) :
16250
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016251 TR/Tw/Tc/Tr/+Ta The "option logasap" is present on the frontend and the log
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016252 was emitted before the data phase. All the timers are valid
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016253 except "Ta" which is shorter than reality.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016254
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016255 -1/xx/xx/xx/Ta The client was not able to send a complete request in time
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016256 or it aborted too early. Check the session termination flags
16257 then "timeout http-request" and "timeout client" settings.
16258
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016259 TR/-1/xx/xx/Ta It was not possible to process the request, maybe because
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016260 servers were out of order, because the request was invalid
16261 or forbidden by ACL rules. Check the session termination
16262 flags.
16263
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016264 TR/Tw/-1/xx/Ta The connection could not establish on the server. Either it
16265 actively refused it or it timed out after Ta-(TR+Tw) ms.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016266 Check the session termination flags, then check the
16267 "timeout connect" setting. Note that the tarpit action might
16268 return similar-looking patterns, with "Tw" equal to the time
16269 the client connection was maintained open.
16270
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016271 TR/Tw/Tc/-1/Ta The server has accepted the connection but did not return
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030016272 a complete response in time, or it closed its connection
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016273 unexpectedly after Ta-(TR+Tw+Tc) ms. Check the session
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016274 termination flags, then check the "timeout server" setting.
16275
16276
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200162778.5. Session state at disconnection
16278-----------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016279
16280TCP and HTTP logs provide a session termination indicator in the
16281"termination_state" field, just before the number of active connections. It is
162822-characters long in TCP mode, and is extended to 4 characters in HTTP mode,
16283each of which has a special meaning :
16284
16285 - On the first character, a code reporting the first event which caused the
16286 session to terminate :
16287
16288 C : the TCP session was unexpectedly aborted by the client.
16289
16290 S : the TCP session was unexpectedly aborted by the server, or the
16291 server explicitly refused it.
16292
16293 P : the session was prematurely aborted by the proxy, because of a
16294 connection limit enforcement, because a DENY filter was matched,
16295 because of a security check which detected and blocked a dangerous
16296 error in server response which might have caused information leak
Willy Tarreau570f2212013-06-10 16:42:09 +020016297 (eg: cacheable cookie).
16298
16299 L : the session was locally processed by haproxy and was not passed to
16300 a server. This is what happens for stats and redirects.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016301
16302 R : a resource on the proxy has been exhausted (memory, sockets, source
16303 ports, ...). Usually, this appears during the connection phase, and
16304 system logs should contain a copy of the precise error. If this
16305 happens, it must be considered as a very serious anomaly which
16306 should be fixed as soon as possible by any means.
16307
16308 I : an internal error was identified by the proxy during a self-check.
16309 This should NEVER happen, and you are encouraged to report any log
16310 containing this, because this would almost certainly be a bug. It
16311 would be wise to preventively restart the process after such an
16312 event too, in case it would be caused by memory corruption.
16313
Simon Horman752dc4a2011-06-21 14:34:59 +090016314 D : the session was killed by haproxy because the server was detected
16315 as down and was configured to kill all connections when going down.
16316
Justin Karnegeseb2c24a2012-05-24 15:28:52 -070016317 U : the session was killed by haproxy on this backup server because an
16318 active server was detected as up and was configured to kill all
16319 backup connections when going up.
16320
Willy Tarreaua2a64e92011-09-07 23:01:56 +020016321 K : the session was actively killed by an admin operating on haproxy.
16322
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016323 c : the client-side timeout expired while waiting for the client to
16324 send or receive data.
16325
16326 s : the server-side timeout expired while waiting for the server to
16327 send or receive data.
16328
16329 - : normal session completion, both the client and the server closed
16330 with nothing left in the buffers.
16331
16332 - on the second character, the TCP or HTTP session state when it was closed :
16333
Willy Tarreauf7b30a92010-12-06 22:59:17 +010016334 R : the proxy was waiting for a complete, valid REQUEST from the client
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016335 (HTTP mode only). Nothing was sent to any server.
16336
16337 Q : the proxy was waiting in the QUEUE for a connection slot. This can
16338 only happen when servers have a 'maxconn' parameter set. It can
16339 also happen in the global queue after a redispatch consecutive to
16340 a failed attempt to connect to a dying server. If no redispatch is
16341 reported, then no connection attempt was made to any server.
16342
16343 C : the proxy was waiting for the CONNECTION to establish on the
16344 server. The server might at most have noticed a connection attempt.
16345
16346 H : the proxy was waiting for complete, valid response HEADERS from the
16347 server (HTTP only).
16348
16349 D : the session was in the DATA phase.
16350
16351 L : the proxy was still transmitting LAST data to the client while the
16352 server had already finished. This one is very rare as it can only
16353 happen when the client dies while receiving the last packets.
16354
16355 T : the request was tarpitted. It has been held open with the client
16356 during the whole "timeout tarpit" duration or until the client
16357 closed, both of which will be reported in the "Tw" timer.
16358
16359 - : normal session completion after end of data transfer.
16360
16361 - the third character tells whether the persistence cookie was provided by
16362 the client (only in HTTP mode) :
16363
16364 N : the client provided NO cookie. This is usually the case for new
16365 visitors, so counting the number of occurrences of this flag in the
16366 logs generally indicate a valid trend for the site frequentation.
16367
16368 I : the client provided an INVALID cookie matching no known server.
16369 This might be caused by a recent configuration change, mixed
Cyril Bontéa8e7bbc2010-04-25 22:29:29 +020016370 cookies between HTTP/HTTPS sites, persistence conditionally
16371 ignored, or an attack.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016372
16373 D : the client provided a cookie designating a server which was DOWN,
16374 so either "option persist" was used and the client was sent to
16375 this server, or it was not set and the client was redispatched to
16376 another server.
16377
Willy Tarreau996a92c2010-10-13 19:30:47 +020016378 V : the client provided a VALID cookie, and was sent to the associated
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016379 server.
16380
Willy Tarreau996a92c2010-10-13 19:30:47 +020016381 E : the client provided a valid cookie, but with a last date which was
16382 older than what is allowed by the "maxidle" cookie parameter, so
16383 the cookie is consider EXPIRED and is ignored. The request will be
16384 redispatched just as if there was no cookie.
16385
16386 O : the client provided a valid cookie, but with a first date which was
16387 older than what is allowed by the "maxlife" cookie parameter, so
16388 the cookie is consider too OLD and is ignored. The request will be
16389 redispatched just as if there was no cookie.
16390
Willy Tarreauc89ccb62012-04-05 21:18:22 +020016391 U : a cookie was present but was not used to select the server because
16392 some other server selection mechanism was used instead (typically a
16393 "use-server" rule).
16394
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016395 - : does not apply (no cookie set in configuration).
16396
16397 - the last character reports what operations were performed on the persistence
16398 cookie returned by the server (only in HTTP mode) :
16399
16400 N : NO cookie was provided by the server, and none was inserted either.
16401
16402 I : no cookie was provided by the server, and the proxy INSERTED one.
16403 Note that in "cookie insert" mode, if the server provides a cookie,
16404 it will still be overwritten and reported as "I" here.
16405
Willy Tarreau996a92c2010-10-13 19:30:47 +020016406 U : the proxy UPDATED the last date in the cookie that was presented by
16407 the client. This can only happen in insert mode with "maxidle". It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030016408 happens every time there is activity at a different date than the
Willy Tarreau996a92c2010-10-13 19:30:47 +020016409 date indicated in the cookie. If any other change happens, such as
16410 a redispatch, then the cookie will be marked as inserted instead.
16411
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016412 P : a cookie was PROVIDED by the server and transmitted as-is.
16413
16414 R : the cookie provided by the server was REWRITTEN by the proxy, which
16415 happens in "cookie rewrite" or "cookie prefix" modes.
16416
16417 D : the cookie provided by the server was DELETED by the proxy.
16418
16419 - : does not apply (no cookie set in configuration).
16420
Willy Tarreau996a92c2010-10-13 19:30:47 +020016421The combination of the two first flags gives a lot of information about what
16422was happening when the session terminated, and why it did terminate. It can be
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016423helpful to detect server saturation, network troubles, local system resource
16424starvation, attacks, etc...
16425
16426The most common termination flags combinations are indicated below. They are
16427alphabetically sorted, with the lowercase set just after the upper case for
16428easier finding and understanding.
16429
16430 Flags Reason
16431
16432 -- Normal termination.
16433
16434 CC The client aborted before the connection could be established to the
16435 server. This can happen when haproxy tries to connect to a recently
16436 dead (or unchecked) server, and the client aborts while haproxy is
16437 waiting for the server to respond or for "timeout connect" to expire.
16438
16439 CD The client unexpectedly aborted during data transfer. This can be
16440 caused by a browser crash, by an intermediate equipment between the
16441 client and haproxy which decided to actively break the connection,
16442 by network routing issues between the client and haproxy, or by a
16443 keep-alive session between the server and the client terminated first
16444 by the client.
Willy Tarreaud72758d2010-01-12 10:42:19 +010016445
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016446 cD The client did not send nor acknowledge any data for as long as the
16447 "timeout client" delay. This is often caused by network failures on
Cyril Bontédc4d9032012-04-08 21:57:39 +020016448 the client side, or the client simply leaving the net uncleanly.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016449
16450 CH The client aborted while waiting for the server to start responding.
16451 It might be the server taking too long to respond or the client
16452 clicking the 'Stop' button too fast.
16453
16454 cH The "timeout client" stroke while waiting for client data during a
16455 POST request. This is sometimes caused by too large TCP MSS values
16456 for PPPoE networks which cannot transport full-sized packets. It can
16457 also happen when client timeout is smaller than server timeout and
16458 the server takes too long to respond.
16459
16460 CQ The client aborted while its session was queued, waiting for a server
16461 with enough empty slots to accept it. It might be that either all the
16462 servers were saturated or that the assigned server was taking too
16463 long a time to respond.
16464
16465 CR The client aborted before sending a full HTTP request. Most likely
16466 the request was typed by hand using a telnet client, and aborted
16467 too early. The HTTP status code is likely a 400 here. Sometimes this
16468 might also be caused by an IDS killing the connection between haproxy
Willy Tarreau0f228a02015-05-01 15:37:53 +020016469 and the client. "option http-ignore-probes" can be used to ignore
16470 connections without any data transfer.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016471
16472 cR The "timeout http-request" stroke before the client sent a full HTTP
16473 request. This is sometimes caused by too large TCP MSS values on the
16474 client side for PPPoE networks which cannot transport full-sized
16475 packets, or by clients sending requests by hand and not typing fast
16476 enough, or forgetting to enter the empty line at the end of the
Willy Tarreau2705a612014-05-23 17:38:34 +020016477 request. The HTTP status code is likely a 408 here. Note: recently,
Willy Tarreau0f228a02015-05-01 15:37:53 +020016478 some browsers started to implement a "pre-connect" feature consisting
16479 in speculatively connecting to some recently visited web sites just
16480 in case the user would like to visit them. This results in many
16481 connections being established to web sites, which end up in 408
16482 Request Timeout if the timeout strikes first, or 400 Bad Request when
16483 the browser decides to close them first. These ones pollute the log
16484 and feed the error counters. Some versions of some browsers have even
16485 been reported to display the error code. It is possible to work
16486 around the undesirable effects of this behaviour by adding "option
16487 http-ignore-probes" in the frontend, resulting in connections with
16488 zero data transfer to be totally ignored. This will definitely hide
16489 the errors of people experiencing connectivity issues though.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016490
16491 CT The client aborted while its session was tarpitted. It is important to
16492 check if this happens on valid requests, in order to be sure that no
Willy Tarreau55165fe2009-05-10 12:02:55 +020016493 wrong tarpit rules have been written. If a lot of them happen, it
16494 might make sense to lower the "timeout tarpit" value to something
16495 closer to the average reported "Tw" timer, in order not to consume
16496 resources for just a few attackers.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016497
Willy Tarreau570f2212013-06-10 16:42:09 +020016498 LR The request was intercepted and locally handled by haproxy. Generally
16499 it means that this was a redirect or a stats request.
16500
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010016501 SC The server or an equipment between it and haproxy explicitly refused
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016502 the TCP connection (the proxy received a TCP RST or an ICMP message
16503 in return). Under some circumstances, it can also be the network
16504 stack telling the proxy that the server is unreachable (eg: no route,
16505 or no ARP response on local network). When this happens in HTTP mode,
16506 the status code is likely a 502 or 503 here.
16507
16508 sC The "timeout connect" stroke before a connection to the server could
16509 complete. When this happens in HTTP mode, the status code is likely a
16510 503 or 504 here.
16511
16512 SD The connection to the server died with an error during the data
16513 transfer. This usually means that haproxy has received an RST from
16514 the server or an ICMP message from an intermediate equipment while
16515 exchanging data with the server. This can be caused by a server crash
16516 or by a network issue on an intermediate equipment.
16517
16518 sD The server did not send nor acknowledge any data for as long as the
16519 "timeout server" setting during the data phase. This is often caused
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010016520 by too short timeouts on L4 equipments before the server (firewalls,
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016521 load-balancers, ...), as well as keep-alive sessions maintained
16522 between the client and the server expiring first on haproxy.
16523
16524 SH The server aborted before sending its full HTTP response headers, or
16525 it crashed while processing the request. Since a server aborting at
16526 this moment is very rare, it would be wise to inspect its logs to
16527 control whether it crashed and why. The logged request may indicate a
16528 small set of faulty requests, demonstrating bugs in the application.
16529 Sometimes this might also be caused by an IDS killing the connection
16530 between haproxy and the server.
16531
16532 sH The "timeout server" stroke before the server could return its
16533 response headers. This is the most common anomaly, indicating too
16534 long transactions, probably caused by server or database saturation.
16535 The immediate workaround consists in increasing the "timeout server"
16536 setting, but it is important to keep in mind that the user experience
16537 will suffer from these long response times. The only long term
16538 solution is to fix the application.
16539
16540 sQ The session spent too much time in queue and has been expired. See
16541 the "timeout queue" and "timeout connect" settings to find out how to
16542 fix this if it happens too often. If it often happens massively in
16543 short periods, it may indicate general problems on the affected
16544 servers due to I/O or database congestion, or saturation caused by
16545 external attacks.
16546
16547 PC The proxy refused to establish a connection to the server because the
16548 process' socket limit has been reached while attempting to connect.
Cyril Bontédc4d9032012-04-08 21:57:39 +020016549 The global "maxconn" parameter may be increased in the configuration
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016550 so that it does not happen anymore. This status is very rare and
16551 might happen when the global "ulimit-n" parameter is forced by hand.
16552
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010016553 PD The proxy blocked an incorrectly formatted chunked encoded message in
16554 a request or a response, after the server has emitted its headers. In
16555 most cases, this will indicate an invalid message from the server to
Willy Tarreauf3a3e132013-08-31 08:16:26 +020016556 the client. Haproxy supports chunk sizes of up to 2GB - 1 (2147483647
16557 bytes). Any larger size will be considered as an error.
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010016558
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016559 PH The proxy blocked the server's response, because it was invalid,
16560 incomplete, dangerous (cache control), or matched a security filter.
16561 In any case, an HTTP 502 error is sent to the client. One possible
16562 cause for this error is an invalid syntax in an HTTP header name
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010016563 containing unauthorized characters. It is also possible but quite
16564 rare, that the proxy blocked a chunked-encoding request from the
16565 client due to an invalid syntax, before the server responded. In this
16566 case, an HTTP 400 error is sent to the client and reported in the
16567 logs.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016568
16569 PR The proxy blocked the client's HTTP request, either because of an
16570 invalid HTTP syntax, in which case it returned an HTTP 400 error to
16571 the client, or because a deny filter matched, in which case it
16572 returned an HTTP 403 error.
16573
16574 PT The proxy blocked the client's request and has tarpitted its
16575 connection before returning it a 500 server error. Nothing was sent
16576 to the server. The connection was maintained open for as long as
16577 reported by the "Tw" timer field.
16578
16579 RC A local resource has been exhausted (memory, sockets, source ports)
16580 preventing the connection to the server from establishing. The error
16581 logs will tell precisely what was missing. This is very rare and can
16582 only be solved by proper system tuning.
16583
Willy Tarreau996a92c2010-10-13 19:30:47 +020016584The combination of the two last flags gives a lot of information about how
16585persistence was handled by the client, the server and by haproxy. This is very
16586important to troubleshoot disconnections, when users complain they have to
16587re-authenticate. The commonly encountered flags are :
16588
16589 -- Persistence cookie is not enabled.
16590
16591 NN No cookie was provided by the client, none was inserted in the
16592 response. For instance, this can be in insert mode with "postonly"
16593 set on a GET request.
16594
16595 II A cookie designating an invalid server was provided by the client,
16596 a valid one was inserted in the response. This typically happens when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040016597 a "server" entry is removed from the configuration, since its cookie
Willy Tarreau996a92c2010-10-13 19:30:47 +020016598 value can be presented by a client when no other server knows it.
16599
16600 NI No cookie was provided by the client, one was inserted in the
16601 response. This typically happens for first requests from every user
16602 in "insert" mode, which makes it an easy way to count real users.
16603
16604 VN A cookie was provided by the client, none was inserted in the
16605 response. This happens for most responses for which the client has
16606 already got a cookie.
16607
16608 VU A cookie was provided by the client, with a last visit date which is
16609 not completely up-to-date, so an updated cookie was provided in
16610 response. This can also happen if there was no date at all, or if
16611 there was a date but the "maxidle" parameter was not set, so that the
16612 cookie can be switched to unlimited time.
16613
16614 EI A cookie was provided by the client, with a last visit date which is
16615 too old for the "maxidle" parameter, so the cookie was ignored and a
16616 new cookie was inserted in the response.
16617
16618 OI A cookie was provided by the client, with a first visit date which is
16619 too old for the "maxlife" parameter, so the cookie was ignored and a
16620 new cookie was inserted in the response.
16621
16622 DI The server designated by the cookie was down, a new server was
16623 selected and a new cookie was emitted in the response.
16624
16625 VI The server designated by the cookie was not marked dead but could not
16626 be reached. A redispatch happened and selected another one, which was
16627 then advertised in the response.
16628
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016629
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200166308.6. Non-printable characters
16631-----------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016632
16633In order not to cause trouble to log analysis tools or terminals during log
16634consulting, non-printable characters are not sent as-is into log files, but are
16635converted to the two-digits hexadecimal representation of their ASCII code,
16636prefixed by the character '#'. The only characters that can be logged without
16637being escaped are comprised between 32 and 126 (inclusive). Obviously, the
16638escape character '#' itself is also encoded to avoid any ambiguity ("#23"). It
16639is the same for the character '"' which becomes "#22", as well as '{', '|' and
16640'}' when logging headers.
16641
16642Note that the space character (' ') is not encoded in headers, which can cause
16643issues for tools relying on space count to locate fields. A typical header
16644containing spaces is "User-Agent".
16645
16646Last, it has been observed that some syslog daemons such as syslog-ng escape
16647the quote ('"') with a backslash ('\'). The reverse operation can safely be
16648performed since no quote may appear anywhere else in the logs.
16649
16650
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200166518.7. Capturing HTTP cookies
16652---------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016653
16654Cookie capture simplifies the tracking a complete user session. This can be
16655achieved using the "capture cookie" statement in the frontend. Please refer to
Willy Tarreauc57f0e22009-05-10 13:12:33 +020016656section 4.2 for more details. Only one cookie can be captured, and the same
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016657cookie will simultaneously be checked in the request ("Cookie:" header) and in
16658the response ("Set-Cookie:" header). The respective values will be reported in
16659the HTTP logs at the "captured_request_cookie" and "captured_response_cookie"
Willy Tarreauc57f0e22009-05-10 13:12:33 +020016660locations (see section 8.2.3 about HTTP log format). When either cookie is
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016661not seen, a dash ('-') replaces the value. This way, it's easy to detect when a
16662user switches to a new session for example, because the server will reassign it
16663a new cookie. It is also possible to detect if a server unexpectedly sets a
16664wrong cookie to a client, leading to session crossing.
16665
16666 Examples :
16667 # capture the first cookie whose name starts with "ASPSESSION"
16668 capture cookie ASPSESSION len 32
16669
16670 # capture the first cookie whose name is exactly "vgnvisitor"
16671 capture cookie vgnvisitor= len 32
16672
16673
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200166748.8. Capturing HTTP headers
16675---------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016676
16677Header captures are useful to track unique request identifiers set by an upper
16678proxy, virtual host names, user-agents, POST content-length, referrers, etc. In
16679the response, one can search for information about the response length, how the
16680server asked the cache to behave, or an object location during a redirection.
16681
16682Header captures are performed using the "capture request header" and "capture
16683response header" statements in the frontend. Please consult their definition in
Willy Tarreauc57f0e22009-05-10 13:12:33 +020016684section 4.2 for more details.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016685
16686It is possible to include both request headers and response headers at the same
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010016687time. Non-existent headers are logged as empty strings, and if one header
16688appears more than once, only its last occurrence will be logged. Request headers
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016689are grouped within braces '{' and '}' in the same order as they were declared,
16690and delimited with a vertical bar '|' without any space. Response headers
16691follow the same representation, but are displayed after a space following the
16692request headers block. These blocks are displayed just before the HTTP request
16693in the logs.
16694
Willy Tarreaud9ed3d22014-06-13 12:23:06 +020016695As a special case, it is possible to specify an HTTP header capture in a TCP
16696frontend. The purpose is to enable logging of headers which will be parsed in
16697an HTTP backend if the request is then switched to this HTTP backend.
16698
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016699 Example :
16700 # This instance chains to the outgoing proxy
16701 listen proxy-out
16702 mode http
16703 option httplog
16704 option logasap
16705 log global
16706 server cache1 192.168.1.1:3128
16707
16708 # log the name of the virtual server
16709 capture request header Host len 20
16710
16711 # log the amount of data uploaded during a POST
16712 capture request header Content-Length len 10
16713
16714 # log the beginning of the referrer
16715 capture request header Referer len 20
16716
16717 # server name (useful for outgoing proxies only)
16718 capture response header Server len 20
16719
16720 # logging the content-length is useful with "option logasap"
16721 capture response header Content-Length len 10
16722
16723 # log the expected cache behaviour on the response
16724 capture response header Cache-Control len 8
16725
16726 # the Via header will report the next proxy's name
16727 capture response header Via len 20
16728
16729 # log the URL location during a redirection
16730 capture response header Location len 20
16731
16732 >>> Aug 9 20:26:09 localhost \
16733 haproxy[2022]: 127.0.0.1:34014 [09/Aug/2004:20:26:09] proxy-out \
16734 proxy-out/cache1 0/0/0/162/+162 200 +350 - - ---- 0/0/0/0/0 0/0 \
16735 {fr.adserver.yahoo.co||http://fr.f416.mail.} {|864|private||} \
16736 "GET http://fr.adserver.yahoo.com/"
16737
16738 >>> Aug 9 20:30:46 localhost \
16739 haproxy[2022]: 127.0.0.1:34020 [09/Aug/2004:20:30:46] proxy-out \
16740 proxy-out/cache1 0/0/0/182/+182 200 +279 - - ---- 0/0/0/0/0 0/0 \
16741 {w.ods.org||} {Formilux/0.1.8|3495|||} \
Willy Tarreaud72758d2010-01-12 10:42:19 +010016742 "GET http://trafic.1wt.eu/ HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016743
16744 >>> Aug 9 20:30:46 localhost \
16745 haproxy[2022]: 127.0.0.1:34028 [09/Aug/2004:20:30:46] proxy-out \
16746 proxy-out/cache1 0/0/2/126/+128 301 +223 - - ---- 0/0/0/0/0 0/0 \
16747 {www.sytadin.equipement.gouv.fr||http://trafic.1wt.eu/} \
16748 {Apache|230|||http://www.sytadin.} \
Willy Tarreaud72758d2010-01-12 10:42:19 +010016749 "GET http://www.sytadin.equipement.gouv.fr/ HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016750
16751
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200167528.9. Examples of logs
16753---------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016754
16755These are real-world examples of logs accompanied with an explanation. Some of
16756them have been made up by hand. The syslog part has been removed for better
16757reading. Their sole purpose is to explain how to decipher them.
16758
16759 >>> haproxy[674]: 127.0.0.1:33318 [15/Oct/2003:08:31:57.130] px-http \
16760 px-http/srv1 6559/0/7/147/6723 200 243 - - ---- 5/3/3/1/0 0/0 \
16761 "HEAD / HTTP/1.0"
16762
16763 => long request (6.5s) entered by hand through 'telnet'. The server replied
16764 in 147 ms, and the session ended normally ('----')
16765
16766 >>> haproxy[674]: 127.0.0.1:33319 [15/Oct/2003:08:31:57.149] px-http \
16767 px-http/srv1 6559/1230/7/147/6870 200 243 - - ---- 324/239/239/99/0 \
16768 0/9 "HEAD / HTTP/1.0"
16769
16770 => Idem, but the request was queued in the global queue behind 9 other
16771 requests, and waited there for 1230 ms.
16772
16773 >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.654] px-http \
16774 px-http/srv1 9/0/7/14/+30 200 +243 - - ---- 3/3/3/1/0 0/0 \
16775 "GET /image.iso HTTP/1.0"
16776
16777 => request for a long data transfer. The "logasap" option was specified, so
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010016778 the log was produced just before transferring data. The server replied in
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016779 14 ms, 243 bytes of headers were sent to the client, and total time from
16780 accept to first data byte is 30 ms.
16781
16782 >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.925] px-http \
16783 px-http/srv1 9/0/7/14/30 502 243 - - PH-- 3/2/2/0/0 0/0 \
16784 "GET /cgi-bin/bug.cgi? HTTP/1.0"
16785
16786 => the proxy blocked a server response either because of an "rspdeny" or
16787 "rspideny" filter, or because the response was improperly formatted and
Willy Tarreau3c92c5f2011-08-28 09:45:47 +020016788 not HTTP-compliant, or because it blocked sensitive information which
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016789 risked being cached. In this case, the response is replaced with a "502
16790 bad gateway". The flags ("PH--") tell us that it was haproxy who decided
16791 to return the 502 and not the server.
16792
16793 >>> haproxy[18113]: 127.0.0.1:34548 [15/Oct/2003:15:18:55.798] px-http \
Willy Tarreaud72758d2010-01-12 10:42:19 +010016794 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 +010016795
16796 => the client never completed its request and aborted itself ("C---") after
16797 8.5s, while the proxy was waiting for the request headers ("-R--").
16798 Nothing was sent to any server.
16799
16800 >>> haproxy[18113]: 127.0.0.1:34549 [15/Oct/2003:15:19:06.103] px-http \
16801 px-http/<NOSRV> -1/-1/-1/-1/50001 408 0 - - cR-- 2/2/2/0/0 0/0 ""
16802
16803 => The client never completed its request, which was aborted by the
16804 time-out ("c---") after 50s, while the proxy was waiting for the request
16805 headers ("-R--"). Nothing was sent to any server, but the proxy could
16806 send a 408 return code to the client.
16807
16808 >>> haproxy[18989]: 127.0.0.1:34550 [15/Oct/2003:15:24:28.312] px-tcp \
16809 px-tcp/srv1 0/0/5007 0 cD 0/0/0/0/0 0/0
16810
16811 => This log was produced with "option tcplog". The client timed out after
16812 5 seconds ("c----").
16813
16814 >>> haproxy[18989]: 10.0.0.1:34552 [15/Oct/2003:15:26:31.462] px-http \
16815 px-http/srv1 3183/-1/-1/-1/11215 503 0 - - SC-- 205/202/202/115/3 \
Willy Tarreaud72758d2010-01-12 10:42:19 +010016816 0/0 "HEAD / HTTP/1.0"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016817
16818 => The request took 3s to complete (probably a network problem), and the
Willy Tarreauc57f0e22009-05-10 13:12:33 +020016819 connection to the server failed ('SC--') after 4 attempts of 2 seconds
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016820 (config says 'retries 3'), and no redispatch (otherwise we would have
16821 seen "/+3"). Status code 503 was returned to the client. There were 115
16822 connections on this server, 202 connections on this proxy, and 205 on
16823 the global process. It is possible that the server refused the
16824 connection because of too many already established.
Willy Tarreau844e3c52008-01-11 16:28:18 +010016825
Willy Tarreau52b2d222011-09-07 23:48:48 +020016826
Christopher Fauletc3fe5332016-04-07 15:30:10 +0200168279. Supported filters
16828--------------------
16829
16830Here are listed officially supported filters with the list of parameters they
16831accept. Depending on compile options, some of these filters might be
16832unavailable. The list of available filters is reported in haproxy -vv.
16833
16834See also : "filter"
16835
168369.1. Trace
16837----------
16838
Christopher Faulet31bfe1f2016-12-09 17:42:38 +010016839filter trace [name <name>] [random-parsing] [random-forwarding] [hexdump]
Christopher Fauletc3fe5332016-04-07 15:30:10 +020016840
16841 Arguments:
16842 <name> is an arbitrary name that will be reported in
16843 messages. If no name is provided, "TRACE" is used.
16844
16845 <random-parsing> enables the random parsing of data exchanged between
16846 the client and the server. By default, this filter
16847 parses all available data. With this parameter, it
16848 only parses a random amount of the available data.
16849
16850 <random-forwarding> enables the random forwading of parsed data. By
16851 default, this filter forwards all previously parsed
16852 data. With this parameter, it only forwards a random
16853 amount of the parsed data.
16854
Christopher Faulet31bfe1f2016-12-09 17:42:38 +010016855 <hexump> dumps all forwarded data to the server and the client.
16856
Christopher Fauletc3fe5332016-04-07 15:30:10 +020016857This filter can be used as a base to develop new filters. It defines all
16858callbacks and print a message on the standard error stream (stderr) with useful
16859information for all of them. It may be useful to debug the activity of other
16860filters or, quite simply, HAProxy's activity.
16861
16862Using <random-parsing> and/or <random-forwarding> parameters is a good way to
16863tests the behavior of a filter that parses data exchanged between a client and
16864a server by adding some latencies in the processing.
16865
16866
168679.2. HTTP compression
16868---------------------
16869
16870filter compression
16871
16872The HTTP compression has been moved in a filter in HAProxy 1.7. "compression"
16873keyword must still be used to enable and configure the HTTP compression. And
16874when no other filter is used, it is enough. But it is mandatory to explicitly
16875use a filter line to enable the HTTP compression when two or more filters are
16876used for the same listener/frontend/backend. This is important to know the
16877filters evaluation order.
16878
16879See also : "compression"
16880
16881
Christopher Fauletf7e4e7e2016-10-27 22:29:49 +0200168829.3. Stream Processing Offload Engine (SPOE)
16883--------------------------------------------
16884
16885filter spoe [engine <name>] config <file>
16886
16887 Arguments :
16888
16889 <name> is the engine name that will be used to find the right scope in
16890 the configuration file. If not provided, all the file will be
16891 parsed.
16892
16893 <file> is the path of the engine configuration file. This file can
16894 contain configuration of several engines. In this case, each
16895 part must be placed in its own scope.
16896
16897The Stream Processing Offload Engine (SPOE) is a filter communicating with
16898external components. It allows the offload of some specifics processing on the
16899streams in tierce applications. These external components and information
16900exchanged with them are configured in dedicated files, for the main part. It
16901also requires dedicated backends, defined in HAProxy configuration.
16902
16903SPOE communicates with external components using an in-house binary protocol,
16904the Stream Processing Offload Protocol (SPOP).
16905
Tim Düsterhus4896c442016-11-29 02:15:19 +010016906For all information about the SPOE configuration and the SPOP specification, see
Christopher Fauletf7e4e7e2016-10-27 22:29:49 +020016907"doc/SPOE.txt".
16908
16909Important note:
16910 The SPOE filter is highly experimental for now and was not heavily
16911 tested. It is really not production ready. So use it carefully.
16912
Willy Tarreau0ba27502007-12-24 16:55:16 +010016913/*
16914 * Local variables:
16915 * fill-column: 79
16916 * End:
16917 */