blob: bb255be7e58e72d9e568388ab5f59e83b29d1c9f [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
Willy Tarreaufc6c0322012-11-16 16:12:27 +0100660cpu-map <"all"|"odd"|"even"|process_num> <cpu-set>...
661 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
666 are ignored. It is possible to specify all processes at once using "all",
667 only odd numbers using "odd" or even numbers using "even", just like with the
668 "bind-process" directive. The second and forthcoming arguments are CPU sets.
669 Each CPU set is either a unique number between 0 and 31 or 63 or a range with
670 two such numbers delimited by a dash ('-'). Multiple CPU numbers or ranges
671 may be specified, and the processes will be allowed to bind to all of them.
672 Obviously, multiple "cpu-map" directives may be specified. Each "cpu-map"
673 directive will replace the previous ones when they overlap.
Willy Tarreaufc6c0322012-11-16 16:12:27 +0100674
Emeric Brunc8e8d122012-10-02 18:42:10 +0200675crt-base <dir>
676 Assigns a default directory to fetch SSL certificates from when a relative
677 path is used with "crtfile" directives. Absolute locations specified after
678 "crtfile" prevail and ignore "crt-base".
679
Willy Tarreau6a06a402007-07-15 20:15:28 +0200680daemon
681 Makes the process fork into background. This is the recommended mode of
682 operation. It is equivalent to the command line "-D" argument. It can be
683 disabled by the command line "-db" argument.
684
David Carlier8167f302015-06-01 13:50:06 +0200685deviceatlas-json-file <path>
686 Sets the path of the DeviceAtlas JSON data file to be loaded by the API.
687 The path must be a valid JSON data file and accessible by Haproxy process.
688
689deviceatlas-log-level <value>
690 Sets the level of informations returned by the API. This directive is
691 optional and set to 0 by default if not set.
692
693deviceatlas-separator <char>
694 Sets the character separator for the API properties results. This directive
695 is optional and set to | by default if not set.
696
Cyril Bonté0306c4a2015-10-26 22:37:38 +0100697deviceatlas-properties-cookie <name>
Cyril Bonté307ee1e2015-09-28 23:16:06 +0200698 Sets the client cookie's name used for the detection if the DeviceAtlas
699 Client-side component was used during the request. This directive is optional
700 and set to DAPROPS by default if not set.
David Carlier29b3ca32015-09-25 14:09:21 +0100701
Simon Horman98637e52014-06-20 12:30:16 +0900702external-check
703 Allows the use of an external agent to perform health checks.
704 This is disabled by default as a security precaution.
705 See "option external-check".
706
Willy Tarreau6a06a402007-07-15 20:15:28 +0200707gid <number>
708 Changes the process' group ID to <number>. It is recommended that the group
709 ID is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
710 be started with a user belonging to this group, or with superuser privileges.
Michael Schererab012dd2013-01-12 18:35:19 +0100711 Note that if haproxy is started from a user having supplementary groups, it
712 will only be able to drop these groups if started with superuser privileges.
Willy Tarreau6a06a402007-07-15 20:15:28 +0200713 See also "group" and "uid".
Willy Tarreaud72758d2010-01-12 10:42:19 +0100714
Cyril Bonté203ec5a2017-03-23 22:44:13 +0100715hard-stop-after <time>
716 Defines the maximum time allowed to perform a clean soft-stop.
717
718 Arguments :
719 <time> is the maximum time (by default in milliseconds) for which the
720 instance will remain alive when a soft-stop is received via the
721 SIGUSR1 signal.
722
723 This may be used to ensure that the instance will quit even if connections
724 remain opened during a soft-stop (for example with long timeouts for a proxy
725 in tcp mode). It applies both in TCP and HTTP mode.
726
727 Example:
728 global
729 hard-stop-after 30s
730
Willy Tarreau6a06a402007-07-15 20:15:28 +0200731group <group name>
732 Similar to "gid" but uses the GID of group name <group name> from /etc/group.
733 See also "gid" and "user".
Willy Tarreaud72758d2010-01-12 10:42:19 +0100734
Dragan Dosen7ad31542015-09-28 17:16:47 +0200735log <address> [len <length>] [format <format>] <facility> [max level [min level]]
Willy Tarreau6a06a402007-07-15 20:15:28 +0200736 Adds a global syslog server. Up to two global servers can be defined. They
737 will receive logs for startups and exits, as well as all logs from proxies
Robert Tsai81ae1952007-12-05 10:47:29 +0100738 configured with "log global".
739
740 <address> can be one of:
741
Willy Tarreau2769aa02007-12-27 18:26:09 +0100742 - An IPv4 address optionally followed by a colon and a UDP port. If
Robert Tsai81ae1952007-12-05 10:47:29 +0100743 no port is specified, 514 is used by default (the standard syslog
744 port).
745
David du Colombier24bb5f52011-03-17 10:40:23 +0100746 - An IPv6 address followed by a colon and optionally a UDP port. If
747 no port is specified, 514 is used by default (the standard syslog
748 port).
749
Robert Tsai81ae1952007-12-05 10:47:29 +0100750 - A filesystem path to a UNIX domain socket, keeping in mind
751 considerations for chroot (be sure the path is accessible inside
752 the chroot) and uid/gid (be sure the path is appropriately
753 writeable).
754
William Lallemandb2f07452015-05-12 14:27:13 +0200755 You may want to reference some environment variables in the address
756 parameter, see section 2.3 about environment variables.
Willy Tarreaudad36a32013-03-11 01:20:04 +0100757
Willy Tarreau18324f52014-06-27 18:10:07 +0200758 <length> is an optional maximum line length. Log lines larger than this value
759 will be truncated before being sent. The reason is that syslog
760 servers act differently on log line length. All servers support the
761 default value of 1024, but some servers simply drop larger lines
762 while others do log them. If a server supports long lines, it may
763 make sense to set this value here in order to avoid truncating long
764 lines. Similarly, if a server drops long lines, it is preferable to
765 truncate them before sending them. Accepted values are 80 to 65535
766 inclusive. The default value of 1024 is generally fine for all
767 standard usages. Some specific cases of long captures or
Stéphane Cottin23e9e932017-05-18 08:58:41 +0200768 JSON-formated logs may require larger values. You may also need to
769 increase "tune.http.logurilen" if your request uris are truncated.
Willy Tarreau18324f52014-06-27 18:10:07 +0200770
Dragan Dosen7ad31542015-09-28 17:16:47 +0200771 <format> is the log format used when generating syslog messages. It may be
772 one of the following :
773
774 rfc3164 The RFC3164 syslog message format. This is the default.
775 (https://tools.ietf.org/html/rfc3164)
776
777 rfc5424 The RFC5424 syslog message format.
778 (https://tools.ietf.org/html/rfc5424)
779
Robert Tsai81ae1952007-12-05 10:47:29 +0100780 <facility> must be one of the 24 standard syslog facilities :
Willy Tarreau6a06a402007-07-15 20:15:28 +0200781
782 kern user mail daemon auth syslog lpr news
783 uucp cron auth2 ftp ntp audit alert cron2
784 local0 local1 local2 local3 local4 local5 local6 local7
785
786 An optional level can be specified to filter outgoing messages. By default,
Willy Tarreauf7edefa2009-05-10 17:20:05 +0200787 all messages are sent. If a maximum level is specified, only messages with a
788 severity at least as important as this level will be sent. An optional minimum
789 level can be specified. If it is set, logs emitted with a more severe level
790 than this one will be capped to this level. This is used to avoid sending
791 "emerg" messages on all terminals on some default syslog configurations.
792 Eight levels are known :
Willy Tarreau6a06a402007-07-15 20:15:28 +0200793
Cyril Bontédc4d9032012-04-08 21:57:39 +0200794 emerg alert crit err warning notice info debug
Willy Tarreau6a06a402007-07-15 20:15:28 +0200795
Joe Williamsdf5b38f2010-12-29 17:05:48 +0100796log-send-hostname [<string>]
797 Sets the hostname field in the syslog header. If optional "string" parameter
798 is set the header is set to the string contents, otherwise uses the hostname
799 of the system. Generally used if one is not relaying logs through an
800 intermediate syslog server or for simply customizing the hostname printed in
801 the logs.
802
Kevinm48936af2010-12-22 16:08:21 +0000803log-tag <string>
804 Sets the tag field in the syslog header to this string. It defaults to the
805 program name as launched from the command line, which usually is "haproxy".
806 Sometimes it can be useful to differentiate between multiple processes
Willy Tarreau094af4e2015-01-07 15:03:42 +0100807 running on the same host. See also the per-proxy "log-tag" directive.
Kevinm48936af2010-12-22 16:08:21 +0000808
Thierry FOURNIER90da1912015-03-05 11:17:06 +0100809lua-load <file>
810 This global directive loads and executes a Lua file. This directive can be
811 used multiple times.
812
William Lallemande202b1e2017-06-01 17:38:56 +0200813master-worker [exit-on-failure]
814 Master-worker mode. It is equivalent to the command line "-W" argument.
815 This mode will launch a "master" which will monitor the "workers". Using
816 this mode, you can reload HAProxy directly by sending a SIGUSR2 signal to
817 the master. The master-worker mode is compatible either with the foreground
818 or daemon mode. It is recommended to use this mode with multiprocess and
819 systemd.
820 The "exit-on-failure" option allows the master to kill every workers and
821 exit when one of the current workers died. It is convenient to combine this
822 option with Restart=on-failure in a systemd unit file in order to relaunch
823 the whole process.
824
825 See alors "-W" in the management guide.
826
Willy Tarreau6a06a402007-07-15 20:15:28 +0200827nbproc <number>
828 Creates <number> processes when going daemon. This requires the "daemon"
829 mode. By default, only one process is created, which is the recommended mode
830 of operation. For systems limited to small sets of file descriptors per
831 process, it may be needed to fork multiple daemons. USING MULTIPLE PROCESSES
832 IS HARDER TO DEBUG AND IS REALLY DISCOURAGED. See also "daemon".
833
Christopher Fauletbe0faa22017-08-29 15:37:10 +0200834nbthread <number>
835 This setting is only available when support for threads was built in. It
836 creates <number> threads for each created processes. It means if HAProxy is
837 started in foreground, it only creates <number> threads for the first
838 process. FOR NOW, THREADS SUPPORT IN HAPROXY IS HIGHLY EXPERIMENTAL AND IT
839 MUST BE ENABLED WITH CAUTION AND AT YOUR OWN RISK. See also "nbproc".
840
Willy Tarreau6a06a402007-07-15 20:15:28 +0200841pidfile <pidfile>
842 Writes pids of all daemons into file <pidfile>. This option is equivalent to
843 the "-p" command line argument. The file must be accessible to the user
844 starting the process. See also "daemon".
845
Willy Tarreau1d549722016-02-16 12:41:57 +0100846presetenv <name> <value>
847 Sets environment variable <name> to value <value>. If the variable exists, it
848 is NOT overwritten. The changes immediately take effect so that the next line
849 in the configuration file sees the new value. See also "setenv", "resetenv",
850 and "unsetenv".
851
852resetenv [<name> ...]
853 Removes all environment variables except the ones specified in argument. It
854 allows to use a clean controlled environment before setting new values with
855 setenv or unsetenv. Please note that some internal functions may make use of
856 some environment variables, such as time manipulation functions, but also
857 OpenSSL or even external checks. This must be used with extreme care and only
858 after complete validation. The changes immediately take effect so that the
859 next line in the configuration file sees the new environment. See also
860 "setenv", "presetenv", and "unsetenv".
861
Willy Tarreaua9db57e2013-01-18 11:29:29 +0100862stats bind-process [ all | odd | even | <number 1-64>[-<number 1-64>] ] ...
Willy Tarreau35b7b162012-10-22 23:17:18 +0200863 Limits the stats socket to a certain set of processes numbers. By default the
864 stats socket is bound to all processes, causing a warning to be emitted when
865 nbproc is greater than 1 because there is no way to select the target process
866 when connecting. However, by using this setting, it becomes possible to pin
867 the stats socket to a specific set of processes, typically the first one. The
868 warning will automatically be disabled when this setting is used, whatever
Willy Tarreaua9db57e2013-01-18 11:29:29 +0100869 the number of processes used. The maximum process ID depends on the machine's
Willy Tarreauae302532014-05-07 19:22:24 +0200870 word size (32 or 64). A better option consists in using the "process" setting
871 of the "stats socket" line to force the process on each line.
Willy Tarreau35b7b162012-10-22 23:17:18 +0200872
Baptiste Assmann5626f482015-08-23 10:00:10 +0200873server-state-base <directory>
874 Specifies the directory prefix to be prepended in front of all servers state
Baptiste Assmann01c6cc32015-08-23 11:45:29 +0200875 file names which do not start with a '/'. See also "server-state-file",
876 "load-server-state-from-file" and "server-state-file-name".
Baptiste Assmannef1f0fc2015-08-23 10:06:39 +0200877
878server-state-file <file>
879 Specifies the path to the file containing state of servers. If the path starts
880 with a slash ('/'), it is considered absolute, otherwise it is considered
881 relative to the directory specified using "server-state-base" (if set) or to
882 the current directory. Before reloading HAProxy, it is possible to save the
883 servers' current state using the stats command "show servers state". The
884 output of this command must be written in the file pointed by <file>. When
885 starting up, before handling traffic, HAProxy will read, load and apply state
886 for each server found in the file and available in its current running
Baptiste Assmann01c6cc32015-08-23 11:45:29 +0200887 configuration. See also "server-state-base" and "show servers state",
888 "load-server-state-from-file" and "server-state-file-name"
Baptiste Assmann5626f482015-08-23 10:00:10 +0200889
Willy Tarreau1d549722016-02-16 12:41:57 +0100890setenv <name> <value>
891 Sets environment variable <name> to value <value>. If the variable exists, it
892 is overwritten. The changes immediately take effect so that the next line in
893 the configuration file sees the new value. See also "presetenv", "resetenv",
894 and "unsetenv".
895
Willy Tarreau610f04b2014-02-13 11:36:41 +0100896ssl-default-bind-ciphers <ciphers>
897 This setting is only available when support for OpenSSL was built in. It sets
898 the default string describing the list of cipher algorithms ("cipher suite")
Jarno Huuskonen0e82b922014-04-12 18:22:19 +0300899 that are negotiated during the SSL/TLS handshake for all "bind" lines which
Willy Tarreau610f04b2014-02-13 11:36:41 +0100900 do not explicitly define theirs. The format of the string is defined in
901 "man 1 ciphers" from OpenSSL man pages, and can be for instance a string such
902 as "AES:ALL:!aNULL:!eNULL:+RC4:@STRENGTH" (without quotes). Please check the
903 "bind" keyword for more information.
904
Emeric Brun2c86cbf2014-10-30 15:56:50 +0100905ssl-default-bind-options [<option>]...
906 This setting is only available when support for OpenSSL was built in. It sets
907 default ssl-options to force on all "bind" lines. Please check the "bind"
908 keyword to see available options.
909
910 Example:
911 global
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +0200912 ssl-default-bind-options ssl-min-ver TLSv1.0 no-tls-tickets
Emeric Brun2c86cbf2014-10-30 15:56:50 +0100913
Willy Tarreau610f04b2014-02-13 11:36:41 +0100914ssl-default-server-ciphers <ciphers>
915 This setting is only available when support for OpenSSL was built in. It
916 sets the default string describing the list of cipher algorithms that are
Jarno Huuskonen0e82b922014-04-12 18:22:19 +0300917 negotiated during the SSL/TLS handshake with the server, for all "server"
Willy Tarreau610f04b2014-02-13 11:36:41 +0100918 lines which do not explicitly define theirs. The format of the string is
919 defined in "man 1 ciphers". Please check the "server" keyword for more
920 information.
921
Emeric Brun2c86cbf2014-10-30 15:56:50 +0100922ssl-default-server-options [<option>]...
923 This setting is only available when support for OpenSSL was built in. It sets
924 default ssl-options to force on all "server" lines. Please check the "server"
925 keyword to see available options.
926
Remi Gacogne47783ef2015-05-29 15:53:22 +0200927ssl-dh-param-file <file>
928 This setting is only available when support for OpenSSL was built in. It sets
929 the default DH parameters that are used during the SSL/TLS handshake when
930 ephemeral Diffie-Hellman (DHE) key exchange is used, for all "bind" lines
931 which do not explicitely define theirs. It will be overridden by custom DH
932 parameters found in a bind certificate file if any. If custom DH parameters
Cyril Bonté307ee1e2015-09-28 23:16:06 +0200933 are not specified either by using ssl-dh-param-file or by setting them
934 directly in the certificate file, pre-generated DH parameters of the size
935 specified by tune.ssl.default-dh-param will be used. Custom parameters are
936 known to be more secure and therefore their use is recommended.
Remi Gacogne47783ef2015-05-29 15:53:22 +0200937 Custom DH parameters may be generated by using the OpenSSL command
938 "openssl dhparam <size>", where size should be at least 2048, as 1024-bit DH
939 parameters should not be considered secure anymore.
940
Emeric Brun850efd52014-01-29 12:24:34 +0100941ssl-server-verify [none|required]
942 The default behavior for SSL verify on servers side. If specified to 'none',
943 servers certificates are not verified. The default is 'required' except if
944 forced using cmdline option '-dV'.
945
Christopher Faulet62519022017-10-16 15:49:32 +0200946
947thread-map <"all"|"odd"|"even"|process_num> <"all"|"odd"|"even"|thread_num> <cpu-set>...
948 This setting is only available when support for threads was built in. It
949 binds a thread to a specific CPU set. The process must be specified to allow
950 different mapping for different processes. For details about the arguments,
951 see "cpu-map" directive. A thread will be bound on the intersection of its
952 mapping and the one of the process on which it is attached. If the
953 intersection is null, no specific bind will be set for the thread.
954
Willy Tarreauabb175f2012-09-24 12:43:26 +0200955stats socket [<address:port>|<path>] [param*]
956 Binds a UNIX socket to <path> or a TCPv4/v6 address to <address:port>.
957 Connections to this socket will return various statistics outputs and even
958 allow some commands to be issued to change some runtime settings. Please
Willy Tarreau1af20c72017-06-23 16:01:14 +0200959 consult section 9.3 "Unix Socket commands" of Management Guide for more
Kevin Decherf949c7202015-10-13 23:26:44 +0200960 details.
Willy Tarreau6162db22009-10-10 17:13:00 +0200961
Willy Tarreauabb175f2012-09-24 12:43:26 +0200962 All parameters supported by "bind" lines are supported, for instance to
963 restrict access to some users or their access rights. Please consult
964 section 5.1 for more information.
Willy Tarreaufbee7132007-10-18 13:53:22 +0200965
966stats timeout <timeout, in milliseconds>
967 The default timeout on the stats socket is set to 10 seconds. It is possible
968 to change this value with "stats timeout". The value must be passed in
Willy Tarreaubefdff12007-12-02 22:27:38 +0100969 milliseconds, or be suffixed by a time unit among { us, ms, s, m, h, d }.
Willy Tarreaufbee7132007-10-18 13:53:22 +0200970
971stats maxconn <connections>
972 By default, the stats socket is limited to 10 concurrent connections. It is
973 possible to change this value with "stats maxconn".
974
Willy Tarreau6a06a402007-07-15 20:15:28 +0200975uid <number>
976 Changes the process' user ID to <number>. It is recommended that the user ID
977 is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
978 be started with superuser privileges in order to be able to switch to another
979 one. See also "gid" and "user".
980
981ulimit-n <number>
982 Sets the maximum number of per-process file-descriptors to <number>. By
983 default, it is automatically computed, so it is recommended not to use this
984 option.
985
Willy Tarreauceb24bc2010-11-09 12:46:41 +0100986unix-bind [ prefix <prefix> ] [ mode <mode> ] [ user <user> ] [ uid <uid> ]
987 [ group <group> ] [ gid <gid> ]
988
989 Fixes common settings to UNIX listening sockets declared in "bind" statements.
990 This is mainly used to simplify declaration of those UNIX sockets and reduce
991 the risk of errors, since those settings are most commonly required but are
992 also process-specific. The <prefix> setting can be used to force all socket
993 path to be relative to that directory. This might be needed to access another
994 component's chroot. Note that those paths are resolved before haproxy chroots
995 itself, so they are absolute. The <mode>, <user>, <uid>, <group> and <gid>
996 all have the same meaning as their homonyms used by the "bind" statement. If
997 both are specified, the "bind" statement has priority, meaning that the
998 "unix-bind" settings may be seen as process-wide default settings.
999
Willy Tarreau1d549722016-02-16 12:41:57 +01001000unsetenv [<name> ...]
1001 Removes environment variables specified in arguments. This can be useful to
1002 hide some sensitive information that are occasionally inherited from the
1003 user's environment during some operations. Variables which did not exist are
1004 silently ignored so that after the operation, it is certain that none of
1005 these variables remain. The changes immediately take effect so that the next
1006 line in the configuration file will not see these variables. See also
1007 "setenv", "presetenv", and "resetenv".
1008
Willy Tarreau6a06a402007-07-15 20:15:28 +02001009user <user name>
1010 Similar to "uid" but uses the UID of user name <user name> from /etc/passwd.
1011 See also "uid" and "group".
1012
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +02001013node <name>
1014 Only letters, digits, hyphen and underscore are allowed, like in DNS names.
1015
1016 This statement is useful in HA configurations where two or more processes or
1017 servers share the same IP address. By setting a different node-name on all
1018 nodes, it becomes easy to immediately spot what server is handling the
1019 traffic.
1020
1021description <text>
1022 Add a text that describes the instance.
1023
1024 Please note that it is required to escape certain characters (# for example)
1025 and this text is inserted into a html page so you should avoid using
1026 "<" and ">" characters.
1027
Thomas Holmesdb04f192015-05-18 13:21:39 +0100102851degrees-data-file <file path>
1029 The path of the 51Degrees data file to provide device detection services. The
1030 file should be unzipped and accessible by HAProxy with relevavnt permissions.
1031
Dragan Dosenae6d39a2015-06-29 16:43:27 +02001032 Please note that this option is only available when haproxy has been
Thomas Holmesdb04f192015-05-18 13:21:39 +01001033 compiled with USE_51DEGREES.
1034
Ben Shillitof25e8e52016-12-02 14:25:37 +0000103551degrees-property-name-list [<string> ...]
Thomas Holmesdb04f192015-05-18 13:21:39 +01001036 A list of 51Degrees property names to be load from the dataset. A full list
1037 of names is available on the 51Degrees website:
1038 https://51degrees.com/resources/property-dictionary
1039
Dragan Dosenae6d39a2015-06-29 16:43:27 +02001040 Please note that this option is only available when haproxy has been
Thomas Holmesdb04f192015-05-18 13:21:39 +01001041 compiled with USE_51DEGREES.
1042
Dragan Dosen93b38d92015-06-29 16:43:25 +0200104351degrees-property-separator <char>
Thomas Holmesdb04f192015-05-18 13:21:39 +01001044 A char that will be appended to every property value in a response header
1045 containing 51Degrees results. If not set that will be set as ','.
1046
Dragan Dosenae6d39a2015-06-29 16:43:27 +02001047 Please note that this option is only available when haproxy has been
1048 compiled with USE_51DEGREES.
1049
105051degrees-cache-size <number>
1051 Sets the size of the 51Degrees converter cache to <number> entries. This
1052 is an LRU cache which reminds previous device detections and their results.
1053 By default, this cache is disabled.
1054
1055 Please note that this option is only available when haproxy has been
Thomas Holmesdb04f192015-05-18 13:21:39 +01001056 compiled with USE_51DEGREES.
1057
scientiamobiled0027ed2016-11-04 10:55:08 +01001058wurfl-data-file <file path>
1059 The path of the WURFL data file to provide device detection services. The
1060 file should be accessible by HAProxy with relevant permissions.
1061
1062 Please note that this option is only available when haproxy has been compiled
1063 with USE_WURFL=1.
1064
1065wurfl-information-list [<capability>]*
1066 A space-delimited list of WURFL capabilities, virtual capabilities, property
1067 names we plan to use in injected headers. A full list of capability and
1068 virtual capability names is available on the Scientiamobile website :
1069
1070 https://www.scientiamobile.com/wurflCapability
1071
1072 Valid WURFL properties are:
1073 - wurfl_id Contains the device ID of the matched device.
1074
1075 - wurfl_root_id Contains the device root ID of the matched
1076 device.
1077
1078 - wurfl_isdevroot Tells if the matched device is a root device.
1079 Possible values are "TRUE" or "FALSE".
1080
1081 - wurfl_useragent The original useragent coming with this
1082 particular web request.
1083
1084 - wurfl_api_version Contains a string representing the currently
1085 used Libwurfl API version.
1086
1087 - wurfl_engine_target Contains a string representing the currently
1088 set WURFL Engine Target. Possible values are
1089 "HIGH_ACCURACY", "HIGH_PERFORMANCE", "INVALID".
1090
1091 - wurfl_info A string containing information on the parsed
1092 wurfl.xml and its full path.
1093
1094 - wurfl_last_load_time Contains the UNIX timestamp of the last time
1095 WURFL has been loaded successfully.
1096
1097 - wurfl_normalized_useragent The normalized useragent.
1098
1099 - wurfl_useragent_priority The user agent priority used by WURFL.
1100
1101 Please note that this option is only available when haproxy has been compiled
1102 with USE_WURFL=1.
1103
1104wurfl-information-list-separator <char>
1105 A char that will be used to separate values in a response header containing
1106 WURFL results. If not set that a comma (',') will be used by default.
1107
1108 Please note that this option is only available when haproxy has been compiled
1109 with USE_WURFL=1.
1110
1111wurfl-patch-file [<file path>]
1112 A list of WURFL patch file paths. Note that patches are loaded during startup
1113 thus before the chroot.
1114
1115 Please note that this option is only available when haproxy has been compiled
1116 with USE_WURFL=1.
1117
1118wurfl-engine-mode { accuracy | performance }
1119 Sets the WURFL engine target. You can choose between 'accuracy' or
1120 'performance' targets. In performance mode, desktop web browser detection is
1121 done programmatically without referencing the WURFL data. As a result, most
1122 desktop web browsers are returned as generic_web_browser WURFL ID for
1123 performance. If either performance or accuracy are not defined, performance
1124 mode is enabled by default.
1125
1126 Please note that this option is only available when haproxy has been compiled
1127 with USE_WURFL=1.
1128
1129wurfl-cache-size <U>[,<D>]
1130 Sets the WURFL caching strategy. Here <U> is the Useragent cache size, and
1131 <D> is the internal device cache size. There are three possibilities here :
1132 - "0" : no cache is used.
1133 - <U> : the Single LRU cache is used, the size is expressed in elements.
1134 - <U>,<D> : the Double LRU cache is used, both sizes are in elements. This is
1135 the highest performing option.
1136
1137 Please note that this option is only available when haproxy has been compiled
1138 with USE_WURFL=1.
1139
1140wurfl-useragent-priority { plain | sideloaded_browser }
1141 Tells WURFL if it should prioritize use of the plain user agent ('plain')
1142 over the default sideloaded browser user agent ('sideloaded_browser').
1143
1144 Please note that this option is only available when haproxy has been compiled
1145 with USE_WURFL=1.
1146
Willy Tarreau6a06a402007-07-15 20:15:28 +02001147
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011483.2. Performance tuning
Willy Tarreau6a06a402007-07-15 20:15:28 +02001149-----------------------
1150
Willy Tarreau1746eec2014-04-25 10:46:47 +02001151max-spread-checks <delay in milliseconds>
1152 By default, haproxy tries to spread the start of health checks across the
1153 smallest health check interval of all the servers in a farm. The principle is
1154 to avoid hammering services running on the same server. But when using large
1155 check intervals (10 seconds or more), the last servers in the farm take some
1156 time before starting to be tested, which can be a problem. This parameter is
1157 used to enforce an upper bound on delay between the first and the last check,
1158 even if the servers' check intervals are larger. When servers run with
1159 shorter intervals, their intervals will be respected though.
1160
Willy Tarreau6a06a402007-07-15 20:15:28 +02001161maxconn <number>
1162 Sets the maximum per-process number of concurrent connections to <number>. It
1163 is equivalent to the command-line argument "-n". Proxies will stop accepting
1164 connections when this limit is reached. The "ulimit-n" parameter is
Willy Tarreau8274e102014-06-19 15:31:25 +02001165 automatically adjusted according to this value. See also "ulimit-n". Note:
1166 the "select" poller cannot reliably use more than 1024 file descriptors on
1167 some platforms. If your platform only supports select and reports "select
1168 FAILED" on startup, you need to reduce maxconn until it works (slightly
Willy Tarreaud0256482015-01-15 21:45:22 +01001169 below 500 in general). If this value is not set, it will default to the value
1170 set in DEFAULT_MAXCONN at build time (reported in haproxy -vv) if no memory
1171 limit is enforced, or will be computed based on the memory limit, the buffer
1172 size, memory allocated to compression, SSL cache size, and use or not of SSL
1173 and the associated maxsslconn (which can also be automatic).
Willy Tarreau6a06a402007-07-15 20:15:28 +02001174
Willy Tarreau81c25d02011-09-07 15:17:21 +02001175maxconnrate <number>
1176 Sets the maximum per-process number of connections per second to <number>.
1177 Proxies will stop accepting connections when this limit is reached. It can be
1178 used to limit the global capacity regardless of each frontend capacity. It is
1179 important to note that this can only be used as a service protection measure,
1180 as there will not necessarily be a fair share between frontends when the
1181 limit is reached, so it's a good idea to also limit each frontend to some
1182 value close to its expected share. Also, lowering tune.maxaccept can improve
1183 fairness.
1184
William Lallemandd85f9172012-11-09 17:05:39 +01001185maxcomprate <number>
1186 Sets the maximum per-process input compression rate to <number> kilobytes
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001187 per second. For each session, if the maximum is reached, the compression
William Lallemandd85f9172012-11-09 17:05:39 +01001188 level will be decreased during the session. If the maximum is reached at the
1189 beginning of a session, the session will not compress at all. If the maximum
1190 is not reached, the compression level will be increased up to
1191 tune.comp.maxlevel. A value of zero means there is no limit, this is the
1192 default value.
1193
William Lallemand072a2bf2012-11-20 17:01:01 +01001194maxcompcpuusage <number>
1195 Sets the maximum CPU usage HAProxy can reach before stopping the compression
1196 for new requests or decreasing the compression level of current requests.
1197 It works like 'maxcomprate' but measures CPU usage instead of incoming data
1198 bandwidth. The value is expressed in percent of the CPU used by haproxy. In
1199 case of multiple processes (nbproc > 1), each process manages its individual
1200 usage. A value of 100 disable the limit. The default value is 100. Setting
1201 a lower value will prevent the compression work from slowing the whole
1202 process down and from introducing high latencies.
1203
Willy Tarreauff4f82d2009-02-06 11:28:13 +01001204maxpipes <number>
1205 Sets the maximum per-process number of pipes to <number>. Currently, pipes
1206 are only used by kernel-based tcp splicing. Since a pipe contains two file
1207 descriptors, the "ulimit-n" value will be increased accordingly. The default
1208 value is maxconn/4, which seems to be more than enough for most heavy usages.
1209 The splice code dynamically allocates and releases pipes, and can fall back
1210 to standard copy, so setting this value too low may only impact performance.
1211
Willy Tarreau93e7c002013-10-07 18:51:07 +02001212maxsessrate <number>
1213 Sets the maximum per-process number of sessions per second to <number>.
1214 Proxies will stop accepting connections when this limit is reached. It can be
1215 used to limit the global capacity regardless of each frontend capacity. It is
1216 important to note that this can only be used as a service protection measure,
1217 as there will not necessarily be a fair share between frontends when the
1218 limit is reached, so it's a good idea to also limit each frontend to some
1219 value close to its expected share. Also, lowering tune.maxaccept can improve
1220 fairness.
1221
Willy Tarreau403edff2012-09-06 11:58:37 +02001222maxsslconn <number>
1223 Sets the maximum per-process number of concurrent SSL connections to
1224 <number>. By default there is no SSL-specific limit, which means that the
1225 global maxconn setting will apply to all connections. Setting this limit
1226 avoids having openssl use too much memory and crash when malloc returns NULL
1227 (since it unfortunately does not reliably check for such conditions). Note
1228 that the limit applies both to incoming and outgoing connections, so one
1229 connection which is deciphered then ciphered accounts for 2 SSL connections.
Willy Tarreaud0256482015-01-15 21:45:22 +01001230 If this value is not set, but a memory limit is enforced, this value will be
1231 automatically computed based on the memory limit, maxconn, the buffer size,
1232 memory allocated to compression, SSL cache size, and use of SSL in either
1233 frontends, backends or both. If neither maxconn nor maxsslconn are specified
1234 when there is a memory limit, haproxy will automatically adjust these values
1235 so that 100% of the connections can be made over SSL with no risk, and will
1236 consider the sides where it is enabled (frontend, backend, both).
Willy Tarreau403edff2012-09-06 11:58:37 +02001237
Willy Tarreaue43d5322013-10-07 20:01:52 +02001238maxsslrate <number>
1239 Sets the maximum per-process number of SSL sessions per second to <number>.
1240 SSL listeners will stop accepting connections when this limit is reached. It
1241 can be used to limit the global SSL CPU usage regardless of each frontend
1242 capacity. It is important to note that this can only be used as a service
1243 protection measure, as there will not necessarily be a fair share between
1244 frontends when the limit is reached, so it's a good idea to also limit each
1245 frontend to some value close to its expected share. It is also important to
1246 note that the sessions are accounted before they enter the SSL stack and not
1247 after, which also protects the stack against bad handshakes. Also, lowering
1248 tune.maxaccept can improve fairness.
1249
William Lallemand9d5f5482012-11-07 16:12:57 +01001250maxzlibmem <number>
1251 Sets the maximum amount of RAM in megabytes per process usable by the zlib.
1252 When the maximum amount is reached, future sessions will not compress as long
1253 as RAM is unavailable. When sets to 0, there is no limit.
William Lallemande3a7d992012-11-20 11:25:20 +01001254 The default value is 0. The value is available in bytes on the UNIX socket
1255 with "show info" on the line "MaxZlibMemUsage", the memory used by zlib is
1256 "ZlibMemUsage" in bytes.
1257
Willy Tarreau6a06a402007-07-15 20:15:28 +02001258noepoll
1259 Disables the use of the "epoll" event polling system on Linux. It is
1260 equivalent to the command-line argument "-de". The next polling system
Willy Tarreaue9f49e72012-11-11 17:42:00 +01001261 used will generally be "poll". See also "nopoll".
Willy Tarreau6a06a402007-07-15 20:15:28 +02001262
1263nokqueue
1264 Disables the use of the "kqueue" event polling system on BSD. It is
1265 equivalent to the command-line argument "-dk". The next polling system
1266 used will generally be "poll". See also "nopoll".
1267
1268nopoll
1269 Disables the use of the "poll" event polling system. It is equivalent to the
1270 command-line argument "-dp". The next polling system used will be "select".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001271 It should never be needed to disable "poll" since it's available on all
Willy Tarreaue9f49e72012-11-11 17:42:00 +01001272 platforms supported by HAProxy. See also "nokqueue" and "noepoll".
Willy Tarreau6a06a402007-07-15 20:15:28 +02001273
Willy Tarreauff4f82d2009-02-06 11:28:13 +01001274nosplice
1275 Disables the use of kernel tcp splicing between sockets on Linux. It is
1276 equivalent to the command line argument "-dS". Data will then be copied
1277 using conventional and more portable recv/send calls. Kernel tcp splicing is
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001278 limited to some very recent instances of kernel 2.6. Most versions between
Willy Tarreauff4f82d2009-02-06 11:28:13 +01001279 2.6.25 and 2.6.28 are buggy and will forward corrupted data, so they must not
1280 be used. This option makes it easier to globally disable kernel splicing in
1281 case of doubt. See also "option splice-auto", "option splice-request" and
1282 "option splice-response".
1283
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001284nogetaddrinfo
1285 Disables the use of getaddrinfo(3) for name resolving. It is equivalent to
1286 the command line argument "-dG". Deprecated gethostbyname(3) will be used.
1287
Lukas Tribusa0bcbdc2016-09-12 21:42:20 +00001288noreuseport
1289 Disables the use of SO_REUSEPORT - see socket(7). It is equivalent to the
1290 command line argument "-dR".
1291
Willy Tarreaufe255b72007-10-14 23:09:26 +02001292spread-checks <0..50, in percent>
Simon Hormand60d6912013-11-25 10:46:36 +09001293 Sometimes it is desirable to avoid sending agent and health checks to
1294 servers at exact intervals, for instance when many logical servers are
1295 located on the same physical server. With the help of this parameter, it
1296 becomes possible to add some randomness in the check interval between 0
1297 and +/- 50%. A value between 2 and 5 seems to show good results. The
1298 default value remains at 0.
Willy Tarreaufe255b72007-10-14 23:09:26 +02001299
Grant Zhang872f9c22017-01-21 01:10:18 +00001300ssl-engine <name> [algo <comma-seperated list of algorithms>]
1301 Sets the OpenSSL engine to <name>. List of valid values for <name> may be
1302 obtained using the command "openssl engine". This statement may be used
1303 multiple times, it will simply enable multiple crypto engines. Referencing an
1304 unsupported engine will prevent haproxy from starting. Note that many engines
1305 will lead to lower HTTPS performance than pure software with recent
1306 processors. The optional command "algo" sets the default algorithms an ENGINE
1307 will supply using the OPENSSL function ENGINE_set_default_string(). A value
1308 of "ALL" uses the engine for all cryptographic operations. If no list of
1309 algo is specified then the value of "ALL" is used. A comma-seperated list
1310 of different algorithms may be specified, including: RSA, DSA, DH, EC, RAND,
1311 CIPHERS, DIGESTS, PKEY, PKEY_CRYPTO, PKEY_ASN1. This is the same format that
1312 openssl configuration file uses:
1313 https://www.openssl.org/docs/man1.0.2/apps/config.html
1314
Grant Zhangfa6c7ee2017-01-14 01:42:15 +00001315ssl-mode-async
1316 Adds SSL_MODE_ASYNC mode to the SSL context. This enables asynchronous TLS
Emeric Brun3854e012017-05-17 20:42:48 +02001317 I/O operations if asynchronous capable SSL engines are used. The current
Emeric Brunb5e42a82017-06-06 12:35:14 +00001318 implementation supports a maximum of 32 engines. The Openssl ASYNC API
1319 doesn't support moving read/write buffers and is not compliant with
1320 haproxy's buffer management. So the asynchronous mode is disabled on
1321 read/write operations (it is only enabled during initial and reneg
1322 handshakes).
Grant Zhangfa6c7ee2017-01-14 01:42:15 +00001323
Willy Tarreau33cb0652014-12-23 22:52:37 +01001324tune.buffers.limit <number>
1325 Sets a hard limit on the number of buffers which may be allocated per process.
1326 The default value is zero which means unlimited. The minimum non-zero value
1327 will always be greater than "tune.buffers.reserve" and should ideally always
1328 be about twice as large. Forcing this value can be particularly useful to
1329 limit the amount of memory a process may take, while retaining a sane
1330 behaviour. When this limit is reached, sessions which need a buffer wait for
1331 another one to be released by another session. Since buffers are dynamically
1332 allocated and released, the waiting time is very short and not perceptible
1333 provided that limits remain reasonable. In fact sometimes reducing the limit
1334 may even increase performance by increasing the CPU cache's efficiency. Tests
1335 have shown good results on average HTTP traffic with a limit to 1/10 of the
1336 expected global maxconn setting, which also significantly reduces memory
1337 usage. The memory savings come from the fact that a number of connections
1338 will not allocate 2*tune.bufsize. It is best not to touch this value unless
1339 advised to do so by an haproxy core developer.
1340
Willy Tarreau1058ae72014-12-23 22:40:40 +01001341tune.buffers.reserve <number>
1342 Sets the number of buffers which are pre-allocated and reserved for use only
1343 during memory shortage conditions resulting in failed memory allocations. The
1344 minimum value is 2 and is also the default. There is no reason a user would
1345 want to change this value, it's mostly aimed at haproxy core developers.
1346
Willy Tarreau27a674e2009-08-17 07:23:33 +02001347tune.bufsize <number>
1348 Sets the buffer size to this size (in bytes). Lower values allow more
1349 sessions to coexist in the same amount of RAM, and higher values allow some
1350 applications with very large cookies to work. The default value is 16384 and
1351 can be changed at build time. It is strongly recommended not to change this
1352 from the default value, as very low values will break some services such as
1353 statistics, and values larger than default size will increase memory usage,
1354 possibly causing the system to run out of memory. At least the global maxconn
1355 parameter should be decreased by the same factor as this one is increased.
Dmitry Sivachenkof6f4f7b2012-10-21 18:10:25 +04001356 If HTTP request is larger than (tune.bufsize - tune.maxrewrite), haproxy will
1357 return HTTP 400 (Bad Request) error. Similarly if an HTTP response is larger
1358 than this size, haproxy will return HTTP 502 (Bad Gateway).
Willy Tarreau27a674e2009-08-17 07:23:33 +02001359
Willy Tarreau43961d52010-10-04 20:39:20 +02001360tune.chksize <number>
1361 Sets the check buffer size to this size (in bytes). Higher values may help
1362 find string or regex patterns in very large pages, though doing so may imply
1363 more memory and CPU usage. The default value is 16384 and can be changed at
1364 build time. It is not recommended to change this value, but to use better
1365 checks whenever possible.
1366
William Lallemandf3747832012-11-09 12:33:10 +01001367tune.comp.maxlevel <number>
1368 Sets the maximum compression level. The compression level affects CPU
1369 usage during compression. This value affects CPU usage during compression.
1370 Each session using compression initializes the compression algorithm with
1371 this value. The default value is 1.
1372
Willy Tarreaufe20e5b2017-07-27 11:42:14 +02001373tune.h2.header-table-size <number>
1374 Sets the HTTP/2 dynamic header table size. It defaults to 4096 bytes and
1375 cannot be larger than 65536 bytes. A larger value may help certain clients
1376 send more compact requests, depending on their capabilities. This amount of
1377 memory is consumed for each HTTP/2 connection. It is recommended not to
1378 change it.
1379
Willy Tarreaue6baec02017-07-27 11:45:11 +02001380tune.h2.initial-window-size <number>
1381 Sets the HTTP/2 initial window size, which is the number of bytes the client
1382 can upload before waiting for an acknowledgement from haproxy. This setting
1383 only affects payload contents (ie: the body of POST requests), not headers.
1384 The default value is 65535, which roughly allows up to 5 Mbps of upload
1385 bandwidth per client over a network showing a 100 ms ping time, or 500 Mbps
1386 over a 1-ms local network. It can make sense to increase this value to allow
1387 faster uploads, or to reduce it to increase fairness when dealing with many
1388 clients. It doesn't affect resource usage.
1389
Willy Tarreau5242ef82017-07-27 11:47:28 +02001390tune.h2.max-concurrent-streams <number>
1391 Sets the HTTP/2 maximum number of concurrent streams per connection (ie the
1392 number of outstanding requests on a single connection). The default value is
1393 100. A larger one may slightly improve page load time for complex sites when
1394 visited over high latency networks, but increases the amount of resources a
1395 single client may allocate. A value of zero disables the limit so a single
1396 client may create as many streams as allocatable by haproxy. It is highly
1397 recommended not to change this value.
1398
Willy Tarreau193b8c62012-11-22 00:17:38 +01001399tune.http.cookielen <number>
1400 Sets the maximum length of captured cookies. This is the maximum value that
1401 the "capture cookie xxx len yyy" will be allowed to take, and any upper value
1402 will automatically be truncated to this one. It is important not to set too
1403 high a value because all cookie captures still allocate this size whatever
1404 their configured value (they share a same pool). This value is per request
1405 per response, so the memory allocated is twice this value per connection.
1406 When not specified, the limit is set to 63 characters. It is recommended not
1407 to change this value.
1408
Stéphane Cottin23e9e932017-05-18 08:58:41 +02001409tune.http.logurilen <number>
1410 Sets the maximum length of request uri in logs. This prevent to truncate long
1411 requests uris with valuable query strings in log lines. This is not related
1412 to syslog limits. If you increase this limit, you may also increase the
1413 'log ... len yyyy' parameter. Your syslog deamon may also need specific
1414 configuration directives too.
1415 The default value is 1024.
1416
Willy Tarreauac1932d2011-10-24 19:14:41 +02001417tune.http.maxhdr <number>
1418 Sets the maximum number of headers in a request. When a request comes with a
1419 number of headers greater than this value (including the first line), it is
1420 rejected with a "400 Bad Request" status code. Similarly, too large responses
1421 are blocked with "502 Bad Gateway". The default value is 101, which is enough
1422 for all usages, considering that the widely deployed Apache server uses the
1423 same limit. It can be useful to push this limit further to temporarily allow
Christopher Faulet50174f32017-06-21 16:31:35 +02001424 a buggy application to work by the time it gets fixed. The accepted range is
1425 1..32767. Keep in mind that each new header consumes 32bits of memory for
1426 each session, so don't push this limit too high.
Willy Tarreauac1932d2011-10-24 19:14:41 +02001427
Willy Tarreau7e312732014-02-12 16:35:14 +01001428tune.idletimer <timeout>
1429 Sets the duration after which haproxy will consider that an empty buffer is
1430 probably associated with an idle stream. This is used to optimally adjust
1431 some packet sizes while forwarding large and small data alternatively. The
1432 decision to use splice() or to send large buffers in SSL is modulated by this
1433 parameter. The value is in milliseconds between 0 and 65535. A value of zero
1434 means that haproxy will not try to detect idle streams. The default is 1000,
1435 which seems to correctly detect end user pauses (eg: read a page before
1436 clicking). There should be not reason for changing this value. Please check
1437 tune.ssl.maxrecord below.
1438
Thierry FOURNIER90da1912015-03-05 11:17:06 +01001439tune.lua.forced-yield <number>
1440 This directive forces the Lua engine to execute a yield each <number> of
Tim Düsterhus4896c442016-11-29 02:15:19 +01001441 instructions executed. This permits interrupting a long script and allows the
Thierry FOURNIER90da1912015-03-05 11:17:06 +01001442 HAProxy scheduler to process other tasks like accepting connections or
1443 forwarding traffic. The default value is 10000 instructions. If HAProxy often
1444 executes some Lua code but more reactivity is required, this value can be
1445 lowered. If the Lua code is quite long and its result is absolutely required
1446 to process the data, the <number> can be increased.
1447
Willy Tarreau32f61e22015-03-18 17:54:59 +01001448tune.lua.maxmem
1449 Sets the maximum amount of RAM in megabytes per process usable by Lua. By
1450 default it is zero which means unlimited. It is important to set a limit to
1451 ensure that a bug in a script will not result in the system running out of
1452 memory.
1453
Thierry FOURNIER90da1912015-03-05 11:17:06 +01001454tune.lua.session-timeout <timeout>
1455 This is the execution timeout for the Lua sessions. This is useful for
Thierry FOURNIER7dd784b2015-10-01 14:49:33 +02001456 preventing infinite loops or spending too much time in Lua. This timeout
1457 counts only the pure Lua runtime. If the Lua does a sleep, the sleep is
1458 not taked in account. The default timeout is 4s.
Thierry FOURNIER90da1912015-03-05 11:17:06 +01001459
1460tune.lua.task-timeout <timeout>
1461 Purpose is the same as "tune.lua.session-timeout", but this timeout is
1462 dedicated to the tasks. By default, this timeout isn't set because a task may
1463 remain alive during of the lifetime of HAProxy. For example, a task used to
1464 check servers.
1465
Thierry FOURNIER7dd784b2015-10-01 14:49:33 +02001466tune.lua.service-timeout <timeout>
1467 This is the execution timeout for the Lua services. This is useful for
1468 preventing infinite loops or spending too much time in Lua. This timeout
1469 counts only the pure Lua runtime. If the Lua does a sleep, the sleep is
1470 not taked in account. The default timeout is 4s.
1471
Willy Tarreaua0250ba2008-01-06 11:22:57 +01001472tune.maxaccept <number>
Willy Tarreau16a21472012-11-19 12:39:59 +01001473 Sets the maximum number of consecutive connections a process may accept in a
1474 row before switching to other work. In single process mode, higher numbers
1475 give better performance at high connection rates. However in multi-process
1476 modes, keeping a bit of fairness between processes generally is better to
1477 increase performance. This value applies individually to each listener, so
1478 that the number of processes a listener is bound to is taken into account.
1479 This value defaults to 64. In multi-process mode, it is divided by twice
1480 the number of processes the listener is bound to. Setting this value to -1
1481 completely disables the limitation. It should normally not be needed to tweak
1482 this value.
Willy Tarreaua0250ba2008-01-06 11:22:57 +01001483
1484tune.maxpollevents <number>
1485 Sets the maximum amount of events that can be processed at once in a call to
1486 the polling system. The default value is adapted to the operating system. It
1487 has been noticed that reducing it below 200 tends to slightly decrease
1488 latency at the expense of network bandwidth, and increasing it above 200
1489 tends to trade latency for slightly increased bandwidth.
1490
Willy Tarreau27a674e2009-08-17 07:23:33 +02001491tune.maxrewrite <number>
1492 Sets the reserved buffer space to this size in bytes. The reserved space is
1493 used for header rewriting or appending. The first reads on sockets will never
1494 fill more than bufsize-maxrewrite. Historically it has defaulted to half of
1495 bufsize, though that does not make much sense since there are rarely large
1496 numbers of headers to add. Setting it too high prevents processing of large
1497 requests or responses. Setting it too low prevents addition of new headers
1498 to already large requests or to POST requests. It is generally wise to set it
1499 to about 1024. It is automatically readjusted to half of bufsize if it is
1500 larger than that. This means you don't have to worry about it when changing
1501 bufsize.
1502
Willy Tarreauf3045d22015-04-29 16:24:50 +02001503tune.pattern.cache-size <number>
1504 Sets the size of the pattern lookup cache to <number> entries. This is an LRU
1505 cache which reminds previous lookups and their results. It is used by ACLs
1506 and maps on slow pattern lookups, namely the ones using the "sub", "reg",
1507 "dir", "dom", "end", "bin" match methods as well as the case-insensitive
1508 strings. It applies to pattern expressions which means that it will be able
1509 to memorize the result of a lookup among all the patterns specified on a
1510 configuration line (including all those loaded from files). It automatically
1511 invalidates entries which are updated using HTTP actions or on the CLI. The
1512 default cache size is set to 10000 entries, which limits its footprint to
1513 about 5 MB on 32-bit systems and 8 MB on 64-bit systems. There is a very low
1514 risk of collision in this cache, which is in the order of the size of the
1515 cache divided by 2^64. Typically, at 10000 requests per second with the
1516 default cache size of 10000 entries, there's 1% chance that a brute force
1517 attack could cause a single collision after 60 years, or 0.1% after 6 years.
1518 This is considered much lower than the risk of a memory corruption caused by
1519 aging components. If this is not acceptable, the cache can be disabled by
1520 setting this parameter to 0.
1521
Willy Tarreaubd9a0a72011-10-23 21:14:29 +02001522tune.pipesize <number>
1523 Sets the kernel pipe buffer size to this size (in bytes). By default, pipes
1524 are the default size for the system. But sometimes when using TCP splicing,
1525 it can improve performance to increase pipe sizes, especially if it is
1526 suspected that pipes are not filled and that many calls to splice() are
1527 performed. This has an impact on the kernel's memory footprint, so this must
1528 not be changed if impacts are not understood.
1529
Willy Tarreaue803de22010-01-21 17:43:04 +01001530tune.rcvbuf.client <number>
1531tune.rcvbuf.server <number>
1532 Forces the kernel socket receive buffer size on the client or the server side
1533 to the specified value in bytes. This value applies to all TCP/HTTP frontends
1534 and backends. It should normally never be set, and the default size (0) lets
1535 the kernel autotune this value depending on the amount of available memory.
1536 However it can sometimes help to set it to very low values (eg: 4096) in
1537 order to save kernel memory by preventing it from buffering too large amounts
1538 of received data. Lower values will significantly increase CPU usage though.
1539
Willy Tarreaub22fc302015-12-14 12:04:35 +01001540tune.recv_enough <number>
1541 Haproxy uses some hints to detect that a short read indicates the end of the
1542 socket buffers. One of them is that a read returns more than <recv_enough>
1543 bytes, which defaults to 10136 (7 segments of 1448 each). This default value
1544 may be changed by this setting to better deal with workloads involving lots
1545 of short messages such as telnet or SSH sessions.
1546
Willy Tarreaue803de22010-01-21 17:43:04 +01001547tune.sndbuf.client <number>
1548tune.sndbuf.server <number>
1549 Forces the kernel socket send buffer size on the client or the server side to
1550 the specified value in bytes. This value applies to all TCP/HTTP frontends
1551 and backends. It should normally never be set, and the default size (0) lets
1552 the kernel autotune this value depending on the amount of available memory.
1553 However it can sometimes help to set it to very low values (eg: 4096) in
1554 order to save kernel memory by preventing it from buffering too large amounts
1555 of received data. Lower values will significantly increase CPU usage though.
1556 Another use case is to prevent write timeouts with extremely slow clients due
1557 to the kernel waiting for a large part of the buffer to be read before
1558 notifying haproxy again.
1559
Willy Tarreau6ec58db2012-11-16 16:32:15 +01001560tune.ssl.cachesize <number>
Emeric Brunaf9619d2012-11-28 18:47:52 +01001561 Sets the size of the global SSL session cache, in a number of blocks. A block
1562 is large enough to contain an encoded session without peer certificate.
1563 An encoded session with peer certificate is stored in multiple blocks
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001564 depending on the size of the peer certificate. A block uses approximately
Emeric Brunaf9619d2012-11-28 18:47:52 +01001565 200 bytes of memory. The default value may be forced at build time, otherwise
1566 defaults to 20000. When the cache is full, the most idle entries are purged
1567 and reassigned. Higher values reduce the occurrence of such a purge, hence
1568 the number of CPU-intensive SSL handshakes by ensuring that all users keep
1569 their session as long as possible. All entries are pre-allocated upon startup
Emeric Brun22890a12012-12-28 14:41:32 +01001570 and are shared between all processes if "nbproc" is greater than 1. Setting
1571 this value to 0 disables the SSL session cache.
Willy Tarreau6ec58db2012-11-16 16:32:15 +01001572
Emeric Brun8dc60392014-05-09 13:52:00 +02001573tune.ssl.force-private-cache
1574 This boolean disables SSL session cache sharing between all processes. It
1575 should normally not be used since it will force many renegotiations due to
1576 clients hitting a random process. But it may be required on some operating
1577 systems where none of the SSL cache synchronization method may be used. In
1578 this case, adding a first layer of hash-based load balancing before the SSL
1579 layer might limit the impact of the lack of session sharing.
1580
Emeric Brun4f65bff2012-11-16 15:11:00 +01001581tune.ssl.lifetime <timeout>
1582 Sets how long a cached SSL session may remain valid. This time is expressed
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001583 in seconds and defaults to 300 (5 min). It is important to understand that it
Emeric Brun4f65bff2012-11-16 15:11:00 +01001584 does not guarantee that sessions will last that long, because if the cache is
1585 full, the longest idle sessions will be purged despite their configured
1586 lifetime. The real usefulness of this setting is to prevent sessions from
1587 being used for too long.
1588
Willy Tarreaubfd59462013-02-21 07:46:09 +01001589tune.ssl.maxrecord <number>
1590 Sets the maximum amount of bytes passed to SSL_write() at a time. Default
1591 value 0 means there is no limit. Over SSL/TLS, the client can decipher the
1592 data only once it has received a full record. With large records, it means
1593 that clients might have to download up to 16kB of data before starting to
1594 process them. Limiting the value can improve page load times on browsers
1595 located over high latency or low bandwidth networks. It is suggested to find
1596 optimal values which fit into 1 or 2 TCP segments (generally 1448 bytes over
1597 Ethernet with TCP timestamps enabled, or 1460 when timestamps are disabled),
1598 keeping in mind that SSL/TLS add some overhead. Typical values of 1419 and
1599 2859 gave good results during tests. Use "strace -e trace=write" to find the
Willy Tarreau7e312732014-02-12 16:35:14 +01001600 best value. Haproxy will automatically switch to this setting after an idle
1601 stream has been detected (see tune.idletimer above).
Willy Tarreaubfd59462013-02-21 07:46:09 +01001602
Remi Gacognef46cd6e2014-06-12 14:58:40 +02001603tune.ssl.default-dh-param <number>
1604 Sets the maximum size of the Diffie-Hellman parameters used for generating
1605 the ephemeral/temporary Diffie-Hellman key in case of DHE key exchange. The
1606 final size will try to match the size of the server's RSA (or DSA) key (e.g,
1607 a 2048 bits temporary DH key for a 2048 bits RSA key), but will not exceed
1608 this maximum value. Default value if 1024. Only 1024 or higher values are
1609 allowed. Higher values will increase the CPU load, and values greater than
1610 1024 bits are not supported by Java 7 and earlier clients. This value is not
Remi Gacogne47783ef2015-05-29 15:53:22 +02001611 used if static Diffie-Hellman parameters are supplied either directly
1612 in the certificate file or by using the ssl-dh-param-file parameter.
Remi Gacognef46cd6e2014-06-12 14:58:40 +02001613
Christopher Faulet31af49d2015-06-09 17:29:50 +02001614tune.ssl.ssl-ctx-cache-size <number>
1615 Sets the size of the cache used to store generated certificates to <number>
1616 entries. This is a LRU cache. Because generating a SSL certificate
1617 dynamically is expensive, they are cached. The default cache size is set to
1618 1000 entries.
1619
Thierry FOURNIER5bf77322017-02-25 12:45:22 +01001620tune.ssl.capture-cipherlist-size <number>
1621 Sets the maximum size of the buffer used for capturing client-hello cipher
1622 list. If the value is 0 (default value) the capture is disabled, otherwise
1623 a buffer is allocated for each SSL/TLS connection.
1624
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02001625tune.vars.global-max-size <size>
Christopher Fauletff2613e2016-11-09 11:36:17 +01001626tune.vars.proc-max-size <size>
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02001627tune.vars.reqres-max-size <size>
1628tune.vars.sess-max-size <size>
1629tune.vars.txn-max-size <size>
Christopher Fauletff2613e2016-11-09 11:36:17 +01001630 These five tunes help to manage the maximum amount of memory used by the
1631 variables system. "global" limits the overall amount of memory available for
1632 all scopes. "proc" limits the memory for the process scope, "sess" limits the
1633 memory for the session scope, "txn" for the transaction scope, and "reqres"
1634 limits the memory for each request or response processing.
1635 Memory accounting is hierarchical, meaning more coarse grained limits include
1636 the finer grained ones: "proc" includes "sess", "sess" includes "txn", and
1637 "txn" includes "reqres".
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02001638
Daniel Schneller0b547052016-03-21 20:46:57 +01001639 For example, when "tune.vars.sess-max-size" is limited to 100,
1640 "tune.vars.txn-max-size" and "tune.vars.reqres-max-size" cannot exceed
1641 100 either. If we create a variable "txn.var" that contains 100 bytes,
1642 all available space is consumed.
1643 Notice that exceeding the limits at runtime will not result in an error
1644 message, but values might be cut off or corrupted. So make sure to accurately
1645 plan for the amount of space needed to store all your variables.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02001646
William Lallemanda509e4c2012-11-07 16:54:34 +01001647tune.zlib.memlevel <number>
1648 Sets the memLevel parameter in zlib initialization for each session. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001649 defines how much memory should be allocated for the internal compression
William Lallemanda509e4c2012-11-07 16:54:34 +01001650 state. A value of 1 uses minimum memory but is slow and reduces compression
1651 ratio, a value of 9 uses maximum memory for optimal speed. Can be a value
1652 between 1 and 9. The default value is 8.
1653
1654tune.zlib.windowsize <number>
1655 Sets the window size (the size of the history buffer) as a parameter of the
1656 zlib initialization for each session. Larger values of this parameter result
1657 in better compression at the expense of memory usage. Can be a value between
1658 8 and 15. The default value is 15.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001659
Willy Tarreauc57f0e22009-05-10 13:12:33 +020016603.3. Debugging
1661--------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02001662
1663debug
1664 Enables debug mode which dumps to stdout all exchanges, and disables forking
1665 into background. It is the equivalent of the command-line argument "-d". It
1666 should never be used in a production configuration since it may prevent full
1667 system startup.
1668
1669quiet
1670 Do not display any message during startup. It is equivalent to the command-
1671 line argument "-q".
1672
Emeric Brunf099e792010-09-27 12:05:28 +02001673
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +010016743.4. Userlists
1675--------------
1676It is possible to control access to frontend/backend/listen sections or to
1677http stats by allowing only authenticated and authorized users. To do this,
1678it is required to create at least one userlist and to define users.
1679
1680userlist <listname>
Cyril Bonté78caf842010-03-10 22:41:43 +01001681 Creates new userlist with name <listname>. Many independent userlists can be
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001682 used to store authentication & authorization data for independent customers.
1683
1684group <groupname> [users <user>,<user>,(...)]
Cyril Bonté78caf842010-03-10 22:41:43 +01001685 Adds group <groupname> to the current userlist. It is also possible to
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001686 attach users to this group by using a comma separated list of names
1687 proceeded by "users" keyword.
1688
Cyril Bontéf0c60612010-02-06 14:44:47 +01001689user <username> [password|insecure-password <password>]
1690 [groups <group>,<group>,(...)]
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001691 Adds user <username> to the current userlist. Both secure (encrypted) and
1692 insecure (unencrypted) passwords can be used. Encrypted passwords are
Daniel Schnellerd06f31c2017-11-06 16:51:04 +01001693 evaluated using the crypt(3) function, so depending on the system's
1694 capabilities, different algorithms are supported. For example, modern Glibc
1695 based Linux systems support MD5, SHA-256, SHA-512, and, of course, the
1696 classic DES-based method of encrypting passwords.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001697
Daniel Schnellerd06f31c2017-11-06 16:51:04 +01001698 Attention: Be aware that using encrypted passwords might cause significantly
1699 increased CPU usage, depending on the number of requests, and the algorithm
1700 used. For any of the hashed variants, the password for each request must
1701 be processed through the chosen algorithm, before it can be compared to the
1702 value specified in the config file. Most current algorithms are deliberately
1703 designed to be expensive to compute to achieve resistance against brute
1704 force attacks. They do not simply salt/hash the clear text password once,
1705 but thousands of times. This can quickly become a major factor in haproxy's
1706 overall CPU consumption!
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001707
1708 Example:
Cyril Bontéf0c60612010-02-06 14:44:47 +01001709 userlist L1
1710 group G1 users tiger,scott
1711 group G2 users xdb,scott
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001712
Cyril Bontéf0c60612010-02-06 14:44:47 +01001713 user tiger password $6$k6y3o.eP$JlKBx9za9667qe4(...)xHSwRv6J.C0/D7cV91
1714 user scott insecure-password elgato
1715 user xdb insecure-password hello
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001716
Cyril Bontéf0c60612010-02-06 14:44:47 +01001717 userlist L2
1718 group G1
1719 group G2
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001720
Cyril Bontéf0c60612010-02-06 14:44:47 +01001721 user tiger password $6$k6y3o.eP$JlKBx(...)xHSwRv6J.C0/D7cV91 groups G1
1722 user scott insecure-password elgato groups G1,G2
1723 user xdb insecure-password hello groups G2
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001724
1725 Please note that both lists are functionally identical.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001726
Emeric Brunf099e792010-09-27 12:05:28 +02001727
17283.5. Peers
Cyril Bontédc4d9032012-04-08 21:57:39 +02001729----------
Emeric Brun94900952015-06-11 18:25:54 +02001730It is possible to propagate entries of any data-types in stick-tables between
1731several haproxy instances over TCP connections in a multi-master fashion. Each
1732instance pushes its local updates and insertions to remote peers. The pushed
1733values overwrite remote ones without aggregation. Interrupted exchanges are
1734automatically detected and recovered from the last known point.
1735In addition, during a soft restart, the old process connects to the new one
1736using such a TCP connection to push all its entries before the new process
1737tries to connect to other peers. That ensures very fast replication during a
1738reload, it typically takes a fraction of a second even for large tables.
1739Note that Server IDs are used to identify servers remotely, so it is important
1740that configurations look similar or at least that the same IDs are forced on
1741each server on all participants.
Emeric Brunf099e792010-09-27 12:05:28 +02001742
1743peers <peersect>
Jamie Gloudon801a0a32012-08-25 00:18:33 -04001744 Creates a new peer list with name <peersect>. It is an independent section,
Emeric Brunf099e792010-09-27 12:05:28 +02001745 which is referenced by one or more stick-tables.
1746
Willy Tarreau77e4bd12015-05-01 20:02:17 +02001747disabled
1748 Disables a peers section. It disables both listening and any synchronization
1749 related to this section. This is provided to disable synchronization of stick
1750 tables without having to comment out all "peers" references.
1751
1752enable
1753 This re-enables a disabled peers section which was previously disabled.
1754
Emeric Brunf099e792010-09-27 12:05:28 +02001755peer <peername> <ip>:<port>
1756 Defines a peer inside a peers section.
1757 If <peername> is set to the local peer name (by default hostname, or forced
1758 using "-L" command line option), haproxy will listen for incoming remote peer
1759 connection on <ip>:<port>. Otherwise, <ip>:<port> defines where to connect to
1760 to join the remote peer, and <peername> is used at the protocol level to
1761 identify and validate the remote peer on the server side.
1762
1763 During a soft restart, local peer <ip>:<port> is used by the old instance to
1764 connect the new one and initiate a complete replication (teaching process).
1765
1766 It is strongly recommended to have the exact same peers declaration on all
1767 peers and to only rely on the "-L" command line argument to change the local
1768 peer name. This makes it easier to maintain coherent configuration files
1769 across all peers.
1770
William Lallemandb2f07452015-05-12 14:27:13 +02001771 You may want to reference some environment variables in the address
1772 parameter, see section 2.3 about environment variables.
Willy Tarreaudad36a32013-03-11 01:20:04 +01001773
Cyril Bontédc4d9032012-04-08 21:57:39 +02001774 Example:
Emeric Brunf099e792010-09-27 12:05:28 +02001775 peers mypeers
Willy Tarreauf7b30a92010-12-06 22:59:17 +01001776 peer haproxy1 192.168.0.1:1024
1777 peer haproxy2 192.168.0.2:1024
1778 peer haproxy3 10.2.0.1:1024
Emeric Brunf099e792010-09-27 12:05:28 +02001779
1780 backend mybackend
1781 mode tcp
1782 balance roundrobin
1783 stick-table type ip size 20k peers mypeers
1784 stick on src
1785
Willy Tarreauf7b30a92010-12-06 22:59:17 +01001786 server srv1 192.168.0.30:80
1787 server srv2 192.168.0.31:80
Emeric Brunf099e792010-09-27 12:05:28 +02001788
1789
Simon Horman51a1cf62015-02-03 13:00:44 +090017903.6. Mailers
1791------------
1792It is possible to send email alerts when the state of servers changes.
1793If configured email alerts are sent to each mailer that is configured
1794in a mailers section. Email is sent to mailers using SMTP.
1795
Pieter Baauw386a1272015-08-16 15:26:24 +02001796mailers <mailersect>
Simon Horman51a1cf62015-02-03 13:00:44 +09001797 Creates a new mailer list with the name <mailersect>. It is an
1798 independent section which is referenced by one or more proxies.
1799
1800mailer <mailername> <ip>:<port>
1801 Defines a mailer inside a mailers section.
1802
1803 Example:
1804 mailers mymailers
1805 mailer smtp1 192.168.0.1:587
1806 mailer smtp2 192.168.0.2:587
1807
1808 backend mybackend
1809 mode tcp
1810 balance roundrobin
1811
1812 email-alert mailers mymailers
1813 email-alert from test1@horms.org
1814 email-alert to test2@horms.org
1815
1816 server srv1 192.168.0.30:80
1817 server srv2 192.168.0.31:80
1818
Pieter Baauw235fcfc2016-02-13 15:33:40 +01001819timeout mail <time>
1820 Defines the time available for a mail/connection to be made and send to
1821 the mail-server. If not defined the default value is 10 seconds. To allow
1822 for at least two SYN-ACK packets to be send during initial TCP handshake it
1823 is advised to keep this value above 4 seconds.
1824
1825 Example:
1826 mailers mymailers
1827 timeout mail 20s
1828 mailer smtp1 192.168.0.1:587
Simon Horman51a1cf62015-02-03 13:00:44 +09001829
Willy Tarreauc57f0e22009-05-10 13:12:33 +020018304. Proxies
Willy Tarreau6a06a402007-07-15 20:15:28 +02001831----------
Willy Tarreau0ba27502007-12-24 16:55:16 +01001832
Willy Tarreau6a06a402007-07-15 20:15:28 +02001833Proxy configuration can be located in a set of sections :
William Lallemand6e62fb62015-04-28 16:55:23 +02001834 - defaults [<name>]
Willy Tarreau6a06a402007-07-15 20:15:28 +02001835 - frontend <name>
1836 - backend <name>
1837 - listen <name>
1838
1839A "defaults" section sets default parameters for all other sections following
1840its declaration. Those default parameters are reset by the next "defaults"
1841section. See below for the list of parameters which can be set in a "defaults"
Willy Tarreau0ba27502007-12-24 16:55:16 +01001842section. The name is optional but its use is encouraged for better readability.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001843
1844A "frontend" section describes a set of listening sockets accepting client
1845connections.
1846
1847A "backend" section describes a set of servers to which the proxy will connect
1848to forward incoming connections.
1849
1850A "listen" section defines a complete proxy with its frontend and backend
1851parts combined in one section. It is generally useful for TCP-only traffic.
1852
Willy Tarreau0ba27502007-12-24 16:55:16 +01001853All proxy names must be formed from upper and lower case letters, digits,
1854'-' (dash), '_' (underscore) , '.' (dot) and ':' (colon). ACL names are
1855case-sensitive, which means that "www" and "WWW" are two different proxies.
1856
1857Historically, all proxy names could overlap, it just caused troubles in the
1858logs. Since the introduction of content switching, it is mandatory that two
1859proxies with overlapping capabilities (frontend/backend) have different names.
1860However, it is still permitted that a frontend and a backend share the same
1861name, as this configuration seems to be commonly encountered.
1862
1863Right now, two major proxy modes are supported : "tcp", also known as layer 4,
1864and "http", also known as layer 7. In layer 4 mode, HAProxy simply forwards
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001865bidirectional traffic between two sides. In layer 7 mode, HAProxy analyzes the
Willy Tarreau0ba27502007-12-24 16:55:16 +01001866protocol, and can interact with it by allowing, blocking, switching, adding,
1867modifying, or removing arbitrary contents in requests or responses, based on
1868arbitrary criteria.
1869
Willy Tarreau70dffda2014-01-30 03:07:23 +01001870In HTTP mode, the processing applied to requests and responses flowing over
1871a connection depends in the combination of the frontend's HTTP options and
1872the backend's. HAProxy supports 5 connection modes :
1873
1874 - KAL : keep alive ("option http-keep-alive") which is the default mode : all
1875 requests and responses are processed, and connections remain open but idle
1876 between responses and new requests.
1877
1878 - TUN: tunnel ("option http-tunnel") : this was the default mode for versions
1879 1.0 to 1.5-dev21 : only the first request and response are processed, and
1880 everything else is forwarded with no analysis at all. This mode should not
1881 be used as it creates lots of trouble with logging and HTTP processing.
1882
1883 - PCL: passive close ("option httpclose") : exactly the same as tunnel mode,
1884 but with "Connection: close" appended in both directions to try to make
1885 both ends close after the first request/response exchange.
1886
1887 - SCL: server close ("option http-server-close") : the server-facing
1888 connection is closed after the end of the response is received, but the
1889 client-facing connection remains open.
1890
1891 - FCL: forced close ("option forceclose") : the connection is actively closed
1892 after the end of the response.
1893
1894The effective mode that will be applied to a connection passing through a
1895frontend and a backend can be determined by both proxy modes according to the
1896following matrix, but in short, the modes are symmetric, keep-alive is the
1897weakest option and force close is the strongest.
1898
1899 Backend mode
1900
1901 | KAL | TUN | PCL | SCL | FCL
1902 ----+-----+-----+-----+-----+----
1903 KAL | KAL | TUN | PCL | SCL | FCL
1904 ----+-----+-----+-----+-----+----
1905 TUN | TUN | TUN | PCL | SCL | FCL
1906 Frontend ----+-----+-----+-----+-----+----
1907 mode PCL | PCL | PCL | PCL | FCL | FCL
1908 ----+-----+-----+-----+-----+----
1909 SCL | SCL | SCL | FCL | SCL | FCL
1910 ----+-----+-----+-----+-----+----
1911 FCL | FCL | FCL | FCL | FCL | FCL
1912
Willy Tarreau0ba27502007-12-24 16:55:16 +01001913
Willy Tarreau70dffda2014-01-30 03:07:23 +01001914
Willy Tarreauc57f0e22009-05-10 13:12:33 +020019154.1. Proxy keywords matrix
1916--------------------------
Willy Tarreau0ba27502007-12-24 16:55:16 +01001917
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001918The following list of keywords is supported. Most of them may only be used in a
1919limited set of section types. Some of them are marked as "deprecated" because
1920they are inherited from an old syntax which may be confusing or functionally
1921limited, and there are new recommended keywords to replace them. Keywords
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001922marked with "(*)" can be optionally inverted using the "no" prefix, eg. "no
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001923option contstats". This makes sense when the option has been enabled by default
Willy Tarreau3842f002009-06-14 11:39:52 +02001924and must be disabled for a specific instance. Such options may also be prefixed
1925with "default" in order to restore default settings regardless of what has been
1926specified in a previous "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001927
Willy Tarreau6a06a402007-07-15 20:15:28 +02001928
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001929 keyword defaults frontend listen backend
1930------------------------------------+----------+----------+---------+---------
1931acl - X X X
Willy Tarreau294d0f02015-08-10 19:40:12 +02001932appsession - - - -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001933backlog X X X -
1934balance X - X X
1935bind - X X -
1936bind-process X X X X
Jarno Huuskonen8c8c3492016-12-28 18:50:29 +02001937block (deprecated) - X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001938capture cookie - X X -
1939capture request header - X X -
1940capture response header - X X -
1941clitimeout (deprecated) X X X -
William Lallemand82fe75c2012-10-23 10:25:10 +02001942compression X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001943contimeout (deprecated) X - X X
1944cookie X - X X
Thierry FOURNIERa0a1b752015-05-26 17:44:32 +02001945declare capture - X X -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001946default-server X - X X
1947default_backend X X X -
1948description - X X X
1949disabled X X X X
1950dispatch - - X X
Simon Horman51a1cf62015-02-03 13:00:44 +09001951email-alert from X X X X
Simon Horman64e34162015-02-06 11:11:57 +09001952email-alert level X X X X
Simon Horman51a1cf62015-02-03 13:00:44 +09001953email-alert mailers X X X X
1954email-alert myhostname X X X X
1955email-alert to X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001956enabled X X X X
1957errorfile X X X X
1958errorloc X X X X
1959errorloc302 X X X X
1960-- keyword -------------------------- defaults - frontend - listen -- backend -
1961errorloc303 X X X X
Cyril Bonté0d4bf012010-04-25 23:21:46 +02001962force-persist - X X X
Christopher Fauletc3fe5332016-04-07 15:30:10 +02001963filter - X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001964fullconn X - X X
1965grace X X X X
1966hash-type X - X X
1967http-check disable-on-404 X - X X
Willy Tarreaubd741542010-03-16 18:46:54 +01001968http-check expect - - X X
Willy Tarreau7ab6aff2010-10-12 06:30:16 +02001969http-check send-state X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001970http-request - X X X
Willy Tarreaue365c0b2013-06-11 16:06:12 +02001971http-response - X X X
Willy Tarreau30631952015-08-06 15:05:24 +02001972http-reuse X - X X
Baptiste Assmann2c42ef52013-10-09 21:57:02 +02001973http-send-name-header - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001974id - X X X
Cyril Bonté0d4bf012010-04-25 23:21:46 +02001975ignore-persist - X X X
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02001976load-server-state-from-file X - X X
William Lallemand0f99e342011-10-12 17:50:54 +02001977log (*) X X X X
Willy Tarreaufb4e7ea2015-01-07 14:55:17 +01001978log-format X X X -
Dragan Dosen7ad31542015-09-28 17:16:47 +02001979log-format-sd X X X -
Willy Tarreau094af4e2015-01-07 15:03:42 +01001980log-tag X X X X
Willy Tarreauc35362a2014-04-25 13:58:37 +02001981max-keep-alive-queue X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001982maxconn X X X -
1983mode X X X X
1984monitor fail - X X -
1985monitor-net X X X -
1986monitor-uri X X X -
1987option abortonclose (*) X - X X
1988option accept-invalid-http-request (*) X X X -
1989option accept-invalid-http-response (*) X - X X
1990option allbackups (*) X - X X
1991option checkcache (*) X - X X
1992option clitcpka (*) X X X -
1993option contstats (*) X X X -
1994option dontlog-normal (*) X X X -
1995option dontlognull (*) X X X -
1996option forceclose (*) X X X X
1997-- keyword -------------------------- defaults - frontend - listen -- backend -
1998option forwardfor X X X X
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02001999option http-buffer-request (*) X X X X
Willy Tarreau82649f92015-05-01 22:40:51 +02002000option http-ignore-probes (*) X X X -
Willy Tarreau16bfb022010-01-16 19:48:41 +01002001option http-keep-alive (*) X X X X
Willy Tarreau96e31212011-05-30 18:10:30 +02002002option http-no-delay (*) X X X X
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02002003option http-pretend-keepalive (*) X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002004option http-server-close (*) X X X X
Willy Tarreau02bce8b2014-01-30 00:15:28 +01002005option http-tunnel (*) X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002006option http-use-proxy-header (*) X X X -
2007option httpchk X - X X
2008option httpclose (*) X X X X
2009option httplog X X X X
2010option http_proxy (*) X X X X
Jamie Gloudon801a0a32012-08-25 00:18:33 -04002011option independent-streams (*) X X X X
Gabor Lekenyb4c81e42010-09-29 18:17:05 +02002012option ldap-check X - X X
Simon Horman98637e52014-06-20 12:30:16 +09002013option external-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002014option log-health-checks (*) X - X X
2015option log-separate-errors (*) X X X -
2016option logasap (*) X X X -
2017option mysql-check X - X X
2018option nolinger (*) X X X X
2019option originalto X X X X
2020option persist (*) X - X X
Baptiste Assmann809e22a2015-10-12 20:22:55 +02002021option pgsql-check X - X X
2022option prefer-last-server (*) X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002023option redispatch (*) X - X X
Hervé COMMOWICKec032d62011-08-05 16:23:48 +02002024option redis-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002025option smtpchk X - X X
2026option socket-stats (*) X X X -
2027option splice-auto (*) X X X X
2028option splice-request (*) X X X X
2029option splice-response (*) X X X X
Christopher Fauletba7bc162016-11-07 21:07:38 +01002030option spop-check - - - X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002031option srvtcpka (*) X - X X
2032option ssl-hello-chk X - X X
2033-- keyword -------------------------- defaults - frontend - listen -- backend -
Willy Tarreaued179852013-12-16 01:07:00 +01002034option tcp-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002035option tcp-smart-accept (*) X X X -
2036option tcp-smart-connect (*) X - X X
2037option tcpka X X X X
2038option tcplog X X X X
2039option transparent (*) X - X X
Simon Horman98637e52014-06-20 12:30:16 +09002040external-check command X - X X
2041external-check path X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002042persist rdp-cookie X - X X
2043rate-limit sessions X X X -
2044redirect - X X X
2045redisp (deprecated) X - X X
2046redispatch (deprecated) X - X X
2047reqadd - X X X
2048reqallow - X X X
2049reqdel - X X X
2050reqdeny - X X X
2051reqiallow - X X X
2052reqidel - X X X
2053reqideny - X X X
2054reqipass - X X X
2055reqirep - X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002056reqitarpit - X X X
2057reqpass - X X X
2058reqrep - X X X
2059-- keyword -------------------------- defaults - frontend - listen -- backend -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002060reqtarpit - X X X
2061retries X - X X
2062rspadd - X X X
2063rspdel - X X X
2064rspdeny - X X X
2065rspidel - X X X
2066rspideny - X X X
2067rspirep - X X X
2068rsprep - X X X
2069server - - X X
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02002070server-state-file-name X - X X
Frédéric Lécaillecb4502e2017-04-20 13:36:25 +02002071server-template - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002072source X - X X
2073srvtimeout (deprecated) X - X X
Baptiste Assmann5a549212015-10-12 20:30:24 +02002074stats admin - X X X
2075stats auth X X X X
2076stats enable X X X X
2077stats hide-version X X X X
2078stats http-request - X X X
2079stats realm X X X X
2080stats refresh X X X X
2081stats scope X X X X
2082stats show-desc X X X X
2083stats show-legends X X X X
2084stats show-node X X X X
2085stats uri X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002086-- keyword -------------------------- defaults - frontend - listen -- backend -
2087stick match - - X X
2088stick on - - X X
2089stick store-request - - X X
Willy Tarreaud8dc99f2011-07-01 11:33:25 +02002090stick store-response - - X X
Adam Spiers68af3c12017-04-06 16:31:39 +01002091stick-table - X X X
Willy Tarreau938c7fe2014-04-25 14:21:39 +02002092tcp-check connect - - X X
2093tcp-check expect - - X X
2094tcp-check send - - X X
2095tcp-check send-binary - - X X
Willy Tarreaue9656522010-08-17 15:40:09 +02002096tcp-request connection - X X -
2097tcp-request content - X X X
Willy Tarreaua56235c2010-09-14 11:31:36 +02002098tcp-request inspect-delay - X X X
Willy Tarreau4f614292016-10-21 17:49:36 +02002099tcp-request session - X X -
Emeric Brun0a3b67f2010-09-24 15:34:53 +02002100tcp-response content - - X X
2101tcp-response inspect-delay - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002102timeout check X - X X
2103timeout client X X X -
Willy Tarreau05cdd962014-05-10 14:30:07 +02002104timeout client-fin X X X -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002105timeout clitimeout (deprecated) X X X -
2106timeout connect X - X X
2107timeout contimeout (deprecated) X - X X
2108timeout http-keep-alive X X X X
2109timeout http-request X X X X
2110timeout queue X - X X
2111timeout server X - X X
Willy Tarreau05cdd962014-05-10 14:30:07 +02002112timeout server-fin X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002113timeout srvtimeout (deprecated) X - X X
2114timeout tarpit X X X X
Willy Tarreauce887fd2012-05-12 12:50:00 +02002115timeout tunnel X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002116transparent (deprecated) X - X X
William Lallemanda73203e2012-03-12 12:48:57 +01002117unique-id-format X X X -
2118unique-id-header X X X -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002119use_backend - X X -
Willy Tarreau4a5cade2012-04-05 21:09:48 +02002120use-server - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002121------------------------------------+----------+----------+---------+---------
2122 keyword defaults frontend listen backend
Willy Tarreau6a06a402007-07-15 20:15:28 +02002123
Willy Tarreau0ba27502007-12-24 16:55:16 +01002124
Willy Tarreauc57f0e22009-05-10 13:12:33 +020021254.2. Alphabetically sorted keywords reference
2126---------------------------------------------
Willy Tarreau0ba27502007-12-24 16:55:16 +01002127
2128This section provides a description of each keyword and its usage.
2129
2130
2131acl <aclname> <criterion> [flags] [operator] <value> ...
2132 Declare or complete an access list.
2133 May be used in sections : defaults | frontend | listen | backend
2134 no | yes | yes | yes
2135 Example:
2136 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
2137 acl invalid_src src_port 0:1023
2138 acl local_dst hdr(host) -i localhost
2139
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002140 See section 7 about ACL usage.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002141
2142
Cyril Bontéb21570a2009-11-29 20:04:48 +01002143appsession <cookie> len <length> timeout <holdtime>
2144 [request-learn] [prefix] [mode <path-parameters|query-string>]
Willy Tarreau0ba27502007-12-24 16:55:16 +01002145 Define session stickiness on an existing application cookie.
2146 May be used in sections : defaults | frontend | listen | backend
2147 no | no | yes | yes
2148 Arguments :
2149 <cookie> this is the name of the cookie used by the application and which
2150 HAProxy will have to learn for each new session.
2151
Cyril Bontéb21570a2009-11-29 20:04:48 +01002152 <length> this is the max number of characters that will be memorized and
Willy Tarreau0ba27502007-12-24 16:55:16 +01002153 checked in each cookie value.
2154
2155 <holdtime> this is the time after which the cookie will be removed from
2156 memory if unused. If no unit is specified, this time is in
2157 milliseconds.
2158
Cyril Bontébf47aeb2009-10-15 00:15:40 +02002159 request-learn
2160 If this option is specified, then haproxy will be able to learn
2161 the cookie found in the request in case the server does not
2162 specify any in response. This is typically what happens with
2163 PHPSESSID cookies, or when haproxy's session expires before
2164 the application's session and the correct server is selected.
2165 It is recommended to specify this option to improve reliability.
2166
Cyril Bontéb21570a2009-11-29 20:04:48 +01002167 prefix When this option is specified, haproxy will match on the cookie
2168 prefix (or URL parameter prefix). The appsession value is the
2169 data following this prefix.
2170
2171 Example :
2172 appsession ASPSESSIONID len 64 timeout 3h prefix
2173
2174 This will match the cookie ASPSESSIONIDXXXX=XXXXX,
2175 the appsession value will be XXXX=XXXXX.
2176
2177 mode This option allows to change the URL parser mode.
2178 2 modes are currently supported :
2179 - path-parameters :
2180 The parser looks for the appsession in the path parameters
2181 part (each parameter is separated by a semi-colon), which is
2182 convenient for JSESSIONID for example.
2183 This is the default mode if the option is not set.
2184 - query-string :
2185 In this mode, the parser will look for the appsession in the
2186 query string.
2187
Willy Tarreau294d0f02015-08-10 19:40:12 +02002188 As of version 1.6, appsessions was removed. It is more flexible and more
2189 convenient to use stick-tables instead, and stick-tables support multi-master
2190 replication and data conservation across reloads, which appsessions did not.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002191
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01002192 See also : "cookie", "capture cookie", "balance", "stick", "stick-table",
2193 "ignore-persist", "nbproc" and "bind-process".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002194
2195
Willy Tarreauc73ce2b2008-01-06 10:55:10 +01002196backlog <conns>
2197 Give hints to the system about the approximate listen backlog desired size
2198 May be used in sections : defaults | frontend | listen | backend
2199 yes | yes | yes | no
2200 Arguments :
2201 <conns> is the number of pending connections. Depending on the operating
2202 system, it may represent the number of already acknowledged
Cyril Bontédc4d9032012-04-08 21:57:39 +02002203 connections, of non-acknowledged ones, or both.
Willy Tarreauc73ce2b2008-01-06 10:55:10 +01002204
2205 In order to protect against SYN flood attacks, one solution is to increase
2206 the system's SYN backlog size. Depending on the system, sometimes it is just
2207 tunable via a system parameter, sometimes it is not adjustable at all, and
2208 sometimes the system relies on hints given by the application at the time of
2209 the listen() syscall. By default, HAProxy passes the frontend's maxconn value
2210 to the listen() syscall. On systems which can make use of this value, it can
2211 sometimes be useful to be able to specify a different value, hence this
2212 backlog parameter.
2213
2214 On Linux 2.4, the parameter is ignored by the system. On Linux 2.6, it is
2215 used as a hint and the system accepts up to the smallest greater power of
2216 two, and never more than some limits (usually 32768).
2217
2218 See also : "maxconn" and the target operating system's tuning guide.
2219
2220
Willy Tarreau0ba27502007-12-24 16:55:16 +01002221balance <algorithm> [ <arguments> ]
Willy Tarreau226071e2014-04-10 11:55:45 +02002222balance url_param <param> [check_post]
Willy Tarreau0ba27502007-12-24 16:55:16 +01002223 Define the load balancing algorithm to be used in a backend.
2224 May be used in sections : defaults | frontend | listen | backend
2225 yes | no | yes | yes
2226 Arguments :
2227 <algorithm> is the algorithm used to select a server when doing load
2228 balancing. This only applies when no persistence information
2229 is available, or when a connection is redispatched to another
2230 server. <algorithm> may be one of the following :
2231
2232 roundrobin Each server is used in turns, according to their weights.
2233 This is the smoothest and fairest algorithm when the server's
2234 processing time remains equally distributed. This algorithm
2235 is dynamic, which means that server weights may be adjusted
Willy Tarreau9757a382009-10-03 12:56:50 +02002236 on the fly for slow starts for instance. It is limited by
Godbacha34bdc02013-07-22 07:44:53 +08002237 design to 4095 active servers per backend. Note that in some
Willy Tarreau9757a382009-10-03 12:56:50 +02002238 large farms, when a server becomes up after having been down
2239 for a very short time, it may sometimes take a few hundreds
2240 requests for it to be re-integrated into the farm and start
2241 receiving traffic. This is normal, though very rare. It is
2242 indicated here in case you would have the chance to observe
2243 it, so that you don't worry.
2244
2245 static-rr Each server is used in turns, according to their weights.
2246 This algorithm is as similar to roundrobin except that it is
2247 static, which means that changing a server's weight on the
2248 fly will have no effect. On the other hand, it has no design
2249 limitation on the number of servers, and when a server goes
2250 up, it is always immediately reintroduced into the farm, once
2251 the full map is recomputed. It also uses slightly less CPU to
2252 run (around -1%).
Willy Tarreau0ba27502007-12-24 16:55:16 +01002253
Willy Tarreau2d2a7f82008-03-17 12:07:56 +01002254 leastconn The server with the lowest number of connections receives the
2255 connection. Round-robin is performed within groups of servers
2256 of the same load to ensure that all servers will be used. Use
2257 of this algorithm is recommended where very long sessions are
2258 expected, such as LDAP, SQL, TSE, etc... but is not very well
2259 suited for protocols using short sessions such as HTTP. This
2260 algorithm is dynamic, which means that server weights may be
2261 adjusted on the fly for slow starts for instance.
2262
Willy Tarreauf09c6602012-02-13 17:12:08 +01002263 first The first server with available connection slots receives the
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03002264 connection. The servers are chosen from the lowest numeric
Willy Tarreauf09c6602012-02-13 17:12:08 +01002265 identifier to the highest (see server parameter "id"), which
2266 defaults to the server's position in the farm. Once a server
Willy Tarreau64559c52012-04-07 09:08:45 +02002267 reaches its maxconn value, the next server is used. It does
Willy Tarreauf09c6602012-02-13 17:12:08 +01002268 not make sense to use this algorithm without setting maxconn.
2269 The purpose of this algorithm is to always use the smallest
2270 number of servers so that extra servers can be powered off
2271 during non-intensive hours. This algorithm ignores the server
2272 weight, and brings more benefit to long session such as RDP
Willy Tarreau64559c52012-04-07 09:08:45 +02002273 or IMAP than HTTP, though it can be useful there too. In
2274 order to use this algorithm efficiently, it is recommended
2275 that a cloud controller regularly checks server usage to turn
2276 them off when unused, and regularly checks backend queue to
2277 turn new servers on when the queue inflates. Alternatively,
2278 using "http-check send-state" may inform servers on the load.
Willy Tarreauf09c6602012-02-13 17:12:08 +01002279
Willy Tarreau0ba27502007-12-24 16:55:16 +01002280 source The source IP address is hashed and divided by the total
2281 weight of the running servers to designate which server will
2282 receive the request. This ensures that the same client IP
2283 address will always reach the same server as long as no
2284 server goes down or up. If the hash result changes due to the
2285 number of running servers changing, many clients will be
2286 directed to a different server. This algorithm is generally
2287 used in TCP mode where no cookie may be inserted. It may also
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002288 be used on the Internet to provide a best-effort stickiness
Willy Tarreau0ba27502007-12-24 16:55:16 +01002289 to clients which refuse session cookies. This algorithm is
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002290 static by default, which means that changing a server's
2291 weight on the fly will have no effect, but this can be
2292 changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002293
Oskar Stolc8dc41842012-05-19 10:19:54 +01002294 uri This algorithm hashes either the left part of the URI (before
2295 the question mark) or the whole URI (if the "whole" parameter
2296 is present) and divides the hash value by the total weight of
2297 the running servers. The result designates which server will
2298 receive the request. This ensures that the same URI will
2299 always be directed to the same server as long as no server
2300 goes up or down. This is used with proxy caches and
2301 anti-virus proxies in order to maximize the cache hit rate.
2302 Note that this algorithm may only be used in an HTTP backend.
2303 This algorithm is static by default, which means that
2304 changing a server's weight on the fly will have no effect,
2305 but this can be changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002306
Oskar Stolc8dc41842012-05-19 10:19:54 +01002307 This algorithm supports two optional parameters "len" and
Marek Majkowski9c30fc12008-04-27 23:25:55 +02002308 "depth", both followed by a positive integer number. These
2309 options may be helpful when it is needed to balance servers
2310 based on the beginning of the URI only. The "len" parameter
2311 indicates that the algorithm should only consider that many
2312 characters at the beginning of the URI to compute the hash.
2313 Note that having "len" set to 1 rarely makes sense since most
2314 URIs start with a leading "/".
2315
2316 The "depth" parameter indicates the maximum directory depth
2317 to be used to compute the hash. One level is counted for each
2318 slash in the request. If both parameters are specified, the
2319 evaluation stops when either is reached.
2320
Willy Tarreau0ba27502007-12-24 16:55:16 +01002321 url_param The URL parameter specified in argument will be looked up in
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002322 the query string of each HTTP GET request.
2323
2324 If the modifier "check_post" is used, then an HTTP POST
Cyril Bontédc4d9032012-04-08 21:57:39 +02002325 request entity will be searched for the parameter argument,
2326 when it is not found in a query string after a question mark
Willy Tarreau226071e2014-04-10 11:55:45 +02002327 ('?') in the URL. The message body will only start to be
2328 analyzed once either the advertised amount of data has been
2329 received or the request buffer is full. In the unlikely event
2330 that chunked encoding is used, only the first chunk is
Cyril Bontédc4d9032012-04-08 21:57:39 +02002331 scanned. Parameter values separated by a chunk boundary, may
Willy Tarreau226071e2014-04-10 11:55:45 +02002332 be randomly balanced if at all. This keyword used to support
2333 an optional <max_wait> parameter which is now ignored.
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002334
2335 If the parameter is found followed by an equal sign ('=') and
2336 a value, then the value is hashed and divided by the total
2337 weight of the running servers. The result designates which
2338 server will receive the request.
2339
2340 This is used to track user identifiers in requests and ensure
2341 that a same user ID will always be sent to the same server as
2342 long as no server goes up or down. If no value is found or if
2343 the parameter is not found, then a round robin algorithm is
2344 applied. Note that this algorithm may only be used in an HTTP
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002345 backend. This algorithm is static by default, which means
2346 that changing a server's weight on the fly will have no
2347 effect, but this can be changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002348
Cyril Bontédc4d9032012-04-08 21:57:39 +02002349 hdr(<name>) The HTTP header <name> will be looked up in each HTTP
2350 request. Just as with the equivalent ACL 'hdr()' function,
2351 the header name in parenthesis is not case sensitive. If the
2352 header is absent or if it does not contain any value, the
2353 roundrobin algorithm is applied instead.
Benoitaffb4812009-03-25 13:02:10 +01002354
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002355 An optional 'use_domain_only' parameter is available, for
Benoitaffb4812009-03-25 13:02:10 +01002356 reducing the hash algorithm to the main domain part with some
2357 specific headers such as 'Host'. For instance, in the Host
2358 value "haproxy.1wt.eu", only "1wt" will be considered.
2359
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002360 This algorithm is static by default, which means that
2361 changing a server's weight on the fly will have no effect,
2362 but this can be changed using "hash-type".
2363
Emeric Brun736aa232009-06-30 17:56:00 +02002364 rdp-cookie
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02002365 rdp-cookie(<name>)
Emeric Brun736aa232009-06-30 17:56:00 +02002366 The RDP cookie <name> (or "mstshash" if omitted) will be
2367 looked up and hashed for each incoming TCP request. Just as
2368 with the equivalent ACL 'req_rdp_cookie()' function, the name
2369 is not case-sensitive. This mechanism is useful as a degraded
2370 persistence mode, as it makes it possible to always send the
2371 same user (or the same session ID) to the same server. If the
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002372 cookie is not found, the normal roundrobin algorithm is
Emeric Brun736aa232009-06-30 17:56:00 +02002373 used instead.
2374
2375 Note that for this to work, the frontend must ensure that an
2376 RDP cookie is already present in the request buffer. For this
2377 you must use 'tcp-request content accept' rule combined with
2378 a 'req_rdp_cookie_cnt' ACL.
2379
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002380 This algorithm is static by default, which means that
2381 changing a server's weight on the fly will have no effect,
2382 but this can be changed using "hash-type".
2383
Cyril Bontédc4d9032012-04-08 21:57:39 +02002384 See also the rdp_cookie pattern fetch function.
Simon Hormanab814e02011-06-24 14:50:20 +09002385
Willy Tarreau0ba27502007-12-24 16:55:16 +01002386 <arguments> is an optional list of arguments which may be needed by some
Marek Majkowski9c30fc12008-04-27 23:25:55 +02002387 algorithms. Right now, only "url_param" and "uri" support an
2388 optional argument.
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002389
Willy Tarreau3cd9af22009-03-15 14:06:41 +01002390 The load balancing algorithm of a backend is set to roundrobin when no other
2391 algorithm, mode nor option have been set. The algorithm may only be set once
2392 for each backend.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002393
2394 Examples :
2395 balance roundrobin
2396 balance url_param userid
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002397 balance url_param session_id check_post 64
Benoitaffb4812009-03-25 13:02:10 +01002398 balance hdr(User-Agent)
2399 balance hdr(host)
2400 balance hdr(Host) use_domain_only
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002401
2402 Note: the following caveats and limitations on using the "check_post"
2403 extension with "url_param" must be considered :
2404
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002405 - all POST requests are eligible for consideration, because there is no way
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002406 to determine if the parameters will be found in the body or entity which
2407 may contain binary data. Therefore another method may be required to
2408 restrict consideration of POST requests that have no URL parameters in
2409 the body. (see acl reqideny http_end)
2410
2411 - using a <max_wait> value larger than the request buffer size does not
2412 make sense and is useless. The buffer size is set at build time, and
2413 defaults to 16 kB.
2414
2415 - Content-Encoding is not supported, the parameter search will probably
2416 fail; and load balancing will fall back to Round Robin.
2417
2418 - Expect: 100-continue is not supported, load balancing will fall back to
2419 Round Robin.
2420
Lukas Tribus23953682017-04-28 13:24:30 +00002421 - Transfer-Encoding (RFC7230 3.3.1) is only supported in the first chunk.
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002422 If the entire parameter value is not present in the first chunk, the
2423 selection of server is undefined (actually, defined by how little
2424 actually appeared in the first chunk).
2425
2426 - This feature does not support generation of a 100, 411 or 501 response.
2427
2428 - In some cases, requesting "check_post" MAY attempt to scan the entire
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002429 contents of a message body. Scanning normally terminates when linear
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002430 white space or control characters are found, indicating the end of what
2431 might be a URL parameter list. This is probably not a concern with SGML
2432 type message bodies.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002433
Willy Tarreau294d0f02015-08-10 19:40:12 +02002434 See also : "dispatch", "cookie", "transparent", "hash-type" and "http_proxy".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002435
2436
Willy Tarreaub6205fd2012-09-24 12:27:33 +02002437bind [<address>]:<port_range> [, ...] [param*]
2438bind /<path> [, ...] [param*]
Willy Tarreau0ba27502007-12-24 16:55:16 +01002439 Define one or several listening addresses and/or ports in a frontend.
2440 May be used in sections : defaults | frontend | listen | backend
2441 no | yes | yes | no
2442 Arguments :
Willy Tarreaub1e52e82008-01-13 14:49:51 +01002443 <address> is optional and can be a host name, an IPv4 address, an IPv6
2444 address, or '*'. It designates the address the frontend will
2445 listen on. If unset, all IPv4 addresses of the system will be
2446 listened on. The same will apply for '*' or the system's
David du Colombier9c938da2011-03-17 10:40:27 +01002447 special address "0.0.0.0". The IPv6 equivalent is '::'.
Willy Tarreau24709282013-03-10 21:32:12 +01002448 Optionally, an address family prefix may be used before the
2449 address to force the family regardless of the address format,
2450 which can be useful to specify a path to a unix socket with
2451 no slash ('/'). Currently supported prefixes are :
2452 - 'ipv4@' -> address is always IPv4
2453 - 'ipv6@' -> address is always IPv6
2454 - 'unix@' -> address is a path to a local unix socket
Willy Tarreau70f72e02014-07-08 00:37:50 +02002455 - 'abns@' -> address is in abstract namespace (Linux only).
2456 Note: since abstract sockets are not "rebindable", they
2457 do not cope well with multi-process mode during
2458 soft-restart, so it is better to avoid them if
2459 nbproc is greater than 1. The effect is that if the
2460 new process fails to start, only one of the old ones
2461 will be able to rebind to the socket.
Willy Tarreau40aa0702013-03-10 23:51:38 +01002462 - 'fd@<n>' -> use file descriptor <n> inherited from the
2463 parent. The fd must be bound and may or may not already
2464 be listening.
William Lallemandb2f07452015-05-12 14:27:13 +02002465 You may want to reference some environment variables in the
2466 address parameter, see section 2.3 about environment
2467 variables.
Willy Tarreaub1e52e82008-01-13 14:49:51 +01002468
Willy Tarreauc5011ca2010-03-22 11:53:56 +01002469 <port_range> is either a unique TCP port, or a port range for which the
2470 proxy will accept connections for the IP address specified
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002471 above. The port is mandatory for TCP listeners. Note that in
2472 the case of an IPv6 address, the port is always the number
2473 after the last colon (':'). A range can either be :
Willy Tarreauc5011ca2010-03-22 11:53:56 +01002474 - a numerical port (ex: '80')
2475 - a dash-delimited ports range explicitly stating the lower
2476 and upper bounds (ex: '2000-2100') which are included in
2477 the range.
2478
2479 Particular care must be taken against port ranges, because
2480 every <address:port> couple consumes one socket (= a file
2481 descriptor), so it's easy to consume lots of descriptors
2482 with a simple range, and to run out of sockets. Also, each
2483 <address:port> couple must be used only once among all
2484 instances running on a same system. Please note that binding
2485 to ports lower than 1024 generally require particular
Jamie Gloudon801a0a32012-08-25 00:18:33 -04002486 privileges to start the program, which are independent of
Willy Tarreauc5011ca2010-03-22 11:53:56 +01002487 the 'uid' parameter.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002488
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002489 <path> is a UNIX socket path beginning with a slash ('/'). This is
2490 alternative to the TCP listening port. Haproxy will then
2491 receive UNIX connections on the socket located at this place.
2492 The path must begin with a slash and by default is absolute.
2493 It can be relative to the prefix defined by "unix-bind" in
2494 the global section. Note that the total length of the prefix
2495 followed by the socket path cannot exceed some system limits
2496 for UNIX sockets, which commonly are set to 107 characters.
2497
Willy Tarreaub6205fd2012-09-24 12:27:33 +02002498 <param*> is a list of parameters common to all sockets declared on the
2499 same line. These numerous parameters depend on OS and build
2500 options and have a complete section dedicated to them. Please
2501 refer to section 5 to for more details.
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02002502
Willy Tarreau0ba27502007-12-24 16:55:16 +01002503 It is possible to specify a list of address:port combinations delimited by
2504 commas. The frontend will then listen on all of these addresses. There is no
2505 fixed limit to the number of addresses and ports which can be listened on in
2506 a frontend, as well as there is no limit to the number of "bind" statements
2507 in a frontend.
2508
2509 Example :
2510 listen http_proxy
2511 bind :80,:443
2512 bind 10.0.0.1:10080,10.0.0.1:10443
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002513 bind /var/run/ssl-frontend.sock user root mode 600 accept-proxy
Willy Tarreau0ba27502007-12-24 16:55:16 +01002514
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02002515 listen http_https_proxy
2516 bind :80
Cyril Bonté0d44fc62012-10-09 22:45:33 +02002517 bind :443 ssl crt /etc/haproxy/site.pem
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02002518
Willy Tarreau24709282013-03-10 21:32:12 +01002519 listen http_https_proxy_explicit
2520 bind ipv6@:80
2521 bind ipv4@public_ssl:443 ssl crt /etc/haproxy/site.pem
2522 bind unix@ssl-frontend.sock user root mode 600 accept-proxy
2523
Willy Tarreaudad36a32013-03-11 01:20:04 +01002524 listen external_bind_app1
William Lallemandb2f07452015-05-12 14:27:13 +02002525 bind "fd@${FD_APP1}"
Willy Tarreaudad36a32013-03-11 01:20:04 +01002526
Willy Tarreau55dcaf62015-09-27 15:03:15 +02002527 Note: regarding Linux's abstract namespace sockets, HAProxy uses the whole
2528 sun_path length is used for the address length. Some other programs
2529 such as socat use the string length only by default. Pass the option
2530 ",unix-tightsocklen=0" to any abstract socket definition in socat to
2531 make it compatible with HAProxy's.
2532
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002533 See also : "source", "option forwardfor", "unix-bind" and the PROXY protocol
Willy Tarreaub6205fd2012-09-24 12:27:33 +02002534 documentation, and section 5 about bind options.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002535
2536
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002537bind-process [ all | odd | even | <number 1-64>[-<number 1-64>] ] ...
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002538 Limit visibility of an instance to a certain set of processes numbers.
2539 May be used in sections : defaults | frontend | listen | backend
2540 yes | yes | yes | yes
2541 Arguments :
2542 all All process will see this instance. This is the default. It
2543 may be used to override a default value.
2544
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002545 odd This instance will be enabled on processes 1,3,5,...63. This
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002546 option may be combined with other numbers.
2547
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002548 even This instance will be enabled on processes 2,4,6,...64. This
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002549 option may be combined with other numbers. Do not use it
2550 with less than 2 processes otherwise some instances might be
2551 missing from all processes.
2552
Willy Tarreau110ecc12012-11-15 17:50:01 +01002553 number The instance will be enabled on this process number or range,
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002554 whose values must all be between 1 and 32 or 64 depending on
Willy Tarreau102df612014-05-07 23:56:38 +02002555 the machine's word size. If a proxy is bound to process
2556 numbers greater than the configured global.nbproc, it will
2557 either be forced to process #1 if a single process was
2558 specified, or to all processes otherwise.
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002559
2560 This keyword limits binding of certain instances to certain processes. This
2561 is useful in order not to have too many processes listening to the same
2562 ports. For instance, on a dual-core machine, it might make sense to set
2563 'nbproc 2' in the global section, then distributes the listeners among 'odd'
2564 and 'even' instances.
2565
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002566 At the moment, it is not possible to reference more than 32 or 64 processes
2567 using this keyword, but this should be more than enough for most setups.
2568 Please note that 'all' really means all processes regardless of the machine's
2569 word size, and is not limited to the first 32 or 64.
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002570
Willy Tarreau6ae1ba62014-05-07 19:01:58 +02002571 Each "bind" line may further be limited to a subset of the proxy's processes,
2572 please consult the "process" bind keyword in section 5.1.
2573
Willy Tarreaub369a042014-09-16 13:21:03 +02002574 When a frontend has no explicit "bind-process" line, it tries to bind to all
2575 the processes referenced by its "bind" lines. That means that frontends can
2576 easily adapt to their listeners' processes.
2577
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002578 If some backends are referenced by frontends bound to other processes, the
2579 backend automatically inherits the frontend's processes.
2580
2581 Example :
2582 listen app_ip1
2583 bind 10.0.0.1:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02002584 bind-process odd
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002585
2586 listen app_ip2
2587 bind 10.0.0.2:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02002588 bind-process even
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002589
2590 listen management
2591 bind 10.0.0.3:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02002592 bind-process 1 2 3 4
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002593
Willy Tarreau110ecc12012-11-15 17:50:01 +01002594 listen management
2595 bind 10.0.0.4:80
2596 bind-process 1-4
2597
Willy Tarreau6ae1ba62014-05-07 19:01:58 +02002598 See also : "nbproc" in global section, and "process" in section 5.1.
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002599
2600
Jarno Huuskonen8c8c3492016-12-28 18:50:29 +02002601block { if | unless } <condition> (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +01002602 Block a layer 7 request if/unless a condition is matched
2603 May be used in sections : defaults | frontend | listen | backend
2604 no | yes | yes | yes
2605
2606 The HTTP request will be blocked very early in the layer 7 processing
2607 if/unless <condition> is matched. A 403 error will be returned if the request
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002608 is blocked. The condition has to reference ACLs (see section 7). This is
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02002609 typically used to deny access to certain sensitive resources if some
Willy Tarreau0ba27502007-12-24 16:55:16 +01002610 conditions are met or not met. There is no fixed limit to the number of
Jarno Huuskonen95b012b2017-04-06 13:59:14 +03002611 "block" statements per instance. To block connections at layer 4 (without
2612 sending a 403 error) see "tcp-request connection reject" and
2613 "tcp-request content reject" rules.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002614
Jarno Huuskonen8c8c3492016-12-28 18:50:29 +02002615 This form is deprecated, do not use it in any new configuration, use the new
2616 "http-request deny" instead.
2617
Willy Tarreau0ba27502007-12-24 16:55:16 +01002618 Example:
2619 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
2620 acl invalid_src src_port 0:1023
2621 acl local_dst hdr(host) -i localhost
Jarno Huuskonen84c51ec2017-04-03 14:20:34 +03002622 # block is deprecated. Use http-request deny instead:
2623 #block if invalid_src || local_dst
2624 http-request deny if invalid_src || local_dst
Willy Tarreau0ba27502007-12-24 16:55:16 +01002625
Jarno Huuskonen95b012b2017-04-06 13:59:14 +03002626 See also : section 7 about ACL usage, "http-request deny",
2627 "http-response deny", "tcp-request connection reject" and
2628 "tcp-request content reject".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002629
2630capture cookie <name> len <length>
2631 Capture and log a cookie in the request and in the response.
2632 May be used in sections : defaults | frontend | listen | backend
2633 no | yes | yes | no
2634 Arguments :
2635 <name> is the beginning of the name of the cookie to capture. In order
2636 to match the exact name, simply suffix the name with an equal
2637 sign ('='). The full name will appear in the logs, which is
2638 useful with application servers which adjust both the cookie name
2639 and value (eg: ASPSESSIONXXXXX).
2640
2641 <length> is the maximum number of characters to report in the logs, which
2642 include the cookie name, the equal sign and the value, all in the
2643 standard "name=value" form. The string will be truncated on the
2644 right if it exceeds <length>.
2645
2646 Only the first cookie is captured. Both the "cookie" request headers and the
2647 "set-cookie" response headers are monitored. This is particularly useful to
2648 check for application bugs causing session crossing or stealing between
2649 users, because generally the user's cookies can only change on a login page.
2650
2651 When the cookie was not presented by the client, the associated log column
2652 will report "-". When a request does not cause a cookie to be assigned by the
2653 server, a "-" is reported in the response column.
2654
2655 The capture is performed in the frontend only because it is necessary that
2656 the log format does not change for a given frontend depending on the
2657 backends. This may change in the future. Note that there can be only one
Willy Tarreau193b8c62012-11-22 00:17:38 +01002658 "capture cookie" statement in a frontend. The maximum capture length is set
2659 by the global "tune.http.cookielen" setting and defaults to 63 characters. It
2660 is not possible to specify a capture in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002661
2662 Example:
2663 capture cookie ASPSESSION len 32
2664
2665 See also : "capture request header", "capture response header" as well as
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002666 section 8 about logging.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002667
2668
2669capture request header <name> len <length>
Willy Tarreau4460d032012-11-21 23:37:37 +01002670 Capture and log the last occurrence of the specified request header.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002671 May be used in sections : defaults | frontend | listen | backend
2672 no | yes | yes | no
2673 Arguments :
2674 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002675 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +01002676 appear in the requests, with the first letter of each word in
2677 upper case. The header name will not appear in the logs, only the
2678 value is reported, but the position in the logs is respected.
2679
2680 <length> is the maximum number of characters to extract from the value and
2681 report in the logs. The string will be truncated on the right if
2682 it exceeds <length>.
2683
Willy Tarreau4460d032012-11-21 23:37:37 +01002684 The complete value of the last occurrence of the header is captured. The
Willy Tarreau0ba27502007-12-24 16:55:16 +01002685 value will be added to the logs between braces ('{}'). If multiple headers
2686 are captured, they will be delimited by a vertical bar ('|') and will appear
Willy Tarreaucc6c8912009-02-22 10:53:55 +01002687 in the same order they were declared in the configuration. Non-existent
2688 headers will be logged just as an empty string. Common uses for request
2689 header captures include the "Host" field in virtual hosting environments, the
2690 "Content-length" when uploads are supported, "User-agent" to quickly
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002691 differentiate between real users and robots, and "X-Forwarded-For" in proxied
Willy Tarreaucc6c8912009-02-22 10:53:55 +01002692 environments to find where the request came from.
2693
2694 Note that when capturing headers such as "User-agent", some spaces may be
2695 logged, making the log analysis more difficult. Thus be careful about what
2696 you log if you know your log parser is not smart enough to rely on the
2697 braces.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002698
Willy Tarreau0900abb2012-11-22 00:21:46 +01002699 There is no limit to the number of captured request headers nor to their
2700 length, though it is wise to keep them low to limit memory usage per session.
2701 In order to keep log format consistent for a same frontend, header captures
2702 can only be declared in a frontend. It is not possible to specify a capture
2703 in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002704
2705 Example:
2706 capture request header Host len 15
2707 capture request header X-Forwarded-For len 15
Cyril Bontéd1b0f7c2015-10-26 22:37:39 +01002708 capture request header Referer len 15
Willy Tarreau0ba27502007-12-24 16:55:16 +01002709
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002710 See also : "capture cookie", "capture response header" as well as section 8
Willy Tarreau0ba27502007-12-24 16:55:16 +01002711 about logging.
2712
2713
2714capture response header <name> len <length>
Willy Tarreau4460d032012-11-21 23:37:37 +01002715 Capture and log the last occurrence of the specified response header.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002716 May be used in sections : defaults | frontend | listen | backend
2717 no | yes | yes | no
2718 Arguments :
2719 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002720 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +01002721 appear in the response, with the first letter of each word in
2722 upper case. The header name will not appear in the logs, only the
2723 value is reported, but the position in the logs is respected.
2724
2725 <length> is the maximum number of characters to extract from the value and
2726 report in the logs. The string will be truncated on the right if
2727 it exceeds <length>.
2728
Willy Tarreau4460d032012-11-21 23:37:37 +01002729 The complete value of the last occurrence of the header is captured. The
Willy Tarreau0ba27502007-12-24 16:55:16 +01002730 result will be added to the logs between braces ('{}') after the captured
2731 request headers. If multiple headers are captured, they will be delimited by
2732 a vertical bar ('|') and will appear in the same order they were declared in
Willy Tarreaucc6c8912009-02-22 10:53:55 +01002733 the configuration. Non-existent headers will be logged just as an empty
2734 string. Common uses for response header captures include the "Content-length"
2735 header which indicates how many bytes are expected to be returned, the
2736 "Location" header to track redirections.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002737
Willy Tarreau0900abb2012-11-22 00:21:46 +01002738 There is no limit to the number of captured response headers nor to their
2739 length, though it is wise to keep them low to limit memory usage per session.
2740 In order to keep log format consistent for a same frontend, header captures
2741 can only be declared in a frontend. It is not possible to specify a capture
2742 in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002743
2744 Example:
2745 capture response header Content-length len 9
2746 capture response header Location len 15
2747
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002748 See also : "capture cookie", "capture request header" as well as section 8
Willy Tarreau0ba27502007-12-24 16:55:16 +01002749 about logging.
2750
2751
Cyril Bontéf0c60612010-02-06 14:44:47 +01002752clitimeout <timeout> (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +01002753 Set the maximum inactivity time on the client side.
2754 May be used in sections : defaults | frontend | listen | backend
2755 yes | yes | yes | no
2756 Arguments :
2757 <timeout> is the timeout value is specified in milliseconds by default, but
2758 can be in any other unit if the number is suffixed by the unit,
2759 as explained at the top of this document.
2760
2761 The inactivity timeout applies when the client is expected to acknowledge or
2762 send data. In HTTP mode, this timeout is particularly important to consider
2763 during the first phase, when the client sends the request, and during the
2764 response while it is reading data sent by the server. The value is specified
2765 in milliseconds by default, but can be in any other unit if the number is
2766 suffixed by the unit, as specified at the top of this document. In TCP mode
2767 (and to a lesser extent, in HTTP mode), it is highly recommended that the
2768 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002769 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01002770 losses by specifying timeouts that are slightly above multiples of 3 seconds
2771 (eg: 4 or 5 seconds).
2772
2773 This parameter is specific to frontends, but can be specified once for all in
2774 "defaults" sections. This is in fact one of the easiest solutions not to
2775 forget about it. An unspecified timeout results in an infinite timeout, which
2776 is not recommended. Such a usage is accepted and works but reports a warning
2777 during startup because it may results in accumulation of expired sessions in
2778 the system if the system's timeouts are not configured either.
2779
2780 This parameter is provided for compatibility but is currently deprecated.
2781 Please use "timeout client" instead.
2782
Willy Tarreau036fae02008-01-06 13:24:40 +01002783 See also : "timeout client", "timeout http-request", "timeout server", and
2784 "srvtimeout".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002785
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002786compression algo <algorithm> ...
2787compression type <mime type> ...
Willy Tarreau70737d12012-10-27 00:34:28 +02002788compression offload
William Lallemand82fe75c2012-10-23 10:25:10 +02002789 Enable HTTP compression.
2790 May be used in sections : defaults | frontend | listen | backend
2791 yes | yes | yes | yes
2792 Arguments :
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002793 algo is followed by the list of supported compression algorithms.
2794 type is followed by the list of MIME types that will be compressed.
2795 offload makes haproxy work as a compression offloader only (see notes).
2796
2797 The currently supported algorithms are :
Willy Tarreauc91840a2015-03-28 17:00:39 +01002798 identity this is mostly for debugging, and it was useful for developing
2799 the compression feature. Identity does not apply any change on
2800 data.
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002801
Willy Tarreauc91840a2015-03-28 17:00:39 +01002802 gzip applies gzip compression. This setting is only available when
Baptiste Assmannf085d632015-12-21 17:57:32 +01002803 support for zlib or libslz was built in.
Willy Tarreauc91840a2015-03-28 17:00:39 +01002804
2805 deflate same as "gzip", but with deflate algorithm and zlib format.
2806 Note that this algorithm has ambiguous support on many
2807 browsers and no support at all from recent ones. It is
2808 strongly recommended not to use it for anything else than
2809 experimentation. This setting is only available when support
Baptiste Assmannf085d632015-12-21 17:57:32 +01002810 for zlib or libslz was built in.
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002811
Willy Tarreauc91840a2015-03-28 17:00:39 +01002812 raw-deflate same as "deflate" without the zlib wrapper, and used as an
2813 alternative when the browser wants "deflate". All major
2814 browsers understand it and despite violating the standards,
2815 it is known to work better than "deflate", at least on MSIE
2816 and some versions of Safari. Do not use it in conjunction
2817 with "deflate", use either one or the other since both react
2818 to the same Accept-Encoding token. This setting is only
Baptiste Assmannf085d632015-12-21 17:57:32 +01002819 available when support for zlib or libslz was built in.
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002820
Dmitry Sivachenko87c208b2012-11-22 20:03:26 +04002821 Compression will be activated depending on the Accept-Encoding request
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002822 header. With identity, it does not take care of that header.
Dmitry Sivachenkoc9f3b452012-11-28 17:47:11 +04002823 If backend servers support HTTP compression, these directives
2824 will be no-op: haproxy will see the compressed response and will not
2825 compress again. If backend servers do not support HTTP compression and
2826 there is Accept-Encoding header in request, haproxy will compress the
2827 matching response.
Willy Tarreau70737d12012-10-27 00:34:28 +02002828
2829 The "offload" setting makes haproxy remove the Accept-Encoding header to
2830 prevent backend servers from compressing responses. It is strongly
2831 recommended not to do this because this means that all the compression work
2832 will be done on the single point where haproxy is located. However in some
2833 deployment scenarios, haproxy may be installed in front of a buggy gateway
Dmitry Sivachenkoc9f3b452012-11-28 17:47:11 +04002834 with broken HTTP compression implementation which can't be turned off.
2835 In that case haproxy can be used to prevent that gateway from emitting
2836 invalid payloads. In this case, simply removing the header in the
2837 configuration does not work because it applies before the header is parsed,
2838 so that prevents haproxy from compressing. The "offload" setting should
Willy Tarreauffea9fd2014-07-12 16:37:02 +02002839 then be used for such scenarios. Note: for now, the "offload" setting is
2840 ignored when set in a defaults section.
William Lallemand82fe75c2012-10-23 10:25:10 +02002841
William Lallemand05097442012-11-20 12:14:28 +01002842 Compression is disabled when:
Baptiste Assmann650d53d2013-01-05 15:44:44 +01002843 * the request does not advertise a supported compression algorithm in the
2844 "Accept-Encoding" header
2845 * the response message is not HTTP/1.1
William Lallemandd3002612012-11-26 14:34:47 +01002846 * HTTP status code is not 200
William Lallemand8bb4e342013-12-10 17:28:48 +01002847 * response header "Transfer-Encoding" contains "chunked" (Temporary
2848 Workaround)
Baptiste Assmann650d53d2013-01-05 15:44:44 +01002849 * response contain neither a "Content-Length" header nor a
2850 "Transfer-Encoding" whose last value is "chunked"
2851 * response contains a "Content-Type" header whose first value starts with
2852 "multipart"
2853 * the response contains the "no-transform" value in the "Cache-control"
2854 header
2855 * User-Agent matches "Mozilla/4" unless it is MSIE 6 with XP SP2, or MSIE 7
2856 and later
2857 * The response contains a "Content-Encoding" header, indicating that the
2858 response is already compressed (see compression offload)
William Lallemand05097442012-11-20 12:14:28 +01002859
Baptiste Assmann650d53d2013-01-05 15:44:44 +01002860 Note: The compression does not rewrite Etag headers, and does not emit the
2861 Warning header.
William Lallemand05097442012-11-20 12:14:28 +01002862
William Lallemand82fe75c2012-10-23 10:25:10 +02002863 Examples :
2864 compression algo gzip
2865 compression type text/html text/plain
Willy Tarreau0ba27502007-12-24 16:55:16 +01002866
Christopher Fauletc3fe5332016-04-07 15:30:10 +02002867
Cyril Bontéf0c60612010-02-06 14:44:47 +01002868contimeout <timeout> (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +01002869 Set the maximum time to wait for a connection attempt to a server to succeed.
2870 May be used in sections : defaults | frontend | listen | backend
2871 yes | no | yes | yes
2872 Arguments :
2873 <timeout> is the timeout value is specified in milliseconds by default, but
2874 can be in any other unit if the number is suffixed by the unit,
2875 as explained at the top of this document.
2876
2877 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002878 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreaud72758d2010-01-12 10:42:19 +01002879 cover one or several TCP packet losses by specifying timeouts that are
Willy Tarreau0ba27502007-12-24 16:55:16 +01002880 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
2881 connect timeout also presets the queue timeout to the same value if this one
2882 has not been specified. Historically, the contimeout was also used to set the
2883 tarpit timeout in a listen section, which is not possible in a pure frontend.
2884
2885 This parameter is specific to backends, but can be specified once for all in
2886 "defaults" sections. This is in fact one of the easiest solutions not to
2887 forget about it. An unspecified timeout results in an infinite timeout, which
2888 is not recommended. Such a usage is accepted and works but reports a warning
2889 during startup because it may results in accumulation of failed sessions in
2890 the system if the system's timeouts are not configured either.
2891
2892 This parameter is provided for backwards compatibility but is currently
2893 deprecated. Please use "timeout connect", "timeout queue" or "timeout tarpit"
2894 instead.
2895
2896 See also : "timeout connect", "timeout queue", "timeout tarpit",
2897 "timeout server", "contimeout".
2898
2899
Willy Tarreau55165fe2009-05-10 12:02:55 +02002900cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ]
Willy Tarreau4992dd22012-05-31 21:02:17 +02002901 [ postonly ] [ preserve ] [ httponly ] [ secure ]
2902 [ domain <domain> ]* [ maxidle <idle> ] [ maxlife <life> ]
Olivier Houchard4e694042017-03-14 20:01:29 +01002903 [ dynamic ]
Willy Tarreau0ba27502007-12-24 16:55:16 +01002904 Enable cookie-based persistence in a backend.
2905 May be used in sections : defaults | frontend | listen | backend
2906 yes | no | yes | yes
2907 Arguments :
2908 <name> is the name of the cookie which will be monitored, modified or
2909 inserted in order to bring persistence. This cookie is sent to
2910 the client via a "Set-Cookie" header in the response, and is
2911 brought back by the client in a "Cookie" header in all requests.
2912 Special care should be taken to choose a name which does not
2913 conflict with any likely application cookie. Also, if the same
2914 backends are subject to be used by the same clients (eg:
2915 HTTP/HTTPS), care should be taken to use different cookie names
2916 between all backends if persistence between them is not desired.
2917
2918 rewrite This keyword indicates that the cookie will be provided by the
2919 server and that haproxy will have to modify its value to set the
2920 server's identifier in it. This mode is handy when the management
2921 of complex combinations of "Set-cookie" and "Cache-control"
2922 headers is left to the application. The application can then
2923 decide whether or not it is appropriate to emit a persistence
Lukas Tribusf01a9cd2016-02-03 18:09:37 +01002924 cookie. Since all responses should be monitored, this mode
2925 doesn't work in HTTP tunnel mode. Unless the application
2926 behaviour is very complex and/or broken, it is advised not to
2927 start with this mode for new deployments. This keyword is
2928 incompatible with "insert" and "prefix".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002929
2930 insert This keyword indicates that the persistence cookie will have to
Willy Tarreaua79094d2010-08-31 22:54:15 +02002931 be inserted by haproxy in server responses if the client did not
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002932
Willy Tarreaua79094d2010-08-31 22:54:15 +02002933 already have a cookie that would have permitted it to access this
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002934 server. When used without the "preserve" option, if the server
2935 emits a cookie with the same name, it will be remove before
2936 processing. For this reason, this mode can be used to upgrade
2937 existing configurations running in the "rewrite" mode. The cookie
2938 will only be a session cookie and will not be stored on the
2939 client's disk. By default, unless the "indirect" option is added,
2940 the server will see the cookies emitted by the client. Due to
2941 caching effects, it is generally wise to add the "nocache" or
2942 "postonly" keywords (see below). The "insert" keyword is not
2943 compatible with "rewrite" and "prefix".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002944
2945 prefix This keyword indicates that instead of relying on a dedicated
2946 cookie for the persistence, an existing one will be completed.
2947 This may be needed in some specific environments where the client
2948 does not support more than one single cookie and the application
2949 already needs it. In this case, whenever the server sets a cookie
2950 named <name>, it will be prefixed with the server's identifier
2951 and a delimiter. The prefix will be removed from all client
2952 requests so that the server still finds the cookie it emitted.
2953 Since all requests and responses are subject to being modified,
Lukas Tribusf01a9cd2016-02-03 18:09:37 +01002954 this mode doesn't work with tunnel mode. The "prefix" keyword is
Willy Tarreau37229df2011-10-17 12:24:55 +02002955 not compatible with "rewrite" and "insert". Note: it is highly
2956 recommended not to use "indirect" with "prefix", otherwise server
2957 cookie updates would not be sent to clients.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002958
Willy Tarreaua79094d2010-08-31 22:54:15 +02002959 indirect When this option is specified, no cookie will be emitted to a
2960 client which already has a valid one for the server which has
2961 processed the request. If the server sets such a cookie itself,
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002962 it will be removed, unless the "preserve" option is also set. In
2963 "insert" mode, this will additionally remove cookies from the
2964 requests transmitted to the server, making the persistence
2965 mechanism totally transparent from an application point of view.
Willy Tarreau37229df2011-10-17 12:24:55 +02002966 Note: it is highly recommended not to use "indirect" with
2967 "prefix", otherwise server cookie updates would not be sent to
2968 clients.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002969
2970 nocache This option is recommended in conjunction with the insert mode
2971 when there is a cache between the client and HAProxy, as it
2972 ensures that a cacheable response will be tagged non-cacheable if
2973 a cookie needs to be inserted. This is important because if all
2974 persistence cookies are added on a cacheable home page for
2975 instance, then all customers will then fetch the page from an
2976 outer cache and will all share the same persistence cookie,
2977 leading to one server receiving much more traffic than others.
2978 See also the "insert" and "postonly" options.
2979
2980 postonly This option ensures that cookie insertion will only be performed
2981 on responses to POST requests. It is an alternative to the
2982 "nocache" option, because POST responses are not cacheable, so
2983 this ensures that the persistence cookie will never get cached.
2984 Since most sites do not need any sort of persistence before the
2985 first POST which generally is a login request, this is a very
2986 efficient method to optimize caching without risking to find a
2987 persistence cookie in the cache.
2988 See also the "insert" and "nocache" options.
2989
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002990 preserve This option may only be used with "insert" and/or "indirect". It
2991 allows the server to emit the persistence cookie itself. In this
2992 case, if a cookie is found in the response, haproxy will leave it
2993 untouched. This is useful in order to end persistence after a
2994 logout request for instance. For this, the server just has to
2995 emit a cookie with an invalid value (eg: empty) or with a date in
2996 the past. By combining this mechanism with the "disable-on-404"
2997 check option, it is possible to perform a completely graceful
2998 shutdown because users will definitely leave the server after
2999 they logout.
3000
Willy Tarreau4992dd22012-05-31 21:02:17 +02003001 httponly This option tells haproxy to add an "HttpOnly" cookie attribute
3002 when a cookie is inserted. This attribute is used so that a
3003 user agent doesn't share the cookie with non-HTTP components.
3004 Please check RFC6265 for more information on this attribute.
3005
3006 secure This option tells haproxy to add a "Secure" cookie attribute when
3007 a cookie is inserted. This attribute is used so that a user agent
3008 never emits this cookie over non-secure channels, which means
3009 that a cookie learned with this flag will be presented only over
3010 SSL/TLS connections. Please check RFC6265 for more information on
3011 this attribute.
3012
Krzysztof Piotr Oledzkiefe3b6f2008-05-23 23:49:32 +02003013 domain This option allows to specify the domain at which a cookie is
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003014 inserted. It requires exactly one parameter: a valid domain
Willy Tarreau68a897b2009-12-03 23:28:34 +01003015 name. If the domain begins with a dot, the browser is allowed to
3016 use it for any host ending with that name. It is also possible to
3017 specify several domain names by invoking this option multiple
3018 times. Some browsers might have small limits on the number of
3019 domains, so be careful when doing that. For the record, sending
3020 10 domains to MSIE 6 or Firefox 2 works as expected.
Krzysztof Piotr Oledzkiefe3b6f2008-05-23 23:49:32 +02003021
Willy Tarreau996a92c2010-10-13 19:30:47 +02003022 maxidle This option allows inserted cookies to be ignored after some idle
3023 time. It only works with insert-mode cookies. When a cookie is
3024 sent to the client, the date this cookie was emitted is sent too.
3025 Upon further presentations of this cookie, if the date is older
3026 than the delay indicated by the parameter (in seconds), it will
3027 be ignored. Otherwise, it will be refreshed if needed when the
3028 response is sent to the client. This is particularly useful to
3029 prevent users who never close their browsers from remaining for
3030 too long on the same server (eg: after a farm size change). When
3031 this option is set and a cookie has no date, it is always
3032 accepted, but gets refreshed in the response. This maintains the
3033 ability for admins to access their sites. Cookies that have a
3034 date in the future further than 24 hours are ignored. Doing so
3035 lets admins fix timezone issues without risking kicking users off
3036 the site.
3037
3038 maxlife This option allows inserted cookies to be ignored after some life
3039 time, whether they're in use or not. It only works with insert
3040 mode cookies. When a cookie is first sent to the client, the date
3041 this cookie was emitted is sent too. Upon further presentations
3042 of this cookie, if the date is older than the delay indicated by
3043 the parameter (in seconds), it will be ignored. If the cookie in
3044 the request has no date, it is accepted and a date will be set.
3045 Cookies that have a date in the future further than 24 hours are
3046 ignored. Doing so lets admins fix timezone issues without risking
3047 kicking users off the site. Contrary to maxidle, this value is
3048 not refreshed, only the first visit date counts. Both maxidle and
3049 maxlife may be used at the time. This is particularly useful to
3050 prevent users who never close their browsers from remaining for
3051 too long on the same server (eg: after a farm size change). This
3052 is stronger than the maxidle method in that it forces a
3053 redispatch after some absolute delay.
3054
Olivier Houchard4e694042017-03-14 20:01:29 +01003055 dynamic Activate dynamic cookies. When used, a session cookie is
3056 dynamically created for each server, based on the IP and port
3057 of the server, and a secret key, specified in the
3058 "dynamic-cookie-key" backend directive.
3059 The cookie will be regenerated each time the IP address change,
3060 and is only generated for IPv4/IPv6.
3061
Willy Tarreau0ba27502007-12-24 16:55:16 +01003062 There can be only one persistence cookie per HTTP backend, and it can be
3063 declared in a defaults section. The value of the cookie will be the value
3064 indicated after the "cookie" keyword in a "server" statement. If no cookie
3065 is declared for a given server, the cookie is not set.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003066
Willy Tarreau0ba27502007-12-24 16:55:16 +01003067 Examples :
3068 cookie JSESSIONID prefix
3069 cookie SRV insert indirect nocache
3070 cookie SRV insert postonly indirect
Willy Tarreau996a92c2010-10-13 19:30:47 +02003071 cookie SRV insert indirect nocache maxidle 30m maxlife 8h
Willy Tarreau0ba27502007-12-24 16:55:16 +01003072
Willy Tarreau294d0f02015-08-10 19:40:12 +02003073 See also : "balance source", "capture cookie", "server" and "ignore-persist".
Willy Tarreau0ba27502007-12-24 16:55:16 +01003074
Willy Tarreau983e01e2010-01-11 18:42:06 +01003075
Thierry FOURNIERa0a1b752015-05-26 17:44:32 +02003076declare capture [ request | response ] len <length>
3077 Declares a capture slot.
3078 May be used in sections : defaults | frontend | listen | backend
3079 no | yes | yes | no
3080 Arguments:
3081 <length> is the length allowed for the capture.
3082
3083 This declaration is only available in the frontend or listen section, but the
3084 reserved slot can be used in the backends. The "request" keyword allocates a
3085 capture slot for use in the request, and "response" allocates a capture slot
3086 for use in the response.
3087
3088 See also: "capture-req", "capture-res" (sample converters),
Baptiste Assmann5ac425c2015-10-21 23:13:46 +02003089 "capture.req.hdr", "capture.res.hdr" (sample fetches),
Thierry FOURNIERa0a1b752015-05-26 17:44:32 +02003090 "http-request capture" and "http-response capture".
3091
3092
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01003093default-server [param*]
3094 Change default options for a server in a backend
3095 May be used in sections : defaults | frontend | listen | backend
3096 yes | no | yes | yes
3097 Arguments:
Willy Tarreau983e01e2010-01-11 18:42:06 +01003098 <param*> is a list of parameters for this server. The "default-server"
3099 keyword accepts an important number of options and has a complete
3100 section dedicated to it. Please refer to section 5 for more
3101 details.
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01003102
Willy Tarreau983e01e2010-01-11 18:42:06 +01003103 Example :
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01003104 default-server inter 1000 weight 13
3105
3106 See also: "server" and section 5 about server options
Willy Tarreau0ba27502007-12-24 16:55:16 +01003107
Willy Tarreau983e01e2010-01-11 18:42:06 +01003108
Willy Tarreau0ba27502007-12-24 16:55:16 +01003109default_backend <backend>
3110 Specify the backend to use when no "use_backend" rule has been matched.
3111 May be used in sections : defaults | frontend | listen | backend
3112 yes | yes | yes | no
3113 Arguments :
3114 <backend> is the name of the backend to use.
3115
3116 When doing content-switching between frontend and backends using the
3117 "use_backend" keyword, it is often useful to indicate which backend will be
3118 used when no rule has matched. It generally is the dynamic backend which
3119 will catch all undetermined requests.
3120
Willy Tarreau0ba27502007-12-24 16:55:16 +01003121 Example :
3122
3123 use_backend dynamic if url_dyn
3124 use_backend static if url_css url_img extension_img
3125 default_backend dynamic
3126
Willy Tarreau98d04852015-05-26 12:18:29 +02003127 See also : "use_backend"
Willy Tarreau2769aa02007-12-27 18:26:09 +01003128
Willy Tarreau0ba27502007-12-24 16:55:16 +01003129
Baptiste Assmann27f51342013-10-09 06:51:49 +02003130description <string>
3131 Describe a listen, frontend or backend.
3132 May be used in sections : defaults | frontend | listen | backend
3133 no | yes | yes | yes
3134 Arguments : string
3135
3136 Allows to add a sentence to describe the related object in the HAProxy HTML
3137 stats page. The description will be printed on the right of the object name
3138 it describes.
3139 No need to backslash spaces in the <string> arguments.
3140
3141
Willy Tarreau0ba27502007-12-24 16:55:16 +01003142disabled
3143 Disable a proxy, frontend or backend.
3144 May be used in sections : defaults | frontend | listen | backend
3145 yes | yes | yes | yes
3146 Arguments : none
3147
3148 The "disabled" keyword is used to disable an instance, mainly in order to
3149 liberate a listening port or to temporarily disable a service. The instance
3150 will still be created and its configuration will be checked, but it will be
3151 created in the "stopped" state and will appear as such in the statistics. It
3152 will not receive any traffic nor will it send any health-checks or logs. It
3153 is possible to disable many instances at once by adding the "disabled"
3154 keyword in a "defaults" section.
3155
3156 See also : "enabled"
3157
3158
Willy Tarreau5ce94572010-06-07 14:35:41 +02003159dispatch <address>:<port>
3160 Set a default server address
3161 May be used in sections : defaults | frontend | listen | backend
3162 no | no | yes | yes
Cyril Bonté108cf6e2012-04-21 23:30:29 +02003163 Arguments :
Willy Tarreau5ce94572010-06-07 14:35:41 +02003164
3165 <address> is the IPv4 address of the default server. Alternatively, a
3166 resolvable hostname is supported, but this name will be resolved
3167 during start-up.
3168
3169 <ports> is a mandatory port specification. All connections will be sent
3170 to this port, and it is not permitted to use port offsets as is
3171 possible with normal servers.
3172
Willy Tarreau787aed52011-04-15 06:45:37 +02003173 The "dispatch" keyword designates a default server for use when no other
Willy Tarreau5ce94572010-06-07 14:35:41 +02003174 server can take the connection. In the past it was used to forward non
3175 persistent connections to an auxiliary load balancer. Due to its simple
3176 syntax, it has also been used for simple TCP relays. It is recommended not to
3177 use it for more clarity, and to use the "server" directive instead.
3178
3179 See also : "server"
3180
Olivier Houchard4e694042017-03-14 20:01:29 +01003181
3182dynamic-cookie-key <string>
3183 Set the dynamic cookie secret key for a backend.
3184 May be used in sections : defaults | frontend | listen | backend
3185 yes | no | yes | yes
3186 Arguments : The secret key to be used.
3187
3188 When dynamic cookies are enabled (see the "dynamic" directive for cookie),
3189 a dynamic cookie is created for each server (unless one is explicitely
3190 specified on the "server" line), using a hash of the IP address of the
3191 server, the TCP port, and the secret key.
3192 That way, we can ensure session persistence accross multiple load-balancers,
3193 even if servers are dynamically added or removed.
Willy Tarreau5ce94572010-06-07 14:35:41 +02003194
Willy Tarreau0ba27502007-12-24 16:55:16 +01003195enabled
3196 Enable a proxy, frontend or backend.
3197 May be used in sections : defaults | frontend | listen | backend
3198 yes | yes | yes | yes
3199 Arguments : none
3200
3201 The "enabled" keyword is used to explicitly enable an instance, when the
3202 defaults has been set to "disabled". This is very rarely used.
3203
3204 See also : "disabled"
3205
3206
3207errorfile <code> <file>
3208 Return a file contents instead of errors generated by HAProxy
3209 May be used in sections : defaults | frontend | listen | backend
3210 yes | yes | yes | yes
3211 Arguments :
3212 <code> is the HTTP status code. Currently, HAProxy is capable of
Olivier Houchard51a76d82017-10-02 16:12:07 +02003213 generating codes 200, 400, 403, 405, 408, 425, 429, 500, 502,
3214 503, and 504.
Willy Tarreau0ba27502007-12-24 16:55:16 +01003215
3216 <file> designates a file containing the full HTTP response. It is
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003217 recommended to follow the common practice of appending ".http" to
Willy Tarreau0ba27502007-12-24 16:55:16 +01003218 the filename so that people do not confuse the response with HTML
Willy Tarreau59140a22009-02-22 12:02:30 +01003219 error pages, and to use absolute paths, since files are read
3220 before any chroot is performed.
Willy Tarreau0ba27502007-12-24 16:55:16 +01003221
3222 It is important to understand that this keyword is not meant to rewrite
3223 errors returned by the server, but errors detected and returned by HAProxy.
3224 This is why the list of supported errors is limited to a small set.
3225
Willy Tarreauae94d4d2011-05-11 16:28:49 +02003226 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
3227
Willy Tarreau0ba27502007-12-24 16:55:16 +01003228 The files are returned verbatim on the TCP socket. This allows any trick such
3229 as redirections to another URL or site, as well as tricks to clean cookies,
3230 force enable or disable caching, etc... The package provides default error
3231 files returning the same contents as default errors.
3232
Willy Tarreau59140a22009-02-22 12:02:30 +01003233 The files should not exceed the configured buffer size (BUFSIZE), which
3234 generally is 8 or 16 kB, otherwise they will be truncated. It is also wise
3235 not to put any reference to local contents (eg: images) in order to avoid
3236 loops between the client and HAProxy when all servers are down, causing an
3237 error to be returned instead of an image. For better HTTP compliance, it is
3238 recommended that all header lines end with CR-LF and not LF alone.
3239
Willy Tarreau0ba27502007-12-24 16:55:16 +01003240 The files are read at the same time as the configuration and kept in memory.
3241 For this reason, the errors continue to be returned even when the process is
3242 chrooted, and no file change is considered while the process is running. A
Willy Tarreauc27debf2008-01-06 08:57:02 +01003243 simple method for developing those files consists in associating them to the
Willy Tarreau0ba27502007-12-24 16:55:16 +01003244 403 status code and interrogating a blocked URL.
3245
3246 See also : "errorloc", "errorloc302", "errorloc303"
3247
Willy Tarreau59140a22009-02-22 12:02:30 +01003248 Example :
3249 errorfile 400 /etc/haproxy/errorfiles/400badreq.http
Willy Tarreau989222a2016-01-15 10:26:26 +01003250 errorfile 408 /dev/null # work around Chrome pre-connect bug
Willy Tarreau59140a22009-02-22 12:02:30 +01003251 errorfile 403 /etc/haproxy/errorfiles/403forbid.http
3252 errorfile 503 /etc/haproxy/errorfiles/503sorry.http
3253
Willy Tarreau2769aa02007-12-27 18:26:09 +01003254
3255errorloc <code> <url>
3256errorloc302 <code> <url>
3257 Return an HTTP redirection to a URL instead of errors generated by HAProxy
3258 May be used in sections : defaults | frontend | listen | backend
3259 yes | yes | yes | yes
3260 Arguments :
3261 <code> is the HTTP status code. Currently, HAProxy is capable of
Olivier Houchard51a76d82017-10-02 16:12:07 +02003262 generating codes 200, 400, 403, 405, 408, 425, 429, 500, 502,
3263 503, and 504.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003264
3265 <url> it is the exact contents of the "Location" header. It may contain
3266 either a relative URI to an error page hosted on the same site,
3267 or an absolute URI designating an error page on another site.
3268 Special care should be given to relative URIs to avoid redirect
3269 loops if the URI itself may generate the same error (eg: 500).
3270
3271 It is important to understand that this keyword is not meant to rewrite
3272 errors returned by the server, but errors detected and returned by HAProxy.
3273 This is why the list of supported errors is limited to a small set.
3274
Willy Tarreauae94d4d2011-05-11 16:28:49 +02003275 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
3276
Willy Tarreau2769aa02007-12-27 18:26:09 +01003277 Note that both keyword return the HTTP 302 status code, which tells the
3278 client to fetch the designated URL using the same HTTP method. This can be
3279 quite problematic in case of non-GET methods such as POST, because the URL
3280 sent to the client might not be allowed for something other than GET. To
Willy Tarreau989222a2016-01-15 10:26:26 +01003281 work around this problem, please use "errorloc303" which send the HTTP 303
Willy Tarreau2769aa02007-12-27 18:26:09 +01003282 status code, indicating to the client that the URL must be fetched with a GET
3283 request.
3284
3285 See also : "errorfile", "errorloc303"
3286
3287
3288errorloc303 <code> <url>
3289 Return an HTTP redirection to a URL instead of errors generated by HAProxy
3290 May be used in sections : defaults | frontend | listen | backend
3291 yes | yes | yes | yes
3292 Arguments :
3293 <code> is the HTTP status code. Currently, HAProxy is capable of
Olivier Houchard51a76d82017-10-02 16:12:07 +02003294 generating codes 200, 400, 403, 405, 408, 425, 429, 500, 502,
3295 503, and 504.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003296
3297 <url> it is the exact contents of the "Location" header. It may contain
3298 either a relative URI to an error page hosted on the same site,
3299 or an absolute URI designating an error page on another site.
3300 Special care should be given to relative URIs to avoid redirect
3301 loops if the URI itself may generate the same error (eg: 500).
3302
3303 It is important to understand that this keyword is not meant to rewrite
3304 errors returned by the server, but errors detected and returned by HAProxy.
3305 This is why the list of supported errors is limited to a small set.
3306
Willy Tarreauae94d4d2011-05-11 16:28:49 +02003307 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
3308
Willy Tarreau2769aa02007-12-27 18:26:09 +01003309 Note that both keyword return the HTTP 303 status code, which tells the
3310 client to fetch the designated URL using the same HTTP GET method. This
3311 solves the usual problems associated with "errorloc" and the 302 code. It is
3312 possible that some very old browsers designed before HTTP/1.1 do not support
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003313 it, but no such problem has been reported till now.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003314
3315 See also : "errorfile", "errorloc", "errorloc302"
3316
3317
Simon Horman51a1cf62015-02-03 13:00:44 +09003318email-alert from <emailaddr>
3319 Declare the from email address to be used in both the envelope and header
3320 of email alerts. This is the address that email alerts are sent from.
3321 May be used in sections: defaults | frontend | listen | backend
3322 yes | yes | yes | yes
3323
3324 Arguments :
3325
3326 <emailaddr> is the from email address to use when sending email alerts
3327
3328 Also requires "email-alert mailers" and "email-alert to" to be set
3329 and if so sending email alerts is enabled for the proxy.
3330
Simon Horman64e34162015-02-06 11:11:57 +09003331 See also : "email-alert level", "email-alert mailers",
Cyril Bonté307ee1e2015-09-28 23:16:06 +02003332 "email-alert myhostname", "email-alert to", section 3.6 about
3333 mailers.
Simon Horman64e34162015-02-06 11:11:57 +09003334
3335
3336email-alert level <level>
3337 Declare the maximum log level of messages for which email alerts will be
3338 sent. This acts as a filter on the sending of email alerts.
3339 May be used in sections: defaults | frontend | listen | backend
3340 yes | yes | yes | yes
3341
3342 Arguments :
3343
3344 <level> One of the 8 syslog levels:
3345 emerg alert crit err warning notice info debug
3346 The above syslog levels are ordered from lowest to highest.
3347
3348 By default level is alert
3349
3350 Also requires "email-alert from", "email-alert mailers" and
3351 "email-alert to" to be set and if so sending email alerts is enabled
3352 for the proxy.
3353
Simon Horman1421e212015-04-30 13:10:35 +09003354 Alerts are sent when :
3355
3356 * An un-paused server is marked as down and <level> is alert or lower
3357 * A paused server is marked as down and <level> is notice or lower
3358 * A server is marked as up or enters the drain state and <level>
3359 is notice or lower
3360 * "option log-health-checks" is enabled, <level> is info or lower,
3361 and a health check status update occurs
3362
Simon Horman64e34162015-02-06 11:11:57 +09003363 See also : "email-alert from", "email-alert mailers",
3364 "email-alert myhostname", "email-alert to",
Simon Horman51a1cf62015-02-03 13:00:44 +09003365 section 3.6 about mailers.
3366
3367
3368email-alert mailers <mailersect>
3369 Declare the mailers to be used when sending email alerts
3370 May be used in sections: defaults | frontend | listen | backend
3371 yes | yes | yes | yes
3372
3373 Arguments :
3374
3375 <mailersect> is the name of the mailers section to send email alerts.
3376
3377 Also requires "email-alert from" and "email-alert to" to be set
3378 and if so sending email alerts is enabled for the proxy.
3379
Simon Horman64e34162015-02-06 11:11:57 +09003380 See also : "email-alert from", "email-alert level", "email-alert myhostname",
3381 "email-alert to", section 3.6 about mailers.
Simon Horman51a1cf62015-02-03 13:00:44 +09003382
3383
3384email-alert myhostname <hostname>
3385 Declare the to hostname address to be used when communicating with
3386 mailers.
3387 May be used in sections: defaults | frontend | listen | backend
3388 yes | yes | yes | yes
3389
3390 Arguments :
3391
Baptiste Assmann738bad92015-12-21 15:27:53 +01003392 <hostname> is the hostname to use when communicating with mailers
Simon Horman51a1cf62015-02-03 13:00:44 +09003393
3394 By default the systems hostname is used.
3395
3396 Also requires "email-alert from", "email-alert mailers" and
3397 "email-alert to" to be set and if so sending email alerts is enabled
3398 for the proxy.
3399
Simon Horman64e34162015-02-06 11:11:57 +09003400 See also : "email-alert from", "email-alert level", "email-alert mailers",
3401 "email-alert to", section 3.6 about mailers.
Simon Horman51a1cf62015-02-03 13:00:44 +09003402
3403
3404email-alert to <emailaddr>
3405 Declare both the recipent address in the envelope and to address in the
3406 header of email alerts. This is the address that email alerts are sent to.
3407 May be used in sections: defaults | frontend | listen | backend
3408 yes | yes | yes | yes
3409
3410 Arguments :
3411
3412 <emailaddr> is the to email address to use when sending email alerts
3413
3414 Also requires "email-alert mailers" and "email-alert to" to be set
3415 and if so sending email alerts is enabled for the proxy.
3416
Simon Horman64e34162015-02-06 11:11:57 +09003417 See also : "email-alert from", "email-alert level", "email-alert mailers",
Simon Horman51a1cf62015-02-03 13:00:44 +09003418 "email-alert myhostname", section 3.6 about mailers.
3419
3420
Willy Tarreau4de91492010-01-22 19:10:05 +01003421force-persist { if | unless } <condition>
3422 Declare a condition to force persistence on down servers
3423 May be used in sections: defaults | frontend | listen | backend
3424 no | yes | yes | yes
3425
3426 By default, requests are not dispatched to down servers. It is possible to
3427 force this using "option persist", but it is unconditional and redispatches
3428 to a valid server if "option redispatch" is set. That leaves with very little
3429 possibilities to force some requests to reach a server which is artificially
3430 marked down for maintenance operations.
3431
3432 The "force-persist" statement allows one to declare various ACL-based
3433 conditions which, when met, will cause a request to ignore the down status of
3434 a server and still try to connect to it. That makes it possible to start a
3435 server, still replying an error to the health checks, and run a specially
3436 configured browser to test the service. Among the handy methods, one could
3437 use a specific source IP address, or a specific cookie. The cookie also has
3438 the advantage that it can easily be added/removed on the browser from a test
3439 page. Once the service is validated, it is then possible to open the service
3440 to the world by returning a valid response to health checks.
3441
3442 The forced persistence is enabled when an "if" condition is met, or unless an
3443 "unless" condition is met. The final redispatch is always disabled when this
3444 is used.
3445
Cyril Bonté0d4bf012010-04-25 23:21:46 +02003446 See also : "option redispatch", "ignore-persist", "persist",
Cyril Bontéa8e7bbc2010-04-25 22:29:29 +02003447 and section 7 about ACL usage.
Willy Tarreau4de91492010-01-22 19:10:05 +01003448
Christopher Fauletc3fe5332016-04-07 15:30:10 +02003449
3450filter <name> [param*]
3451 Add the filter <name> in the filter list attached to the proxy.
3452 May be used in sections : defaults | frontend | listen | backend
3453 no | yes | yes | yes
3454 Arguments :
3455 <name> is the name of the filter. Officially supported filters are
3456 referenced in section 9.
3457
Tim Düsterhus4896c442016-11-29 02:15:19 +01003458 <param*> is a list of parameters accepted by the filter <name>. The
Christopher Fauletc3fe5332016-04-07 15:30:10 +02003459 parsing of these parameters are the responsibility of the
Tim Düsterhus4896c442016-11-29 02:15:19 +01003460 filter. Please refer to the documentation of the corresponding
3461 filter (section 9) for all details on the supported parameters.
Christopher Fauletc3fe5332016-04-07 15:30:10 +02003462
3463 Multiple occurrences of the filter line can be used for the same proxy. The
3464 same filter can be referenced many times if needed.
3465
3466 Example:
3467 listen
3468 bind *:80
3469
3470 filter trace name BEFORE-HTTP-COMP
3471 filter compression
3472 filter trace name AFTER-HTTP-COMP
3473
3474 compression algo gzip
3475 compression offload
3476
3477 server srv1 192.168.0.1:80
3478
3479 See also : section 9.
3480
Willy Tarreau4de91492010-01-22 19:10:05 +01003481
Willy Tarreau2769aa02007-12-27 18:26:09 +01003482fullconn <conns>
3483 Specify at what backend load the servers will reach their maxconn
3484 May be used in sections : defaults | frontend | listen | backend
3485 yes | no | yes | yes
3486 Arguments :
3487 <conns> is the number of connections on the backend which will make the
3488 servers use the maximal number of connections.
3489
Willy Tarreau198a7442008-01-17 12:05:32 +01003490 When a server has a "maxconn" parameter specified, it means that its number
Willy Tarreau2769aa02007-12-27 18:26:09 +01003491 of concurrent connections will never go higher. Additionally, if it has a
Willy Tarreau198a7442008-01-17 12:05:32 +01003492 "minconn" parameter, it indicates a dynamic limit following the backend's
Willy Tarreau2769aa02007-12-27 18:26:09 +01003493 load. The server will then always accept at least <minconn> connections,
3494 never more than <maxconn>, and the limit will be on the ramp between both
3495 values when the backend has less than <conns> concurrent connections. This
3496 makes it possible to limit the load on the servers during normal loads, but
3497 push it further for important loads without overloading the servers during
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003498 exceptional loads.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003499
Willy Tarreaufbb78422011-06-05 15:38:35 +02003500 Since it's hard to get this value right, haproxy automatically sets it to
3501 10% of the sum of the maxconns of all frontends that may branch to this
Bertrand Jacquin702d44f2013-11-19 11:43:06 +01003502 backend (based on "use_backend" and "default_backend" rules). That way it's
3503 safe to leave it unset. However, "use_backend" involving dynamic names are
3504 not counted since there is no way to know if they could match or not.
Willy Tarreaufbb78422011-06-05 15:38:35 +02003505
Willy Tarreau2769aa02007-12-27 18:26:09 +01003506 Example :
3507 # The servers will accept between 100 and 1000 concurrent connections each
3508 # and the maximum of 1000 will be reached when the backend reaches 10000
3509 # connections.
3510 backend dynamic
3511 fullconn 10000
3512 server srv1 dyn1:80 minconn 100 maxconn 1000
3513 server srv2 dyn2:80 minconn 100 maxconn 1000
3514
3515 See also : "maxconn", "server"
3516
3517
3518grace <time>
3519 Maintain a proxy operational for some time after a soft stop
3520 May be used in sections : defaults | frontend | listen | backend
Cyril Bonté99ed3272010-01-24 23:29:44 +01003521 yes | yes | yes | yes
Willy Tarreau2769aa02007-12-27 18:26:09 +01003522 Arguments :
3523 <time> is the time (by default in milliseconds) for which the instance
3524 will remain operational with the frontend sockets still listening
3525 when a soft-stop is received via the SIGUSR1 signal.
3526
3527 This may be used to ensure that the services disappear in a certain order.
3528 This was designed so that frontends which are dedicated to monitoring by an
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003529 external equipment fail immediately while other ones remain up for the time
Willy Tarreau2769aa02007-12-27 18:26:09 +01003530 needed by the equipment to detect the failure.
3531
3532 Note that currently, there is very little benefit in using this parameter,
3533 and it may in fact complicate the soft-reconfiguration process more than
3534 simplify it.
3535
Willy Tarreau0ba27502007-12-24 16:55:16 +01003536
Andrew Rodland17be45e2016-10-25 17:04:12 -04003537hash-balance-factor <factor>
3538 Specify the balancing factor for bounded-load consistent hashing
3539 May be used in sections : defaults | frontend | listen | backend
3540 yes | no | no | yes
3541 Arguments :
3542 <factor> is the control for the maximum number of concurrent requests to
3543 send to a server, expressed as a percentage of the average number
3544 of concurrent requests across all of the active servers.
3545
3546 Specifying a "hash-balance-factor" for a server with "hash-type consistent"
3547 enables an algorithm that prevents any one server from getting too many
3548 requests at once, even if some hash buckets receive many more requests than
3549 others. Setting <factor> to 0 (the default) disables the feature. Otherwise,
3550 <factor> is a percentage greater than 100. For example, if <factor> is 150,
3551 then no server will be allowed to have a load more than 1.5 times the average.
3552 If server weights are used, they will be respected.
3553
3554 If the first-choice server is disqualified, the algorithm will choose another
3555 server based on the request hash, until a server with additional capacity is
3556 found. A higher <factor> allows more imbalance between the servers, while a
3557 lower <factor> means that more servers will be checked on average, affecting
3558 performance. Reasonable values are from 125 to 200.
3559
3560 See also : "balance" and "hash-type".
3561
3562
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003563hash-type <method> <function> <modifier>
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003564 Specify a method to use for mapping hashes to servers
3565 May be used in sections : defaults | frontend | listen | backend
3566 yes | no | yes | yes
3567 Arguments :
Bhaskar98634f02013-10-29 23:30:51 -04003568 <method> is the method used to select a server from the hash computed by
3569 the <function> :
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003570
Bhaskar98634f02013-10-29 23:30:51 -04003571 map-based the hash table is a static array containing all alive servers.
3572 The hashes will be very smooth, will consider weights, but
3573 will be static in that weight changes while a server is up
3574 will be ignored. This means that there will be no slow start.
3575 Also, since a server is selected by its position in the array,
3576 most mappings are changed when the server count changes. This
3577 means that when a server goes up or down, or when a server is
3578 added to a farm, most connections will be redistributed to
3579 different servers. This can be inconvenient with caches for
3580 instance.
Willy Tarreau798a39c2010-11-24 15:04:29 +01003581
Bhaskar98634f02013-10-29 23:30:51 -04003582 consistent the hash table is a tree filled with many occurrences of each
3583 server. The hash key is looked up in the tree and the closest
3584 server is chosen. This hash is dynamic, it supports changing
3585 weights while the servers are up, so it is compatible with the
3586 slow start feature. It has the advantage that when a server
3587 goes up or down, only its associations are moved. When a
3588 server is added to the farm, only a few part of the mappings
3589 are redistributed, making it an ideal method for caches.
3590 However, due to its principle, the distribution will never be
3591 very smooth and it may sometimes be necessary to adjust a
3592 server's weight or its ID to get a more balanced distribution.
3593 In order to get the same distribution on multiple load
3594 balancers, it is important that all servers have the exact
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003595 same IDs. Note: consistent hash uses sdbm and avalanche if no
3596 hash function is specified.
Bhaskar98634f02013-10-29 23:30:51 -04003597
3598 <function> is the hash function to be used :
3599
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03003600 sdbm this function was created initially for sdbm (a public-domain
Bhaskar98634f02013-10-29 23:30:51 -04003601 reimplementation of ndbm) database library. It was found to do
3602 well in scrambling bits, causing better distribution of the keys
3603 and fewer splits. It also happens to be a good general hashing
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003604 function with good distribution, unless the total server weight
3605 is a multiple of 64, in which case applying the avalanche
3606 modifier may help.
Bhaskar98634f02013-10-29 23:30:51 -04003607
3608 djb2 this function was first proposed by Dan Bernstein many years ago
3609 on comp.lang.c. Studies have shown that for certain workload this
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003610 function provides a better distribution than sdbm. It generally
3611 works well with text-based inputs though it can perform extremely
3612 poorly with numeric-only input or when the total server weight is
3613 a multiple of 33, unless the avalanche modifier is also used.
3614
Willy Tarreaua0f42712013-11-14 14:30:35 +01003615 wt6 this function was designed for haproxy while testing other
3616 functions in the past. It is not as smooth as the other ones, but
3617 is much less sensible to the input data set or to the number of
3618 servers. It can make sense as an alternative to sdbm+avalanche or
3619 djb2+avalanche for consistent hashing or when hashing on numeric
3620 data such as a source IP address or a visitor identifier in a URL
3621 parameter.
3622
Willy Tarreau324f07f2015-01-20 19:44:50 +01003623 crc32 this is the most common CRC32 implementation as used in Ethernet,
3624 gzip, PNG, etc. It is slower than the other ones but may provide
3625 a better distribution or less predictable results especially when
3626 used on strings.
3627
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003628 <modifier> indicates an optional method applied after hashing the key :
3629
3630 avalanche This directive indicates that the result from the hash
3631 function above should not be used in its raw form but that
3632 a 4-byte full avalanche hash must be applied first. The
3633 purpose of this step is to mix the resulting bits from the
3634 previous hash in order to avoid any undesired effect when
3635 the input contains some limited values or when the number of
3636 servers is a multiple of one of the hash's components (64
3637 for SDBM, 33 for DJB2). Enabling avalanche tends to make the
3638 result less predictable, but it's also not as smooth as when
3639 using the original function. Some testing might be needed
3640 with some workloads. This hash is one of the many proposed
3641 by Bob Jenkins.
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003642
Bhaskar98634f02013-10-29 23:30:51 -04003643 The default hash type is "map-based" and is recommended for most usages. The
3644 default function is "sdbm", the selection of a function should be based on
3645 the range of the values being hashed.
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003646
Andrew Rodland17be45e2016-10-25 17:04:12 -04003647 See also : "balance", "hash-balance-factor", "server"
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003648
3649
Willy Tarreau0ba27502007-12-24 16:55:16 +01003650http-check disable-on-404
3651 Enable a maintenance mode upon HTTP/404 response to health-checks
3652 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau2769aa02007-12-27 18:26:09 +01003653 yes | no | yes | yes
Willy Tarreau0ba27502007-12-24 16:55:16 +01003654 Arguments : none
3655
3656 When this option is set, a server which returns an HTTP code 404 will be
3657 excluded from further load-balancing, but will still receive persistent
3658 connections. This provides a very convenient method for Web administrators
3659 to perform a graceful shutdown of their servers. It is also important to note
3660 that a server which is detected as failed while it was in this mode will not
3661 generate an alert, just a notice. If the server responds 2xx or 3xx again, it
3662 will immediately be reinserted into the farm. The status on the stats page
3663 reports "NOLB" for a server in this mode. It is important to note that this
Willy Tarreaubd741542010-03-16 18:46:54 +01003664 option only works in conjunction with the "httpchk" option. If this option
3665 is used with "http-check expect", then it has precedence over it so that 404
3666 responses will still be considered as soft-stop.
3667
3668 See also : "option httpchk", "http-check expect"
3669
3670
3671http-check expect [!] <match> <pattern>
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003672 Make HTTP health checks consider response contents or specific status codes
Willy Tarreaubd741542010-03-16 18:46:54 +01003673 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau1ee51a62011-08-19 20:04:17 +02003674 yes | no | yes | yes
Willy Tarreaubd741542010-03-16 18:46:54 +01003675 Arguments :
3676 <match> is a keyword indicating how to look for a specific pattern in the
3677 response. The keyword may be one of "status", "rstatus",
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003678 "string", or "rstring". The keyword may be preceded by an
Willy Tarreaubd741542010-03-16 18:46:54 +01003679 exclamation mark ("!") to negate the match. Spaces are allowed
3680 between the exclamation mark and the keyword. See below for more
3681 details on the supported keywords.
3682
3683 <pattern> is the pattern to look for. It may be a string or a regular
3684 expression. If the pattern contains spaces, they must be escaped
3685 with the usual backslash ('\').
3686
3687 By default, "option httpchk" considers that response statuses 2xx and 3xx
3688 are valid, and that others are invalid. When "http-check expect" is used,
3689 it defines what is considered valid or invalid. Only one "http-check"
3690 statement is supported in a backend. If a server fails to respond or times
3691 out, the check obviously fails. The available matches are :
3692
3693 status <string> : test the exact string match for the HTTP status code.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003694 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003695 response's status code is exactly this string. If the
3696 "status" keyword is prefixed with "!", then the response
3697 will be considered invalid if the status code matches.
3698
3699 rstatus <regex> : test a regular expression for the HTTP status code.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003700 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003701 response's status code matches the expression. If the
3702 "rstatus" keyword is prefixed with "!", then the response
3703 will be considered invalid if the status code matches.
3704 This is mostly used to check for multiple codes.
3705
3706 string <string> : test the exact string match in the HTTP response body.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003707 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003708 response's body contains this exact string. If the
3709 "string" keyword is prefixed with "!", then the response
3710 will be considered invalid if the body contains this
3711 string. This can be used to look for a mandatory word at
3712 the end of a dynamic page, or to detect a failure when a
3713 specific error appears on the check page (eg: a stack
3714 trace).
3715
3716 rstring <regex> : test a regular expression on the HTTP response body.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003717 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003718 response's body matches this expression. If the "rstring"
3719 keyword is prefixed with "!", then the response will be
3720 considered invalid if the body matches the expression.
3721 This can be used to look for a mandatory word at the end
3722 of a dynamic page, or to detect a failure when a specific
3723 error appears on the check page (eg: a stack trace).
3724
3725 It is important to note that the responses will be limited to a certain size
3726 defined by the global "tune.chksize" option, which defaults to 16384 bytes.
3727 Thus, too large responses may not contain the mandatory pattern when using
3728 "string" or "rstring". If a large response is absolutely required, it is
3729 possible to change the default max size by setting the global variable.
3730 However, it is worth keeping in mind that parsing very large responses can
3731 waste some CPU cycles, especially when regular expressions are used, and that
3732 it is always better to focus the checks on smaller resources.
3733
Cyril Bonté32602d22015-01-30 00:07:07 +01003734 Also "http-check expect" doesn't support HTTP keep-alive. Keep in mind that it
3735 will automatically append a "Connection: close" header, meaning that this
3736 header should not be present in the request provided by "option httpchk".
3737
Willy Tarreaubd741542010-03-16 18:46:54 +01003738 Last, if "http-check expect" is combined with "http-check disable-on-404",
3739 then this last one has precedence when the server responds with 404.
3740
3741 Examples :
3742 # only accept status 200 as valid
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01003743 http-check expect status 200
Willy Tarreaubd741542010-03-16 18:46:54 +01003744
3745 # consider SQL errors as errors
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01003746 http-check expect ! string SQL\ Error
Willy Tarreaubd741542010-03-16 18:46:54 +01003747
3748 # consider status 5xx only as errors
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01003749 http-check expect ! rstatus ^5
Willy Tarreaubd741542010-03-16 18:46:54 +01003750
3751 # check that we have a correct hexadecimal tag before /html
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03003752 http-check expect rstring <!--tag:[0-9a-f]*--></html>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003753
Willy Tarreaubd741542010-03-16 18:46:54 +01003754 See also : "option httpchk", "http-check disable-on-404"
Willy Tarreau2769aa02007-12-27 18:26:09 +01003755
3756
Willy Tarreauef781042010-01-27 11:53:01 +01003757http-check send-state
3758 Enable emission of a state header with HTTP health checks
3759 May be used in sections : defaults | frontend | listen | backend
3760 yes | no | yes | yes
3761 Arguments : none
3762
3763 When this option is set, haproxy will systematically send a special header
3764 "X-Haproxy-Server-State" with a list of parameters indicating to each server
3765 how they are seen by haproxy. This can be used for instance when a server is
3766 manipulated without access to haproxy and the operator needs to know whether
3767 haproxy still sees it up or not, or if the server is the last one in a farm.
3768
3769 The header is composed of fields delimited by semi-colons, the first of which
3770 is a word ("UP", "DOWN", "NOLB"), possibly followed by a number of valid
3771 checks on the total number before transition, just as appears in the stats
3772 interface. Next headers are in the form "<variable>=<value>", indicating in
3773 no specific order some values available in the stats interface :
Joseph Lynch514061c2015-01-15 17:52:59 -08003774 - a variable "address", containing the address of the backend server.
3775 This corresponds to the <address> field in the server declaration. For
3776 unix domain sockets, it will read "unix".
3777
3778 - a variable "port", containing the port of the backend server. This
3779 corresponds to the <port> field in the server declaration. For unix
3780 domain sockets, it will read "unix".
3781
Willy Tarreauef781042010-01-27 11:53:01 +01003782 - a variable "name", containing the name of the backend followed by a slash
3783 ("/") then the name of the server. This can be used when a server is
3784 checked in multiple backends.
3785
3786 - a variable "node" containing the name of the haproxy node, as set in the
3787 global "node" variable, otherwise the system's hostname if unspecified.
3788
3789 - a variable "weight" indicating the weight of the server, a slash ("/")
3790 and the total weight of the farm (just counting usable servers). This
3791 helps to know if other servers are available to handle the load when this
3792 one fails.
3793
3794 - a variable "scur" indicating the current number of concurrent connections
3795 on the server, followed by a slash ("/") then the total number of
3796 connections on all servers of the same backend.
3797
3798 - a variable "qcur" indicating the current number of requests in the
3799 server's queue.
3800
3801 Example of a header received by the application server :
3802 >>> X-Haproxy-Server-State: UP 2/3; name=bck/srv2; node=lb1; weight=1/2; \
3803 scur=13/22; qcur=0
3804
3805 See also : "option httpchk", "http-check disable-on-404"
3806
Jarno Huuskonen800d1762017-03-06 14:56:36 +02003807http-request { allow | auth [realm <realm>] | redirect <rule> |
3808 tarpit [deny_status <status>] | deny [deny_status <status>] |
Willy Tarreauf4c43c12013-06-11 17:01:13 +02003809 add-header <name> <fmt> | set-header <name> <fmt> |
Thierry FOURNIER82bf70d2015-05-26 17:58:29 +02003810 capture <sample> [ len <length> | id <id> ] |
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02003811 del-header <name> | set-nice <nice> | set-log-level <level> |
Sasha Pachev218f0642014-06-16 12:05:59 -06003812 replace-header <name> <match-regex> <replace-fmt> |
3813 replace-value <name> <match-regex> <replace-fmt> |
Willy Tarreaua0dc23f2015-01-22 20:46:11 +01003814 set-method <fmt> | set-path <fmt> | set-query <fmt> |
3815 set-uri <fmt> | set-tos <tos> | set-mark <mark> |
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02003816 add-acl(<file name>) <key fmt> |
3817 del-acl(<file name>) <key fmt> |
3818 del-map(<file name>) <key fmt> |
Baptiste Assmannbb7e86a2014-09-03 18:29:47 +02003819 set-map(<file name>) <key fmt> <value fmt> |
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02003820 set-var(<var name>) <expr> |
Christopher Faulet85d79c92016-11-09 16:54:56 +01003821 unset-var(<var name>) |
Thierry FOURNIER90da1912015-03-05 11:17:06 +01003822 { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] |
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02003823 sc-inc-gpc0(<sc-id>) |
Thierry FOURNIER236657b2015-08-19 08:25:14 +02003824 sc-set-gpt0(<sc-id>) <int> |
Willy Tarreau2d392c22015-08-24 01:43:45 +02003825 silent-drop |
Christopher Faulet76c09ef2017-09-21 11:03:52 +02003826 send-spoe-group
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02003827 }
Cyril Bontéf0c60612010-02-06 14:44:47 +01003828 [ { if | unless } <condition> ]
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01003829 Access control for Layer 7 requests
3830
3831 May be used in sections: defaults | frontend | listen | backend
3832 no | yes | yes | yes
3833
Willy Tarreau20b0de52012-12-24 15:45:22 +01003834 The http-request statement defines a set of rules which apply to layer 7
3835 processing. The rules are evaluated in their declaration order when they are
3836 met in a frontend, listen or backend section. Any rule may optionally be
3837 followed by an ACL-based condition, in which case it will only be evaluated
3838 if the condition is true.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01003839
Willy Tarreau20b0de52012-12-24 15:45:22 +01003840 The first keyword is the rule's action. Currently supported actions include :
3841 - "allow" : this stops the evaluation of the rules and lets the request
3842 pass the check. No further "http-request" rules are evaluated.
3843
3844 - "deny" : this stops the evaluation of the rules and immediately rejects
Willy Tarreaube1d34d2016-06-26 19:37:59 +02003845 the request and emits an HTTP 403 error, or optionally the status code
3846 specified as an argument to "deny_status". The list of permitted status
3847 codes is limited to those that can be overridden by the "errorfile"
3848 directive. No further "http-request" rules are evaluated.
Willy Tarreau20b0de52012-12-24 15:45:22 +01003849
Willy Tarreauccbcc372012-12-27 12:37:57 +01003850 - "tarpit" : this stops the evaluation of the rules and immediately blocks
3851 the request without responding for a delay specified by "timeout tarpit"
3852 or "timeout connect" if the former is not set. After that delay, if the
Jarno Huuskonen800d1762017-03-06 14:56:36 +02003853 client is still connected, an HTTP error 500 (or optionally the status
3854 code specified as an argument to "deny_status") is returned so that the
Willy Tarreauccbcc372012-12-27 12:37:57 +01003855 client does not suspect it has been tarpitted. Logs will report the flags
3856 "PT". The goal of the tarpit rule is to slow down robots during an attack
3857 when they're limited on the number of concurrent requests. It can be very
3858 efficient against very dumb robots, and will significantly reduce the
3859 load on firewalls compared to a "deny" rule. But when facing "correctly"
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03003860 developed robots, it can make things worse by forcing haproxy and the
Willy Tarreau2d392c22015-08-24 01:43:45 +02003861 front firewall to support insane number of concurrent connections. See
3862 also the "silent-drop" action below.
Willy Tarreauccbcc372012-12-27 12:37:57 +01003863
Willy Tarreau20b0de52012-12-24 15:45:22 +01003864 - "auth" : this stops the evaluation of the rules and immediately responds
3865 with an HTTP 401 or 407 error code to invite the user to present a valid
3866 user name and password. No further "http-request" rules are evaluated. An
3867 optional "realm" parameter is supported, it sets the authentication realm
3868 that is returned with the response (typically the application's name).
3869
Willy Tarreau81499eb2012-12-27 12:19:02 +01003870 - "redirect" : this performs an HTTP redirection based on a redirect rule.
3871 This is exactly the same as the "redirect" statement except that it
3872 inserts a redirect rule which can be processed in the middle of other
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01003873 "http-request" rules and that these rules use the "log-format" strings.
3874 See the "redirect" keyword for the rule's syntax.
Willy Tarreau81499eb2012-12-27 12:19:02 +01003875
Willy Tarreau20b0de52012-12-24 15:45:22 +01003876 - "add-header" appends an HTTP header field whose name is specified in
3877 <name> and whose value is defined by <fmt> which follows the log-format
3878 rules (see Custom Log Format in section 8.2.4). This is particularly
3879 useful to pass connection-specific information to the server (eg: the
3880 client's SSL certificate), or to combine several headers into one. This
3881 rule is not final, so it is possible to add other similar rules. Note
3882 that header addition is performed immediately, so one rule might reuse
3883 the resulting header from a previous rule.
3884
3885 - "set-header" does the same as "add-header" except that the header name
3886 is first removed if it existed. This is useful when passing security
3887 information to the server, where the header must not be manipulated by
Willy Tarreau85603282015-01-21 20:39:27 +01003888 external users. Note that the new value is computed before the removal so
3889 it is possible to concatenate a value to an existing header.
Willy Tarreau20b0de52012-12-24 15:45:22 +01003890
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02003891 - "del-header" removes all HTTP header fields whose name is specified in
3892 <name>.
3893
Sasha Pachev218f0642014-06-16 12:05:59 -06003894 - "replace-header" matches the regular expression in all occurrences of
3895 header field <name> according to <match-regex>, and replaces them with
3896 the <replace-fmt> argument. Format characters are allowed in replace-fmt
3897 and work like in <fmt> arguments in "add-header". The match is only
3898 case-sensitive. It is important to understand that this action only
3899 considers whole header lines, regardless of the number of values they
3900 may contain. This usage is suited to headers naturally containing commas
3901 in their value, such as If-Modified-Since and so on.
3902
3903 Example:
3904
3905 http-request replace-header Cookie foo=([^;]*);(.*) foo=\1;ip=%bi;\2
3906
3907 applied to:
3908
3909 Cookie: foo=foobar; expires=Tue, 14-Jun-2016 01:40:45 GMT;
3910
3911 outputs:
3912
3913 Cookie: foo=foobar;ip=192.168.1.20; expires=Tue, 14-Jun-2016 01:40:45 GMT;
3914
3915 assuming the backend IP is 192.168.1.20
3916
3917 - "replace-value" works like "replace-header" except that it matches the
3918 regex against every comma-delimited value of the header field <name>
3919 instead of the entire header. This is suited for all headers which are
3920 allowed to carry more than one value. An example could be the Accept
3921 header.
3922
3923 Example:
3924
3925 http-request replace-value X-Forwarded-For ^192\.168\.(.*)$ 172.16.\1
3926
3927 applied to:
3928
3929 X-Forwarded-For: 192.168.10.1, 192.168.13.24, 10.0.0.37
3930
3931 outputs:
3932
3933 X-Forwarded-For: 172.16.10.1, 172.16.13.24, 10.0.0.37
3934
Willy Tarreaua0dc23f2015-01-22 20:46:11 +01003935 - "set-method" rewrites the request method with the result of the
3936 evaluation of format string <fmt>. There should be very few valid reasons
3937 for having to do so as this is more likely to break something than to fix
3938 it.
3939
3940 - "set-path" rewrites the request path with the result of the evaluation of
3941 format string <fmt>. The query string, if any, is left intact. If a
3942 scheme and authority is found before the path, they are left intact as
3943 well. If the request doesn't have a path ("*"), this one is replaced with
3944 the format. This can be used to prepend a directory component in front of
3945 a path for example. See also "set-query" and "set-uri".
3946
3947 Example :
3948 # prepend the host name before the path
3949 http-request set-path /%[hdr(host)]%[path]
3950
3951 - "set-query" rewrites the request's query string which appears after the
3952 first question mark ("?") with the result of the evaluation of format
3953 string <fmt>. The part prior to the question mark is left intact. If the
3954 request doesn't contain a question mark and the new value is not empty,
3955 then one is added at the end of the URI, followed by the new value. If
3956 a question mark was present, it will never be removed even if the value
3957 is empty. This can be used to add or remove parameters from the query
3958 string. See also "set-query" and "set-uri".
3959
3960 Example :
3961 # replace "%3D" with "=" in the query string
3962 http-request set-query %[query,regsub(%3D,=,g)]
3963
3964 - "set-uri" rewrites the request URI with the result of the evaluation of
3965 format string <fmt>. The scheme, authority, path and query string are all
3966 replaced at once. This can be used to rewrite hosts in front of proxies,
3967 or to perform complex modifications to the URI such as moving parts
3968 between the path and the query string. See also "set-path" and
3969 "set-query".
3970
Willy Tarreauf4c43c12013-06-11 17:01:13 +02003971 - "set-nice" sets the "nice" factor of the current request being processed.
3972 It only has effect against the other requests being processed at the same
3973 time. The default value is 0, unless altered by the "nice" setting on the
3974 "bind" line. The accepted range is -1024..1024. The higher the value, the
3975 nicest the request will be. Lower values will make the request more
3976 important than other ones. This can be useful to improve the speed of
3977 some requests, or lower the priority of non-important requests. Using
3978 this setting without prior experimentation can cause some major slowdown.
3979
Willy Tarreau9a355ec2013-06-11 17:45:46 +02003980 - "set-log-level" is used to change the log level of the current request
3981 when a certain condition is met. Valid levels are the 8 syslog levels
3982 (see the "log" keyword) plus the special level "silent" which disables
3983 logging for this request. This rule is not final so the last matching
3984 rule wins. This rule can be useful to disable health checks coming from
3985 another equipment.
3986
Willy Tarreau42cf39e2013-06-11 18:51:32 +02003987 - "set-tos" is used to set the TOS or DSCP field value of packets sent to
3988 the client to the value passed in <tos> on platforms which support this.
3989 This value represents the whole 8 bits of the IP TOS field, and can be
3990 expressed both in decimal or hexadecimal format (prefixed by "0x"). Note
3991 that only the 6 higher bits are used in DSCP or TOS, and the two lower
3992 bits are always 0. This can be used to adjust some routing behaviour on
3993 border routers based on some information from the request. See RFC 2474,
3994 2597, 3260 and 4594 for more information.
3995
Willy Tarreau51347ed2013-06-11 19:34:13 +02003996 - "set-mark" is used to set the Netfilter MARK on all packets sent to the
3997 client to the value passed in <mark> on platforms which support it. This
3998 value is an unsigned 32 bit value which can be matched by netfilter and
3999 by the routing table. It can be expressed both in decimal or hexadecimal
4000 format (prefixed by "0x"). This can be useful to force certain packets to
4001 take a different route (for example a cheaper network path for bulk
4002 downloads). This works on Linux kernels 2.6.32 and above and requires
4003 admin privileges.
4004
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004005 - "add-acl" is used to add a new entry into an ACL. The ACL must be loaded
4006 from a file (even a dummy empty file). The file name of the ACL to be
4007 updated is passed between parentheses. It takes one argument: <key fmt>,
4008 which follows log-format rules, to collect content of the new entry. It
4009 performs a lookup in the ACL before insertion, to avoid duplicated (or
4010 more) values. This lookup is done by a linear search and can be expensive
4011 with large lists! It is the equivalent of the "add acl" command from the
4012 stats socket, but can be triggered by an HTTP request.
4013
4014 - "del-acl" is used to delete an entry from an ACL. The ACL must be loaded
4015 from a file (even a dummy empty file). The file name of the ACL to be
4016 updated is passed between parentheses. It takes one argument: <key fmt>,
4017 which follows log-format rules, to collect content of the entry to delete.
4018 It is the equivalent of the "del acl" command from the stats socket, but
4019 can be triggered by an HTTP request.
4020
4021 - "del-map" is used to delete an entry from a MAP. The MAP must be loaded
4022 from a file (even a dummy empty file). The file name of the MAP to be
4023 updated is passed between parentheses. It takes one argument: <key fmt>,
4024 which follows log-format rules, to collect content of the entry to delete.
4025 It takes one argument: "file name" It is the equivalent of the "del map"
4026 command from the stats socket, but can be triggered by an HTTP request.
4027
4028 - "set-map" is used to add a new entry into a MAP. The MAP must be loaded
4029 from a file (even a dummy empty file). The file name of the MAP to be
4030 updated is passed between parentheses. It takes 2 arguments: <key fmt>,
4031 which follows log-format rules, used to collect MAP key, and <value fmt>,
4032 which follows log-format rules, used to collect content for the new entry.
4033 It performs a lookup in the MAP before insertion, to avoid duplicated (or
4034 more) values. This lookup is done by a linear search and can be expensive
4035 with large lists! It is the equivalent of the "set map" command from the
4036 stats socket, but can be triggered by an HTTP request.
4037
Thierry FOURNIER82bf70d2015-05-26 17:58:29 +02004038 - capture <sample> [ len <length> | id <id> ] :
Willy Tarreaua9083d02015-05-08 15:27:59 +02004039 captures sample expression <sample> from the request buffer, and converts
4040 it to a string of at most <len> characters. The resulting string is
4041 stored into the next request "capture" slot, so it will possibly appear
4042 next to some captured HTTP headers. It will then automatically appear in
4043 the logs, and it will be possible to extract it using sample fetch rules
4044 to feed it into headers or anything. The length should be limited given
4045 that this size will be allocated for each capture during the whole
4046 session life. Please check section 7.3 (Fetching samples) and "capture
4047 request header" for more information.
4048
Thierry FOURNIER82bf70d2015-05-26 17:58:29 +02004049 If the keyword "id" is used instead of "len", the action tries to store
4050 the captured string in a previously declared capture slot. This is useful
4051 to run captures in backends. The slot id can be declared by a previous
4052 directive "http-request capture" or with the "declare capture" keyword.
Baptiste Assmanne9544932015-11-03 23:31:35 +01004053 If the slot <id> doesn't exist, then HAProxy fails parsing the
4054 configuration to prevent unexpected behavior at run time.
Thierry FOURNIER82bf70d2015-05-26 17:58:29 +02004055
Willy Tarreau09448f72014-06-25 18:12:15 +02004056 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] :
4057 enables tracking of sticky counters from current request. These rules
4058 do not stop evaluation and do not change default action. Three sets of
4059 counters may be simultaneously tracked by the same connection. The first
4060 "track-sc0" rule executed enables tracking of the counters of the
4061 specified table as the first set. The first "track-sc1" rule executed
4062 enables tracking of the counters of the specified table as the second
4063 set. The first "track-sc2" rule executed enables tracking of the
4064 counters of the specified table as the third set. It is a recommended
4065 practice to use the first set of counters for the per-frontend counters
4066 and the second set for the per-backend ones. But this is just a
4067 guideline, all may be used everywhere.
4068
4069 These actions take one or two arguments :
4070 <key> is mandatory, and is a sample expression rule as described
4071 in section 7.3. It describes what elements of the incoming
4072 request or connection will be analysed, extracted, combined,
4073 and used to select which table entry to update the counters.
4074
4075 <table> is an optional table to be used instead of the default one,
4076 which is the stick-table declared in the current proxy. All
4077 the counters for the matches and updates for the key will
4078 then be performed in that table until the session ends.
4079
4080 Once a "track-sc*" rule is executed, the key is looked up in the table
4081 and if it is not found, an entry is allocated for it. Then a pointer to
4082 that entry is kept during all the session's life, and this entry's
4083 counters are updated as often as possible, every time the session's
4084 counters are updated, and also systematically when the session ends.
4085 Counters are only updated for events that happen after the tracking has
4086 been started. As an exception, connection counters and request counters
4087 are systematically updated so that they reflect useful information.
4088
4089 If the entry tracks concurrent connection counters, one connection is
4090 counted for as long as the entry is tracked, and the entry will not
4091 expire during that time. Tracking counters also provides a performance
4092 advantage over just checking the keys, because only one table lookup is
4093 performed for all ACL checks that make use of it.
4094
Thierry FOURNIER236657b2015-08-19 08:25:14 +02004095 - sc-set-gpt0(<sc-id>) <int> :
4096 This action sets the GPT0 tag according to the sticky counter designated
4097 by <sc-id> and the value of <int>. The expected result is a boolean. If
4098 an error occurs, this action silently fails and the actions evaluation
4099 continues.
4100
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02004101 - sc-inc-gpc0(<sc-id>):
4102 This action increments the GPC0 counter according with the sticky counter
4103 designated by <sc-id>. If an error occurs, this action silently fails and
4104 the actions evaluation continues.
4105
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004106 - set-var(<var-name>) <expr> :
4107 Is used to set the contents of a variable. The variable is declared
4108 inline.
4109
Daniel Schneller0b547052016-03-21 20:46:57 +01004110 <var-name> The name of the variable starts with an indication about
4111 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +01004112 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +01004113 "sess" : the variable is shared with the whole session
4114 "txn" : the variable is shared with the transaction
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004115 (request and response)
Daniel Schneller0b547052016-03-21 20:46:57 +01004116 "req" : the variable is shared only during request
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004117 processing
Daniel Schneller0b547052016-03-21 20:46:57 +01004118 "res" : the variable is shared only during response
4119 processing
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004120 This prefix is followed by a name. The separator is a '.'.
Daniel Schneller0b547052016-03-21 20:46:57 +01004121 The name may only contain characters 'a-z', 'A-Z', '0-9'
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004122 and '_'.
4123
4124 <expr> Is a standard HAProxy expression formed by a sample-fetch
4125 followed by some converters.
4126
4127 Example:
4128
4129 http-request set-var(req.my_var) req.fhdr(user-agent),lower
4130
Christopher Faulet85d79c92016-11-09 16:54:56 +01004131 - unset-var(<var-name>) :
4132 Is used to unset a variable. See above for details about <var-name>.
4133
4134 Example:
4135
4136 http-request unset-var(req.my_var)
4137
Adis Nezirovic2fbcafc2015-07-06 15:44:30 +02004138 - set-src <expr> :
4139 Is used to set the source IP address to the value of specified
4140 expression. Useful when a proxy in front of HAProxy rewrites source IP,
4141 but provides the correct IP in a HTTP header; or you want to mask
4142 source IP for privacy.
4143
4144 <expr> Is a standard HAProxy expression formed by a sample-fetch
4145 followed by some converters.
4146
4147 Example:
4148
4149 http-request set-src hdr(x-forwarded-for)
4150 http-request set-src src,ipmask(24)
4151
Willy Tarreau00005ce2016-10-21 15:07:45 +02004152 When possible, set-src preserves the original source port as long as the
4153 address family allows it, otherwise the source port is set to 0.
Adis Nezirovic2fbcafc2015-07-06 15:44:30 +02004154
William Lallemand44be6402016-05-25 01:51:35 +02004155 - set-src-port <expr> :
4156 Is used to set the source port address to the value of specified
4157 expression.
4158
4159 <expr> Is a standard HAProxy expression formed by a sample-fetch
4160 followed by some converters.
4161
4162 Example:
4163
4164 http-request set-src-port hdr(x-port)
4165 http-request set-src-port int(4000)
4166
Willy Tarreau00005ce2016-10-21 15:07:45 +02004167 When possible, set-src-port preserves the original source address as long
4168 as the address family supports a port, otherwise it forces the source
4169 address to IPv4 "0.0.0.0" before rewriting the port.
William Lallemand44be6402016-05-25 01:51:35 +02004170
William Lallemand13e9b0c2016-05-25 02:34:07 +02004171 - set-dst <expr> :
4172 Is used to set the destination IP address to the value of specified
4173 expression. Useful when a proxy in front of HAProxy rewrites destination
4174 IP, but provides the correct IP in a HTTP header; or you want to mask
4175 the IP for privacy. If you want to connect to the new address/port, use
4176 '0.0.0.0:0' as a server address in the backend.
4177
4178 <expr> Is a standard HAProxy expression formed by a sample-fetch
4179 followed by some converters.
4180
4181 Example:
4182
4183 http-request set-dst hdr(x-dst)
4184 http-request set-dst dst,ipmask(24)
4185
Willy Tarreau00005ce2016-10-21 15:07:45 +02004186 When possible, set-dst preserves the original destination port as long as
4187 the address family allows it, otherwise the destination port is set to 0.
4188
William Lallemand13e9b0c2016-05-25 02:34:07 +02004189 - set-dst-port <expr> :
4190 Is used to set the destination port address to the value of specified
4191 expression. If you want to connect to the new address/port, use
4192 '0.0.0.0:0' as a server address in the backend.
4193
4194 <expr> Is a standard HAProxy expression formed by a sample-fetch
4195 followed by some converters.
4196
4197 Example:
4198
4199 http-request set-dst-port hdr(x-port)
4200 http-request set-dst-port int(4000)
4201
Willy Tarreau00005ce2016-10-21 15:07:45 +02004202 When possible, set-dst-port preserves the original destination address as
4203 long as the address family supports a port, otherwise it forces the
4204 destination address to IPv4 "0.0.0.0" before rewriting the port.
4205
Willy Tarreau2d392c22015-08-24 01:43:45 +02004206 - "silent-drop" : this stops the evaluation of the rules and makes the
4207 client-facing connection suddenly disappear using a system-dependant way
4208 that tries to prevent the client from being notified. The effect it then
4209 that the client still sees an established connection while there's none
4210 on HAProxy. The purpose is to achieve a comparable effect to "tarpit"
4211 except that it doesn't use any local resource at all on the machine
4212 running HAProxy. It can resist much higher loads than "tarpit", and slow
4213 down stronger attackers. It is important to undestand the impact of using
4214 this mechanism. All stateful equipments placed between the client and
4215 HAProxy (firewalls, proxies, load balancers) will also keep the
4216 established connection for a long time and may suffer from this action.
4217 On modern Linux systems running with enough privileges, the TCP_REPAIR
4218 socket option is used to block the emission of a TCP reset. On other
4219 systems, the socket's TTL is reduced to 1 so that the TCP reset doesn't
4220 pass the first router, though it's still delivered to local networks. Do
4221 not use it unless you fully understand how it works.
4222
Christopher Faulet76c09ef2017-09-21 11:03:52 +02004223
Olivier Houchardccaa7de2017-10-02 11:51:03 +02004224 - "wait-for-handshake" : this will delay the processing of the request
4225 until the SSL handshake happened. This is mostly useful to delay
4226 processing early data until we're sure they are valid.
4227
Christopher Faulet76c09ef2017-09-21 11:03:52 +02004228 - send-spoe-group <engine-name> <group-name> :
4229 This action is used to trigger sending of a group of SPOE messages. To do
4230 so, the SPOE engine used to send messages must be defined, as well as the
4231 SPOE group to send. Of course, the SPOE engine must refer to an existing
4232 SPOE filter. If not engine name is provided on the SPOE filter line, the
4233 SPOE agent name must be used.
4234
4235 <engine-name> The SPOE engine name.
4236
4237 <group-name> The SPOE group name as specified in the engine
4238 configuration.
4239
Willy Tarreau20b0de52012-12-24 15:45:22 +01004240 There is no limit to the number of http-request statements per instance.
4241
4242 It is important to know that http-request rules are processed very early in
4243 the HTTP processing, just after "block" rules and before "reqdel" or "reqrep"
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08004244 or "reqadd" rules. That way, headers added by "add-header"/"set-header" are
4245 visible by almost all further ACL rules.
4246
4247 Using "reqadd"/"reqdel"/"reqrep" to manipulate request headers is discouraged
4248 in newer versions (>= 1.5). But if you need to use regular expression to
4249 delete headers, you can still use "reqdel". Also please use
4250 "http-request deny/allow/tarpit" instead of "reqdeny"/"reqpass"/"reqtarpit".
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01004251
4252 Example:
Cyril Bonté78caf842010-03-10 22:41:43 +01004253 acl nagios src 192.168.129.3
4254 acl local_net src 192.168.0.0/16
4255 acl auth_ok http_auth(L1)
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01004256
Cyril Bonté78caf842010-03-10 22:41:43 +01004257 http-request allow if nagios
4258 http-request allow if local_net auth_ok
4259 http-request auth realm Gimme if local_net auth_ok
4260 http-request deny
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01004261
Cyril Bonté78caf842010-03-10 22:41:43 +01004262 Example:
4263 acl auth_ok http_auth_group(L1) G1
Cyril Bonté78caf842010-03-10 22:41:43 +01004264 http-request auth unless auth_ok
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01004265
Willy Tarreau20b0de52012-12-24 15:45:22 +01004266 Example:
4267 http-request set-header X-Haproxy-Current-Date %T
4268 http-request set-header X-SSL %[ssl_fc]
Willy Tarreaufca42612015-08-27 17:15:05 +02004269 http-request set-header X-SSL-Session_ID %[ssl_fc_session_id,hex]
Willy Tarreau20b0de52012-12-24 15:45:22 +01004270 http-request set-header X-SSL-Client-Verify %[ssl_c_verify]
4271 http-request set-header X-SSL-Client-DN %{+Q}[ssl_c_s_dn]
4272 http-request set-header X-SSL-Client-CN %{+Q}[ssl_c_s_dn(cn)]
4273 http-request set-header X-SSL-Issuer %{+Q}[ssl_c_i_dn]
4274 http-request set-header X-SSL-Client-NotBefore %{+Q}[ssl_c_notbefore]
4275 http-request set-header X-SSL-Client-NotAfter %{+Q}[ssl_c_notafter]
4276
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004277 Example:
4278 acl key req.hdr(X-Add-Acl-Key) -m found
4279 acl add path /addacl
4280 acl del path /delacl
4281
4282 acl myhost hdr(Host) -f myhost.lst
4283
4284 http-request add-acl(myhost.lst) %[req.hdr(X-Add-Acl-Key)] if key add
4285 http-request del-acl(myhost.lst) %[req.hdr(X-Add-Acl-Key)] if key del
4286
4287 Example:
4288 acl value req.hdr(X-Value) -m found
4289 acl setmap path /setmap
4290 acl delmap path /delmap
4291
4292 use_backend bk_appli if { hdr(Host),map_str(map.lst) -m found }
4293
4294 http-request set-map(map.lst) %[src] %[req.hdr(X-Value)] if setmap value
4295 http-request del-map(map.lst) %[src] if delmap
4296
Cyril Bonté2be1b3f2010-09-30 23:46:30 +02004297 See also : "stats http-request", section 3.4 about userlists and section 7
4298 about ACL usage.
Willy Tarreauef781042010-01-27 11:53:01 +01004299
Willy Tarreauf4c43c12013-06-11 17:01:13 +02004300http-response { allow | deny | add-header <name> <fmt> | set-nice <nice> |
Willy Tarreau51d861a2015-05-22 17:30:48 +02004301 capture <sample> id <id> | redirect <rule> |
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02004302 set-header <name> <fmt> | del-header <name> |
Sasha Pachev218f0642014-06-16 12:05:59 -06004303 replace-header <name> <regex-match> <replace-fmt> |
4304 replace-value <name> <regex-match> <replace-fmt> |
Robin H. Johnson52f5db22017-01-01 13:10:52 -08004305 set-status <status> [reason <str>] |
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004306 set-log-level <level> | set-mark <mark> | set-tos <tos> |
4307 add-acl(<file name>) <key fmt> |
4308 del-acl(<file name>) <key fmt> |
4309 del-map(<file name>) <key fmt> |
Thierry FOURNIER90da1912015-03-05 11:17:06 +01004310 set-map(<file name>) <key fmt> <value fmt> |
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004311 set-var(<var-name>) <expr> |
Christopher Faulet85d79c92016-11-09 16:54:56 +01004312 unset-var(<var-name>) |
Ruoshan Huange4edc6b2016-07-14 15:07:45 +08004313 { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] |
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02004314 sc-inc-gpc0(<sc-id>) |
Thierry FOURNIER236657b2015-08-19 08:25:14 +02004315 sc-set-gpt0(<sc-id>) <int> |
Willy Tarreau2d392c22015-08-24 01:43:45 +02004316 silent-drop |
Christopher Faulet76c09ef2017-09-21 11:03:52 +02004317 send-spoe-group
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004318 }
Lukas Tribus2dd1d1a2013-06-19 23:34:41 +02004319 [ { if | unless } <condition> ]
Willy Tarreaue365c0b2013-06-11 16:06:12 +02004320 Access control for Layer 7 responses
4321
4322 May be used in sections: defaults | frontend | listen | backend
4323 no | yes | yes | yes
4324
4325 The http-response statement defines a set of rules which apply to layer 7
4326 processing. The rules are evaluated in their declaration order when they are
4327 met in a frontend, listen or backend section. Any rule may optionally be
4328 followed by an ACL-based condition, in which case it will only be evaluated
4329 if the condition is true. Since these rules apply on responses, the backend
4330 rules are applied first, followed by the frontend's rules.
4331
4332 The first keyword is the rule's action. Currently supported actions include :
4333 - "allow" : this stops the evaluation of the rules and lets the response
4334 pass the check. No further "http-response" rules are evaluated for the
4335 current section.
4336
4337 - "deny" : this stops the evaluation of the rules and immediately rejects
4338 the response and emits an HTTP 502 error. No further "http-response"
4339 rules are evaluated.
4340
4341 - "add-header" appends an HTTP header field whose name is specified in
4342 <name> and whose value is defined by <fmt> which follows the log-format
4343 rules (see Custom Log Format in section 8.2.4). This may be used to send
4344 a cookie to a client for example, or to pass some internal information.
4345 This rule is not final, so it is possible to add other similar rules.
4346 Note that header addition is performed immediately, so one rule might
4347 reuse the resulting header from a previous rule.
4348
4349 - "set-header" does the same as "add-header" except that the header name
4350 is first removed if it existed. This is useful when passing security
4351 information to the server, where the header must not be manipulated by
4352 external users.
4353
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02004354 - "del-header" removes all HTTP header fields whose name is specified in
4355 <name>.
4356
Sasha Pachev218f0642014-06-16 12:05:59 -06004357 - "replace-header" matches the regular expression in all occurrences of
4358 header field <name> according to <match-regex>, and replaces them with
4359 the <replace-fmt> argument. Format characters are allowed in replace-fmt
4360 and work like in <fmt> arguments in "add-header". The match is only
4361 case-sensitive. It is important to understand that this action only
4362 considers whole header lines, regardless of the number of values they
4363 may contain. This usage is suited to headers naturally containing commas
4364 in their value, such as Set-Cookie, Expires and so on.
4365
4366 Example:
4367
4368 http-response replace-header Set-Cookie (C=[^;]*);(.*) \1;ip=%bi;\2
4369
4370 applied to:
4371
4372 Set-Cookie: C=1; expires=Tue, 14-Jun-2016 01:40:45 GMT
4373
4374 outputs:
4375
4376 Set-Cookie: C=1;ip=192.168.1.20; expires=Tue, 14-Jun-2016 01:40:45 GMT
4377
4378 assuming the backend IP is 192.168.1.20.
4379
4380 - "replace-value" works like "replace-header" except that it matches the
4381 regex against every comma-delimited value of the header field <name>
4382 instead of the entire header. This is suited for all headers which are
4383 allowed to carry more than one value. An example could be the Accept
4384 header.
4385
4386 Example:
4387
4388 http-response replace-value Cache-control ^public$ private
4389
4390 applied to:
4391
4392 Cache-Control: max-age=3600, public
4393
4394 outputs:
4395
4396 Cache-Control: max-age=3600, private
4397
Thierry FOURNIER35d70ef2015-08-26 16:21:56 +02004398 - "set-status" replaces the response status code with <status> which must
Robin H. Johnson52f5db22017-01-01 13:10:52 -08004399 be an integer between 100 and 999. Optionally, a custom reason text can be
4400 provided defined by <str>, or the default reason for the specified code
4401 will be used as a fallback.
Thierry FOURNIER35d70ef2015-08-26 16:21:56 +02004402
4403 Example:
4404
4405 # return "431 Request Header Fields Too Large"
4406 http-response set-status 431
Robin H. Johnson52f5db22017-01-01 13:10:52 -08004407 # return "503 Slow Down", custom reason
4408 http-response set-status 503 reason "Slow Down".
Thierry FOURNIER35d70ef2015-08-26 16:21:56 +02004409
Willy Tarreauf4c43c12013-06-11 17:01:13 +02004410 - "set-nice" sets the "nice" factor of the current request being processed.
4411 It only has effect against the other requests being processed at the same
4412 time. The default value is 0, unless altered by the "nice" setting on the
4413 "bind" line. The accepted range is -1024..1024. The higher the value, the
4414 nicest the request will be. Lower values will make the request more
4415 important than other ones. This can be useful to improve the speed of
4416 some requests, or lower the priority of non-important requests. Using
4417 this setting without prior experimentation can cause some major slowdown.
4418
Willy Tarreau9a355ec2013-06-11 17:45:46 +02004419 - "set-log-level" is used to change the log level of the current request
4420 when a certain condition is met. Valid levels are the 8 syslog levels
4421 (see the "log" keyword) plus the special level "silent" which disables
4422 logging for this request. This rule is not final so the last matching
4423 rule wins. This rule can be useful to disable health checks coming from
4424 another equipment.
4425
Willy Tarreau42cf39e2013-06-11 18:51:32 +02004426 - "set-tos" is used to set the TOS or DSCP field value of packets sent to
4427 the client to the value passed in <tos> on platforms which support this.
4428 This value represents the whole 8 bits of the IP TOS field, and can be
4429 expressed both in decimal or hexadecimal format (prefixed by "0x"). Note
4430 that only the 6 higher bits are used in DSCP or TOS, and the two lower
4431 bits are always 0. This can be used to adjust some routing behaviour on
4432 border routers based on some information from the request. See RFC 2474,
4433 2597, 3260 and 4594 for more information.
4434
Willy Tarreau51347ed2013-06-11 19:34:13 +02004435 - "set-mark" is used to set the Netfilter MARK on all packets sent to the
4436 client to the value passed in <mark> on platforms which support it. This
4437 value is an unsigned 32 bit value which can be matched by netfilter and
4438 by the routing table. It can be expressed both in decimal or hexadecimal
4439 format (prefixed by "0x"). This can be useful to force certain packets to
4440 take a different route (for example a cheaper network path for bulk
4441 downloads). This works on Linux kernels 2.6.32 and above and requires
4442 admin privileges.
4443
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004444 - "add-acl" is used to add a new entry into an ACL. The ACL must be loaded
4445 from a file (even a dummy empty file). The file name of the ACL to be
4446 updated is passed between parentheses. It takes one argument: <key fmt>,
4447 which follows log-format rules, to collect content of the new entry. It
4448 performs a lookup in the ACL before insertion, to avoid duplicated (or
4449 more) values. This lookup is done by a linear search and can be expensive
4450 with large lists! It is the equivalent of the "add acl" command from the
4451 stats socket, but can be triggered by an HTTP response.
4452
4453 - "del-acl" is used to delete an entry from an ACL. The ACL must be loaded
4454 from a file (even a dummy empty file). The file name of the ACL to be
4455 updated is passed between parentheses. It takes one argument: <key fmt>,
4456 which follows log-format rules, to collect content of the entry to delete.
4457 It is the equivalent of the "del acl" command from the stats socket, but
4458 can be triggered by an HTTP response.
4459
4460 - "del-map" is used to delete an entry from a MAP. The MAP must be loaded
4461 from a file (even a dummy empty file). The file name of the MAP to be
4462 updated is passed between parentheses. It takes one argument: <key fmt>,
4463 which follows log-format rules, to collect content of the entry to delete.
4464 It takes one argument: "file name" It is the equivalent of the "del map"
4465 command from the stats socket, but can be triggered by an HTTP response.
4466
4467 - "set-map" is used to add a new entry into a MAP. The MAP must be loaded
4468 from a file (even a dummy empty file). The file name of the MAP to be
4469 updated is passed between parentheses. It takes 2 arguments: <key fmt>,
4470 which follows log-format rules, used to collect MAP key, and <value fmt>,
4471 which follows log-format rules, used to collect content for the new entry.
4472 It performs a lookup in the MAP before insertion, to avoid duplicated (or
4473 more) values. This lookup is done by a linear search and can be expensive
4474 with large lists! It is the equivalent of the "set map" command from the
4475 stats socket, but can be triggered by an HTTP response.
4476
Thierry FOURNIERe80fada2015-05-26 18:06:31 +02004477 - capture <sample> id <id> :
4478 captures sample expression <sample> from the response buffer, and converts
4479 it to a string. The resulting string is stored into the next request
4480 "capture" slot, so it will possibly appear next to some captured HTTP
4481 headers. It will then automatically appear in the logs, and it will be
4482 possible to extract it using sample fetch rules to feed it into headers or
4483 anything. Please check section 7.3 (Fetching samples) and "capture
4484 response header" for more information.
4485
4486 The keyword "id" is the id of the capture slot which is used for storing
4487 the string. The capture slot must be defined in an associated frontend.
4488 This is useful to run captures in backends. The slot id can be declared by
4489 a previous directive "http-response capture" or with the "declare capture"
4490 keyword.
Baptiste Assmanne9544932015-11-03 23:31:35 +01004491 If the slot <id> doesn't exist, then HAProxy fails parsing the
4492 configuration to prevent unexpected behavior at run time.
Thierry FOURNIERe80fada2015-05-26 18:06:31 +02004493
Willy Tarreau51d861a2015-05-22 17:30:48 +02004494 - "redirect" : this performs an HTTP redirection based on a redirect rule.
4495 This supports a format string similarly to "http-request redirect" rules,
4496 with the exception that only the "location" type of redirect is possible
4497 on the response. See the "redirect" keyword for the rule's syntax. When
4498 a redirect rule is applied during a response, connections to the server
4499 are closed so that no data can be forwarded from the server to the client.
4500
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004501 - set-var(<var-name>) expr:
4502 Is used to set the contents of a variable. The variable is declared
4503 inline.
4504
Daniel Schneller0b547052016-03-21 20:46:57 +01004505 <var-name> The name of the variable starts with an indication about
4506 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +01004507 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +01004508 "sess" : the variable is shared with the whole session
4509 "txn" : the variable is shared with the transaction
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004510 (request and response)
Daniel Schneller0b547052016-03-21 20:46:57 +01004511 "req" : the variable is shared only during request
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004512 processing
Daniel Schneller0b547052016-03-21 20:46:57 +01004513 "res" : the variable is shared only during response
4514 processing
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004515 This prefix is followed by a name. The separator is a '.'.
Christopher Fauletb71557a2016-10-31 10:49:03 +01004516 The name may only contain characters 'a-z', 'A-Z', '0-9',
4517 '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004518
4519 <expr> Is a standard HAProxy expression formed by a sample-fetch
4520 followed by some converters.
4521
4522 Example:
4523
4524 http-response set-var(sess.last_redir) res.hdr(location)
4525
Christopher Faulet85d79c92016-11-09 16:54:56 +01004526 - unset-var(<var-name>) :
4527 Is used to unset a variable. See above for details about <var-name>.
4528
4529 Example:
4530
4531 http-response unset-var(sess.last_redir)
4532
Ruoshan Huange4edc6b2016-07-14 15:07:45 +08004533 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] :
4534 enables tracking of sticky counters from current response. Please refer to
4535 "http-request track-sc" for a complete description. The only difference
4536 from "http-request track-sc" is the <key> sample expression can only make
4537 use of samples in response (eg. res.*, status etc.) and samples below
4538 Layer 6 (eg. ssl related samples, see section 7.3.4). If the sample is
4539 not supported, haproxy will fail and warn while parsing the config.
4540
Thierry FOURNIER236657b2015-08-19 08:25:14 +02004541 - sc-set-gpt0(<sc-id>) <int> :
4542 This action sets the GPT0 tag according to the sticky counter designated
4543 by <sc-id> and the value of <int>. The expected result is a boolean. If
4544 an error occurs, this action silently fails and the actions evaluation
4545 continues.
4546
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02004547 - sc-inc-gpc0(<sc-id>):
4548 This action increments the GPC0 counter according with the sticky counter
4549 designated by <sc-id>. If an error occurs, this action silently fails and
4550 the actions evaluation continues.
4551
Willy Tarreau2d392c22015-08-24 01:43:45 +02004552 - "silent-drop" : this stops the evaluation of the rules and makes the
4553 client-facing connection suddenly disappear using a system-dependant way
4554 that tries to prevent the client from being notified. The effect it then
4555 that the client still sees an established connection while there's none
4556 on HAProxy. The purpose is to achieve a comparable effect to "tarpit"
4557 except that it doesn't use any local resource at all on the machine
4558 running HAProxy. It can resist much higher loads than "tarpit", and slow
4559 down stronger attackers. It is important to undestand the impact of using
4560 this mechanism. All stateful equipments placed between the client and
4561 HAProxy (firewalls, proxies, load balancers) will also keep the
4562 established connection for a long time and may suffer from this action.
4563 On modern Linux systems running with enough privileges, the TCP_REPAIR
4564 socket option is used to block the emission of a TCP reset. On other
4565 systems, the socket's TTL is reduced to 1 so that the TCP reset doesn't
4566 pass the first router, though it's still delivered to local networks. Do
4567 not use it unless you fully understand how it works.
4568
Christopher Faulet76c09ef2017-09-21 11:03:52 +02004569 - send-spoe-group <engine-name> <group-name> :
4570 This action is used to trigger sending of a group of SPOE messages. To do
4571 so, the SPOE engine used to send messages must be defined, as well as the
4572 SPOE group to send. Of course, the SPOE engine must refer to an existing
4573 SPOE filter. If not engine name is provided on the SPOE filter line, the
4574 SPOE agent name must be used.
4575
4576 <engine-name> The SPOE engine name.
4577
4578 <group-name> The SPOE group name as specified in the engine
4579 configuration.
4580
Willy Tarreaue365c0b2013-06-11 16:06:12 +02004581 There is no limit to the number of http-response statements per instance.
4582
Godbach09250262013-07-02 01:19:15 +08004583 It is important to know that http-response rules are processed very early in
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08004584 the HTTP processing, before "rspdel" or "rsprep" or "rspadd" rules. That way,
4585 headers added by "add-header"/"set-header" are visible by almost all further ACL
Willy Tarreaue365c0b2013-06-11 16:06:12 +02004586 rules.
4587
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08004588 Using "rspadd"/"rspdel"/"rsprep" to manipulate request headers is discouraged
4589 in newer versions (>= 1.5). But if you need to use regular expression to
4590 delete headers, you can still use "rspdel". Also please use
4591 "http-response deny" instead of "rspdeny".
4592
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004593 Example:
4594 acl key_acl res.hdr(X-Acl-Key) -m found
4595
4596 acl myhost hdr(Host) -f myhost.lst
4597
4598 http-response add-acl(myhost.lst) %[res.hdr(X-Acl-Key)] if key_acl
4599 http-response del-acl(myhost.lst) %[res.hdr(X-Acl-Key)] if key_acl
4600
4601 Example:
4602 acl value res.hdr(X-Value) -m found
4603
4604 use_backend bk_appli if { hdr(Host),map_str(map.lst) -m found }
4605
4606 http-response set-map(map.lst) %[src] %[res.hdr(X-Value)] if value
4607 http-response del-map(map.lst) %[src] if ! value
4608
Willy Tarreaue365c0b2013-06-11 16:06:12 +02004609 See also : "http-request", section 3.4 about userlists and section 7 about
4610 ACL usage.
4611
Baptiste Assmann5ecb77f2013-10-06 23:24:13 +02004612
Willy Tarreau30631952015-08-06 15:05:24 +02004613http-reuse { never | safe | aggressive | always }
4614 Declare how idle HTTP connections may be shared between requests
4615
4616 May be used in sections: defaults | frontend | listen | backend
4617 yes | no | yes | yes
4618
4619 By default, a connection established between haproxy and the backend server
4620 belongs to the session that initiated it. The downside is that between the
4621 response and the next request, the connection remains idle and is not used.
4622 In many cases for performance reasons it is desirable to make it possible to
4623 reuse these idle connections to serve other requests from different sessions.
4624 This directive allows to tune this behaviour.
4625
4626 The argument indicates the desired connection reuse strategy :
4627
4628 - "never" : idle connections are never shared between sessions. This is
4629 the default choice. It may be enforced to cancel a different
4630 strategy inherited from a defaults section or for
4631 troubleshooting. For example, if an old bogus application
4632 considers that multiple requests over the same connection come
4633 from the same client and it is not possible to fix the
4634 application, it may be desirable to disable connection sharing
4635 in a single backend. An example of such an application could
4636 be an old haproxy using cookie insertion in tunnel mode and
4637 not checking any request past the first one.
4638
4639 - "safe" : this is the recommended strategy. The first request of a
4640 session is always sent over its own connection, and only
4641 subsequent requests may be dispatched over other existing
4642 connections. This ensures that in case the server closes the
4643 connection when the request is being sent, the browser can
4644 decide to silently retry it. Since it is exactly equivalent to
4645 regular keep-alive, there should be no side effects.
4646
4647 - "aggressive" : this mode may be useful in webservices environments where
4648 all servers are not necessarily known and where it would be
4649 appreciable to deliver most first requests over existing
4650 connections. In this case, first requests are only delivered
4651 over existing connections that have been reused at least once,
4652 proving that the server correctly supports connection reuse.
4653 It should only be used when it's sure that the client can
4654 retry a failed request once in a while and where the benefit
4655 of aggressive connection reuse significantly outweights the
4656 downsides of rare connection failures.
4657
4658 - "always" : this mode is only recommended when the path to the server is
4659 known for never breaking existing connections quickly after
4660 releasing them. It allows the first request of a session to be
4661 sent to an existing connection. This can provide a significant
4662 performance increase over the "safe" strategy when the backend
4663 is a cache farm, since such components tend to show a
4664 consistent behaviour and will benefit from the connection
4665 sharing. It is recommended that the "http-keep-alive" timeout
4666 remains low in this mode so that no dead connections remain
4667 usable. In most cases, this will lead to the same performance
4668 gains as "aggressive" but with more risks. It should only be
4669 used when it improves the situation over "aggressive".
4670
4671 When http connection sharing is enabled, a great care is taken to respect the
4672 connection properties and compatiblities. Specifically :
4673 - connections made with "usesrc" followed by a client-dependant value
4674 ("client", "clientip", "hdr_ip") are marked private and never shared ;
4675
4676 - connections sent to a server with a TLS SNI extension are marked private
4677 and are never shared ;
4678
4679 - connections receiving a status code 401 or 407 expect some authentication
4680 to be sent in return. Due to certain bogus authentication schemes (such
4681 as NTLM) relying on the connection, these connections are marked private
4682 and are never shared ;
4683
4684 No connection pool is involved, once a session dies, the last idle connection
4685 it was attached to is deleted at the same time. This ensures that connections
4686 may not last after all sessions are closed.
4687
4688 Note: connection reuse improves the accuracy of the "server maxconn" setting,
4689 because almost no new connection will be established while idle connections
4690 remain available. This is particularly true with the "always" strategy.
4691
4692 See also : "option http-keep-alive", "server maxconn"
4693
4694
Mark Lamourinec2247f02012-01-04 13:02:01 -05004695http-send-name-header [<header>]
4696 Add the server name to a request. Use the header string given by <header>
4697
4698 May be used in sections: defaults | frontend | listen | backend
4699 yes | no | yes | yes
4700
4701 Arguments :
4702
4703 <header> The header string to use to send the server name
4704
4705 The "http-send-name-header" statement causes the name of the target
4706 server to be added to the headers of an HTTP request. The name
4707 is added with the header string proved.
4708
4709 See also : "server"
4710
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01004711id <value>
Willy Tarreau53fb4ae2009-10-04 23:04:08 +02004712 Set a persistent ID to a proxy.
4713 May be used in sections : defaults | frontend | listen | backend
4714 no | yes | yes | yes
4715 Arguments : none
4716
4717 Set a persistent ID for the proxy. This ID must be unique and positive.
4718 An unused ID will automatically be assigned if unset. The first assigned
4719 value will be 1. This ID is currently only returned in statistics.
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01004720
4721
Cyril Bonté0d4bf012010-04-25 23:21:46 +02004722ignore-persist { if | unless } <condition>
4723 Declare a condition to ignore persistence
4724 May be used in sections: defaults | frontend | listen | backend
4725 no | yes | yes | yes
4726
4727 By default, when cookie persistence is enabled, every requests containing
4728 the cookie are unconditionally persistent (assuming the target server is up
4729 and running).
4730
4731 The "ignore-persist" statement allows one to declare various ACL-based
4732 conditions which, when met, will cause a request to ignore persistence.
4733 This is sometimes useful to load balance requests for static files, which
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03004734 often don't require persistence. This can also be used to fully disable
Cyril Bonté0d4bf012010-04-25 23:21:46 +02004735 persistence for a specific User-Agent (for example, some web crawler bots).
4736
Cyril Bonté0d4bf012010-04-25 23:21:46 +02004737 The persistence is ignored when an "if" condition is met, or unless an
4738 "unless" condition is met.
4739
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03004740 Example:
4741 acl url_static path_beg /static /images /img /css
4742 acl url_static path_end .gif .png .jpg .css .js
4743 ignore-persist if url_static
4744
Cyril Bonté0d4bf012010-04-25 23:21:46 +02004745 See also : "force-persist", "cookie", and section 7 about ACL usage.
4746
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004747load-server-state-from-file { global | local | none }
4748 Allow seamless reload of HAProxy
4749 May be used in sections: defaults | frontend | listen | backend
4750 yes | no | yes | yes
4751
4752 This directive points HAProxy to a file where server state from previous
4753 running process has been saved. That way, when starting up, before handling
4754 traffic, the new process can apply old states to servers exactly has if no
4755 reload occured. The purpose of the "load-server-state-from-file" directive is
4756 to tell haproxy which file to use. For now, only 2 arguments to either prevent
4757 loading state or load states from a file containing all backends and servers.
4758 The state file can be generated by running the command "show servers state"
4759 over the stats socket and redirect output.
4760
4761 The format of the file is versionned and is very specific. To understand it,
4762 please read the documentation of the "show servers state" command (chapter
Willy Tarreau1af20c72017-06-23 16:01:14 +02004763 9.3 of Management Guide).
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004764
4765 Arguments:
4766 global load the content of the file pointed by the global directive
4767 named "server-state-file".
4768
4769 local load the content of the file pointed by the directive
4770 "server-state-file-name" if set. If not set, then the backend
4771 name is used as a file name.
4772
4773 none don't load any stat for this backend
4774
4775 Notes:
Willy Tarreaue5a60682016-11-09 14:54:53 +01004776 - server's IP address is preserved across reloads by default, but the
4777 order can be changed thanks to the server's "init-addr" setting. This
4778 means that an IP address change performed on the CLI at run time will
4779 be preserved, and that any change to the local resolver (eg: /etc/hosts)
4780 will possibly not have any effect if the state file is in use.
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004781
4782 - server's weight is applied from previous running process unless it has
4783 has changed between previous and new configuration files.
4784
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004785 Example: Minimal configuration
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004786
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004787 global
4788 stats socket /tmp/socket
4789 server-state-file /tmp/server_state
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004790
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004791 defaults
4792 load-server-state-from-file global
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004793
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004794 backend bk
4795 server s1 127.0.0.1:22 check weight 11
4796 server s2 127.0.0.1:22 check weight 12
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004797
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004798
4799 Then one can run :
4800
4801 socat /tmp/socket - <<< "show servers state" > /tmp/server_state
4802
4803 Content of the file /tmp/server_state would be like this:
4804
4805 1
4806 # <field names skipped for the doc example>
4807 1 bk 1 s1 127.0.0.1 2 0 11 11 4 6 3 4 6 0 0
4808 1 bk 2 s2 127.0.0.1 2 0 12 12 4 6 3 4 6 0 0
4809
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004810 Example: Minimal configuration
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004811
4812 global
4813 stats socket /tmp/socket
4814 server-state-base /etc/haproxy/states
4815
4816 defaults
4817 load-server-state-from-file local
4818
4819 backend bk
4820 server s1 127.0.0.1:22 check weight 11
4821 server s2 127.0.0.1:22 check weight 12
4822
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004823
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004824 Then one can run :
4825
4826 socat /tmp/socket - <<< "show servers state bk" > /etc/haproxy/states/bk
4827
4828 Content of the file /etc/haproxy/states/bk would be like this:
4829
4830 1
4831 # <field names skipped for the doc example>
4832 1 bk 1 s1 127.0.0.1 2 0 11 11 4 6 3 4 6 0 0
4833 1 bk 2 s2 127.0.0.1 2 0 12 12 4 6 3 4 6 0 0
4834
4835 See also: "server-state-file", "server-state-file-name", and
4836 "show servers state"
4837
Cyril Bonté0d4bf012010-04-25 23:21:46 +02004838
Willy Tarreau2769aa02007-12-27 18:26:09 +01004839log global
Willy Tarreau18324f52014-06-27 18:10:07 +02004840log <address> [len <length>] <facility> [<level> [<minlevel>]]
William Lallemand0f99e342011-10-12 17:50:54 +02004841no log
Willy Tarreau2769aa02007-12-27 18:26:09 +01004842 Enable per-instance logging of events and traffic.
4843 May be used in sections : defaults | frontend | listen | backend
4844 yes | yes | yes | yes
William Lallemand0f99e342011-10-12 17:50:54 +02004845
4846 Prefix :
4847 no should be used when the logger list must be flushed. For example,
4848 if you don't want to inherit from the default logger list. This
4849 prefix does not allow arguments.
4850
Willy Tarreau2769aa02007-12-27 18:26:09 +01004851 Arguments :
4852 global should be used when the instance's logging parameters are the
4853 same as the global ones. This is the most common usage. "global"
4854 replaces <address>, <facility> and <level> with those of the log
4855 entries found in the "global" section. Only one "log global"
4856 statement may be used per instance, and this form takes no other
4857 parameter.
4858
4859 <address> indicates where to send the logs. It takes the same format as
4860 for the "global" section's logs, and can be one of :
4861
4862 - An IPv4 address optionally followed by a colon (':') and a UDP
4863 port. If no port is specified, 514 is used by default (the
4864 standard syslog port).
4865
David du Colombier24bb5f52011-03-17 10:40:23 +01004866 - An IPv6 address followed by a colon (':') and optionally a UDP
4867 port. If no port is specified, 514 is used by default (the
4868 standard syslog port).
4869
Willy Tarreau2769aa02007-12-27 18:26:09 +01004870 - A filesystem path to a UNIX domain socket, keeping in mind
4871 considerations for chroot (be sure the path is accessible
4872 inside the chroot) and uid/gid (be sure the path is
4873 appropriately writeable).
4874
William Lallemandb2f07452015-05-12 14:27:13 +02004875 You may want to reference some environment variables in the
4876 address parameter, see section 2.3 about environment variables.
Willy Tarreaudad36a32013-03-11 01:20:04 +01004877
Willy Tarreau18324f52014-06-27 18:10:07 +02004878 <length> is an optional maximum line length. Log lines larger than this
4879 value will be truncated before being sent. The reason is that
4880 syslog servers act differently on log line length. All servers
4881 support the default value of 1024, but some servers simply drop
4882 larger lines while others do log them. If a server supports long
4883 lines, it may make sense to set this value here in order to avoid
4884 truncating long lines. Similarly, if a server drops long lines,
4885 it is preferable to truncate them before sending them. Accepted
4886 values are 80 to 65535 inclusive. The default value of 1024 is
4887 generally fine for all standard usages. Some specific cases of
4888 long captures or JSON-formated logs may require larger values.
4889
Willy Tarreau2769aa02007-12-27 18:26:09 +01004890 <facility> must be one of the 24 standard syslog facilities :
4891
4892 kern user mail daemon auth syslog lpr news
4893 uucp cron auth2 ftp ntp audit alert cron2
4894 local0 local1 local2 local3 local4 local5 local6 local7
4895
4896 <level> is optional and can be specified to filter outgoing messages. By
4897 default, all messages are sent. If a level is specified, only
4898 messages with a severity at least as important as this level
Willy Tarreauf7edefa2009-05-10 17:20:05 +02004899 will be sent. An optional minimum level can be specified. If it
4900 is set, logs emitted with a more severe level than this one will
4901 be capped to this level. This is used to avoid sending "emerg"
4902 messages on all terminals on some default syslog configurations.
4903 Eight levels are known :
Willy Tarreau2769aa02007-12-27 18:26:09 +01004904
4905 emerg alert crit err warning notice info debug
4906
William Lallemand0f99e342011-10-12 17:50:54 +02004907 It is important to keep in mind that it is the frontend which decides what to
4908 log from a connection, and that in case of content switching, the log entries
4909 from the backend will be ignored. Connections are logged at level "info".
Willy Tarreaucc6c8912009-02-22 10:53:55 +01004910
4911 However, backend log declaration define how and where servers status changes
4912 will be logged. Level "notice" will be used to indicate a server going up,
4913 "warning" will be used for termination signals and definitive service
4914 termination, and "alert" will be used for when a server goes down.
4915
4916 Note : According to RFC3164, messages are truncated to 1024 bytes before
4917 being emitted.
Willy Tarreau2769aa02007-12-27 18:26:09 +01004918
4919 Example :
4920 log global
Willy Tarreauf7edefa2009-05-10 17:20:05 +02004921 log 127.0.0.1:514 local0 notice # only send important events
4922 log 127.0.0.1:514 local0 notice notice # same but limit output level
William Lallemandb2f07452015-05-12 14:27:13 +02004923 log "${LOCAL_SYSLOG}:514" local0 notice # send to local server
Willy Tarreaudad36a32013-03-11 01:20:04 +01004924
Willy Tarreau2769aa02007-12-27 18:26:09 +01004925
William Lallemand48940402012-01-30 16:47:22 +01004926log-format <string>
Willy Tarreaufb4e7ea2015-01-07 14:55:17 +01004927 Specifies the log format string to use for traffic logs
4928 May be used in sections: defaults | frontend | listen | backend
4929 yes | yes | yes | no
William Lallemand48940402012-01-30 16:47:22 +01004930
Willy Tarreaufb4e7ea2015-01-07 14:55:17 +01004931 This directive specifies the log format string that will be used for all logs
4932 resulting from traffic passing through the frontend using this line. If the
4933 directive is used in a defaults section, all subsequent frontends will use
4934 the same log format. Please see section 8.2.4 which covers the log format
4935 string in depth.
William Lallemand48940402012-01-30 16:47:22 +01004936
Guillaume de Lafond29f45602017-03-31 19:52:15 +02004937 "log-format" directive overrides previous "option tcplog", "log-format" and
4938 "option httplog" directives.
4939
Dragan Dosen7ad31542015-09-28 17:16:47 +02004940log-format-sd <string>
4941 Specifies the RFC5424 structured-data log format string
4942 May be used in sections: defaults | frontend | listen | backend
4943 yes | yes | yes | no
4944
4945 This directive specifies the RFC5424 structured-data log format string that
4946 will be used for all logs resulting from traffic passing through the frontend
4947 using this line. If the directive is used in a defaults section, all
4948 subsequent frontends will use the same log format. Please see section 8.2.4
4949 which covers the log format string in depth.
4950
4951 See https://tools.ietf.org/html/rfc5424#section-6.3 for more information
4952 about the RFC5424 structured-data part.
4953
4954 Note : This log format string will be used only for loggers that have set
4955 log format to "rfc5424".
4956
4957 Example :
4958 log-format-sd [exampleSDID@1234\ bytes=\"%B\"\ status=\"%ST\"]
4959
4960
Willy Tarreau094af4e2015-01-07 15:03:42 +01004961log-tag <string>
4962 Specifies the log tag to use for all outgoing logs
4963 May be used in sections: defaults | frontend | listen | backend
4964 yes | yes | yes | yes
4965
4966 Sets the tag field in the syslog header to this string. It defaults to the
4967 log-tag set in the global section, otherwise the program name as launched
4968 from the command line, which usually is "haproxy". Sometimes it can be useful
4969 to differentiate between multiple processes running on the same host, or to
4970 differentiate customer instances running in the same process. In the backend,
4971 logs about servers up/down will use this tag. As a hint, it can be convenient
4972 to set a log-tag related to a hosted customer in a defaults section then put
4973 all the frontends and backends for that customer, then start another customer
4974 in a new defaults section. See also the global "log-tag" directive.
Willy Tarreau2769aa02007-12-27 18:26:09 +01004975
Willy Tarreauc35362a2014-04-25 13:58:37 +02004976max-keep-alive-queue <value>
4977 Set the maximum server queue size for maintaining keep-alive connections
4978 May be used in sections: defaults | frontend | listen | backend
4979 yes | no | yes | yes
4980
4981 HTTP keep-alive tries to reuse the same server connection whenever possible,
4982 but sometimes it can be counter-productive, for example if a server has a lot
4983 of connections while other ones are idle. This is especially true for static
4984 servers.
4985
4986 The purpose of this setting is to set a threshold on the number of queued
4987 connections at which haproxy stops trying to reuse the same server and prefers
4988 to find another one. The default value, -1, means there is no limit. A value
4989 of zero means that keep-alive requests will never be queued. For very close
4990 servers which can be reached with a low latency and which are not sensible to
4991 breaking keep-alive, a low value is recommended (eg: local static server can
4992 use a value of 10 or less). For remote servers suffering from a high latency,
4993 higher values might be needed to cover for the latency and/or the cost of
4994 picking a different server.
4995
4996 Note that this has no impact on responses which are maintained to the same
4997 server consecutively to a 401 response. They will still go to the same server
4998 even if they have to be queued.
4999
5000 See also : "option http-server-close", "option prefer-last-server", server
5001 "maxconn" and cookie persistence.
5002
5003
Willy Tarreau2769aa02007-12-27 18:26:09 +01005004maxconn <conns>
5005 Fix the maximum number of concurrent connections on a frontend
5006 May be used in sections : defaults | frontend | listen | backend
5007 yes | yes | yes | no
5008 Arguments :
5009 <conns> is the maximum number of concurrent connections the frontend will
5010 accept to serve. Excess connections will be queued by the system
5011 in the socket's listen queue and will be served once a connection
5012 closes.
5013
5014 If the system supports it, it can be useful on big sites to raise this limit
5015 very high so that haproxy manages connection queues, instead of leaving the
5016 clients with unanswered connection attempts. This value should not exceed the
5017 global maxconn. Also, keep in mind that a connection contains two buffers
Baptiste Assmann79fb45d2016-03-06 23:34:31 +01005018 of tune.bufsize (16kB by default) each, as well as some other data resulting
5019 in about 33 kB of RAM being consumed per established connection. That means
5020 that a medium system equipped with 1GB of RAM can withstand around
5021 20000-25000 concurrent connections if properly tuned.
Willy Tarreau2769aa02007-12-27 18:26:09 +01005022
5023 Also, when <conns> is set to large values, it is possible that the servers
5024 are not sized to accept such loads, and for this reason it is generally wise
5025 to assign them some reasonable connection limits.
5026
Vincent Bernat6341be52012-06-27 17:18:30 +02005027 By default, this value is set to 2000.
5028
Willy Tarreau2769aa02007-12-27 18:26:09 +01005029 See also : "server", global section's "maxconn", "fullconn"
5030
5031
5032mode { tcp|http|health }
5033 Set the running mode or protocol of the instance
5034 May be used in sections : defaults | frontend | listen | backend
5035 yes | yes | yes | yes
5036 Arguments :
5037 tcp The instance will work in pure TCP mode. A full-duplex connection
5038 will be established between clients and servers, and no layer 7
5039 examination will be performed. This is the default mode. It
5040 should be used for SSL, SSH, SMTP, ...
5041
5042 http The instance will work in HTTP mode. The client request will be
5043 analyzed in depth before connecting to any server. Any request
5044 which is not RFC-compliant will be rejected. Layer 7 filtering,
5045 processing and switching will be possible. This is the mode which
5046 brings HAProxy most of its value.
5047
5048 health The instance will work in "health" mode. It will just reply "OK"
Willy Tarreau82569f92012-09-27 23:48:56 +02005049 to incoming connections and close the connection. Alternatively,
5050 If the "httpchk" option is set, "HTTP/1.0 200 OK" will be sent
5051 instead. Nothing will be logged in either case. This mode is used
5052 to reply to external components health checks. This mode is
5053 deprecated and should not be used anymore as it is possible to do
5054 the same and even better by combining TCP or HTTP modes with the
5055 "monitor" keyword.
Willy Tarreau2769aa02007-12-27 18:26:09 +01005056
Cyril Bonté108cf6e2012-04-21 23:30:29 +02005057 When doing content switching, it is mandatory that the frontend and the
5058 backend are in the same mode (generally HTTP), otherwise the configuration
5059 will be refused.
Willy Tarreau2769aa02007-12-27 18:26:09 +01005060
Cyril Bonté108cf6e2012-04-21 23:30:29 +02005061 Example :
Willy Tarreau2769aa02007-12-27 18:26:09 +01005062 defaults http_instances
5063 mode http
5064
Cyril Bonté108cf6e2012-04-21 23:30:29 +02005065 See also : "monitor", "monitor-net"
Willy Tarreau2769aa02007-12-27 18:26:09 +01005066
Willy Tarreau0ba27502007-12-24 16:55:16 +01005067
Cyril Bontéf0c60612010-02-06 14:44:47 +01005068monitor fail { if | unless } <condition>
Willy Tarreau2769aa02007-12-27 18:26:09 +01005069 Add a condition to report a failure to a monitor HTTP request.
Willy Tarreau0ba27502007-12-24 16:55:16 +01005070 May be used in sections : defaults | frontend | listen | backend
5071 no | yes | yes | no
Willy Tarreau0ba27502007-12-24 16:55:16 +01005072 Arguments :
5073 if <cond> the monitor request will fail if the condition is satisfied,
5074 and will succeed otherwise. The condition should describe a
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005075 combined test which must induce a failure if all conditions
Willy Tarreau0ba27502007-12-24 16:55:16 +01005076 are met, for instance a low number of servers both in a
5077 backend and its backup.
5078
5079 unless <cond> the monitor request will succeed only if the condition is
5080 satisfied, and will fail otherwise. Such a condition may be
5081 based on a test on the presence of a minimum number of active
5082 servers in a list of backends.
5083
5084 This statement adds a condition which can force the response to a monitor
5085 request to report a failure. By default, when an external component queries
5086 the URI dedicated to monitoring, a 200 response is returned. When one of the
5087 conditions above is met, haproxy will return 503 instead of 200. This is
5088 very useful to report a site failure to an external component which may base
5089 routing advertisements between multiple sites on the availability reported by
5090 haproxy. In this case, one would rely on an ACL involving the "nbsrv"
Willy Tarreauae94d4d2011-05-11 16:28:49 +02005091 criterion. Note that "monitor fail" only works in HTTP mode. Both status
5092 messages may be tweaked using "errorfile" or "errorloc" if needed.
Willy Tarreau0ba27502007-12-24 16:55:16 +01005093
5094 Example:
5095 frontend www
Willy Tarreau2769aa02007-12-27 18:26:09 +01005096 mode http
Willy Tarreau0ba27502007-12-24 16:55:16 +01005097 acl site_dead nbsrv(dynamic) lt 2
5098 acl site_dead nbsrv(static) lt 2
5099 monitor-uri /site_alive
5100 monitor fail if site_dead
5101
Willy Tarreauae94d4d2011-05-11 16:28:49 +02005102 See also : "monitor-net", "monitor-uri", "errorfile", "errorloc"
Willy Tarreau2769aa02007-12-27 18:26:09 +01005103
5104
5105monitor-net <source>
5106 Declare a source network which is limited to monitor requests
5107 May be used in sections : defaults | frontend | listen | backend
5108 yes | yes | yes | no
5109 Arguments :
5110 <source> is the source IPv4 address or network which will only be able to
5111 get monitor responses to any request. It can be either an IPv4
5112 address, a host name, or an address followed by a slash ('/')
5113 followed by a mask.
5114
5115 In TCP mode, any connection coming from a source matching <source> will cause
5116 the connection to be immediately closed without any log. This allows another
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005117 equipment to probe the port and verify that it is still listening, without
Willy Tarreau2769aa02007-12-27 18:26:09 +01005118 forwarding the connection to a remote server.
5119
5120 In HTTP mode, a connection coming from a source matching <source> will be
5121 accepted, the following response will be sent without waiting for a request,
5122 then the connection will be closed : "HTTP/1.0 200 OK". This is normally
5123 enough for any front-end HTTP probe to detect that the service is UP and
Willy Tarreau82569f92012-09-27 23:48:56 +02005124 running without forwarding the request to a backend server. Note that this
5125 response is sent in raw format, without any transformation. This is important
5126 as it means that it will not be SSL-encrypted on SSL listeners.
Willy Tarreau2769aa02007-12-27 18:26:09 +01005127
Willy Tarreau82569f92012-09-27 23:48:56 +02005128 Monitor requests are processed very early, just after tcp-request connection
5129 ACLs which are the only ones able to block them. These connections are short
5130 lived and never wait for any data from the client. They cannot be logged, and
5131 it is the intended purpose. They are only used to report HAProxy's health to
5132 an upper component, nothing more. Please note that "monitor fail" rules do
5133 not apply to connections intercepted by "monitor-net".
Willy Tarreau2769aa02007-12-27 18:26:09 +01005134
Willy Tarreau95cd2832010-03-04 23:36:33 +01005135 Last, please note that only one "monitor-net" statement can be specified in
5136 a frontend. If more than one is found, only the last one will be considered.
Cyril Bonté108cf6e2012-04-21 23:30:29 +02005137
Willy Tarreau2769aa02007-12-27 18:26:09 +01005138 Example :
5139 # addresses .252 and .253 are just probing us.
5140 frontend www
5141 monitor-net 192.168.0.252/31
5142
5143 See also : "monitor fail", "monitor-uri"
5144
5145
5146monitor-uri <uri>
5147 Intercept a URI used by external components' monitor requests
5148 May be used in sections : defaults | frontend | listen | backend
5149 yes | yes | yes | no
5150 Arguments :
5151 <uri> is the exact URI which we want to intercept to return HAProxy's
5152 health status instead of forwarding the request.
5153
5154 When an HTTP request referencing <uri> will be received on a frontend,
5155 HAProxy will not forward it nor log it, but instead will return either
5156 "HTTP/1.0 200 OK" or "HTTP/1.0 503 Service unavailable", depending on failure
5157 conditions defined with "monitor fail". This is normally enough for any
5158 front-end HTTP probe to detect that the service is UP and running without
5159 forwarding the request to a backend server. Note that the HTTP method, the
5160 version and all headers are ignored, but the request must at least be valid
5161 at the HTTP level. This keyword may only be used with an HTTP-mode frontend.
5162
5163 Monitor requests are processed very early. It is not possible to block nor
5164 divert them using ACLs. They cannot be logged either, and it is the intended
5165 purpose. They are only used to report HAProxy's health to an upper component,
5166 nothing more. However, it is possible to add any number of conditions using
5167 "monitor fail" and ACLs so that the result can be adjusted to whatever check
5168 can be imagined (most often the number of available servers in a backend).
5169
5170 Example :
5171 # Use /haproxy_test to report haproxy's status
5172 frontend www
5173 mode http
5174 monitor-uri /haproxy_test
5175
5176 See also : "monitor fail", "monitor-net"
5177
Willy Tarreau0ba27502007-12-24 16:55:16 +01005178
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005179option abortonclose
5180no option abortonclose
5181 Enable or disable early dropping of aborted requests pending in queues.
5182 May be used in sections : defaults | frontend | listen | backend
5183 yes | no | yes | yes
5184 Arguments : none
5185
5186 In presence of very high loads, the servers will take some time to respond.
5187 The per-instance connection queue will inflate, and the response time will
5188 increase respective to the size of the queue times the average per-session
5189 response time. When clients will wait for more than a few seconds, they will
Willy Tarreau198a7442008-01-17 12:05:32 +01005190 often hit the "STOP" button on their browser, leaving a useless request in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005191 the queue, and slowing down other users, and the servers as well, because the
5192 request will eventually be served, then aborted at the first error
5193 encountered while delivering the response.
5194
5195 As there is no way to distinguish between a full STOP and a simple output
5196 close on the client side, HTTP agents should be conservative and consider
5197 that the client might only have closed its output channel while waiting for
5198 the response. However, this introduces risks of congestion when lots of users
5199 do the same, and is completely useless nowadays because probably no client at
5200 all will close the session while waiting for the response. Some HTTP agents
Willy Tarreaud72758d2010-01-12 10:42:19 +01005201 support this behaviour (Squid, Apache, HAProxy), and others do not (TUX, most
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005202 hardware-based load balancers). So the probability for a closed input channel
Willy Tarreau198a7442008-01-17 12:05:32 +01005203 to represent a user hitting the "STOP" button is close to 100%, and the risk
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005204 of being the single component to break rare but valid traffic is extremely
5205 low, which adds to the temptation to be able to abort a session early while
5206 still not served and not pollute the servers.
5207
5208 In HAProxy, the user can choose the desired behaviour using the option
5209 "abortonclose". By default (without the option) the behaviour is HTTP
5210 compliant and aborted requests will be served. But when the option is
5211 specified, a session with an incoming channel closed will be aborted while
5212 it is still possible, either pending in the queue for a connection slot, or
5213 during the connection establishment if the server has not yet acknowledged
5214 the connection request. This considerably reduces the queue size and the load
5215 on saturated servers when users are tempted to click on STOP, which in turn
Willy Tarreaud72758d2010-01-12 10:42:19 +01005216 reduces the response time for other users.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005217
5218 If this option has been enabled in a "defaults" section, it can be disabled
5219 in a specific instance by prepending the "no" keyword before it.
5220
5221 See also : "timeout queue" and server's "maxconn" and "maxqueue" parameters
5222
5223
Willy Tarreau4076a152009-04-02 15:18:36 +02005224option accept-invalid-http-request
5225no option accept-invalid-http-request
5226 Enable or disable relaxing of HTTP request parsing
5227 May be used in sections : defaults | frontend | listen | backend
5228 yes | yes | yes | no
5229 Arguments : none
5230
Willy Tarreau91852eb2015-05-01 13:26:00 +02005231 By default, HAProxy complies with RFC7230 in terms of message parsing. This
Willy Tarreau4076a152009-04-02 15:18:36 +02005232 means that invalid characters in header names are not permitted and cause an
5233 error to be returned to the client. This is the desired behaviour as such
5234 forbidden characters are essentially used to build attacks exploiting server
5235 weaknesses, and bypass security filtering. Sometimes, a buggy browser or
5236 server will emit invalid header names for whatever reason (configuration,
5237 implementation) and the issue will not be immediately fixed. In such a case,
5238 it is possible to relax HAProxy's header name parser to accept any character
Willy Tarreau422246e2012-01-07 23:54:13 +01005239 even if that does not make sense, by specifying this option. Similarly, the
5240 list of characters allowed to appear in a URI is well defined by RFC3986, and
5241 chars 0-31, 32 (space), 34 ('"'), 60 ('<'), 62 ('>'), 92 ('\'), 94 ('^'), 96
5242 ('`'), 123 ('{'), 124 ('|'), 125 ('}'), 127 (delete) and anything above are
5243 not allowed at all. Haproxy always blocks a number of them (0..32, 127). The
Willy Tarreau91852eb2015-05-01 13:26:00 +02005244 remaining ones are blocked by default unless this option is enabled. This
Willy Tarreau13317662015-05-01 13:47:08 +02005245 option also relaxes the test on the HTTP version, it allows HTTP/0.9 requests
5246 to pass through (no version specified) and multiple digits for both the major
5247 and the minor version.
Willy Tarreau4076a152009-04-02 15:18:36 +02005248
5249 This option should never be enabled by default as it hides application bugs
5250 and open security breaches. It should only be deployed after a problem has
5251 been confirmed.
5252
5253 When this option is enabled, erroneous header names will still be accepted in
5254 requests, but the complete request will be captured in order to permit later
Willy Tarreau422246e2012-01-07 23:54:13 +01005255 analysis using the "show errors" request on the UNIX stats socket. Similarly,
5256 requests containing invalid chars in the URI part will be logged. Doing this
Willy Tarreau4076a152009-04-02 15:18:36 +02005257 also helps confirming that the issue has been solved.
5258
5259 If this option has been enabled in a "defaults" section, it can be disabled
5260 in a specific instance by prepending the "no" keyword before it.
5261
5262 See also : "option accept-invalid-http-response" and "show errors" on the
5263 stats socket.
5264
5265
5266option accept-invalid-http-response
5267no option accept-invalid-http-response
5268 Enable or disable relaxing of HTTP response parsing
5269 May be used in sections : defaults | frontend | listen | backend
5270 yes | no | yes | yes
5271 Arguments : none
5272
Willy Tarreau91852eb2015-05-01 13:26:00 +02005273 By default, HAProxy complies with RFC7230 in terms of message parsing. This
Willy Tarreau4076a152009-04-02 15:18:36 +02005274 means that invalid characters in header names are not permitted and cause an
5275 error to be returned to the client. This is the desired behaviour as such
5276 forbidden characters are essentially used to build attacks exploiting server
5277 weaknesses, and bypass security filtering. Sometimes, a buggy browser or
5278 server will emit invalid header names for whatever reason (configuration,
5279 implementation) and the issue will not be immediately fixed. In such a case,
5280 it is possible to relax HAProxy's header name parser to accept any character
Willy Tarreau91852eb2015-05-01 13:26:00 +02005281 even if that does not make sense, by specifying this option. This option also
5282 relaxes the test on the HTTP version format, it allows multiple digits for
5283 both the major and the minor version.
Willy Tarreau4076a152009-04-02 15:18:36 +02005284
5285 This option should never be enabled by default as it hides application bugs
5286 and open security breaches. It should only be deployed after a problem has
5287 been confirmed.
5288
5289 When this option is enabled, erroneous header names will still be accepted in
5290 responses, but the complete response will be captured in order to permit
5291 later analysis using the "show errors" request on the UNIX stats socket.
5292 Doing this also helps confirming that the issue has been solved.
5293
5294 If this option has been enabled in a "defaults" section, it can be disabled
5295 in a specific instance by prepending the "no" keyword before it.
5296
5297 See also : "option accept-invalid-http-request" and "show errors" on the
5298 stats socket.
5299
5300
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005301option allbackups
5302no option allbackups
5303 Use either all backup servers at a time or only the first one
5304 May be used in sections : defaults | frontend | listen | backend
5305 yes | no | yes | yes
5306 Arguments : none
5307
5308 By default, the first operational backup server gets all traffic when normal
5309 servers are all down. Sometimes, it may be preferred to use multiple backups
5310 at once, because one will not be enough. When "option allbackups" is enabled,
5311 the load balancing will be performed among all backup servers when all normal
5312 ones are unavailable. The same load balancing algorithm will be used and the
5313 servers' weights will be respected. Thus, there will not be any priority
5314 order between the backup servers anymore.
5315
5316 This option is mostly used with static server farms dedicated to return a
5317 "sorry" page when an application is completely offline.
5318
5319 If this option has been enabled in a "defaults" section, it can be disabled
5320 in a specific instance by prepending the "no" keyword before it.
5321
5322
5323option checkcache
5324no option checkcache
Godbach7056a352013-12-11 20:01:07 +08005325 Analyze all server responses and block responses with cacheable cookies
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005326 May be used in sections : defaults | frontend | listen | backend
5327 yes | no | yes | yes
5328 Arguments : none
5329
5330 Some high-level frameworks set application cookies everywhere and do not
5331 always let enough control to the developer to manage how the responses should
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005332 be cached. When a session cookie is returned on a cacheable object, there is a
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005333 high risk of session crossing or stealing between users traversing the same
5334 caches. In some situations, it is better to block the response than to let
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02005335 some sensitive session information go in the wild.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005336
5337 The option "checkcache" enables deep inspection of all server responses for
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005338 strict compliance with HTTP specification in terms of cacheability. It
Willy Tarreau198a7442008-01-17 12:05:32 +01005339 carefully checks "Cache-control", "Pragma" and "Set-cookie" headers in server
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005340 response to check if there's a risk of caching a cookie on a client-side
5341 proxy. When this option is enabled, the only responses which can be delivered
Willy Tarreau198a7442008-01-17 12:05:32 +01005342 to the client are :
5343 - all those without "Set-Cookie" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005344 - all those with a return code other than 200, 203, 206, 300, 301, 410,
Willy Tarreau198a7442008-01-17 12:05:32 +01005345 provided that the server has not set a "Cache-control: public" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005346 - all those that come from a POST request, provided that the server has not
5347 set a 'Cache-Control: public' header ;
5348 - those with a 'Pragma: no-cache' header
5349 - those with a 'Cache-control: private' header
5350 - those with a 'Cache-control: no-store' header
5351 - those with a 'Cache-control: max-age=0' header
5352 - those with a 'Cache-control: s-maxage=0' header
5353 - those with a 'Cache-control: no-cache' header
5354 - those with a 'Cache-control: no-cache="set-cookie"' header
5355 - those with a 'Cache-control: no-cache="set-cookie,' header
5356 (allowing other fields after set-cookie)
5357
5358 If a response doesn't respect these requirements, then it will be blocked
Willy Tarreau198a7442008-01-17 12:05:32 +01005359 just as if it was from an "rspdeny" filter, with an "HTTP 502 bad gateway".
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005360 The session state shows "PH--" meaning that the proxy blocked the response
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005361 during headers processing. Additionally, an alert will be sent in the logs so
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005362 that admins are informed that there's something to be fixed.
5363
5364 Due to the high impact on the application, the application should be tested
5365 in depth with the option enabled before going to production. It is also a
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01005366 good practice to always activate it during tests, even if it is not used in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005367 production, as it will report potentially dangerous application behaviours.
5368
5369 If this option has been enabled in a "defaults" section, it can be disabled
5370 in a specific instance by prepending the "no" keyword before it.
5371
5372
5373option clitcpka
5374no option clitcpka
5375 Enable or disable the sending of TCP keepalive packets on the client side
5376 May be used in sections : defaults | frontend | listen | backend
5377 yes | yes | yes | no
5378 Arguments : none
5379
5380 When there is a firewall or any session-aware component between a client and
5381 a server, and when the protocol involves very long sessions with long idle
5382 periods (eg: remote desktops), there is a risk that one of the intermediate
5383 components decides to expire a session which has remained idle for too long.
5384
5385 Enabling socket-level TCP keep-alives makes the system regularly send packets
5386 to the other end of the connection, leaving it active. The delay between
5387 keep-alive probes is controlled by the system only and depends both on the
5388 operating system and its tuning parameters.
5389
5390 It is important to understand that keep-alive packets are neither emitted nor
5391 received at the application level. It is only the network stacks which sees
5392 them. For this reason, even if one side of the proxy already uses keep-alives
5393 to maintain its connection alive, those keep-alive packets will not be
5394 forwarded to the other side of the proxy.
5395
5396 Please note that this has nothing to do with HTTP keep-alive.
5397
5398 Using option "clitcpka" enables the emission of TCP keep-alive probes on the
5399 client side of a connection, which should help when session expirations are
5400 noticed between HAProxy and a client.
5401
5402 If this option has been enabled in a "defaults" section, it can be disabled
5403 in a specific instance by prepending the "no" keyword before it.
5404
5405 See also : "option srvtcpka", "option tcpka"
5406
5407
Willy Tarreau0ba27502007-12-24 16:55:16 +01005408option contstats
5409 Enable continuous traffic statistics updates
5410 May be used in sections : defaults | frontend | listen | backend
5411 yes | yes | yes | no
5412 Arguments : none
5413
5414 By default, counters used for statistics calculation are incremented
5415 only when a session finishes. It works quite well when serving small
5416 objects, but with big ones (for example large images or archives) or
5417 with A/V streaming, a graph generated from haproxy counters looks like
Willy Tarreaudef0d222016-11-08 22:03:00 +01005418 a hedgehog. With this option enabled counters get incremented frequently
5419 along the session, typically every 5 seconds, which is often enough to
5420 produce clean graphs. Recounting touches a hotpath directly so it is not
5421 not enabled by default, as it can cause a lot of wakeups for very large
5422 session counts and cause a small performance drop.
Willy Tarreau0ba27502007-12-24 16:55:16 +01005423
5424
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02005425option dontlog-normal
5426no option dontlog-normal
5427 Enable or disable logging of normal, successful connections
5428 May be used in sections : defaults | frontend | listen | backend
5429 yes | yes | yes | no
5430 Arguments : none
5431
5432 There are large sites dealing with several thousand connections per second
5433 and for which logging is a major pain. Some of them are even forced to turn
5434 logs off and cannot debug production issues. Setting this option ensures that
5435 normal connections, those which experience no error, no timeout, no retry nor
5436 redispatch, will not be logged. This leaves disk space for anomalies. In HTTP
5437 mode, the response status code is checked and return codes 5xx will still be
5438 logged.
5439
5440 It is strongly discouraged to use this option as most of the time, the key to
5441 complex issues is in the normal logs which will not be logged here. If you
5442 need to separate logs, see the "log-separate-errors" option instead.
5443
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005444 See also : "log", "dontlognull", "log-separate-errors" and section 8 about
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02005445 logging.
5446
5447
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005448option dontlognull
5449no option dontlognull
5450 Enable or disable logging of null connections
5451 May be used in sections : defaults | frontend | listen | backend
5452 yes | yes | yes | no
5453 Arguments : none
5454
5455 In certain environments, there are components which will regularly connect to
5456 various systems to ensure that they are still alive. It can be the case from
5457 another load balancer as well as from monitoring systems. By default, even a
5458 simple port probe or scan will produce a log. If those connections pollute
5459 the logs too much, it is possible to enable option "dontlognull" to indicate
5460 that a connection on which no data has been transferred will not be logged,
Willy Tarreau0f228a02015-05-01 15:37:53 +02005461 which typically corresponds to those probes. Note that errors will still be
5462 returned to the client and accounted for in the stats. If this is not what is
5463 desired, option http-ignore-probes can be used instead.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005464
5465 It is generally recommended not to use this option in uncontrolled
5466 environments (eg: internet), otherwise scans and other malicious activities
5467 would not be logged.
5468
5469 If this option has been enabled in a "defaults" section, it can be disabled
5470 in a specific instance by prepending the "no" keyword before it.
5471
Willy Tarreau0f228a02015-05-01 15:37:53 +02005472 See also : "log", "http-ignore-probes", "monitor-net", "monitor-uri", and
5473 section 8 about logging.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005474
5475
5476option forceclose
5477no option forceclose
5478 Enable or disable active connection closing after response is transferred.
5479 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaua31e5df2009-12-30 01:10:35 +01005480 yes | yes | yes | yes
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005481 Arguments : none
5482
5483 Some HTTP servers do not necessarily close the connections when they receive
5484 the "Connection: close" set by "option httpclose", and if the client does not
5485 close either, then the connection remains open till the timeout expires. This
5486 causes high number of simultaneous connections on the servers and shows high
5487 global session times in the logs.
5488
5489 When this happens, it is possible to use "option forceclose". It will
Willy Tarreau82eeaf22009-12-29 12:09:05 +01005490 actively close the outgoing server channel as soon as the server has finished
Cyril Bonté653dcd62014-02-20 00:13:15 +01005491 to respond and release some resources earlier than with "option httpclose".
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005492
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005493 This option may also be combined with "option http-pretend-keepalive", which
5494 will disable sending of the "Connection: close" header, but will still cause
5495 the connection to be closed once the whole response is received.
5496
Cyril Bonté653dcd62014-02-20 00:13:15 +01005497 This option disables and replaces any previous "option httpclose", "option
5498 http-server-close", "option http-keep-alive", or "option http-tunnel".
Willy Tarreau02bce8b2014-01-30 00:15:28 +01005499
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005500 If this option has been enabled in a "defaults" section, it can be disabled
5501 in a specific instance by prepending the "no" keyword before it.
5502
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005503 See also : "option httpclose" and "option http-pretend-keepalive"
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005504
5505
Willy Tarreau87cf5142011-08-19 22:57:24 +02005506option forwardfor [ except <network> ] [ header <name> ] [ if-none ]
Willy Tarreauc27debf2008-01-06 08:57:02 +01005507 Enable insertion of the X-Forwarded-For header to requests sent to servers
5508 May be used in sections : defaults | frontend | listen | backend
5509 yes | yes | yes | yes
5510 Arguments :
5511 <network> is an optional argument used to disable this option for sources
5512 matching <network>
Ross Westaf72a1d2008-08-03 10:51:45 +02005513 <name> an optional argument to specify a different "X-Forwarded-For"
Willy Tarreaud72758d2010-01-12 10:42:19 +01005514 header name.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005515
5516 Since HAProxy works in reverse-proxy mode, the servers see its IP address as
5517 their client address. This is sometimes annoying when the client's IP address
5518 is expected in server logs. To solve this problem, the well-known HTTP header
5519 "X-Forwarded-For" may be added by HAProxy to all requests sent to the server.
5520 This header contains a value representing the client's IP address. Since this
5521 header is always appended at the end of the existing header list, the server
5522 must be configured to always use the last occurrence of this header only. See
Ross Westaf72a1d2008-08-03 10:51:45 +02005523 the server's manual to find how to enable use of this standard header. Note
5524 that only the last occurrence of the header must be used, since it is really
5525 possible that the client has already brought one.
5526
Willy Tarreaud72758d2010-01-12 10:42:19 +01005527 The keyword "header" may be used to supply a different header name to replace
Ross Westaf72a1d2008-08-03 10:51:45 +02005528 the default "X-Forwarded-For". This can be useful where you might already
Willy Tarreaud72758d2010-01-12 10:42:19 +01005529 have a "X-Forwarded-For" header from a different application (eg: stunnel),
5530 and you need preserve it. Also if your backend server doesn't use the
Ross Westaf72a1d2008-08-03 10:51:45 +02005531 "X-Forwarded-For" header and requires different one (eg: Zeus Web Servers
5532 require "X-Cluster-Client-IP").
Willy Tarreauc27debf2008-01-06 08:57:02 +01005533
5534 Sometimes, a same HAProxy instance may be shared between a direct client
5535 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
5536 used to decrypt HTTPS traffic). It is possible to disable the addition of the
5537 header for a known source address or network by adding the "except" keyword
5538 followed by the network address. In this case, any source IP matching the
5539 network will not cause an addition of this header. Most common uses are with
5540 private networks or 127.0.0.1.
5541
Willy Tarreau87cf5142011-08-19 22:57:24 +02005542 Alternatively, the keyword "if-none" states that the header will only be
5543 added if it is not present. This should only be used in perfectly trusted
5544 environment, as this might cause a security issue if headers reaching haproxy
5545 are under the control of the end-user.
5546
Willy Tarreauc27debf2008-01-06 08:57:02 +01005547 This option may be specified either in the frontend or in the backend. If at
Ross Westaf72a1d2008-08-03 10:51:45 +02005548 least one of them uses it, the header will be added. Note that the backend's
5549 setting of the header subargument takes precedence over the frontend's if
Willy Tarreau87cf5142011-08-19 22:57:24 +02005550 both are defined. In the case of the "if-none" argument, if at least one of
5551 the frontend or the backend does not specify it, it wants the addition to be
5552 mandatory, so it wins.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005553
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02005554 Example :
Willy Tarreauc27debf2008-01-06 08:57:02 +01005555 # Public HTTP address also used by stunnel on the same machine
5556 frontend www
5557 mode http
5558 option forwardfor except 127.0.0.1 # stunnel already adds the header
5559
Ross Westaf72a1d2008-08-03 10:51:45 +02005560 # Those servers want the IP Address in X-Client
5561 backend www
5562 mode http
5563 option forwardfor header X-Client
5564
Willy Tarreau87cf5142011-08-19 22:57:24 +02005565 See also : "option httpclose", "option http-server-close",
Willy Tarreau70dffda2014-01-30 03:07:23 +01005566 "option forceclose", "option http-keep-alive"
Willy Tarreauc27debf2008-01-06 08:57:02 +01005567
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005568
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02005569option http-buffer-request
5570no option http-buffer-request
5571 Enable or disable waiting for whole HTTP request body before proceeding
5572 May be used in sections : defaults | frontend | listen | backend
5573 yes | yes | yes | yes
5574 Arguments : none
5575
5576 It is sometimes desirable to wait for the body of an HTTP request before
5577 taking a decision. This is what is being done by "balance url_param" for
5578 example. The first use case is to buffer requests from slow clients before
5579 connecting to the server. Another use case consists in taking the routing
5580 decision based on the request body's contents. This option placed in a
5581 frontend or backend forces the HTTP processing to wait until either the whole
5582 body is received, or the request buffer is full, or the first chunk is
5583 complete in case of chunked encoding. It can have undesired side effects with
Tim Düsterhus4896c442016-11-29 02:15:19 +01005584 some applications abusing HTTP by expecting unbuffered transmissions between
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02005585 the frontend and the backend, so this should definitely not be used by
5586 default.
5587
Baptiste Assmanneccdf432015-10-28 13:49:01 +01005588 See also : "option http-no-delay", "timeout http-request"
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02005589
5590
Willy Tarreau0f228a02015-05-01 15:37:53 +02005591option http-ignore-probes
5592no option http-ignore-probes
5593 Enable or disable logging of null connections and request timeouts
5594 May be used in sections : defaults | frontend | listen | backend
5595 yes | yes | yes | no
5596 Arguments : none
5597
5598 Recently some browsers started to implement a "pre-connect" feature
5599 consisting in speculatively connecting to some recently visited web sites
5600 just in case the user would like to visit them. This results in many
5601 connections being established to web sites, which end up in 408 Request
5602 Timeout if the timeout strikes first, or 400 Bad Request when the browser
5603 decides to close them first. These ones pollute the log and feed the error
5604 counters. There was already "option dontlognull" but it's insufficient in
5605 this case. Instead, this option does the following things :
5606 - prevent any 400/408 message from being sent to the client if nothing
5607 was received over a connection before it was closed ;
5608 - prevent any log from being emitted in this situation ;
5609 - prevent any error counter from being incremented
5610
5611 That way the empty connection is silently ignored. Note that it is better
5612 not to use this unless it is clear that it is needed, because it will hide
5613 real problems. The most common reason for not receiving a request and seeing
5614 a 408 is due to an MTU inconsistency between the client and an intermediary
5615 element such as a VPN, which blocks too large packets. These issues are
5616 generally seen with POST requests as well as GET with large cookies. The logs
5617 are often the only way to detect them.
5618
5619 If this option has been enabled in a "defaults" section, it can be disabled
5620 in a specific instance by prepending the "no" keyword before it.
5621
5622 See also : "log", "dontlognull", "errorfile", and section 8 about logging.
5623
5624
Willy Tarreau16bfb022010-01-16 19:48:41 +01005625option http-keep-alive
5626no option http-keep-alive
5627 Enable or disable HTTP keep-alive from client to server
5628 May be used in sections : defaults | frontend | listen | backend
5629 yes | yes | yes | yes
5630 Arguments : none
5631
Willy Tarreau70dffda2014-01-30 03:07:23 +01005632 By default HAProxy operates in keep-alive mode with regards to persistent
5633 connections: for each connection it processes each request and response, and
5634 leaves the connection idle on both sides between the end of a response and the
5635 start of a new request. This mode may be changed by several options such as
5636 "option http-server-close", "option forceclose", "option httpclose" or
5637 "option http-tunnel". This option allows to set back the keep-alive mode,
5638 which can be useful when another mode was used in a defaults section.
5639
5640 Setting "option http-keep-alive" enables HTTP keep-alive mode on the client-
5641 and server- sides. This provides the lowest latency on the client side (slow
Willy Tarreau16bfb022010-01-16 19:48:41 +01005642 network) and the fastest session reuse on the server side at the expense
5643 of maintaining idle connections to the servers. In general, it is possible
5644 with this option to achieve approximately twice the request rate that the
5645 "http-server-close" option achieves on small objects. There are mainly two
5646 situations where this option may be useful :
5647
5648 - when the server is non-HTTP compliant and authenticates the connection
5649 instead of requests (eg: NTLM authentication)
5650
5651 - when the cost of establishing the connection to the server is significant
5652 compared to the cost of retrieving the associated object from the server.
5653
5654 This last case can happen when the server is a fast static server of cache.
5655 In this case, the server will need to be properly tuned to support high enough
5656 connection counts because connections will last until the client sends another
5657 request.
5658
5659 If the client request has to go to another backend or another server due to
5660 content switching or the load balancing algorithm, the idle connection will
Willy Tarreau9420b122013-12-15 18:58:25 +01005661 immediately be closed and a new one re-opened. Option "prefer-last-server" is
5662 available to try optimize server selection so that if the server currently
5663 attached to an idle connection is usable, it will be used.
Willy Tarreau16bfb022010-01-16 19:48:41 +01005664
5665 In general it is preferred to use "option http-server-close" with application
5666 servers, and some static servers might benefit from "option http-keep-alive".
5667
5668 At the moment, logs will not indicate whether requests came from the same
5669 session or not. The accept date reported in the logs corresponds to the end
5670 of the previous request, and the request time corresponds to the time spent
5671 waiting for a new request. The keep-alive request time is still bound to the
5672 timeout defined by "timeout http-keep-alive" or "timeout http-request" if
5673 not set.
5674
Cyril Bonté653dcd62014-02-20 00:13:15 +01005675 This option disables and replaces any previous "option httpclose", "option
5676 http-server-close", "option forceclose" or "option http-tunnel". When backend
Willy Tarreau70dffda2014-01-30 03:07:23 +01005677 and frontend options differ, all of these 4 options have precedence over
Cyril Bonté653dcd62014-02-20 00:13:15 +01005678 "option http-keep-alive".
Willy Tarreau16bfb022010-01-16 19:48:41 +01005679
5680 See also : "option forceclose", "option http-server-close",
Willy Tarreau9420b122013-12-15 18:58:25 +01005681 "option prefer-last-server", "option http-pretend-keepalive",
5682 "option httpclose", and "1.1. The HTTP transaction model".
Willy Tarreau16bfb022010-01-16 19:48:41 +01005683
5684
Willy Tarreau96e31212011-05-30 18:10:30 +02005685option http-no-delay
5686no option http-no-delay
5687 Instruct the system to favor low interactive delays over performance in HTTP
5688 May be used in sections : defaults | frontend | listen | backend
5689 yes | yes | yes | yes
5690 Arguments : none
5691
5692 In HTTP, each payload is unidirectional and has no notion of interactivity.
5693 Any agent is expected to queue data somewhat for a reasonably low delay.
5694 There are some very rare server-to-server applications that abuse the HTTP
5695 protocol and expect the payload phase to be highly interactive, with many
5696 interleaved data chunks in both directions within a single request. This is
5697 absolutely not supported by the HTTP specification and will not work across
5698 most proxies or servers. When such applications attempt to do this through
5699 haproxy, it works but they will experience high delays due to the network
5700 optimizations which favor performance by instructing the system to wait for
5701 enough data to be available in order to only send full packets. Typical
5702 delays are around 200 ms per round trip. Note that this only happens with
5703 abnormal uses. Normal uses such as CONNECT requests nor WebSockets are not
5704 affected.
5705
5706 When "option http-no-delay" is present in either the frontend or the backend
5707 used by a connection, all such optimizations will be disabled in order to
5708 make the exchanges as fast as possible. Of course this offers no guarantee on
5709 the functionality, as it may break at any other place. But if it works via
5710 HAProxy, it will work as fast as possible. This option should never be used
5711 by default, and should never be used at all unless such a buggy application
5712 is discovered. The impact of using this option is an increase of bandwidth
5713 usage and CPU usage, which may significantly lower performance in high
5714 latency environments.
5715
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02005716 See also : "option http-buffer-request"
5717
Willy Tarreau96e31212011-05-30 18:10:30 +02005718
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005719option http-pretend-keepalive
5720no option http-pretend-keepalive
5721 Define whether haproxy will announce keepalive to the server or not
5722 May be used in sections : defaults | frontend | listen | backend
5723 yes | yes | yes | yes
5724 Arguments : none
5725
5726 When running with "option http-server-close" or "option forceclose", haproxy
5727 adds a "Connection: close" header to the request forwarded to the server.
5728 Unfortunately, when some servers see this header, they automatically refrain
5729 from using the chunked encoding for responses of unknown length, while this
5730 is totally unrelated. The immediate effect is that this prevents haproxy from
5731 maintaining the client connection alive. A second effect is that a client or
5732 a cache could receive an incomplete response without being aware of it, and
5733 consider the response complete.
5734
5735 By setting "option http-pretend-keepalive", haproxy will make the server
5736 believe it will keep the connection alive. The server will then not fall back
5737 to the abnormal undesired above. When haproxy gets the whole response, it
5738 will close the connection with the server just as it would do with the
5739 "forceclose" option. That way the client gets a normal response and the
5740 connection is correctly closed on the server side.
5741
5742 It is recommended not to enable this option by default, because most servers
5743 will more efficiently close the connection themselves after the last packet,
5744 and release its buffers slightly earlier. Also, the added packet on the
5745 network could slightly reduce the overall peak performance. However it is
5746 worth noting that when this option is enabled, haproxy will have slightly
5747 less work to do. So if haproxy is the bottleneck on the whole architecture,
5748 enabling this option might save a few CPU cycles.
5749
5750 This option may be set both in a frontend and in a backend. It is enabled if
5751 at least one of the frontend or backend holding a connection has it enabled.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04005752 This option may be combined with "option httpclose", which will cause
Willy Tarreau22a95342010-09-29 14:31:41 +02005753 keepalive to be announced to the server and close to be announced to the
5754 client. This practice is discouraged though.
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005755
5756 If this option has been enabled in a "defaults" section, it can be disabled
5757 in a specific instance by prepending the "no" keyword before it.
5758
Willy Tarreau16bfb022010-01-16 19:48:41 +01005759 See also : "option forceclose", "option http-server-close", and
5760 "option http-keep-alive"
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005761
Willy Tarreauc27debf2008-01-06 08:57:02 +01005762
Willy Tarreaub608feb2010-01-02 22:47:18 +01005763option http-server-close
5764no option http-server-close
5765 Enable or disable HTTP connection closing on the server side
5766 May be used in sections : defaults | frontend | listen | backend
5767 yes | yes | yes | yes
5768 Arguments : none
5769
Willy Tarreau70dffda2014-01-30 03:07:23 +01005770 By default HAProxy operates in keep-alive mode with regards to persistent
5771 connections: for each connection it processes each request and response, and
5772 leaves the connection idle on both sides between the end of a response and
5773 the start of a new request. This mode may be changed by several options such
5774 as "option http-server-close", "option forceclose", "option httpclose" or
5775 "option http-tunnel". Setting "option http-server-close" enables HTTP
5776 connection-close mode on the server side while keeping the ability to support
5777 HTTP keep-alive and pipelining on the client side. This provides the lowest
5778 latency on the client side (slow network) and the fastest session reuse on
5779 the server side to save server resources, similarly to "option forceclose".
5780 It also permits non-keepalive capable servers to be served in keep-alive mode
Lukas Tribus23953682017-04-28 13:24:30 +00005781 to the clients if they conform to the requirements of RFC7230. Please note
Willy Tarreau70dffda2014-01-30 03:07:23 +01005782 that some servers do not always conform to those requirements when they see
5783 "Connection: close" in the request. The effect will be that keep-alive will
5784 never be used. A workaround consists in enabling "option
5785 http-pretend-keepalive".
Willy Tarreaub608feb2010-01-02 22:47:18 +01005786
5787 At the moment, logs will not indicate whether requests came from the same
5788 session or not. The accept date reported in the logs corresponds to the end
5789 of the previous request, and the request time corresponds to the time spent
5790 waiting for a new request. The keep-alive request time is still bound to the
Willy Tarreaub16a5742010-01-10 14:46:16 +01005791 timeout defined by "timeout http-keep-alive" or "timeout http-request" if
5792 not set.
Willy Tarreaub608feb2010-01-02 22:47:18 +01005793
5794 This option may be set both in a frontend and in a backend. It is enabled if
5795 at least one of the frontend or backend holding a connection has it enabled.
Cyril Bonté653dcd62014-02-20 00:13:15 +01005796 It disables and replaces any previous "option httpclose", "option forceclose",
5797 "option http-tunnel" or "option http-keep-alive". Please check section 4
Willy Tarreau70dffda2014-01-30 03:07:23 +01005798 ("Proxies") to see how this option combines with others when frontend and
5799 backend options differ.
Willy Tarreaub608feb2010-01-02 22:47:18 +01005800
5801 If this option has been enabled in a "defaults" section, it can be disabled
5802 in a specific instance by prepending the "no" keyword before it.
5803
Patrick Mezard9ec2ec42010-06-12 17:02:45 +02005804 See also : "option forceclose", "option http-pretend-keepalive",
Willy Tarreau16bfb022010-01-16 19:48:41 +01005805 "option httpclose", "option http-keep-alive", and
5806 "1.1. The HTTP transaction model".
Willy Tarreaub608feb2010-01-02 22:47:18 +01005807
5808
Willy Tarreau02bce8b2014-01-30 00:15:28 +01005809option http-tunnel
5810no option http-tunnel
5811 Disable or enable HTTP connection processing after first transaction
5812 May be used in sections : defaults | frontend | listen | backend
5813 yes | yes | yes | yes
5814 Arguments : none
5815
Willy Tarreau70dffda2014-01-30 03:07:23 +01005816 By default HAProxy operates in keep-alive mode with regards to persistent
5817 connections: for each connection it processes each request and response, and
5818 leaves the connection idle on both sides between the end of a response and
5819 the start of a new request. This mode may be changed by several options such
5820 as "option http-server-close", "option forceclose", "option httpclose" or
5821 "option http-tunnel".
5822
5823 Option "http-tunnel" disables any HTTP processing past the first request and
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03005824 the first response. This is the mode which was used by default in versions
Willy Tarreau70dffda2014-01-30 03:07:23 +01005825 1.0 to 1.5-dev21. It is the mode with the lowest processing overhead, which
5826 is normally not needed anymore unless in very specific cases such as when
5827 using an in-house protocol that looks like HTTP but is not compatible, or
5828 just to log one request per client in order to reduce log size. Note that
5829 everything which works at the HTTP level, including header parsing/addition,
5830 cookie processing or content switching will only work for the first request
5831 and will be ignored after the first response.
Willy Tarreau02bce8b2014-01-30 00:15:28 +01005832
5833 If this option has been enabled in a "defaults" section, it can be disabled
5834 in a specific instance by prepending the "no" keyword before it.
5835
5836 See also : "option forceclose", "option http-server-close",
5837 "option httpclose", "option http-keep-alive", and
5838 "1.1. The HTTP transaction model".
5839
5840
Willy Tarreau88d349d2010-01-25 12:15:43 +01005841option http-use-proxy-header
Cyril Bontéf0c60612010-02-06 14:44:47 +01005842no option http-use-proxy-header
Willy Tarreau88d349d2010-01-25 12:15:43 +01005843 Make use of non-standard Proxy-Connection header instead of Connection
5844 May be used in sections : defaults | frontend | listen | backend
5845 yes | yes | yes | no
5846 Arguments : none
5847
Lukas Tribus23953682017-04-28 13:24:30 +00005848 While RFC7230 explicitly states that HTTP/1.1 agents must use the
Willy Tarreau88d349d2010-01-25 12:15:43 +01005849 Connection header to indicate their wish of persistent or non-persistent
5850 connections, both browsers and proxies ignore this header for proxied
5851 connections and make use of the undocumented, non-standard Proxy-Connection
5852 header instead. The issue begins when trying to put a load balancer between
5853 browsers and such proxies, because there will be a difference between what
5854 haproxy understands and what the client and the proxy agree on.
5855
5856 By setting this option in a frontend, haproxy can automatically switch to use
5857 that non-standard header if it sees proxied requests. A proxied request is
Lukas Tribusf01a9cd2016-02-03 18:09:37 +01005858 defined here as one where the URI begins with neither a '/' nor a '*'. This
5859 is incompatible with the HTTP tunnel mode. Note that this option can only be
5860 specified in a frontend and will affect the request along its whole life.
Willy Tarreau88d349d2010-01-25 12:15:43 +01005861
Willy Tarreau844a7e72010-01-31 21:46:18 +01005862 Also, when this option is set, a request which requires authentication will
5863 automatically switch to use proxy authentication headers if it is itself a
5864 proxied request. That makes it possible to check or enforce authentication in
5865 front of an existing proxy.
5866
Willy Tarreau88d349d2010-01-25 12:15:43 +01005867 This option should normally never be used, except in front of a proxy.
5868
5869 See also : "option httpclose", "option forceclose" and "option
5870 http-server-close".
5871
5872
Willy Tarreaud63335a2010-02-26 12:56:52 +01005873option httpchk
5874option httpchk <uri>
5875option httpchk <method> <uri>
5876option httpchk <method> <uri> <version>
5877 Enable HTTP protocol to check on the servers health
5878 May be used in sections : defaults | frontend | listen | backend
5879 yes | no | yes | yes
5880 Arguments :
5881 <method> is the optional HTTP method used with the requests. When not set,
5882 the "OPTIONS" method is used, as it generally requires low server
5883 processing and is easy to filter out from the logs. Any method
5884 may be used, though it is not recommended to invent non-standard
5885 ones.
5886
5887 <uri> is the URI referenced in the HTTP requests. It defaults to " / "
5888 which is accessible by default on almost any server, but may be
5889 changed to any other URI. Query strings are permitted.
5890
5891 <version> is the optional HTTP version string. It defaults to "HTTP/1.0"
5892 but some servers might behave incorrectly in HTTP 1.0, so turning
5893 it to HTTP/1.1 may sometimes help. Note that the Host field is
5894 mandatory in HTTP/1.1, and as a trick, it is possible to pass it
5895 after "\r\n" following the version string.
5896
5897 By default, server health checks only consist in trying to establish a TCP
5898 connection. When "option httpchk" is specified, a complete HTTP request is
5899 sent once the TCP connection is established, and responses 2xx and 3xx are
5900 considered valid, while all other ones indicate a server failure, including
5901 the lack of any response.
5902
5903 The port and interval are specified in the server configuration.
5904
5905 This option does not necessarily require an HTTP backend, it also works with
5906 plain TCP backends. This is particularly useful to check simple scripts bound
5907 to some dedicated ports using the inetd daemon.
5908
5909 Examples :
5910 # Relay HTTPS traffic to Apache instance and check service availability
5911 # using HTTP request "OPTIONS * HTTP/1.1" on port 80.
5912 backend https_relay
5913 mode tcp
5914 option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
5915 server apache1 192.168.1.1:443 check port 80
5916
Simon Hormanafc47ee2013-11-25 10:46:35 +09005917 See also : "option ssl-hello-chk", "option smtpchk", "option mysql-check",
5918 "option pgsql-check", "http-check" and the "check", "port" and
5919 "inter" server options.
Willy Tarreaud63335a2010-02-26 12:56:52 +01005920
5921
Willy Tarreauc27debf2008-01-06 08:57:02 +01005922option httpclose
5923no option httpclose
5924 Enable or disable passive HTTP connection closing
5925 May be used in sections : defaults | frontend | listen | backend
5926 yes | yes | yes | yes
5927 Arguments : none
5928
Willy Tarreau70dffda2014-01-30 03:07:23 +01005929 By default HAProxy operates in keep-alive mode with regards to persistent
5930 connections: for each connection it processes each request and response, and
5931 leaves the connection idle on both sides between the end of a response and
5932 the start of a new request. This mode may be changed by several options such
Cyril Bonté653dcd62014-02-20 00:13:15 +01005933 as "option http-server-close", "option forceclose", "option httpclose" or
Willy Tarreau70dffda2014-01-30 03:07:23 +01005934 "option http-tunnel".
5935
5936 If "option httpclose" is set, HAProxy will work in HTTP tunnel mode and check
5937 if a "Connection: close" header is already set in each direction, and will
5938 add one if missing. Each end should react to this by actively closing the TCP
5939 connection after each transfer, thus resulting in a switch to the HTTP close
5940 mode. Any "Connection" header different from "close" will also be removed.
5941 Note that this option is deprecated since what it does is very cheap but not
5942 reliable. Using "option http-server-close" or "option forceclose" is strongly
5943 recommended instead.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005944
5945 It seldom happens that some servers incorrectly ignore this header and do not
Jamie Gloudonaaa21002012-08-25 00:18:33 -04005946 close the connection even though they reply "Connection: close". For this
Willy Tarreau0dfdf192010-01-05 11:33:11 +01005947 reason, they are not compatible with older HTTP 1.0 browsers. If this happens
5948 it is possible to use the "option forceclose" which actively closes the
5949 request connection once the server responds. Option "forceclose" also
5950 releases the server connection earlier because it does not have to wait for
5951 the client to acknowledge it.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005952
5953 This option may be set both in a frontend and in a backend. It is enabled if
5954 at least one of the frontend or backend holding a connection has it enabled.
Cyril Bonté653dcd62014-02-20 00:13:15 +01005955 It disables and replaces any previous "option http-server-close",
5956 "option forceclose", "option http-keep-alive" or "option http-tunnel". Please
Willy Tarreau70dffda2014-01-30 03:07:23 +01005957 check section 4 ("Proxies") to see how this option combines with others when
5958 frontend and backend options differ.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005959
5960 If this option has been enabled in a "defaults" section, it can be disabled
5961 in a specific instance by prepending the "no" keyword before it.
5962
Patrick Mezard9ec2ec42010-06-12 17:02:45 +02005963 See also : "option forceclose", "option http-server-close" and
5964 "1.1. The HTTP transaction model".
Willy Tarreauc27debf2008-01-06 08:57:02 +01005965
5966
Emeric Brun3a058f32009-06-30 18:26:00 +02005967option httplog [ clf ]
Willy Tarreauc27debf2008-01-06 08:57:02 +01005968 Enable logging of HTTP request, session state and timers
5969 May be used in sections : defaults | frontend | listen | backend
5970 yes | yes | yes | yes
Emeric Brun3a058f32009-06-30 18:26:00 +02005971 Arguments :
5972 clf if the "clf" argument is added, then the output format will be
5973 the CLF format instead of HAProxy's default HTTP format. You can
5974 use this when you need to feed HAProxy's logs through a specific
5975 log analyser which only support the CLF format and which is not
5976 extensible.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005977
5978 By default, the log output format is very poor, as it only contains the
5979 source and destination addresses, and the instance name. By specifying
5980 "option httplog", each log line turns into a much richer format including,
5981 but not limited to, the HTTP request, the connection timers, the session
5982 status, the connections numbers, the captured headers and cookies, the
5983 frontend, backend and server name, and of course the source address and
5984 ports.
5985
5986 This option may be set either in the frontend or the backend.
5987
PiBa-NLbd556bf2014-12-11 21:31:54 +01005988 Specifying only "option httplog" will automatically clear the 'clf' mode
5989 if it was set by default.
Emeric Brun3a058f32009-06-30 18:26:00 +02005990
Guillaume de Lafond29f45602017-03-31 19:52:15 +02005991 "option httplog" overrides any previous "log-format" directive.
5992
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005993 See also : section 8 about logging.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005994
Willy Tarreau55165fe2009-05-10 12:02:55 +02005995
5996option http_proxy
5997no option http_proxy
5998 Enable or disable plain HTTP proxy mode
5999 May be used in sections : defaults | frontend | listen | backend
6000 yes | yes | yes | yes
6001 Arguments : none
6002
6003 It sometimes happens that people need a pure HTTP proxy which understands
6004 basic proxy requests without caching nor any fancy feature. In this case,
6005 it may be worth setting up an HAProxy instance with the "option http_proxy"
6006 set. In this mode, no server is declared, and the connection is forwarded to
6007 the IP address and port found in the URL after the "http://" scheme.
6008
6009 No host address resolution is performed, so this only works when pure IP
6010 addresses are passed. Since this option's usage perimeter is rather limited,
Lukas Tribusf01a9cd2016-02-03 18:09:37 +01006011 it will probably be used only by experts who know they need exactly it. This
6012 is incompatible with the HTTP tunnel mode.
Willy Tarreau55165fe2009-05-10 12:02:55 +02006013
6014 If this option has been enabled in a "defaults" section, it can be disabled
6015 in a specific instance by prepending the "no" keyword before it.
6016
6017 Example :
6018 # this backend understands HTTP proxy requests and forwards them directly.
6019 backend direct_forward
6020 option httpclose
6021 option http_proxy
6022
6023 See also : "option httpclose"
6024
Willy Tarreau211ad242009-10-03 21:45:07 +02006025
Jamie Gloudon801a0a32012-08-25 00:18:33 -04006026option independent-streams
6027no option independent-streams
6028 Enable or disable independent timeout processing for both directions
Willy Tarreauf27b5ea2009-10-03 22:01:18 +02006029 May be used in sections : defaults | frontend | listen | backend
6030 yes | yes | yes | yes
6031 Arguments : none
6032
6033 By default, when data is sent over a socket, both the write timeout and the
6034 read timeout for that socket are refreshed, because we consider that there is
6035 activity on that socket, and we have no other means of guessing if we should
6036 receive data or not.
6037
6038 While this default behaviour is desirable for almost all applications, there
6039 exists a situation where it is desirable to disable it, and only refresh the
6040 read timeout if there are incoming data. This happens on sessions with large
6041 timeouts and low amounts of exchanged data such as telnet session. If the
6042 server suddenly disappears, the output data accumulates in the system's
6043 socket buffers, both timeouts are correctly refreshed, and there is no way
6044 to know the server does not receive them, so we don't timeout. However, when
6045 the underlying protocol always echoes sent data, it would be enough by itself
6046 to detect the issue using the read timeout. Note that this problem does not
6047 happen with more verbose protocols because data won't accumulate long in the
6048 socket buffers.
6049
6050 When this option is set on the frontend, it will disable read timeout updates
6051 on data sent to the client. There probably is little use of this case. When
6052 the option is set on the backend, it will disable read timeout updates on
6053 data sent to the server. Doing so will typically break large HTTP posts from
6054 slow lines, so use it with caution.
6055
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006056 Note: older versions used to call this setting "option independent-streams"
Jamie Gloudon801a0a32012-08-25 00:18:33 -04006057 with a spelling mistake. This spelling is still supported but
6058 deprecated.
6059
Willy Tarreauce887fd2012-05-12 12:50:00 +02006060 See also : "timeout client", "timeout server" and "timeout tunnel"
Willy Tarreauf27b5ea2009-10-03 22:01:18 +02006061
6062
Gabor Lekenyb4c81e42010-09-29 18:17:05 +02006063option ldap-check
6064 Use LDAPv3 health checks for server testing
6065 May be used in sections : defaults | frontend | listen | backend
6066 yes | no | yes | yes
6067 Arguments : none
6068
6069 It is possible to test that the server correctly talks LDAPv3 instead of just
6070 testing that it accepts the TCP connection. When this option is set, an
6071 LDAPv3 anonymous simple bind message is sent to the server, and the response
6072 is analyzed to find an LDAPv3 bind response message.
6073
6074 The server is considered valid only when the LDAP response contains success
6075 resultCode (http://tools.ietf.org/html/rfc4511#section-4.1.9).
6076
6077 Logging of bind requests is server dependent see your documentation how to
6078 configure it.
6079
6080 Example :
6081 option ldap-check
6082
6083 See also : "option httpchk"
6084
6085
Simon Horman98637e52014-06-20 12:30:16 +09006086option external-check
6087 Use external processes for server health checks
6088 May be used in sections : defaults | frontend | listen | backend
6089 yes | no | yes | yes
6090
6091 It is possible to test the health of a server using an external command.
6092 This is achieved by running the executable set using "external-check
6093 command".
6094
6095 Requires the "external-check" global to be set.
6096
6097 See also : "external-check", "external-check command", "external-check path"
6098
6099
Willy Tarreau211ad242009-10-03 21:45:07 +02006100option log-health-checks
6101no option log-health-checks
Willy Tarreaubef1b322014-05-13 21:01:39 +02006102 Enable or disable logging of health checks status updates
Willy Tarreau211ad242009-10-03 21:45:07 +02006103 May be used in sections : defaults | frontend | listen | backend
6104 yes | no | yes | yes
6105 Arguments : none
6106
Willy Tarreaubef1b322014-05-13 21:01:39 +02006107 By default, failed health check are logged if server is UP and successful
6108 health checks are logged if server is DOWN, so the amount of additional
6109 information is limited.
Willy Tarreau211ad242009-10-03 21:45:07 +02006110
Willy Tarreaubef1b322014-05-13 21:01:39 +02006111 When this option is enabled, any change of the health check status or to
6112 the server's health will be logged, so that it becomes possible to know
6113 that a server was failing occasional checks before crashing, or exactly when
6114 it failed to respond a valid HTTP status, then when the port started to
6115 reject connections, then when the server stopped responding at all.
6116
6117 Note that status changes not caused by health checks (eg: enable/disable on
6118 the CLI) are intentionally not logged by this option.
Willy Tarreau211ad242009-10-03 21:45:07 +02006119
Willy Tarreaubef1b322014-05-13 21:01:39 +02006120 See also: "option httpchk", "option ldap-check", "option mysql-check",
6121 "option pgsql-check", "option redis-check", "option smtpchk",
6122 "option tcp-check", "log" and section 8 about logging.
Willy Tarreau211ad242009-10-03 21:45:07 +02006123
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02006124
6125option log-separate-errors
6126no option log-separate-errors
6127 Change log level for non-completely successful connections
6128 May be used in sections : defaults | frontend | listen | backend
6129 yes | yes | yes | no
6130 Arguments : none
6131
6132 Sometimes looking for errors in logs is not easy. This option makes haproxy
6133 raise the level of logs containing potentially interesting information such
6134 as errors, timeouts, retries, redispatches, or HTTP status codes 5xx. The
6135 level changes from "info" to "err". This makes it possible to log them
6136 separately to a different file with most syslog daemons. Be careful not to
6137 remove them from the original file, otherwise you would lose ordering which
6138 provides very important information.
6139
6140 Using this option, large sites dealing with several thousand connections per
6141 second may log normal traffic to a rotating buffer and only archive smaller
6142 error logs.
6143
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006144 See also : "log", "dontlognull", "dontlog-normal" and section 8 about
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02006145 logging.
6146
Willy Tarreauc27debf2008-01-06 08:57:02 +01006147
6148option logasap
6149no option logasap
6150 Enable or disable early logging of HTTP requests
6151 May be used in sections : defaults | frontend | listen | backend
6152 yes | yes | yes | no
6153 Arguments : none
6154
6155 By default, HTTP requests are logged upon termination so that the total
6156 transfer time and the number of bytes appear in the logs. When large objects
6157 are being transferred, it may take a while before the request appears in the
6158 logs. Using "option logasap", the request gets logged as soon as the server
6159 sends the complete headers. The only missing information in the logs will be
6160 the total number of bytes which will indicate everything except the amount
6161 of data transferred, and the total time which will not take the transfer
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01006162 time into account. In such a situation, it's a good practice to capture the
Willy Tarreauc27debf2008-01-06 08:57:02 +01006163 "Content-Length" response header so that the logs at least indicate how many
6164 bytes are expected to be transferred.
6165
Willy Tarreaucc6c8912009-02-22 10:53:55 +01006166 Examples :
6167 listen http_proxy 0.0.0.0:80
6168 mode http
6169 option httplog
6170 option logasap
6171 log 192.168.2.200 local3
6172
6173 >>> Feb 6 12:14:14 localhost \
6174 haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
6175 static/srv1 9/10/7/14/+30 200 +243 - - ---- 3/1/1/1/0 1/0 \
6176 "GET /image.iso HTTP/1.0"
6177
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006178 See also : "option httplog", "capture response header", and section 8 about
Willy Tarreauc27debf2008-01-06 08:57:02 +01006179 logging.
6180
6181
Nenad Merdanovic6639a7c2014-05-30 14:26:32 +02006182option mysql-check [ user <username> [ post-41 ] ]
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02006183 Use MySQL health checks for server testing
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01006184 May be used in sections : defaults | frontend | listen | backend
6185 yes | no | yes | yes
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02006186 Arguments :
Cyril Bonté108cf6e2012-04-21 23:30:29 +02006187 <username> This is the username which will be used when connecting to MySQL
6188 server.
Nenad Merdanovic6639a7c2014-05-30 14:26:32 +02006189 post-41 Send post v4.1 client compatible checks
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02006190
6191 If you specify a username, the check consists of sending two MySQL packet,
6192 one Client Authentication packet, and one QUIT packet, to correctly close
6193 MySQL session. We then parse the MySQL Handshake Initialisation packet and/or
6194 Error packet. It is a basic but useful test which does not produce error nor
6195 aborted connect on the server. However, it requires adding an authorization
6196 in the MySQL table, like this :
6197
6198 USE mysql;
6199 INSERT INTO user (Host,User) values ('<ip_of_haproxy>','<username>');
6200 FLUSH PRIVILEGES;
6201
6202 If you don't specify a username (it is deprecated and not recommended), the
6203 check only consists in parsing the Mysql Handshake Initialisation packet or
6204 Error packet, we don't send anything in this mode. It was reported that it
6205 can generate lockout if check is too frequent and/or if there is not enough
6206 traffic. In fact, you need in this case to check MySQL "max_connect_errors"
6207 value as if a connection is established successfully within fewer than MySQL
6208 "max_connect_errors" attempts after a previous connection was interrupted,
6209 the error count for the host is cleared to zero. If HAProxy's server get
6210 blocked, the "FLUSH HOSTS" statement is the only way to unblock it.
6211
6212 Remember that this does not check database presence nor database consistency.
6213 To do this, you can use an external check with xinetd for example.
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01006214
Hervé COMMOWICK212f7782011-06-10 14:05:59 +02006215 The check requires MySQL >=3.22, for older version, please use TCP check.
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01006216
6217 Most often, an incoming MySQL server needs to see the client's IP address for
6218 various purposes, including IP privilege matching and connection logging.
6219 When possible, it is often wise to masquerade the client's IP address when
6220 connecting to the server using the "usesrc" argument of the "source" keyword,
Willy Tarreau29fbe512015-08-20 19:35:14 +02006221 which requires the transparent proxy feature to be compiled in, and the MySQL
6222 server to route the client via the machine hosting haproxy.
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01006223
6224 See also: "option httpchk"
6225
6226
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006227option nolinger
6228no option nolinger
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01006229 Enable or disable immediate session resource cleaning after close
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006230 May be used in sections: defaults | frontend | listen | backend
6231 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006232 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006233
6234 When clients or servers abort connections in a dirty way (eg: they are
6235 physically disconnected), the session timeouts triggers and the session is
6236 closed. But it will remain in FIN_WAIT1 state for some time in the system,
6237 using some resources and possibly limiting the ability to establish newer
6238 connections.
6239
6240 When this happens, it is possible to activate "option nolinger" which forces
6241 the system to immediately remove any socket's pending data on close. Thus,
6242 the session is instantly purged from the system's tables. This usually has
6243 side effects such as increased number of TCP resets due to old retransmits
6244 getting immediately rejected. Some firewalls may sometimes complain about
6245 this too.
6246
6247 For this reason, it is not recommended to use this option when not absolutely
6248 needed. You know that you need it when you have thousands of FIN_WAIT1
6249 sessions on your system (TIME_WAIT ones do not count).
6250
6251 This option may be used both on frontends and backends, depending on the side
6252 where it is required. Use it on the frontend for clients, and on the backend
6253 for servers.
6254
6255 If this option has been enabled in a "defaults" section, it can be disabled
6256 in a specific instance by prepending the "no" keyword before it.
6257
6258
Willy Tarreau55165fe2009-05-10 12:02:55 +02006259option originalto [ except <network> ] [ header <name> ]
6260 Enable insertion of the X-Original-To header to requests sent to servers
6261 May be used in sections : defaults | frontend | listen | backend
6262 yes | yes | yes | yes
6263 Arguments :
6264 <network> is an optional argument used to disable this option for sources
6265 matching <network>
6266 <name> an optional argument to specify a different "X-Original-To"
6267 header name.
6268
6269 Since HAProxy can work in transparent mode, every request from a client can
6270 be redirected to the proxy and HAProxy itself can proxy every request to a
6271 complex SQUID environment and the destination host from SO_ORIGINAL_DST will
6272 be lost. This is annoying when you want access rules based on destination ip
6273 addresses. To solve this problem, a new HTTP header "X-Original-To" may be
6274 added by HAProxy to all requests sent to the server. This header contains a
6275 value representing the original destination IP address. Since this must be
6276 configured to always use the last occurrence of this header only. Note that
6277 only the last occurrence of the header must be used, since it is really
6278 possible that the client has already brought one.
6279
6280 The keyword "header" may be used to supply a different header name to replace
6281 the default "X-Original-To". This can be useful where you might already
6282 have a "X-Original-To" header from a different application, and you need
6283 preserve it. Also if your backend server doesn't use the "X-Original-To"
6284 header and requires different one.
6285
6286 Sometimes, a same HAProxy instance may be shared between a direct client
6287 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
6288 used to decrypt HTTPS traffic). It is possible to disable the addition of the
6289 header for a known source address or network by adding the "except" keyword
6290 followed by the network address. In this case, any source IP matching the
6291 network will not cause an addition of this header. Most common uses are with
6292 private networks or 127.0.0.1.
6293
6294 This option may be specified either in the frontend or in the backend. If at
6295 least one of them uses it, the header will be added. Note that the backend's
6296 setting of the header subargument takes precedence over the frontend's if
6297 both are defined.
6298
Willy Tarreau55165fe2009-05-10 12:02:55 +02006299 Examples :
6300 # Original Destination address
6301 frontend www
6302 mode http
6303 option originalto except 127.0.0.1
6304
6305 # Those servers want the IP Address in X-Client-Dst
6306 backend www
6307 mode http
6308 option originalto header X-Client-Dst
6309
Willy Tarreau87cf5142011-08-19 22:57:24 +02006310 See also : "option httpclose", "option http-server-close",
6311 "option forceclose"
Willy Tarreau55165fe2009-05-10 12:02:55 +02006312
6313
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006314option persist
6315no option persist
6316 Enable or disable forced persistence on down servers
6317 May be used in sections: defaults | frontend | listen | backend
6318 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006319 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006320
6321 When an HTTP request reaches a backend with a cookie which references a dead
6322 server, by default it is redispatched to another server. It is possible to
6323 force the request to be sent to the dead server first using "option persist"
6324 if absolutely needed. A common use case is when servers are under extreme
6325 load and spend their time flapping. In this case, the users would still be
6326 directed to the server they opened the session on, in the hope they would be
6327 correctly served. It is recommended to use "option redispatch" in conjunction
6328 with this option so that in the event it would not be possible to connect to
6329 the server at all (server definitely dead), the client would finally be
6330 redirected to another valid server.
6331
6332 If this option has been enabled in a "defaults" section, it can be disabled
6333 in a specific instance by prepending the "no" keyword before it.
6334
Willy Tarreau4de91492010-01-22 19:10:05 +01006335 See also : "option redispatch", "retries", "force-persist"
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006336
6337
Willy Tarreau0c122822013-12-15 18:49:01 +01006338option pgsql-check [ user <username> ]
6339 Use PostgreSQL health checks for server testing
6340 May be used in sections : defaults | frontend | listen | backend
6341 yes | no | yes | yes
6342 Arguments :
6343 <username> This is the username which will be used when connecting to
6344 PostgreSQL server.
6345
6346 The check sends a PostgreSQL StartupMessage and waits for either
6347 Authentication request or ErrorResponse message. It is a basic but useful
6348 test which does not produce error nor aborted connect on the server.
6349 This check is identical with the "mysql-check".
6350
6351 See also: "option httpchk"
6352
6353
Willy Tarreau9420b122013-12-15 18:58:25 +01006354option prefer-last-server
6355no option prefer-last-server
6356 Allow multiple load balanced requests to remain on the same server
6357 May be used in sections: defaults | frontend | listen | backend
6358 yes | no | yes | yes
6359 Arguments : none
6360
6361 When the load balancing algorithm in use is not deterministic, and a previous
6362 request was sent to a server to which haproxy still holds a connection, it is
6363 sometimes desirable that subsequent requests on a same session go to the same
6364 server as much as possible. Note that this is different from persistence, as
6365 we only indicate a preference which haproxy tries to apply without any form
6366 of warranty. The real use is for keep-alive connections sent to servers. When
6367 this option is used, haproxy will try to reuse the same connection that is
6368 attached to the server instead of rebalancing to another server, causing a
6369 close of the connection. This can make sense for static file servers. It does
Willy Tarreau068621e2013-12-23 15:11:25 +01006370 not make much sense to use this in combination with hashing algorithms. Note,
6371 haproxy already automatically tries to stick to a server which sends a 401 or
6372 to a proxy which sends a 407 (authentication required). This is mandatory for
6373 use with the broken NTLM authentication challenge, and significantly helps in
6374 troubleshooting some faulty applications. Option prefer-last-server might be
6375 desirable in these environments as well, to avoid redistributing the traffic
6376 after every other response.
Willy Tarreau9420b122013-12-15 18:58:25 +01006377
6378 If this option has been enabled in a "defaults" section, it can be disabled
6379 in a specific instance by prepending the "no" keyword before it.
6380
6381 See also: "option http-keep-alive"
6382
6383
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006384option redispatch
Joseph Lynch726ab712015-05-11 23:25:34 -07006385option redispatch <interval>
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006386no option redispatch
6387 Enable or disable session redistribution in case of connection failure
6388 May be used in sections: defaults | frontend | listen | backend
6389 yes | no | yes | yes
Joseph Lynch726ab712015-05-11 23:25:34 -07006390 Arguments :
6391 <interval> The optional integer value that controls how often redispatches
6392 occur when retrying connections. Positive value P indicates a
6393 redispatch is desired on every Pth retry, and negative value
6394 N indicate a redispath is desired on the Nth retry prior to the
6395 last retry. For example, the default of -1 preserves the
6396 historical behaviour of redispatching on the last retry, a
6397 positive value of 1 would indicate a redispatch on every retry,
6398 and a positive value of 3 would indicate a redispatch on every
6399 third retry. You can disable redispatches with a value of 0.
6400
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006401
6402 In HTTP mode, if a server designated by a cookie is down, clients may
6403 definitely stick to it because they cannot flush the cookie, so they will not
6404 be able to access the service anymore.
6405
6406 Specifying "option redispatch" will allow the proxy to break their
6407 persistence and redistribute them to a working server.
6408
Joseph Lynch726ab712015-05-11 23:25:34 -07006409 It also allows to retry connections to another server in case of multiple
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006410 connection failures. Of course, it requires having "retries" set to a nonzero
6411 value.
Willy Tarreaud72758d2010-01-12 10:42:19 +01006412
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006413 This form is the preferred form, which replaces both the "redispatch" and
6414 "redisp" keywords.
6415
6416 If this option has been enabled in a "defaults" section, it can be disabled
6417 in a specific instance by prepending the "no" keyword before it.
6418
Willy Tarreau4de91492010-01-22 19:10:05 +01006419 See also : "redispatch", "retries", "force-persist"
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006420
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006421
Hervé COMMOWICKec032d62011-08-05 16:23:48 +02006422option redis-check
6423 Use redis health checks for server testing
6424 May be used in sections : defaults | frontend | listen | backend
6425 yes | no | yes | yes
6426 Arguments : none
6427
6428 It is possible to test that the server correctly talks REDIS protocol instead
6429 of just testing that it accepts the TCP connection. When this option is set,
6430 a PING redis command is sent to the server, and the response is analyzed to
6431 find the "+PONG" response message.
6432
6433 Example :
6434 option redis-check
6435
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03006436 See also : "option httpchk", "option tcp-check", "tcp-check expect"
Hervé COMMOWICKec032d62011-08-05 16:23:48 +02006437
6438
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006439option smtpchk
6440option smtpchk <hello> <domain>
6441 Use SMTP health checks for server testing
6442 May be used in sections : defaults | frontend | listen | backend
6443 yes | no | yes | yes
Willy Tarreaud72758d2010-01-12 10:42:19 +01006444 Arguments :
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006445 <hello> is an optional argument. It is the "hello" command to use. It can
6446 be either "HELO" (for SMTP) or "EHLO" (for ESTMP). All other
6447 values will be turned into the default command ("HELO").
6448
6449 <domain> is the domain name to present to the server. It may only be
6450 specified (and is mandatory) if the hello command has been
6451 specified. By default, "localhost" is used.
6452
6453 When "option smtpchk" is set, the health checks will consist in TCP
6454 connections followed by an SMTP command. By default, this command is
6455 "HELO localhost". The server's return code is analyzed and only return codes
6456 starting with a "2" will be considered as valid. All other responses,
6457 including a lack of response will constitute an error and will indicate a
6458 dead server.
6459
6460 This test is meant to be used with SMTP servers or relays. Depending on the
6461 request, it is possible that some servers do not log each connection attempt,
6462 so you may want to experiment to improve the behaviour. Using telnet on port
6463 25 is often easier than adjusting the configuration.
6464
6465 Most often, an incoming SMTP server needs to see the client's IP address for
6466 various purposes, including spam filtering, anti-spoofing and logging. When
6467 possible, it is often wise to masquerade the client's IP address when
6468 connecting to the server using the "usesrc" argument of the "source" keyword,
Willy Tarreau29fbe512015-08-20 19:35:14 +02006469 which requires the transparent proxy feature to be compiled in.
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006470
6471 Example :
6472 option smtpchk HELO mydomain.org
6473
6474 See also : "option httpchk", "source"
6475
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006476
Krzysztof Piotr Oledzkiaeebf9b2009-10-04 15:43:17 +02006477option socket-stats
6478no option socket-stats
6479
6480 Enable or disable collecting & providing separate statistics for each socket.
6481 May be used in sections : defaults | frontend | listen | backend
6482 yes | yes | yes | no
6483
6484 Arguments : none
6485
6486
Willy Tarreauff4f82d2009-02-06 11:28:13 +01006487option splice-auto
6488no option splice-auto
6489 Enable or disable automatic kernel acceleration on sockets in both directions
6490 May be used in sections : defaults | frontend | listen | backend
6491 yes | yes | yes | yes
6492 Arguments : none
6493
6494 When this option is enabled either on a frontend or on a backend, haproxy
6495 will automatically evaluate the opportunity to use kernel tcp splicing to
6496 forward data between the client and the server, in either direction. Haproxy
6497 uses heuristics to estimate if kernel splicing might improve performance or
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01006498 not. Both directions are handled independently. Note that the heuristics used
Willy Tarreauff4f82d2009-02-06 11:28:13 +01006499 are not much aggressive in order to limit excessive use of splicing. This
6500 option requires splicing to be enabled at compile time, and may be globally
6501 disabled with the global option "nosplice". Since splice uses pipes, using it
6502 requires that there are enough spare pipes.
6503
6504 Important note: kernel-based TCP splicing is a Linux-specific feature which
6505 first appeared in kernel 2.6.25. It offers kernel-based acceleration to
6506 transfer data between sockets without copying these data to user-space, thus
6507 providing noticeable performance gains and CPU cycles savings. Since many
6508 early implementations are buggy, corrupt data and/or are inefficient, this
6509 feature is not enabled by default, and it should be used with extreme care.
6510 While it is not possible to detect the correctness of an implementation,
6511 2.6.29 is the first version offering a properly working implementation. In
6512 case of doubt, splicing may be globally disabled using the global "nosplice"
6513 keyword.
6514
6515 Example :
6516 option splice-auto
6517
6518 If this option has been enabled in a "defaults" section, it can be disabled
6519 in a specific instance by prepending the "no" keyword before it.
6520
6521 See also : "option splice-request", "option splice-response", and global
6522 options "nosplice" and "maxpipes"
6523
6524
6525option splice-request
6526no option splice-request
6527 Enable or disable automatic kernel acceleration on sockets for requests
6528 May be used in sections : defaults | frontend | listen | backend
6529 yes | yes | yes | yes
6530 Arguments : none
6531
6532 When this option is enabled either on a frontend or on a backend, haproxy
Jamie Gloudonaaa21002012-08-25 00:18:33 -04006533 will use kernel tcp splicing whenever possible to forward data going from
Willy Tarreauff4f82d2009-02-06 11:28:13 +01006534 the client to the server. It might still use the recv/send scheme if there
6535 are no spare pipes left. This option requires splicing to be enabled at
6536 compile time, and may be globally disabled with the global option "nosplice".
6537 Since splice uses pipes, using it requires that there are enough spare pipes.
6538
6539 Important note: see "option splice-auto" for usage limitations.
6540
6541 Example :
6542 option splice-request
6543
6544 If this option has been enabled in a "defaults" section, it can be disabled
6545 in a specific instance by prepending the "no" keyword before it.
6546
6547 See also : "option splice-auto", "option splice-response", and global options
6548 "nosplice" and "maxpipes"
6549
6550
6551option splice-response
6552no option splice-response
6553 Enable or disable automatic kernel acceleration on sockets for responses
6554 May be used in sections : defaults | frontend | listen | backend
6555 yes | yes | yes | yes
6556 Arguments : none
6557
6558 When this option is enabled either on a frontend or on a backend, haproxy
Jamie Gloudonaaa21002012-08-25 00:18:33 -04006559 will use kernel tcp splicing whenever possible to forward data going from
Willy Tarreauff4f82d2009-02-06 11:28:13 +01006560 the server to the client. It might still use the recv/send scheme if there
6561 are no spare pipes left. This option requires splicing to be enabled at
6562 compile time, and may be globally disabled with the global option "nosplice".
6563 Since splice uses pipes, using it requires that there are enough spare pipes.
6564
6565 Important note: see "option splice-auto" for usage limitations.
6566
6567 Example :
6568 option splice-response
6569
6570 If this option has been enabled in a "defaults" section, it can be disabled
6571 in a specific instance by prepending the "no" keyword before it.
6572
6573 See also : "option splice-auto", "option splice-request", and global options
6574 "nosplice" and "maxpipes"
6575
6576
Christopher Fauletba7bc162016-11-07 21:07:38 +01006577option spop-check
6578 Use SPOP health checks for server testing
6579 May be used in sections : defaults | frontend | listen | backend
6580 no | no | no | yes
6581 Arguments : none
6582
6583 It is possible to test that the server correctly talks SPOP protocol instead
6584 of just testing that it accepts the TCP connection. When this option is set,
6585 a HELLO handshake is performed between HAProxy and the server, and the
6586 response is analyzed to check no error is reported.
6587
6588 Example :
6589 option spop-check
6590
6591 See also : "option httpchk"
6592
6593
Willy Tarreaubf1f8162007-12-28 17:42:56 +01006594option srvtcpka
6595no option srvtcpka
6596 Enable or disable the sending of TCP keepalive packets on the server side
6597 May be used in sections : defaults | frontend | listen | backend
6598 yes | no | yes | yes
6599 Arguments : none
6600
6601 When there is a firewall or any session-aware component between a client and
6602 a server, and when the protocol involves very long sessions with long idle
6603 periods (eg: remote desktops), there is a risk that one of the intermediate
6604 components decides to expire a session which has remained idle for too long.
6605
6606 Enabling socket-level TCP keep-alives makes the system regularly send packets
6607 to the other end of the connection, leaving it active. The delay between
6608 keep-alive probes is controlled by the system only and depends both on the
6609 operating system and its tuning parameters.
6610
6611 It is important to understand that keep-alive packets are neither emitted nor
6612 received at the application level. It is only the network stacks which sees
6613 them. For this reason, even if one side of the proxy already uses keep-alives
6614 to maintain its connection alive, those keep-alive packets will not be
6615 forwarded to the other side of the proxy.
6616
6617 Please note that this has nothing to do with HTTP keep-alive.
6618
6619 Using option "srvtcpka" enables the emission of TCP keep-alive probes on the
6620 server side of a connection, which should help when session expirations are
6621 noticed between HAProxy and a server.
6622
6623 If this option has been enabled in a "defaults" section, it can be disabled
6624 in a specific instance by prepending the "no" keyword before it.
6625
6626 See also : "option clitcpka", "option tcpka"
6627
6628
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006629option ssl-hello-chk
6630 Use SSLv3 client hello health checks for server testing
6631 May be used in sections : defaults | frontend | listen | backend
6632 yes | no | yes | yes
6633 Arguments : none
6634
6635 When some SSL-based protocols are relayed in TCP mode through HAProxy, it is
6636 possible to test that the server correctly talks SSL instead of just testing
6637 that it accepts the TCP connection. When "option ssl-hello-chk" is set, pure
6638 SSLv3 client hello messages are sent once the connection is established to
6639 the server, and the response is analyzed to find an SSL server hello message.
6640 The server is considered valid only when the response contains this server
6641 hello message.
6642
6643 All servers tested till there correctly reply to SSLv3 client hello messages,
6644 and most servers tested do not even log the requests containing only hello
6645 messages, which is appreciable.
6646
Willy Tarreau763a95b2012-10-04 23:15:39 +02006647 Note that this check works even when SSL support was not built into haproxy
6648 because it forges the SSL message. When SSL support is available, it is best
6649 to use native SSL health checks instead of this one.
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006650
Willy Tarreau763a95b2012-10-04 23:15:39 +02006651 See also: "option httpchk", "check-ssl"
6652
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006653
Willy Tarreaued179852013-12-16 01:07:00 +01006654option tcp-check
6655 Perform health checks using tcp-check send/expect sequences
6656 May be used in sections: defaults | frontend | listen | backend
6657 yes | no | yes | yes
6658
6659 This health check method is intended to be combined with "tcp-check" command
6660 lists in order to support send/expect types of health check sequences.
6661
6662 TCP checks currently support 4 modes of operations :
6663 - no "tcp-check" directive : the health check only consists in a connection
6664 attempt, which remains the default mode.
6665
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006666 - "tcp-check send" or "tcp-check send-binary" only is mentioned : this is
Willy Tarreaued179852013-12-16 01:07:00 +01006667 used to send a string along with a connection opening. With some
6668 protocols, it helps sending a "QUIT" message for example that prevents
6669 the server from logging a connection error for each health check. The
6670 check result will still be based on the ability to open the connection
6671 only.
6672
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006673 - "tcp-check expect" only is mentioned : this is used to test a banner.
Willy Tarreaued179852013-12-16 01:07:00 +01006674 The connection is opened and haproxy waits for the server to present some
6675 contents which must validate some rules. The check result will be based
6676 on the matching between the contents and the rules. This is suited for
6677 POP, IMAP, SMTP, FTP, SSH, TELNET.
6678
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006679 - both "tcp-check send" and "tcp-check expect" are mentioned : this is
Willy Tarreaued179852013-12-16 01:07:00 +01006680 used to test a hello-type protocol. Haproxy sends a message, the server
6681 responds and its response is analysed. the check result will be based on
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006682 the matching between the response contents and the rules. This is often
Willy Tarreaued179852013-12-16 01:07:00 +01006683 suited for protocols which require a binding or a request/response model.
6684 LDAP, MySQL, Redis and SSL are example of such protocols, though they
6685 already all have their dedicated checks with a deeper understanding of
6686 the respective protocols.
6687 In this mode, many questions may be sent and many answers may be
6688 analysed.
6689
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006690 A fifth mode can be used to insert comments in different steps of the
6691 script.
6692
6693 For each tcp-check rule you create, you can add a "comment" directive,
6694 followed by a string. This string will be reported in the log and stderr
6695 in debug mode. It is useful to make user-friendly error reporting.
6696 The "comment" is of course optional.
6697
6698
Willy Tarreaued179852013-12-16 01:07:00 +01006699 Examples :
6700 # perform a POP check (analyse only server's banner)
6701 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006702 tcp-check expect string +OK\ POP3\ ready comment POP\ protocol
Willy Tarreaued179852013-12-16 01:07:00 +01006703
6704 # perform an IMAP check (analyse only server's banner)
6705 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006706 tcp-check expect string *\ OK\ IMAP4\ ready comment IMAP\ protocol
Willy Tarreaued179852013-12-16 01:07:00 +01006707
6708 # look for the redis master server after ensuring it speaks well
6709 # redis protocol, then it exits properly.
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006710 # (send a command then analyse the response 3 times)
Willy Tarreaued179852013-12-16 01:07:00 +01006711 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006712 tcp-check comment PING\ phase
Willy Tarreaued179852013-12-16 01:07:00 +01006713 tcp-check send PING\r\n
Baptiste Assmanna3322992015-08-04 10:12:18 +02006714 tcp-check expect string +PONG
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006715 tcp-check comment role\ check
Willy Tarreaued179852013-12-16 01:07:00 +01006716 tcp-check send info\ replication\r\n
6717 tcp-check expect string role:master
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006718 tcp-check comment QUIT\ phase
Willy Tarreaued179852013-12-16 01:07:00 +01006719 tcp-check send QUIT\r\n
6720 tcp-check expect string +OK
6721
6722 forge a HTTP request, then analyse the response
6723 (send many headers before analyzing)
6724 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006725 tcp-check comment forge\ and\ send\ HTTP\ request
Willy Tarreaued179852013-12-16 01:07:00 +01006726 tcp-check send HEAD\ /\ HTTP/1.1\r\n
6727 tcp-check send Host:\ www.mydomain.com\r\n
6728 tcp-check send User-Agent:\ HAProxy\ tcpcheck\r\n
6729 tcp-check send \r\n
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006730 tcp-check expect rstring HTTP/1\..\ (2..|3..) comment check\ HTTP\ response
Willy Tarreaued179852013-12-16 01:07:00 +01006731
6732
6733 See also : "tcp-check expect", "tcp-check send"
6734
6735
Willy Tarreau9ea05a72009-06-14 12:07:01 +02006736option tcp-smart-accept
6737no option tcp-smart-accept
6738 Enable or disable the saving of one ACK packet during the accept sequence
6739 May be used in sections : defaults | frontend | listen | backend
6740 yes | yes | yes | no
6741 Arguments : none
6742
6743 When an HTTP connection request comes in, the system acknowledges it on
6744 behalf of HAProxy, then the client immediately sends its request, and the
6745 system acknowledges it too while it is notifying HAProxy about the new
6746 connection. HAProxy then reads the request and responds. This means that we
6747 have one TCP ACK sent by the system for nothing, because the request could
6748 very well be acknowledged by HAProxy when it sends its response.
6749
6750 For this reason, in HTTP mode, HAProxy automatically asks the system to avoid
6751 sending this useless ACK on platforms which support it (currently at least
6752 Linux). It must not cause any problem, because the system will send it anyway
6753 after 40 ms if the response takes more time than expected to come.
6754
6755 During complex network debugging sessions, it may be desirable to disable
6756 this optimization because delayed ACKs can make troubleshooting more complex
6757 when trying to identify where packets are delayed. It is then possible to
6758 fall back to normal behaviour by specifying "no option tcp-smart-accept".
6759
6760 It is also possible to force it for non-HTTP proxies by simply specifying
6761 "option tcp-smart-accept". For instance, it can make sense with some services
6762 such as SMTP where the server speaks first.
6763
6764 It is recommended to avoid forcing this option in a defaults section. In case
6765 of doubt, consider setting it back to automatic values by prepending the
6766 "default" keyword before it, or disabling it using the "no" keyword.
6767
Willy Tarreaud88edf22009-06-14 15:48:17 +02006768 See also : "option tcp-smart-connect"
6769
6770
6771option tcp-smart-connect
6772no option tcp-smart-connect
6773 Enable or disable the saving of one ACK packet during the connect sequence
6774 May be used in sections : defaults | frontend | listen | backend
6775 yes | no | yes | yes
6776 Arguments : none
6777
6778 On certain systems (at least Linux), HAProxy can ask the kernel not to
6779 immediately send an empty ACK upon a connection request, but to directly
6780 send the buffer request instead. This saves one packet on the network and
6781 thus boosts performance. It can also be useful for some servers, because they
6782 immediately get the request along with the incoming connection.
6783
6784 This feature is enabled when "option tcp-smart-connect" is set in a backend.
6785 It is not enabled by default because it makes network troubleshooting more
6786 complex.
6787
6788 It only makes sense to enable it with protocols where the client speaks first
6789 such as HTTP. In other situations, if there is no data to send in place of
6790 the ACK, a normal ACK is sent.
6791
6792 If this option has been enabled in a "defaults" section, it can be disabled
6793 in a specific instance by prepending the "no" keyword before it.
6794
6795 See also : "option tcp-smart-accept"
6796
Willy Tarreau9ea05a72009-06-14 12:07:01 +02006797
Willy Tarreaubf1f8162007-12-28 17:42:56 +01006798option tcpka
6799 Enable or disable the sending of TCP keepalive packets on both sides
6800 May be used in sections : defaults | frontend | listen | backend
6801 yes | yes | yes | yes
6802 Arguments : none
6803
6804 When there is a firewall or any session-aware component between a client and
6805 a server, and when the protocol involves very long sessions with long idle
6806 periods (eg: remote desktops), there is a risk that one of the intermediate
6807 components decides to expire a session which has remained idle for too long.
6808
6809 Enabling socket-level TCP keep-alives makes the system regularly send packets
6810 to the other end of the connection, leaving it active. The delay between
6811 keep-alive probes is controlled by the system only and depends both on the
6812 operating system and its tuning parameters.
6813
6814 It is important to understand that keep-alive packets are neither emitted nor
6815 received at the application level. It is only the network stacks which sees
6816 them. For this reason, even if one side of the proxy already uses keep-alives
6817 to maintain its connection alive, those keep-alive packets will not be
6818 forwarded to the other side of the proxy.
6819
6820 Please note that this has nothing to do with HTTP keep-alive.
6821
6822 Using option "tcpka" enables the emission of TCP keep-alive probes on both
6823 the client and server sides of a connection. Note that this is meaningful
6824 only in "defaults" or "listen" sections. If this option is used in a
6825 frontend, only the client side will get keep-alives, and if this option is
6826 used in a backend, only the server side will get keep-alives. For this
6827 reason, it is strongly recommended to explicitly use "option clitcpka" and
6828 "option srvtcpka" when the configuration is split between frontends and
6829 backends.
6830
6831 See also : "option clitcpka", "option srvtcpka"
6832
Willy Tarreau844e3c52008-01-11 16:28:18 +01006833
6834option tcplog
6835 Enable advanced logging of TCP connections with session state and timers
6836 May be used in sections : defaults | frontend | listen | backend
6837 yes | yes | yes | yes
6838 Arguments : none
6839
6840 By default, the log output format is very poor, as it only contains the
6841 source and destination addresses, and the instance name. By specifying
6842 "option tcplog", each log line turns into a much richer format including, but
6843 not limited to, the connection timers, the session status, the connections
6844 numbers, the frontend, backend and server name, and of course the source
6845 address and ports. This option is useful for pure TCP proxies in order to
6846 find which of the client or server disconnects or times out. For normal HTTP
6847 proxies, it's better to use "option httplog" which is even more complete.
6848
6849 This option may be set either in the frontend or the backend.
6850
Guillaume de Lafond29f45602017-03-31 19:52:15 +02006851 "option tcplog" overrides any previous "log-format" directive.
6852
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006853 See also : "option httplog", and section 8 about logging.
Willy Tarreau844e3c52008-01-11 16:28:18 +01006854
6855
Willy Tarreau844e3c52008-01-11 16:28:18 +01006856option transparent
6857no option transparent
6858 Enable client-side transparent proxying
6859 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau4b1f8592008-12-23 23:13:55 +01006860 yes | no | yes | yes
Willy Tarreau844e3c52008-01-11 16:28:18 +01006861 Arguments : none
6862
6863 This option was introduced in order to provide layer 7 persistence to layer 3
6864 load balancers. The idea is to use the OS's ability to redirect an incoming
6865 connection for a remote address to a local process (here HAProxy), and let
6866 this process know what address was initially requested. When this option is
6867 used, sessions without cookies will be forwarded to the original destination
6868 IP address of the incoming request (which should match that of another
6869 equipment), while requests with cookies will still be forwarded to the
6870 appropriate server.
6871
6872 Note that contrary to a common belief, this option does NOT make HAProxy
6873 present the client's IP to the server when establishing the connection.
6874
Willy Tarreaua1146052011-03-01 09:51:54 +01006875 See also: the "usesrc" argument of the "source" keyword, and the
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006876 "transparent" option of the "bind" keyword.
Willy Tarreau844e3c52008-01-11 16:28:18 +01006877
Willy Tarreaubf1f8162007-12-28 17:42:56 +01006878
Simon Horman98637e52014-06-20 12:30:16 +09006879external-check command <command>
6880 Executable to run when performing an external-check
6881 May be used in sections : defaults | frontend | listen | backend
6882 yes | no | yes | yes
6883
6884 Arguments :
6885 <command> is the external command to run
6886
Simon Horman98637e52014-06-20 12:30:16 +09006887 The arguments passed to the to the command are:
6888
Cyril Bonté777be862014-12-02 21:21:35 +01006889 <proxy_address> <proxy_port> <server_address> <server_port>
Simon Horman98637e52014-06-20 12:30:16 +09006890
Cyril Bonté777be862014-12-02 21:21:35 +01006891 The <proxy_address> and <proxy_port> are derived from the first listener
6892 that is either IPv4, IPv6 or a UNIX socket. In the case of a UNIX socket
6893 listener the proxy_address will be the path of the socket and the
6894 <proxy_port> will be the string "NOT_USED". In a backend section, it's not
6895 possible to determine a listener, and both <proxy_address> and <proxy_port>
6896 will have the string value "NOT_USED".
Simon Horman98637e52014-06-20 12:30:16 +09006897
Cyril Bonté72cda2a2014-12-27 22:28:39 +01006898 Some values are also provided through environment variables.
6899
6900 Environment variables :
6901 HAPROXY_PROXY_ADDR The first bind address if available (or empty if not
6902 applicable, for example in a "backend" section).
6903
6904 HAPROXY_PROXY_ID The backend id.
6905
6906 HAPROXY_PROXY_NAME The backend name.
6907
6908 HAPROXY_PROXY_PORT The first bind port if available (or empty if not
6909 applicable, for example in a "backend" section or
6910 for a UNIX socket).
6911
6912 HAPROXY_SERVER_ADDR The server address.
6913
6914 HAPROXY_SERVER_CURCONN The current number of connections on the server.
6915
6916 HAPROXY_SERVER_ID The server id.
6917
6918 HAPROXY_SERVER_MAXCONN The server max connections.
6919
6920 HAPROXY_SERVER_NAME The server name.
6921
6922 HAPROXY_SERVER_PORT The server port if available (or empty for a UNIX
6923 socket).
6924
6925 PATH The PATH environment variable used when executing
6926 the command may be set using "external-check path".
6927
Simon Horman98637e52014-06-20 12:30:16 +09006928 If the command executed and exits with a zero status then the check is
6929 considered to have passed, otherwise the check is considered to have
6930 failed.
6931
6932 Example :
6933 external-check command /bin/true
6934
6935 See also : "external-check", "option external-check", "external-check path"
6936
6937
6938external-check path <path>
6939 The value of the PATH environment variable used when running an external-check
6940 May be used in sections : defaults | frontend | listen | backend
6941 yes | no | yes | yes
6942
6943 Arguments :
6944 <path> is the path used when executing external command to run
6945
6946 The default path is "".
6947
6948 Example :
6949 external-check path "/usr/bin:/bin"
6950
6951 See also : "external-check", "option external-check",
6952 "external-check command"
6953
6954
Emeric Brun647caf12009-06-30 17:57:00 +02006955persist rdp-cookie
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02006956persist rdp-cookie(<name>)
Emeric Brun647caf12009-06-30 17:57:00 +02006957 Enable RDP cookie-based persistence
6958 May be used in sections : defaults | frontend | listen | backend
6959 yes | no | yes | yes
6960 Arguments :
6961 <name> is the optional name of the RDP cookie to check. If omitted, the
Willy Tarreau61e28f22010-05-16 22:31:05 +02006962 default cookie name "msts" will be used. There currently is no
6963 valid reason to change this name.
Emeric Brun647caf12009-06-30 17:57:00 +02006964
6965 This statement enables persistence based on an RDP cookie. The RDP cookie
6966 contains all information required to find the server in the list of known
6967 servers. So when this option is set in the backend, the request is analysed
6968 and if an RDP cookie is found, it is decoded. If it matches a known server
6969 which is still UP (or if "option persist" is set), then the connection is
6970 forwarded to this server.
6971
6972 Note that this only makes sense in a TCP backend, but for this to work, the
6973 frontend must have waited long enough to ensure that an RDP cookie is present
6974 in the request buffer. This is the same requirement as with the "rdp-cookie"
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01006975 load-balancing method. Thus it is highly recommended to put all statements in
Emeric Brun647caf12009-06-30 17:57:00 +02006976 a single "listen" section.
6977
Willy Tarreau61e28f22010-05-16 22:31:05 +02006978 Also, it is important to understand that the terminal server will emit this
6979 RDP cookie only if it is configured for "token redirection mode", which means
6980 that the "IP address redirection" option is disabled.
6981
Emeric Brun647caf12009-06-30 17:57:00 +02006982 Example :
6983 listen tse-farm
6984 bind :3389
6985 # wait up to 5s for an RDP cookie in the request
6986 tcp-request inspect-delay 5s
6987 tcp-request content accept if RDP_COOKIE
6988 # apply RDP cookie persistence
6989 persist rdp-cookie
6990 # if server is unknown, let's balance on the same cookie.
Cyril Bontédc4d9032012-04-08 21:57:39 +02006991 # alternatively, "balance leastconn" may be useful too.
Emeric Brun647caf12009-06-30 17:57:00 +02006992 balance rdp-cookie
6993 server srv1 1.1.1.1:3389
6994 server srv2 1.1.1.2:3389
6995
Simon Hormanab814e02011-06-24 14:50:20 +09006996 See also : "balance rdp-cookie", "tcp-request", the "req_rdp_cookie" ACL and
6997 the rdp_cookie pattern fetch function.
Emeric Brun647caf12009-06-30 17:57:00 +02006998
6999
Willy Tarreau3a7d2072009-03-05 23:48:25 +01007000rate-limit sessions <rate>
7001 Set a limit on the number of new sessions accepted per second on a frontend
7002 May be used in sections : defaults | frontend | listen | backend
7003 yes | yes | yes | no
7004 Arguments :
7005 <rate> The <rate> parameter is an integer designating the maximum number
7006 of new sessions per second to accept on the frontend.
7007
7008 When the frontend reaches the specified number of new sessions per second, it
7009 stops accepting new connections until the rate drops below the limit again.
7010 During this time, the pending sessions will be kept in the socket's backlog
7011 (in system buffers) and haproxy will not even be aware that sessions are
7012 pending. When applying very low limit on a highly loaded service, it may make
7013 sense to increase the socket's backlog using the "backlog" keyword.
7014
7015 This feature is particularly efficient at blocking connection-based attacks
7016 or service abuse on fragile servers. Since the session rate is measured every
7017 millisecond, it is extremely accurate. Also, the limit applies immediately,
7018 no delay is needed at all to detect the threshold.
7019
7020 Example : limit the connection rate on SMTP to 10 per second max
7021 listen smtp
7022 mode tcp
7023 bind :25
7024 rate-limit sessions 10
Panagiotis Panagiotopoulos7282d8e2016-02-11 16:37:15 +02007025 server smtp1 127.0.0.1:1025
Willy Tarreau3a7d2072009-03-05 23:48:25 +01007026
Willy Tarreaua17c2d92011-07-25 08:16:20 +02007027 Note : when the maximum rate is reached, the frontend's status is not changed
7028 but its sockets appear as "WAITING" in the statistics if the
7029 "socket-stats" option is enabled.
Willy Tarreau3a7d2072009-03-05 23:48:25 +01007030
7031 See also : the "backlog" keyword and the "fe_sess_rate" ACL criterion.
7032
7033
Willy Tarreau2e1dca82012-09-12 08:43:15 +02007034redirect location <loc> [code <code>] <option> [{if | unless} <condition>]
7035redirect prefix <pfx> [code <code>] <option> [{if | unless} <condition>]
7036redirect scheme <sch> [code <code>] <option> [{if | unless} <condition>]
Willy Tarreaub463dfb2008-06-07 23:08:56 +02007037 Return an HTTP redirection if/unless a condition is matched
7038 May be used in sections : defaults | frontend | listen | backend
7039 no | yes | yes | yes
7040
7041 If/unless the condition is matched, the HTTP request will lead to a redirect
Willy Tarreauf285f542010-01-03 20:03:03 +01007042 response. If no condition is specified, the redirect applies unconditionally.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02007043
Willy Tarreau0140f252008-11-19 21:07:09 +01007044 Arguments :
Willy Tarreau2e1dca82012-09-12 08:43:15 +02007045 <loc> With "redirect location", the exact value in <loc> is placed into
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01007046 the HTTP "Location" header. When used in an "http-request" rule,
7047 <loc> value follows the log-format rules and can include some
7048 dynamic values (see Custom Log Format in section 8.2.4).
Willy Tarreau2e1dca82012-09-12 08:43:15 +02007049
7050 <pfx> With "redirect prefix", the "Location" header is built from the
7051 concatenation of <pfx> and the complete URI path, including the
7052 query string, unless the "drop-query" option is specified (see
7053 below). As a special case, if <pfx> equals exactly "/", then
7054 nothing is inserted before the original URI. It allows one to
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01007055 redirect to the same URL (for instance, to insert a cookie). When
7056 used in an "http-request" rule, <pfx> value follows the log-format
7057 rules and can include some dynamic values (see Custom Log Format
7058 in section 8.2.4).
Willy Tarreau2e1dca82012-09-12 08:43:15 +02007059
7060 <sch> With "redirect scheme", then the "Location" header is built by
7061 concatenating <sch> with "://" then the first occurrence of the
7062 "Host" header, and then the URI path, including the query string
7063 unless the "drop-query" option is specified (see below). If no
7064 path is found or if the path is "*", then "/" is used instead. If
7065 no "Host" header is found, then an empty host component will be
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03007066 returned, which most recent browsers interpret as redirecting to
Willy Tarreau2e1dca82012-09-12 08:43:15 +02007067 the same host. This directive is mostly used to redirect HTTP to
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01007068 HTTPS. When used in an "http-request" rule, <sch> value follows
7069 the log-format rules and can include some dynamic values (see
7070 Custom Log Format in section 8.2.4).
Willy Tarreau0140f252008-11-19 21:07:09 +01007071
7072 <code> The code is optional. It indicates which type of HTTP redirection
Willy Tarreaub67fdc42013-03-29 19:28:11 +01007073 is desired. Only codes 301, 302, 303, 307 and 308 are supported,
7074 with 302 used by default if no code is specified. 301 means
7075 "Moved permanently", and a browser may cache the Location. 302
Baptiste Assmannea849c02015-08-03 11:42:50 +02007076 means "Moved temporarily" and means that the browser should not
Willy Tarreaub67fdc42013-03-29 19:28:11 +01007077 cache the redirection. 303 is equivalent to 302 except that the
7078 browser will fetch the location with a GET method. 307 is just
7079 like 302 but makes it clear that the same method must be reused.
7080 Likewise, 308 replaces 301 if the same method must be used.
Willy Tarreau0140f252008-11-19 21:07:09 +01007081
7082 <option> There are several options which can be specified to adjust the
7083 expected behaviour of a redirection :
7084
7085 - "drop-query"
7086 When this keyword is used in a prefix-based redirection, then the
7087 location will be set without any possible query-string, which is useful
7088 for directing users to a non-secure page for instance. It has no effect
7089 with a location-type redirect.
7090
Willy Tarreau81e3b4f2010-01-10 00:42:19 +01007091 - "append-slash"
7092 This keyword may be used in conjunction with "drop-query" to redirect
7093 users who use a URL not ending with a '/' to the same one with the '/'.
7094 It can be useful to ensure that search engines will only see one URL.
7095 For this, a return code 301 is preferred.
7096
Willy Tarreau0140f252008-11-19 21:07:09 +01007097 - "set-cookie NAME[=value]"
7098 A "Set-Cookie" header will be added with NAME (and optionally "=value")
7099 to the response. This is sometimes used to indicate that a user has
7100 been seen, for instance to protect against some types of DoS. No other
7101 cookie option is added, so the cookie will be a session cookie. Note
7102 that for a browser, a sole cookie name without an equal sign is
7103 different from a cookie with an equal sign.
7104
7105 - "clear-cookie NAME[=]"
7106 A "Set-Cookie" header will be added with NAME (and optionally "="), but
7107 with the "Max-Age" attribute set to zero. This will tell the browser to
7108 delete this cookie. It is useful for instance on logout pages. It is
7109 important to note that clearing the cookie "NAME" will not remove a
7110 cookie set with "NAME=value". You have to clear the cookie "NAME=" for
7111 that, because the browser makes the difference.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02007112
7113 Example: move the login URL only to HTTPS.
7114 acl clear dst_port 80
7115 acl secure dst_port 8080
7116 acl login_page url_beg /login
Willy Tarreau0140f252008-11-19 21:07:09 +01007117 acl logout url_beg /logout
Willy Tarreau79da4692008-11-19 20:03:04 +01007118 acl uid_given url_reg /login?userid=[^&]+
Willy Tarreau0140f252008-11-19 21:07:09 +01007119 acl cookie_set hdr_sub(cookie) SEEN=1
7120
7121 redirect prefix https://mysite.com set-cookie SEEN=1 if !cookie_set
Willy Tarreau79da4692008-11-19 20:03:04 +01007122 redirect prefix https://mysite.com if login_page !secure
7123 redirect prefix http://mysite.com drop-query if login_page !uid_given
7124 redirect location http://mysite.com/ if !login_page secure
Willy Tarreau0140f252008-11-19 21:07:09 +01007125 redirect location / clear-cookie USERID= if logout
Willy Tarreaub463dfb2008-06-07 23:08:56 +02007126
Willy Tarreau81e3b4f2010-01-10 00:42:19 +01007127 Example: send redirects for request for articles without a '/'.
7128 acl missing_slash path_reg ^/article/[^/]*$
7129 redirect code 301 prefix / drop-query append-slash if missing_slash
7130
Willy Tarreau2e1dca82012-09-12 08:43:15 +02007131 Example: redirect all HTTP traffic to HTTPS when SSL is handled by haproxy.
David BERARDe7153042012-11-03 00:11:31 +01007132 redirect scheme https if !{ ssl_fc }
Willy Tarreau2e1dca82012-09-12 08:43:15 +02007133
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01007134 Example: append 'www.' prefix in front of all hosts not having it
Coen Rosdorff596659b2016-04-11 11:33:49 +02007135 http-request redirect code 301 location \
7136 http://www.%[hdr(host)]%[capture.req.uri] \
7137 unless { hdr_beg(host) -i www }
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01007138
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007139 See section 7 about ACL usage.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02007140
7141
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01007142redisp (deprecated)
7143redispatch (deprecated)
7144 Enable or disable session redistribution in case of connection failure
7145 May be used in sections: defaults | frontend | listen | backend
7146 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007147 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01007148
7149 In HTTP mode, if a server designated by a cookie is down, clients may
7150 definitely stick to it because they cannot flush the cookie, so they will not
7151 be able to access the service anymore.
7152
7153 Specifying "redispatch" will allow the proxy to break their persistence and
7154 redistribute them to a working server.
7155
7156 It also allows to retry last connection to another server in case of multiple
7157 connection failures. Of course, it requires having "retries" set to a nonzero
7158 value.
Willy Tarreaud72758d2010-01-12 10:42:19 +01007159
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01007160 This form is deprecated, do not use it in any new configuration, use the new
7161 "option redispatch" instead.
7162
7163 See also : "option redispatch"
7164
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007165
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01007166reqadd <string> [{if | unless} <cond>]
Willy Tarreau303c0352008-01-17 19:01:39 +01007167 Add a header at the end of the HTTP request
7168 May be used in sections : defaults | frontend | listen | backend
7169 no | yes | yes | yes
7170 Arguments :
7171 <string> is the complete line to be added. Any space or known delimiter
7172 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007173 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01007174
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01007175 <cond> is an optional matching condition built from ACLs. It makes it
7176 possible to ignore this rule when other conditions are not met.
7177
Willy Tarreau303c0352008-01-17 19:01:39 +01007178 A new line consisting in <string> followed by a line feed will be added after
7179 the last header of an HTTP request.
7180
7181 Header transformations only apply to traffic which passes through HAProxy,
7182 and not to traffic generated by HAProxy, such as health-checks or error
7183 responses.
7184
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01007185 Example : add "X-Proto: SSL" to requests coming via port 81
7186 acl is-ssl dst_port 81
7187 reqadd X-Proto:\ SSL if is-ssl
7188
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007189 See also: "rspadd", "http-request", section 6 about HTTP header manipulation,
7190 and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007191
7192
Willy Tarreau5321c422010-01-28 20:35:13 +01007193reqallow <search> [{if | unless} <cond>]
7194reqiallow <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007195 Definitely allow an HTTP request if a line matches a regular expression
7196 May be used in sections : defaults | frontend | listen | backend
7197 no | yes | yes | yes
7198 Arguments :
7199 <search> is the regular expression applied to HTTP headers and to the
7200 request line. This is an extended regular expression. Parenthesis
7201 grouping is supported and no preliminary backslash is required.
7202 Any space or known delimiter must be escaped using a backslash
7203 ('\'). The pattern applies to a full line at a time. The
7204 "reqallow" keyword strictly matches case while "reqiallow"
7205 ignores case.
7206
Willy Tarreau5321c422010-01-28 20:35:13 +01007207 <cond> is an optional matching condition built from ACLs. It makes it
7208 possible to ignore this rule when other conditions are not met.
7209
Willy Tarreau303c0352008-01-17 19:01:39 +01007210 A request containing any line which matches extended regular expression
7211 <search> will mark the request as allowed, even if any later test would
7212 result in a deny. The test applies both to the request line and to request
7213 headers. Keep in mind that URLs in request line are case-sensitive while
Willy Tarreaud72758d2010-01-12 10:42:19 +01007214 header names are not.
Willy Tarreau303c0352008-01-17 19:01:39 +01007215
7216 It is easier, faster and more powerful to use ACLs to write access policies.
7217 Reqdeny, reqallow and reqpass should be avoided in new designs.
7218
7219 Example :
7220 # allow www.* but refuse *.local
7221 reqiallow ^Host:\ www\.
7222 reqideny ^Host:\ .*\.local
7223
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007224 See also: "reqdeny", "block", "http-request", section 6 about HTTP header
7225 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007226
7227
Willy Tarreau5321c422010-01-28 20:35:13 +01007228reqdel <search> [{if | unless} <cond>]
7229reqidel <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007230 Delete all headers matching a regular expression in an HTTP request
7231 May be used in sections : defaults | frontend | listen | backend
7232 no | yes | yes | yes
7233 Arguments :
7234 <search> is the regular expression applied to HTTP headers and to the
7235 request line. This is an extended regular expression. Parenthesis
7236 grouping is supported and no preliminary backslash is required.
7237 Any space or known delimiter must be escaped using a backslash
7238 ('\'). The pattern applies to a full line at a time. The "reqdel"
7239 keyword strictly matches case while "reqidel" ignores case.
7240
Willy Tarreau5321c422010-01-28 20:35:13 +01007241 <cond> is an optional matching condition built from ACLs. It makes it
7242 possible to ignore this rule when other conditions are not met.
7243
Willy Tarreau303c0352008-01-17 19:01:39 +01007244 Any header line matching extended regular expression <search> in the request
7245 will be completely deleted. Most common use of this is to remove unwanted
7246 and/or dangerous headers or cookies from a request before passing it to the
7247 next servers.
7248
7249 Header transformations only apply to traffic which passes through HAProxy,
7250 and not to traffic generated by HAProxy, such as health-checks or error
7251 responses. Keep in mind that header names are not case-sensitive.
7252
7253 Example :
7254 # remove X-Forwarded-For header and SERVER cookie
7255 reqidel ^X-Forwarded-For:.*
7256 reqidel ^Cookie:.*SERVER=
7257
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007258 See also: "reqadd", "reqrep", "rspdel", "http-request", section 6 about
7259 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007260
7261
Willy Tarreau5321c422010-01-28 20:35:13 +01007262reqdeny <search> [{if | unless} <cond>]
7263reqideny <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007264 Deny an HTTP request if a line matches a regular expression
7265 May be used in sections : defaults | frontend | listen | backend
7266 no | yes | yes | yes
7267 Arguments :
7268 <search> is the regular expression applied to HTTP headers and to the
7269 request line. This is an extended regular expression. Parenthesis
7270 grouping is supported and no preliminary backslash is required.
7271 Any space or known delimiter must be escaped using a backslash
7272 ('\'). The pattern applies to a full line at a time. The
7273 "reqdeny" keyword strictly matches case while "reqideny" ignores
7274 case.
7275
Willy Tarreau5321c422010-01-28 20:35:13 +01007276 <cond> is an optional matching condition built from ACLs. It makes it
7277 possible to ignore this rule when other conditions are not met.
7278
Willy Tarreau303c0352008-01-17 19:01:39 +01007279 A request containing any line which matches extended regular expression
7280 <search> will mark the request as denied, even if any later test would
7281 result in an allow. The test applies both to the request line and to request
7282 headers. Keep in mind that URLs in request line are case-sensitive while
Willy Tarreaud72758d2010-01-12 10:42:19 +01007283 header names are not.
Willy Tarreau303c0352008-01-17 19:01:39 +01007284
Willy Tarreauced27012008-01-17 20:35:34 +01007285 A denied request will generate an "HTTP 403 forbidden" response once the
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01007286 complete request has been parsed. This is consistent with what is practiced
Willy Tarreaud72758d2010-01-12 10:42:19 +01007287 using ACLs.
Willy Tarreauced27012008-01-17 20:35:34 +01007288
Willy Tarreau303c0352008-01-17 19:01:39 +01007289 It is easier, faster and more powerful to use ACLs to write access policies.
7290 Reqdeny, reqallow and reqpass should be avoided in new designs.
7291
7292 Example :
7293 # refuse *.local, then allow www.*
7294 reqideny ^Host:\ .*\.local
7295 reqiallow ^Host:\ www\.
7296
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007297 See also: "reqallow", "rspdeny", "block", "http-request", section 6 about
7298 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007299
7300
Willy Tarreau5321c422010-01-28 20:35:13 +01007301reqpass <search> [{if | unless} <cond>]
7302reqipass <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007303 Ignore any HTTP request line matching a regular expression in next rules
7304 May be used in sections : defaults | frontend | listen | backend
7305 no | yes | yes | yes
7306 Arguments :
7307 <search> is the regular expression applied to HTTP headers and to the
7308 request line. This is an extended regular expression. Parenthesis
7309 grouping is supported and no preliminary backslash is required.
7310 Any space or known delimiter must be escaped using a backslash
7311 ('\'). The pattern applies to a full line at a time. The
7312 "reqpass" keyword strictly matches case while "reqipass" ignores
7313 case.
7314
Willy Tarreau5321c422010-01-28 20:35:13 +01007315 <cond> is an optional matching condition built from ACLs. It makes it
7316 possible to ignore this rule when other conditions are not met.
7317
Willy Tarreau303c0352008-01-17 19:01:39 +01007318 A request containing any line which matches extended regular expression
7319 <search> will skip next rules, without assigning any deny or allow verdict.
7320 The test applies both to the request line and to request headers. Keep in
7321 mind that URLs in request line are case-sensitive while header names are not.
7322
7323 It is easier, faster and more powerful to use ACLs to write access policies.
7324 Reqdeny, reqallow and reqpass should be avoided in new designs.
7325
7326 Example :
7327 # refuse *.local, then allow www.*, but ignore "www.private.local"
7328 reqipass ^Host:\ www.private\.local
7329 reqideny ^Host:\ .*\.local
7330 reqiallow ^Host:\ www\.
7331
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007332 See also: "reqallow", "reqdeny", "block", "http-request", section 6 about
7333 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007334
7335
Willy Tarreau5321c422010-01-28 20:35:13 +01007336reqrep <search> <string> [{if | unless} <cond>]
7337reqirep <search> <string> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007338 Replace a regular expression with a string in an HTTP request line
7339 May be used in sections : defaults | frontend | listen | backend
7340 no | yes | yes | yes
7341 Arguments :
7342 <search> is the regular expression applied to HTTP headers and to the
7343 request line. This is an extended regular expression. Parenthesis
7344 grouping is supported and no preliminary backslash is required.
7345 Any space or known delimiter must be escaped using a backslash
7346 ('\'). The pattern applies to a full line at a time. The "reqrep"
7347 keyword strictly matches case while "reqirep" ignores case.
7348
7349 <string> is the complete line to be added. Any space or known delimiter
7350 must be escaped using a backslash ('\'). References to matched
7351 pattern groups are possible using the common \N form, with N
7352 being a single digit between 0 and 9. Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007353 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01007354
Willy Tarreau5321c422010-01-28 20:35:13 +01007355 <cond> is an optional matching condition built from ACLs. It makes it
7356 possible to ignore this rule when other conditions are not met.
7357
Willy Tarreau303c0352008-01-17 19:01:39 +01007358 Any line matching extended regular expression <search> in the request (both
7359 the request line and header lines) will be completely replaced with <string>.
7360 Most common use of this is to rewrite URLs or domain names in "Host" headers.
7361
7362 Header transformations only apply to traffic which passes through HAProxy,
7363 and not to traffic generated by HAProxy, such as health-checks or error
7364 responses. Note that for increased readability, it is suggested to add enough
7365 spaces between the request and the response. Keep in mind that URLs in
7366 request line are case-sensitive while header names are not.
7367
7368 Example :
7369 # replace "/static/" with "/" at the beginning of any request path.
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04007370 reqrep ^([^\ :]*)\ /static/(.*) \1\ /\2
Willy Tarreau303c0352008-01-17 19:01:39 +01007371 # replace "www.mydomain.com" with "www" in the host name.
7372 reqirep ^Host:\ www.mydomain.com Host:\ www
7373
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007374 See also: "reqadd", "reqdel", "rsprep", "tune.bufsize", "http-request",
7375 section 6 about HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007376
7377
Willy Tarreau5321c422010-01-28 20:35:13 +01007378reqtarpit <search> [{if | unless} <cond>]
7379reqitarpit <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007380 Tarpit an HTTP request containing a line matching a regular expression
7381 May be used in sections : defaults | frontend | listen | backend
7382 no | yes | yes | yes
7383 Arguments :
7384 <search> is the regular expression applied to HTTP headers and to the
7385 request line. This is an extended regular expression. Parenthesis
7386 grouping is supported and no preliminary backslash is required.
7387 Any space or known delimiter must be escaped using a backslash
7388 ('\'). The pattern applies to a full line at a time. The
7389 "reqtarpit" keyword strictly matches case while "reqitarpit"
7390 ignores case.
7391
Willy Tarreau5321c422010-01-28 20:35:13 +01007392 <cond> is an optional matching condition built from ACLs. It makes it
7393 possible to ignore this rule when other conditions are not met.
7394
Willy Tarreau303c0352008-01-17 19:01:39 +01007395 A request containing any line which matches extended regular expression
7396 <search> will be tarpitted, which means that it will connect to nowhere, will
Willy Tarreauced27012008-01-17 20:35:34 +01007397 be kept open for a pre-defined time, then will return an HTTP error 500 so
7398 that the attacker does not suspect it has been tarpitted. The status 500 will
7399 be reported in the logs, but the completion flags will indicate "PT". The
Willy Tarreau303c0352008-01-17 19:01:39 +01007400 delay is defined by "timeout tarpit", or "timeout connect" if the former is
7401 not set.
7402
7403 The goal of the tarpit is to slow down robots attacking servers with
7404 identifiable requests. Many robots limit their outgoing number of connections
7405 and stay connected waiting for a reply which can take several minutes to
7406 come. Depending on the environment and attack, it may be particularly
7407 efficient at reducing the load on the network and firewalls.
7408
Willy Tarreau5321c422010-01-28 20:35:13 +01007409 Examples :
Willy Tarreau303c0352008-01-17 19:01:39 +01007410 # ignore user-agents reporting any flavour of "Mozilla" or "MSIE", but
7411 # block all others.
7412 reqipass ^User-Agent:\.*(Mozilla|MSIE)
7413 reqitarpit ^User-Agent:
7414
Willy Tarreau5321c422010-01-28 20:35:13 +01007415 # block bad guys
7416 acl badguys src 10.1.0.3 172.16.13.20/28
7417 reqitarpit . if badguys
7418
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007419 See also: "reqallow", "reqdeny", "reqpass", "http-request", section 6
7420 about HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007421
7422
Willy Tarreaue5c5ce92008-06-20 17:27:19 +02007423retries <value>
7424 Set the number of retries to perform on a server after a connection failure
7425 May be used in sections: defaults | frontend | listen | backend
7426 yes | no | yes | yes
7427 Arguments :
7428 <value> is the number of times a connection attempt should be retried on
7429 a server when a connection either is refused or times out. The
7430 default value is 3.
7431
7432 It is important to understand that this value applies to the number of
7433 connection attempts, not full requests. When a connection has effectively
7434 been established to a server, there will be no more retry.
7435
7436 In order to avoid immediate reconnections to a server which is restarting,
Joseph Lynch726ab712015-05-11 23:25:34 -07007437 a turn-around timer of min("timeout connect", one second) is applied before
7438 a retry occurs.
Willy Tarreaue5c5ce92008-06-20 17:27:19 +02007439
7440 When "option redispatch" is set, the last retry may be performed on another
7441 server even if a cookie references a different server.
7442
7443 See also : "option redispatch"
7444
7445
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007446rspadd <string> [{if | unless} <cond>]
Willy Tarreau303c0352008-01-17 19:01:39 +01007447 Add a header at the end of the HTTP response
7448 May be used in sections : defaults | frontend | listen | backend
7449 no | yes | yes | yes
7450 Arguments :
7451 <string> is the complete line to be added. Any space or known delimiter
7452 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007453 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01007454
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007455 <cond> is an optional matching condition built from ACLs. It makes it
7456 possible to ignore this rule when other conditions are not met.
7457
Willy Tarreau303c0352008-01-17 19:01:39 +01007458 A new line consisting in <string> followed by a line feed will be added after
7459 the last header of an HTTP response.
7460
7461 Header transformations only apply to traffic which passes through HAProxy,
7462 and not to traffic generated by HAProxy, such as health-checks or error
7463 responses.
7464
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007465 See also: "rspdel" "reqadd", "http-response", section 6 about HTTP header
7466 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007467
7468
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007469rspdel <search> [{if | unless} <cond>]
7470rspidel <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007471 Delete all headers matching a regular expression in an HTTP response
7472 May be used in sections : defaults | frontend | listen | backend
7473 no | yes | yes | yes
7474 Arguments :
7475 <search> is the regular expression applied to HTTP headers and to the
7476 response line. This is an extended regular expression, so
7477 parenthesis grouping is supported and no preliminary backslash
7478 is required. Any space or known delimiter must be escaped using
7479 a backslash ('\'). The pattern applies to a full line at a time.
7480 The "rspdel" keyword strictly matches case while "rspidel"
7481 ignores case.
7482
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007483 <cond> is an optional matching condition built from ACLs. It makes it
7484 possible to ignore this rule when other conditions are not met.
7485
Willy Tarreau303c0352008-01-17 19:01:39 +01007486 Any header line matching extended regular expression <search> in the response
7487 will be completely deleted. Most common use of this is to remove unwanted
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02007488 and/or sensitive headers or cookies from a response before passing it to the
Willy Tarreau303c0352008-01-17 19:01:39 +01007489 client.
7490
7491 Header transformations only apply to traffic which passes through HAProxy,
7492 and not to traffic generated by HAProxy, such as health-checks or error
7493 responses. Keep in mind that header names are not case-sensitive.
7494
7495 Example :
7496 # remove the Server header from responses
Willy Tarreau5e80e022013-05-25 08:31:25 +02007497 rspidel ^Server:.*
Willy Tarreau303c0352008-01-17 19:01:39 +01007498
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007499 See also: "rspadd", "rsprep", "reqdel", "http-response", section 6 about
7500 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007501
7502
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007503rspdeny <search> [{if | unless} <cond>]
7504rspideny <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007505 Block an HTTP response if a line matches a regular expression
7506 May be used in sections : defaults | frontend | listen | backend
7507 no | yes | yes | yes
7508 Arguments :
7509 <search> is the regular expression applied to HTTP headers and to the
7510 response line. This is an extended regular expression, so
7511 parenthesis grouping is supported and no preliminary backslash
7512 is required. Any space or known delimiter must be escaped using
7513 a backslash ('\'). The pattern applies to a full line at a time.
7514 The "rspdeny" keyword strictly matches case while "rspideny"
7515 ignores case.
7516
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007517 <cond> is an optional matching condition built from ACLs. It makes it
7518 possible to ignore this rule when other conditions are not met.
7519
Willy Tarreau303c0352008-01-17 19:01:39 +01007520 A response containing any line which matches extended regular expression
7521 <search> will mark the request as denied. The test applies both to the
7522 response line and to response headers. Keep in mind that header names are not
7523 case-sensitive.
7524
7525 Main use of this keyword is to prevent sensitive information leak and to
Willy Tarreauced27012008-01-17 20:35:34 +01007526 block the response before it reaches the client. If a response is denied, it
7527 will be replaced with an HTTP 502 error so that the client never retrieves
7528 any sensitive data.
Willy Tarreau303c0352008-01-17 19:01:39 +01007529
7530 It is easier, faster and more powerful to use ACLs to write access policies.
7531 Rspdeny should be avoided in new designs.
7532
7533 Example :
7534 # Ensure that no content type matching ms-word will leak
7535 rspideny ^Content-type:\.*/ms-word
7536
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007537 See also: "reqdeny", "acl", "block", "http-response", section 6 about
7538 HTTP header manipulation and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007539
7540
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007541rsprep <search> <string> [{if | unless} <cond>]
7542rspirep <search> <string> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007543 Replace a regular expression with a string in an HTTP response line
7544 May be used in sections : defaults | frontend | listen | backend
7545 no | yes | yes | yes
7546 Arguments :
7547 <search> is the regular expression applied to HTTP headers and to the
7548 response line. This is an extended regular expression, so
7549 parenthesis grouping is supported and no preliminary backslash
7550 is required. Any space or known delimiter must be escaped using
7551 a backslash ('\'). The pattern applies to a full line at a time.
7552 The "rsprep" keyword strictly matches case while "rspirep"
7553 ignores case.
7554
7555 <string> is the complete line to be added. Any space or known delimiter
7556 must be escaped using a backslash ('\'). References to matched
7557 pattern groups are possible using the common \N form, with N
7558 being a single digit between 0 and 9. Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007559 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01007560
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007561 <cond> is an optional matching condition built from ACLs. It makes it
7562 possible to ignore this rule when other conditions are not met.
7563
Willy Tarreau303c0352008-01-17 19:01:39 +01007564 Any line matching extended regular expression <search> in the response (both
7565 the response line and header lines) will be completely replaced with
7566 <string>. Most common use of this is to rewrite Location headers.
7567
7568 Header transformations only apply to traffic which passes through HAProxy,
7569 and not to traffic generated by HAProxy, such as health-checks or error
7570 responses. Note that for increased readability, it is suggested to add enough
7571 spaces between the request and the response. Keep in mind that header names
7572 are not case-sensitive.
7573
7574 Example :
7575 # replace "Location: 127.0.0.1:8080" with "Location: www.mydomain.com"
7576 rspirep ^Location:\ 127.0.0.1:8080 Location:\ www.mydomain.com
7577
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007578 See also: "rspadd", "rspdel", "reqrep", "http-response", section 6 about
7579 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007580
7581
David du Colombier486df472011-03-17 10:40:26 +01007582server <name> <address>[:[port]] [param*]
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007583 Declare a server in a backend
7584 May be used in sections : defaults | frontend | listen | backend
7585 no | no | yes | yes
7586 Arguments :
7587 <name> is the internal name assigned to this server. This name will
Cyril Bonté941a0c62012-10-15 19:44:24 +02007588 appear in logs and alerts. If "http-send-name-header" is
Mark Lamourinec2247f02012-01-04 13:02:01 -05007589 set, it will be added to the request header sent to the server.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007590
David du Colombier486df472011-03-17 10:40:26 +01007591 <address> is the IPv4 or IPv6 address of the server. Alternatively, a
7592 resolvable hostname is supported, but this name will be resolved
7593 during start-up. Address "0.0.0.0" or "*" has a special meaning.
7594 It indicates that the connection will be forwarded to the same IP
Willy Tarreaud669a4f2010-07-13 14:49:50 +02007595 address as the one from the client connection. This is useful in
7596 transparent proxy architectures where the client's connection is
7597 intercepted and haproxy must forward to the original destination
7598 address. This is more or less what the "transparent" keyword does
7599 except that with a server it's possible to limit concurrency and
Willy Tarreau24709282013-03-10 21:32:12 +01007600 to report statistics. Optionally, an address family prefix may be
7601 used before the address to force the family regardless of the
7602 address format, which can be useful to specify a path to a unix
7603 socket with no slash ('/'). Currently supported prefixes are :
7604 - 'ipv4@' -> address is always IPv4
7605 - 'ipv6@' -> address is always IPv6
7606 - 'unix@' -> address is a path to a local unix socket
Willy Tarreauccfccef2014-05-10 01:49:15 +02007607 - 'abns@' -> address is in abstract namespace (Linux only)
William Lallemandb2f07452015-05-12 14:27:13 +02007608 You may want to reference some environment variables in the
7609 address parameter, see section 2.3 about environment
Willy Tarreau6a031d12016-11-07 19:42:35 +01007610 variables. The "init-addr" setting can be used to modify the way
7611 IP addresses should be resolved upon startup.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007612
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007613 <port> is an optional port specification. If set, all connections will
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007614 be sent to this port. If unset, the same port the client
7615 connected to will be used. The port may also be prefixed by a "+"
7616 or a "-". In this case, the server's port will be determined by
7617 adding this value to the client's port.
7618
7619 <param*> is a list of parameters for this server. The "server" keywords
7620 accepts an important number of options and has a complete section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007621 dedicated to it. Please refer to section 5 for more details.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007622
7623 Examples :
7624 server first 10.1.1.1:1080 cookie first check inter 1000
7625 server second 10.1.1.2:1080 cookie second check inter 1000
Willy Tarreau24709282013-03-10 21:32:12 +01007626 server transp ipv4@
William Lallemandb2f07452015-05-12 14:27:13 +02007627 server backup "${SRV_BACKUP}:1080" backup
7628 server www1_dc1 "${LAN_DC1}.101:80"
7629 server www1_dc2 "${LAN_DC2}.101:80"
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007630
Willy Tarreau55dcaf62015-09-27 15:03:15 +02007631 Note: regarding Linux's abstract namespace sockets, HAProxy uses the whole
7632 sun_path length is used for the address length. Some other programs
7633 such as socat use the string length only by default. Pass the option
7634 ",unix-tightsocklen=0" to any abstract socket definition in socat to
7635 make it compatible with HAProxy's.
7636
Mark Lamourinec2247f02012-01-04 13:02:01 -05007637 See also: "default-server", "http-send-name-header" and section 5 about
7638 server options
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007639
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02007640server-state-file-name [<file>]
7641 Set the server state file to read, load and apply to servers available in
7642 this backend. It only applies when the directive "load-server-state-from-file"
7643 is set to "local". When <file> is not provided or if this directive is not
7644 set, then backend name is used. If <file> starts with a slash '/', then it is
7645 considered as an absolute path. Otherwise, <file> is concatenated to the
7646 global directive "server-state-file-base".
7647
7648 Example: the minimal configuration below would make HAProxy look for the
7649 state server file '/etc/haproxy/states/bk':
7650
7651 global
7652 server-state-file-base /etc/haproxy/states
7653
7654 backend bk
7655 load-server-state-from-file
7656
7657 See also: "server-state-file-base", "load-server-state-from-file", and
7658 "show servers state"
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007659
Frédéric Lécaillecb4502e2017-04-20 13:36:25 +02007660server-template <prefix> <num | range> <fqdn>[:<port>] [params*]
7661 Set a template to initialize servers with shared parameters.
7662 The names of these servers are built from <prefix> and <num | range> parameters.
7663 May be used in sections : defaults | frontend | listen | backend
7664 no | no | yes | yes
7665
7666 Arguments:
7667 <prefix> A prefix for the server names to be built.
7668
7669 <num | range>
7670 If <num> is provided, this template initializes <num> servers
7671 with 1 up to <num> as server name suffixes. A range of numbers
7672 <num_low>-<num_high> may also be used to use <num_low> up to
7673 <num_high> as server name suffixes.
7674
7675 <fqdn> A FQDN for all the servers this template initializes.
7676
7677 <port> Same meaning as "server" <port> argument (see "server" keyword).
7678
7679 <params*>
7680 Remaining server parameters among all those supported by "server"
7681 keyword.
7682
7683 Examples:
7684 # Initializes 3 servers with srv1, srv2 and srv3 as names,
7685 # google.com as FQDN, and health-check enabled.
7686 server-template srv 1-3 google.com:80 check
7687
7688 # or
7689 server-template srv 3 google.com:80 check
7690
7691 # would be equivalent to:
7692 server srv1 google.com:80 check
7693 server srv2 google.com:80 check
7694 server srv3 google.com:80 check
7695
7696
7697
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007698source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
Willy Tarreaubce70882009-09-07 11:51:47 +02007699source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | hdr_ip(<hdr>[,<occ>]) } ]
Willy Tarreaud53f96b2009-02-04 18:46:54 +01007700source <addr>[:<port>] [interface <name>]
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007701 Set the source address for outgoing connections
7702 May be used in sections : defaults | frontend | listen | backend
7703 yes | no | yes | yes
7704 Arguments :
7705 <addr> is the IPv4 address HAProxy will bind to before connecting to a
7706 server. This address is also used as a source for health checks.
Willy Tarreau24709282013-03-10 21:32:12 +01007707
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007708 The default value of 0.0.0.0 means that the system will select
Willy Tarreau24709282013-03-10 21:32:12 +01007709 the most appropriate address to reach its destination. Optionally
7710 an address family prefix may be used before the address to force
7711 the family regardless of the address format, which can be useful
7712 to specify a path to a unix socket with no slash ('/'). Currently
7713 supported prefixes are :
7714 - 'ipv4@' -> address is always IPv4
7715 - 'ipv6@' -> address is always IPv6
7716 - 'unix@' -> address is a path to a local unix socket
Willy Tarreauccfccef2014-05-10 01:49:15 +02007717 - 'abns@' -> address is in abstract namespace (Linux only)
Cyril Bonté307ee1e2015-09-28 23:16:06 +02007718 You may want to reference some environment variables in the
7719 address parameter, see section 2.3 about environment variables.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007720
7721 <port> is an optional port. It is normally not needed but may be useful
7722 in some very specific contexts. The default value of zero means
Willy Tarreauc6f4ce82009-06-10 11:09:37 +02007723 the system will select a free port. Note that port ranges are not
7724 supported in the backend. If you want to force port ranges, you
7725 have to specify them on each "server" line.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007726
7727 <addr2> is the IP address to present to the server when connections are
7728 forwarded in full transparent proxy mode. This is currently only
7729 supported on some patched Linux kernels. When this address is
7730 specified, clients connecting to the server will be presented
7731 with this address, while health checks will still use the address
7732 <addr>.
7733
7734 <port2> is the optional port to present to the server when connections
7735 are forwarded in full transparent proxy mode (see <addr2> above).
7736 The default value of zero means the system will select a free
7737 port.
7738
Willy Tarreaubce70882009-09-07 11:51:47 +02007739 <hdr> is the name of a HTTP header in which to fetch the IP to bind to.
7740 This is the name of a comma-separated header list which can
7741 contain multiple IP addresses. By default, the last occurrence is
7742 used. This is designed to work with the X-Forwarded-For header
Baptiste Assmannea3e73b2013-02-02 23:47:49 +01007743 and to automatically bind to the client's IP address as seen
Willy Tarreaubce70882009-09-07 11:51:47 +02007744 by previous proxy, typically Stunnel. In order to use another
7745 occurrence from the last one, please see the <occ> parameter
7746 below. When the header (or occurrence) is not found, no binding
7747 is performed so that the proxy's default IP address is used. Also
7748 keep in mind that the header name is case insensitive, as for any
7749 HTTP header.
7750
7751 <occ> is the occurrence number of a value to be used in a multi-value
7752 header. This is to be used in conjunction with "hdr_ip(<hdr>)",
Jamie Gloudonaaa21002012-08-25 00:18:33 -04007753 in order to specify which occurrence to use for the source IP
Willy Tarreaubce70882009-09-07 11:51:47 +02007754 address. Positive values indicate a position from the first
7755 occurrence, 1 being the first one. Negative values indicate
7756 positions relative to the last one, -1 being the last one. This
7757 is helpful for situations where an X-Forwarded-For header is set
7758 at the entry point of an infrastructure and must be used several
7759 proxy layers away. When this value is not specified, -1 is
7760 assumed. Passing a zero here disables the feature.
7761
Willy Tarreaud53f96b2009-02-04 18:46:54 +01007762 <name> is an optional interface name to which to bind to for outgoing
7763 traffic. On systems supporting this features (currently, only
7764 Linux), this allows one to bind all traffic to the server to
7765 this interface even if it is not the one the system would select
7766 based on routing tables. This should be used with extreme care.
7767 Note that using this option requires root privileges.
7768
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007769 The "source" keyword is useful in complex environments where a specific
7770 address only is allowed to connect to the servers. It may be needed when a
7771 private address must be used through a public gateway for instance, and it is
7772 known that the system cannot determine the adequate source address by itself.
7773
7774 An extension which is available on certain patched Linux kernels may be used
7775 through the "usesrc" optional keyword. It makes it possible to connect to the
7776 servers with an IP address which does not belong to the system itself. This
7777 is called "full transparent proxy mode". For this to work, the destination
7778 servers have to route their traffic back to this address through the machine
7779 running HAProxy, and IP forwarding must generally be enabled on this machine.
7780
7781 In this "full transparent proxy" mode, it is possible to force a specific IP
7782 address to be presented to the servers. This is not much used in fact. A more
7783 common use is to tell HAProxy to present the client's IP address. For this,
7784 there are two methods :
7785
7786 - present the client's IP and port addresses. This is the most transparent
7787 mode, but it can cause problems when IP connection tracking is enabled on
7788 the machine, because a same connection may be seen twice with different
7789 states. However, this solution presents the huge advantage of not
7790 limiting the system to the 64k outgoing address+port couples, because all
7791 of the client ranges may be used.
7792
7793 - present only the client's IP address and select a spare port. This
7794 solution is still quite elegant but slightly less transparent (downstream
7795 firewalls logs will not match upstream's). It also presents the downside
7796 of limiting the number of concurrent connections to the usual 64k ports.
7797 However, since the upstream and downstream ports are different, local IP
7798 connection tracking on the machine will not be upset by the reuse of the
7799 same session.
7800
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007801 This option sets the default source for all servers in the backend. It may
7802 also be specified in a "defaults" section. Finer source address specification
7803 is possible at the server level using the "source" server option. Refer to
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007804 section 5 for more information.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007805
Baptiste Assmann91bd3372015-07-17 21:59:42 +02007806 In order to work, "usesrc" requires root privileges.
7807
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007808 Examples :
7809 backend private
7810 # Connect to the servers using our 192.168.1.200 source address
7811 source 192.168.1.200
7812
7813 backend transparent_ssl1
7814 # Connect to the SSL farm from the client's source address
7815 source 192.168.1.200 usesrc clientip
7816
7817 backend transparent_ssl2
7818 # Connect to the SSL farm from the client's source address and port
7819 # not recommended if IP conntrack is present on the local machine.
7820 source 192.168.1.200 usesrc client
7821
7822 backend transparent_ssl3
7823 # Connect to the SSL farm from the client's source address. It
7824 # is more conntrack-friendly.
7825 source 192.168.1.200 usesrc clientip
7826
7827 backend transparent_smtp
7828 # Connect to the SMTP farm from the client's source address/port
7829 # with Tproxy version 4.
7830 source 0.0.0.0 usesrc clientip
7831
Willy Tarreaubce70882009-09-07 11:51:47 +02007832 backend transparent_http
7833 # Connect to the servers using the client's IP as seen by previous
7834 # proxy.
7835 source 0.0.0.0 usesrc hdr_ip(x-forwarded-for,-1)
7836
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007837 See also : the "source" server option in section 5, the Tproxy patches for
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007838 the Linux kernel on www.balabit.com, the "bind" keyword.
7839
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01007840
Willy Tarreau844e3c52008-01-11 16:28:18 +01007841srvtimeout <timeout> (deprecated)
7842 Set the maximum inactivity time on the server side.
7843 May be used in sections : defaults | frontend | listen | backend
7844 yes | no | yes | yes
7845 Arguments :
7846 <timeout> is the timeout value specified in milliseconds by default, but
7847 can be in any other unit if the number is suffixed by the unit,
7848 as explained at the top of this document.
7849
7850 The inactivity timeout applies when the server is expected to acknowledge or
7851 send data. In HTTP mode, this timeout is particularly important to consider
7852 during the first phase of the server's response, when it has to send the
7853 headers, as it directly represents the server's processing time for the
7854 request. To find out what value to put there, it's often good to start with
7855 what would be considered as unacceptable response times, then check the logs
7856 to observe the response time distribution, and adjust the value accordingly.
7857
7858 The value is specified in milliseconds by default, but can be in any other
7859 unit if the number is suffixed by the unit, as specified at the top of this
7860 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
7861 recommended that the client timeout remains equal to the server timeout in
7862 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01007863 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01007864 packet losses by specifying timeouts that are slightly above multiples of 3
Willy Tarreaud72758d2010-01-12 10:42:19 +01007865 seconds (eg: 4 or 5 seconds minimum).
Willy Tarreau844e3c52008-01-11 16:28:18 +01007866
7867 This parameter is specific to backends, but can be specified once for all in
7868 "defaults" sections. This is in fact one of the easiest solutions not to
7869 forget about it. An unspecified timeout results in an infinite timeout, which
7870 is not recommended. Such a usage is accepted and works but reports a warning
7871 during startup because it may results in accumulation of expired sessions in
7872 the system if the system's timeouts are not configured either.
7873
7874 This parameter is provided for compatibility but is currently deprecated.
7875 Please use "timeout server" instead.
7876
Willy Tarreauce887fd2012-05-12 12:50:00 +02007877 See also : "timeout server", "timeout tunnel", "timeout client" and
7878 "clitimeout".
Willy Tarreau844e3c52008-01-11 16:28:18 +01007879
7880
Cyril Bonté66c327d2010-10-12 00:14:37 +02007881stats admin { if | unless } <cond>
7882 Enable statistics admin level if/unless a condition is matched
7883 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007884 no | yes | yes | yes
Cyril Bonté66c327d2010-10-12 00:14:37 +02007885
7886 This statement enables the statistics admin level if/unless a condition is
7887 matched.
7888
7889 The admin level allows to enable/disable servers from the web interface. By
7890 default, statistics page is read-only for security reasons.
7891
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01007892 Note : Consider not using this feature in multi-process mode (nbproc > 1)
7893 unless you know what you do : memory is not shared between the
7894 processes, which can result in random behaviours.
7895
Cyril Bonté23b39d92011-02-10 22:54:44 +01007896 Currently, the POST request is limited to the buffer size minus the reserved
7897 buffer space, which means that if the list of servers is too long, the
7898 request won't be processed. It is recommended to alter few servers at a
7899 time.
Cyril Bonté66c327d2010-10-12 00:14:37 +02007900
7901 Example :
7902 # statistics admin level only for localhost
7903 backend stats_localhost
7904 stats enable
7905 stats admin if LOCALHOST
7906
7907 Example :
7908 # statistics admin level always enabled because of the authentication
7909 backend stats_auth
7910 stats enable
7911 stats auth admin:AdMiN123
7912 stats admin if TRUE
7913
7914 Example :
7915 # statistics admin level depends on the authenticated user
7916 userlist stats-auth
7917 group admin users admin
7918 user admin insecure-password AdMiN123
7919 group readonly users haproxy
7920 user haproxy insecure-password haproxy
7921
7922 backend stats_auth
7923 stats enable
7924 acl AUTH http_auth(stats-auth)
7925 acl AUTH_ADMIN http_auth_group(stats-auth) admin
7926 stats http-request auth unless AUTH
7927 stats admin if AUTH_ADMIN
7928
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01007929 See also : "stats enable", "stats auth", "stats http-request", "nbproc",
7930 "bind-process", section 3.4 about userlists and section 7 about
7931 ACL usage.
Cyril Bonté66c327d2010-10-12 00:14:37 +02007932
7933
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007934stats auth <user>:<passwd>
7935 Enable statistics with authentication and grant access to an account
7936 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007937 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007938 Arguments :
7939 <user> is a user name to grant access to
7940
7941 <passwd> is the cleartext password associated to this user
7942
7943 This statement enables statistics with default settings, and restricts access
7944 to declared users only. It may be repeated as many times as necessary to
7945 allow as many users as desired. When a user tries to access the statistics
7946 without a valid account, a "401 Forbidden" response will be returned so that
7947 the browser asks the user to provide a valid user and password. The real
7948 which will be returned to the browser is configurable using "stats realm".
7949
7950 Since the authentication method is HTTP Basic Authentication, the passwords
7951 circulate in cleartext on the network. Thus, it was decided that the
7952 configuration file would also use cleartext passwords to remind the users
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02007953 that those ones should not be sensitive and not shared with any other account.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007954
7955 It is also possible to reduce the scope of the proxies which appear in the
7956 report using "stats scope".
7957
7958 Though this statement alone is enough to enable statistics reporting, it is
7959 recommended to set all other settings in order to avoid relying on default
7960 unobvious parameters.
7961
7962 Example :
7963 # public access (limited to this backend only)
7964 backend public_www
7965 server srv1 192.168.0.1:80
7966 stats enable
7967 stats hide-version
7968 stats scope .
7969 stats uri /admin?stats
7970 stats realm Haproxy\ Statistics
7971 stats auth admin1:AdMiN123
7972 stats auth admin2:AdMiN321
7973
7974 # internal monitoring access (unlimited)
7975 backend private_monitoring
7976 stats enable
7977 stats uri /admin?stats
7978 stats refresh 5s
7979
7980 See also : "stats enable", "stats realm", "stats scope", "stats uri"
7981
7982
7983stats enable
7984 Enable statistics reporting with default settings
7985 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007986 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007987 Arguments : none
7988
7989 This statement enables statistics reporting with default settings defined
7990 at build time. Unless stated otherwise, these settings are used :
7991 - stats uri : /haproxy?stats
7992 - stats realm : "HAProxy Statistics"
7993 - stats auth : no authentication
7994 - stats scope : no restriction
7995
7996 Though this statement alone is enough to enable statistics reporting, it is
7997 recommended to set all other settings in order to avoid relying on default
7998 unobvious parameters.
7999
8000 Example :
8001 # public access (limited to this backend only)
8002 backend public_www
8003 server srv1 192.168.0.1:80
8004 stats enable
8005 stats hide-version
8006 stats scope .
8007 stats uri /admin?stats
8008 stats realm Haproxy\ Statistics
8009 stats auth admin1:AdMiN123
8010 stats auth admin2:AdMiN321
8011
8012 # internal monitoring access (unlimited)
8013 backend private_monitoring
8014 stats enable
8015 stats uri /admin?stats
8016 stats refresh 5s
8017
8018 See also : "stats auth", "stats realm", "stats uri"
8019
8020
Willy Tarreaud63335a2010-02-26 12:56:52 +01008021stats hide-version
8022 Enable statistics and hide HAProxy version reporting
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02008023 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008024 yes | yes | yes | yes
Willy Tarreaud63335a2010-02-26 12:56:52 +01008025 Arguments : none
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02008026
Willy Tarreaud63335a2010-02-26 12:56:52 +01008027 By default, the stats page reports some useful status information along with
8028 the statistics. Among them is HAProxy's version. However, it is generally
8029 considered dangerous to report precise version to anyone, as it can help them
8030 target known weaknesses with specific attacks. The "stats hide-version"
8031 statement removes the version from the statistics report. This is recommended
8032 for public sites or any site with a weak login/password.
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02008033
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +02008034 Though this statement alone is enough to enable statistics reporting, it is
8035 recommended to set all other settings in order to avoid relying on default
8036 unobvious parameters.
8037
Willy Tarreaud63335a2010-02-26 12:56:52 +01008038 Example :
8039 # public access (limited to this backend only)
8040 backend public_www
8041 server srv1 192.168.0.1:80
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +02008042 stats enable
Willy Tarreaud63335a2010-02-26 12:56:52 +01008043 stats hide-version
8044 stats scope .
8045 stats uri /admin?stats
8046 stats realm Haproxy\ Statistics
8047 stats auth admin1:AdMiN123
8048 stats auth admin2:AdMiN321
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02008049
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02008050 # internal monitoring access (unlimited)
8051 backend private_monitoring
8052 stats enable
Willy Tarreaud63335a2010-02-26 12:56:52 +01008053 stats uri /admin?stats
8054 stats refresh 5s
Krzysztof Piotr Oledzki15514c22010-01-04 16:03:09 +01008055
Willy Tarreaud63335a2010-02-26 12:56:52 +01008056 See also : "stats auth", "stats enable", "stats realm", "stats uri"
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02008057
Willy Tarreau983e01e2010-01-11 18:42:06 +01008058
Cyril Bonté2be1b3f2010-09-30 23:46:30 +02008059stats http-request { allow | deny | auth [realm <realm>] }
8060 [ { if | unless } <condition> ]
8061 Access control for statistics
8062
8063 May be used in sections: defaults | frontend | listen | backend
8064 no | no | yes | yes
8065
8066 As "http-request", these set of options allow to fine control access to
8067 statistics. Each option may be followed by if/unless and acl.
8068 First option with matched condition (or option without condition) is final.
8069 For "deny" a 403 error will be returned, for "allow" normal processing is
8070 performed, for "auth" a 401/407 error code is returned so the client
8071 should be asked to enter a username and password.
8072
8073 There is no fixed limit to the number of http-request statements per
8074 instance.
8075
8076 See also : "http-request", section 3.4 about userlists and section 7
8077 about ACL usage.
8078
8079
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008080stats realm <realm>
8081 Enable statistics and set authentication realm
8082 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008083 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008084 Arguments :
8085 <realm> is the name of the HTTP Basic Authentication realm reported to
8086 the browser. The browser uses it to display it in the pop-up
8087 inviting the user to enter a valid username and password.
8088
8089 The realm is read as a single word, so any spaces in it should be escaped
8090 using a backslash ('\').
8091
8092 This statement is useful only in conjunction with "stats auth" since it is
8093 only related to authentication.
8094
8095 Though this statement alone is enough to enable statistics reporting, it is
8096 recommended to set all other settings in order to avoid relying on default
8097 unobvious parameters.
8098
8099 Example :
8100 # public access (limited to this backend only)
8101 backend public_www
8102 server srv1 192.168.0.1:80
8103 stats enable
8104 stats hide-version
8105 stats scope .
8106 stats uri /admin?stats
8107 stats realm Haproxy\ Statistics
8108 stats auth admin1:AdMiN123
8109 stats auth admin2:AdMiN321
8110
8111 # internal monitoring access (unlimited)
8112 backend private_monitoring
8113 stats enable
8114 stats uri /admin?stats
8115 stats refresh 5s
8116
8117 See also : "stats auth", "stats enable", "stats uri"
8118
8119
8120stats refresh <delay>
8121 Enable statistics with automatic refresh
8122 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008123 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008124 Arguments :
8125 <delay> is the suggested refresh delay, specified in seconds, which will
8126 be returned to the browser consulting the report page. While the
8127 browser is free to apply any delay, it will generally respect it
8128 and refresh the page this every seconds. The refresh interval may
8129 be specified in any other non-default time unit, by suffixing the
8130 unit after the value, as explained at the top of this document.
8131
8132 This statement is useful on monitoring displays with a permanent page
8133 reporting the load balancer's activity. When set, the HTML report page will
8134 include a link "refresh"/"stop refresh" so that the user can select whether
8135 he wants automatic refresh of the page or not.
8136
8137 Though this statement alone is enough to enable statistics reporting, it is
8138 recommended to set all other settings in order to avoid relying on default
8139 unobvious parameters.
8140
8141 Example :
8142 # public access (limited to this backend only)
8143 backend public_www
8144 server srv1 192.168.0.1:80
8145 stats enable
8146 stats hide-version
8147 stats scope .
8148 stats uri /admin?stats
8149 stats realm Haproxy\ Statistics
8150 stats auth admin1:AdMiN123
8151 stats auth admin2:AdMiN321
8152
8153 # internal monitoring access (unlimited)
8154 backend private_monitoring
8155 stats enable
8156 stats uri /admin?stats
8157 stats refresh 5s
8158
8159 See also : "stats auth", "stats enable", "stats realm", "stats uri"
8160
8161
8162stats scope { <name> | "." }
8163 Enable statistics and limit access scope
8164 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008165 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008166 Arguments :
8167 <name> is the name of a listen, frontend or backend section to be
8168 reported. The special name "." (a single dot) designates the
8169 section in which the statement appears.
8170
8171 When this statement is specified, only the sections enumerated with this
8172 statement will appear in the report. All other ones will be hidden. This
8173 statement may appear as many times as needed if multiple sections need to be
8174 reported. Please note that the name checking is performed as simple string
8175 comparisons, and that it is never checked that a give section name really
8176 exists.
8177
8178 Though this statement alone is enough to enable statistics reporting, it is
8179 recommended to set all other settings in order to avoid relying on default
8180 unobvious parameters.
8181
8182 Example :
8183 # public access (limited to this backend only)
8184 backend public_www
8185 server srv1 192.168.0.1:80
8186 stats enable
8187 stats hide-version
8188 stats scope .
8189 stats uri /admin?stats
8190 stats realm Haproxy\ Statistics
8191 stats auth admin1:AdMiN123
8192 stats auth admin2:AdMiN321
8193
8194 # internal monitoring access (unlimited)
8195 backend private_monitoring
8196 stats enable
8197 stats uri /admin?stats
8198 stats refresh 5s
8199
8200 See also : "stats auth", "stats enable", "stats realm", "stats uri"
8201
Willy Tarreaud63335a2010-02-26 12:56:52 +01008202
Willy Tarreauc9705a12010-07-27 20:05:50 +02008203stats show-desc [ <desc> ]
Willy Tarreaud63335a2010-02-26 12:56:52 +01008204 Enable reporting of a description on the statistics page.
8205 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008206 yes | yes | yes | yes
Willy Tarreaud63335a2010-02-26 12:56:52 +01008207
Willy Tarreauc9705a12010-07-27 20:05:50 +02008208 <desc> is an optional description to be reported. If unspecified, the
Willy Tarreaud63335a2010-02-26 12:56:52 +01008209 description from global section is automatically used instead.
8210
8211 This statement is useful for users that offer shared services to their
8212 customers, where node or description should be different for each customer.
8213
8214 Though this statement alone is enough to enable statistics reporting, it is
8215 recommended to set all other settings in order to avoid relying on default
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04008216 unobvious parameters. By default description is not shown.
Willy Tarreaud63335a2010-02-26 12:56:52 +01008217
8218 Example :
8219 # internal monitoring access (unlimited)
8220 backend private_monitoring
8221 stats enable
8222 stats show-desc Master node for Europe, Asia, Africa
8223 stats uri /admin?stats
8224 stats refresh 5s
8225
8226 See also: "show-node", "stats enable", "stats uri" and "description" in
8227 global section.
8228
8229
8230stats show-legends
Willy Tarreaued2119c2014-04-24 22:10:39 +02008231 Enable reporting additional information on the statistics page
8232 May be used in sections : defaults | frontend | listen | backend
8233 yes | yes | yes | yes
8234 Arguments : none
8235
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03008236 Enable reporting additional information on the statistics page :
Willy Tarreaud63335a2010-02-26 12:56:52 +01008237 - cap: capabilities (proxy)
8238 - mode: one of tcp, http or health (proxy)
8239 - id: SNMP ID (proxy, socket, server)
8240 - IP (socket, server)
8241 - cookie (backend, server)
8242
8243 Though this statement alone is enough to enable statistics reporting, it is
8244 recommended to set all other settings in order to avoid relying on default
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04008245 unobvious parameters. Default behaviour is not to show this information.
Willy Tarreaud63335a2010-02-26 12:56:52 +01008246
8247 See also: "stats enable", "stats uri".
8248
8249
8250stats show-node [ <name> ]
8251 Enable reporting of a host name on the statistics page.
8252 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008253 yes | yes | yes | yes
Willy Tarreaud63335a2010-02-26 12:56:52 +01008254 Arguments:
8255 <name> is an optional name to be reported. If unspecified, the
8256 node name from global section is automatically used instead.
8257
8258 This statement is useful for users that offer shared services to their
8259 customers, where node or description might be different on a stats page
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04008260 provided for each customer. Default behaviour is not to show host name.
Willy Tarreaud63335a2010-02-26 12:56:52 +01008261
8262 Though this statement alone is enough to enable statistics reporting, it is
8263 recommended to set all other settings in order to avoid relying on default
8264 unobvious parameters.
8265
8266 Example:
8267 # internal monitoring access (unlimited)
8268 backend private_monitoring
8269 stats enable
8270 stats show-node Europe-1
8271 stats uri /admin?stats
8272 stats refresh 5s
8273
8274 See also: "show-desc", "stats enable", "stats uri", and "node" in global
8275 section.
8276
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008277
8278stats uri <prefix>
8279 Enable statistics and define the URI prefix to access them
8280 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008281 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008282 Arguments :
8283 <prefix> is the prefix of any URI which will be redirected to stats. This
8284 prefix may contain a question mark ('?') to indicate part of a
8285 query string.
8286
8287 The statistics URI is intercepted on the relayed traffic, so it appears as a
8288 page within the normal application. It is strongly advised to ensure that the
8289 selected URI will never appear in the application, otherwise it will never be
8290 possible to reach it in the application.
8291
8292 The default URI compiled in haproxy is "/haproxy?stats", but this may be
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01008293 changed at build time, so it's better to always explicitly specify it here.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008294 It is generally a good idea to include a question mark in the URI so that
8295 intermediate proxies refrain from caching the results. Also, since any string
8296 beginning with the prefix will be accepted as a stats request, the question
8297 mark helps ensuring that no valid URI will begin with the same words.
8298
8299 It is sometimes very convenient to use "/" as the URI prefix, and put that
8300 statement in a "listen" instance of its own. That makes it easy to dedicate
8301 an address or a port to statistics only.
8302
8303 Though this statement alone is enough to enable statistics reporting, it is
8304 recommended to set all other settings in order to avoid relying on default
8305 unobvious parameters.
8306
8307 Example :
8308 # public access (limited to this backend only)
8309 backend public_www
8310 server srv1 192.168.0.1:80
8311 stats enable
8312 stats hide-version
8313 stats scope .
8314 stats uri /admin?stats
8315 stats realm Haproxy\ Statistics
8316 stats auth admin1:AdMiN123
8317 stats auth admin2:AdMiN321
8318
8319 # internal monitoring access (unlimited)
8320 backend private_monitoring
8321 stats enable
8322 stats uri /admin?stats
8323 stats refresh 5s
8324
8325 See also : "stats auth", "stats enable", "stats realm"
8326
8327
Willy Tarreaud63335a2010-02-26 12:56:52 +01008328stick match <pattern> [table <table>] [{if | unless} <cond>]
8329 Define a request pattern matching condition to stick a user to a server
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008330 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaud63335a2010-02-26 12:56:52 +01008331 no | no | yes | yes
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008332
8333 Arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02008334 <pattern> is a sample expression rule as described in section 7.3. It
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008335 describes what elements of the incoming request or connection
8336 will be analysed in the hope to find a matching entry in a
8337 stickiness table. This rule is mandatory.
8338
8339 <table> is an optional stickiness table name. If unspecified, the same
8340 backend's table is used. A stickiness table is declared using
8341 the "stick-table" statement.
8342
8343 <cond> is an optional matching condition. It makes it possible to match
8344 on a certain criterion only when other conditions are met (or
8345 not met). For instance, it could be used to match on a source IP
8346 address except when a request passes through a known proxy, in
8347 which case we'd match on a header containing that IP address.
8348
8349 Some protocols or applications require complex stickiness rules and cannot
8350 always simply rely on cookies nor hashing. The "stick match" statement
8351 describes a rule to extract the stickiness criterion from an incoming request
8352 or connection. See section 7 for a complete list of possible patterns and
8353 transformation rules.
8354
8355 The table has to be declared using the "stick-table" statement. It must be of
8356 a type compatible with the pattern. By default it is the one which is present
8357 in the same backend. It is possible to share a table with other backends by
8358 referencing it using the "table" keyword. If another table is referenced,
8359 the server's ID inside the backends are used. By default, all server IDs
8360 start at 1 in each backend, so the server ordering is enough. But in case of
8361 doubt, it is highly recommended to force server IDs using their "id" setting.
8362
8363 It is possible to restrict the conditions where a "stick match" statement
8364 will apply, using "if" or "unless" followed by a condition. See section 7 for
8365 ACL based conditions.
8366
8367 There is no limit on the number of "stick match" statements. The first that
8368 applies and matches will cause the request to be directed to the same server
8369 as was used for the request which created the entry. That way, multiple
8370 matches can be used as fallbacks.
8371
8372 The stick rules are checked after the persistence cookies, so they will not
8373 affect stickiness if a cookie has already been used to select a server. That
8374 way, it becomes very easy to insert cookies and match on IP addresses in
8375 order to maintain stickiness between HTTP and HTTPS.
8376
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008377 Note : Consider not using this feature in multi-process mode (nbproc > 1)
8378 unless you know what you do : memory is not shared between the
8379 processes, which can result in random behaviours.
8380
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008381 Example :
8382 # forward SMTP users to the same server they just used for POP in the
8383 # last 30 minutes
8384 backend pop
8385 mode tcp
8386 balance roundrobin
8387 stick store-request src
8388 stick-table type ip size 200k expire 30m
8389 server s1 192.168.1.1:110
8390 server s2 192.168.1.1:110
8391
8392 backend smtp
8393 mode tcp
8394 balance roundrobin
8395 stick match src table pop
8396 server s1 192.168.1.1:25
8397 server s2 192.168.1.1:25
8398
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008399 See also : "stick-table", "stick on", "nbproc", "bind-process" and section 7
Willy Tarreaube722a22014-06-13 16:31:59 +02008400 about ACLs and samples fetching.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008401
8402
8403stick on <pattern> [table <table>] [{if | unless} <condition>]
8404 Define a request pattern to associate a user to a server
8405 May be used in sections : defaults | frontend | listen | backend
8406 no | no | yes | yes
8407
8408 Note : This form is exactly equivalent to "stick match" followed by
8409 "stick store-request", all with the same arguments. Please refer
8410 to both keywords for details. It is only provided as a convenience
8411 for writing more maintainable configurations.
8412
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008413 Note : Consider not using this feature in multi-process mode (nbproc > 1)
8414 unless you know what you do : memory is not shared between the
8415 processes, which can result in random behaviours.
8416
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008417 Examples :
8418 # The following form ...
Willy Tarreauec579d82010-02-26 19:15:04 +01008419 stick on src table pop if !localhost
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008420
8421 # ...is strictly equivalent to this one :
8422 stick match src table pop if !localhost
8423 stick store-request src table pop if !localhost
8424
8425
8426 # Use cookie persistence for HTTP, and stick on source address for HTTPS as
8427 # well as HTTP without cookie. Share the same table between both accesses.
8428 backend http
8429 mode http
8430 balance roundrobin
8431 stick on src table https
8432 cookie SRV insert indirect nocache
8433 server s1 192.168.1.1:80 cookie s1
8434 server s2 192.168.1.1:80 cookie s2
8435
8436 backend https
8437 mode tcp
8438 balance roundrobin
8439 stick-table type ip size 200k expire 30m
8440 stick on src
8441 server s1 192.168.1.1:443
8442 server s2 192.168.1.1:443
8443
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008444 See also : "stick match", "stick store-request", "nbproc" and "bind-process".
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008445
8446
8447stick store-request <pattern> [table <table>] [{if | unless} <condition>]
8448 Define a request pattern used to create an entry in a stickiness table
8449 May be used in sections : defaults | frontend | listen | backend
8450 no | no | yes | yes
8451
8452 Arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02008453 <pattern> is a sample expression rule as described in section 7.3. It
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008454 describes what elements of the incoming request or connection
8455 will be analysed, extracted and stored in the table once a
8456 server is selected.
8457
8458 <table> is an optional stickiness table name. If unspecified, the same
8459 backend's table is used. A stickiness table is declared using
8460 the "stick-table" statement.
8461
8462 <cond> is an optional storage condition. It makes it possible to store
8463 certain criteria only when some conditions are met (or not met).
8464 For instance, it could be used to store the source IP address
8465 except when the request passes through a known proxy, in which
8466 case we'd store a converted form of a header containing that IP
8467 address.
8468
8469 Some protocols or applications require complex stickiness rules and cannot
8470 always simply rely on cookies nor hashing. The "stick store-request" statement
8471 describes a rule to decide what to extract from the request and when to do
8472 it, in order to store it into a stickiness table for further requests to
8473 match it using the "stick match" statement. Obviously the extracted part must
8474 make sense and have a chance to be matched in a further request. Storing a
8475 client's IP address for instance often makes sense. Storing an ID found in a
8476 URL parameter also makes sense. Storing a source port will almost never make
8477 any sense because it will be randomly matched. See section 7 for a complete
8478 list of possible patterns and transformation rules.
8479
8480 The table has to be declared using the "stick-table" statement. It must be of
8481 a type compatible with the pattern. By default it is the one which is present
8482 in the same backend. It is possible to share a table with other backends by
8483 referencing it using the "table" keyword. If another table is referenced,
8484 the server's ID inside the backends are used. By default, all server IDs
8485 start at 1 in each backend, so the server ordering is enough. But in case of
8486 doubt, it is highly recommended to force server IDs using their "id" setting.
8487
8488 It is possible to restrict the conditions where a "stick store-request"
8489 statement will apply, using "if" or "unless" followed by a condition. This
8490 condition will be evaluated while parsing the request, so any criteria can be
8491 used. See section 7 for ACL based conditions.
8492
8493 There is no limit on the number of "stick store-request" statements, but
8494 there is a limit of 8 simultaneous stores per request or response. This
8495 makes it possible to store up to 8 criteria, all extracted from either the
8496 request or the response, regardless of the number of rules. Only the 8 first
8497 ones which match will be kept. Using this, it is possible to feed multiple
8498 tables at once in the hope to increase the chance to recognize a user on
Willy Tarreau9667a802013-12-09 12:52:13 +01008499 another protocol or access method. Using multiple store-request rules with
8500 the same table is possible and may be used to find the best criterion to rely
8501 on, by arranging the rules by decreasing preference order. Only the first
8502 extracted criterion for a given table will be stored. All subsequent store-
8503 request rules referencing the same table will be skipped and their ACLs will
8504 not be evaluated.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008505
8506 The "store-request" rules are evaluated once the server connection has been
8507 established, so that the table will contain the real server that processed
8508 the request.
8509
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008510 Note : Consider not using this feature in multi-process mode (nbproc > 1)
8511 unless you know what you do : memory is not shared between the
8512 processes, which can result in random behaviours.
8513
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008514 Example :
8515 # forward SMTP users to the same server they just used for POP in the
8516 # last 30 minutes
8517 backend pop
8518 mode tcp
8519 balance roundrobin
8520 stick store-request src
8521 stick-table type ip size 200k expire 30m
8522 server s1 192.168.1.1:110
8523 server s2 192.168.1.1:110
8524
8525 backend smtp
8526 mode tcp
8527 balance roundrobin
8528 stick match src table pop
8529 server s1 192.168.1.1:25
8530 server s2 192.168.1.1:25
8531
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008532 See also : "stick-table", "stick on", "nbproc", "bind-process" and section 7
Willy Tarreaube722a22014-06-13 16:31:59 +02008533 about ACLs and sample fetching.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008534
8535
Emeric Brun7c6b82e2010-09-24 16:34:28 +02008536stick-table type {ip | integer | string [len <length>] | binary [len <length>]}
Emeric Brunf099e792010-09-27 12:05:28 +02008537 size <size> [expire <expire>] [nopurge] [peers <peersect>]
8538 [store <data_type>]*
Godbach64cef792013-12-04 16:08:22 +08008539 Configure the stickiness table for the current section
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008540 May be used in sections : defaults | frontend | listen | backend
Willy Tarreauc00cdc22010-06-06 16:48:26 +02008541 no | yes | yes | yes
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008542
8543 Arguments :
8544 ip a table declared with "type ip" will only store IPv4 addresses.
8545 This form is very compact (about 50 bytes per entry) and allows
8546 very fast entry lookup and stores with almost no overhead. This
8547 is mainly used to store client source IP addresses.
8548
David du Colombier9a6d3c92011-03-17 10:40:24 +01008549 ipv6 a table declared with "type ipv6" will only store IPv6 addresses.
8550 This form is very compact (about 60 bytes per entry) and allows
8551 very fast entry lookup and stores with almost no overhead. This
8552 is mainly used to store client source IP addresses.
8553
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008554 integer a table declared with "type integer" will store 32bit integers
8555 which can represent a client identifier found in a request for
8556 instance.
8557
8558 string a table declared with "type string" will store substrings of up
8559 to <len> characters. If the string provided by the pattern
8560 extractor is larger than <len>, it will be truncated before
8561 being stored. During matching, at most <len> characters will be
8562 compared between the string in the table and the extracted
8563 pattern. When not specified, the string is automatically limited
Emeric Brun7c6b82e2010-09-24 16:34:28 +02008564 to 32 characters.
8565
8566 binary a table declared with "type binary" will store binary blocks
8567 of <len> bytes. If the block provided by the pattern
8568 extractor is larger than <len>, it will be truncated before
Willy Tarreaube722a22014-06-13 16:31:59 +02008569 being stored. If the block provided by the sample expression
Emeric Brun7c6b82e2010-09-24 16:34:28 +02008570 is shorter than <len>, it will be padded by 0. When not
8571 specified, the block is automatically limited to 32 bytes.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008572
8573 <length> is the maximum number of characters that will be stored in a
Emeric Brun7c6b82e2010-09-24 16:34:28 +02008574 "string" type table (See type "string" above). Or the number
8575 of bytes of the block in "binary" type table. Be careful when
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008576 changing this parameter as memory usage will proportionally
8577 increase.
8578
8579 <size> is the maximum number of entries that can fit in the table. This
Cyril Bonté78caf842010-03-10 22:41:43 +01008580 value directly impacts memory usage. Count approximately
8581 50 bytes per entry, plus the size of a string if any. The size
8582 supports suffixes "k", "m", "g" for 2^10, 2^20 and 2^30 factors.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008583
8584 [nopurge] indicates that we refuse to purge older entries when the table
8585 is full. When not specified and the table is full when haproxy
8586 wants to store an entry in it, it will flush a few of the oldest
8587 entries in order to release some space for the new ones. This is
8588 most often the desired behaviour. In some specific cases, it
8589 be desirable to refuse new entries instead of purging the older
8590 ones. That may be the case when the amount of data to store is
8591 far above the hardware limits and we prefer not to offer access
8592 to new clients than to reject the ones already connected. When
8593 using this parameter, be sure to properly set the "expire"
8594 parameter (see below).
8595
Emeric Brunf099e792010-09-27 12:05:28 +02008596 <peersect> is the name of the peers section to use for replication. Entries
8597 which associate keys to server IDs are kept synchronized with
8598 the remote peers declared in this section. All entries are also
8599 automatically learned from the local peer (old process) during a
8600 soft restart.
8601
Willy Tarreau1abc6732015-05-01 19:21:02 +02008602 NOTE : each peers section may be referenced only by tables
8603 belonging to the same unique process.
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008604
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008605 <expire> defines the maximum duration of an entry in the table since it
8606 was last created, refreshed or matched. The expiration delay is
8607 defined using the standard time format, similarly as the various
8608 timeouts. The maximum duration is slightly above 24 days. See
Jarno Huuskonene0ee0be2017-07-04 10:35:12 +03008609 section 2.4 for more information. If this delay is not specified,
Cyril Bontédc4d9032012-04-08 21:57:39 +02008610 the session won't automatically expire, but older entries will
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008611 be removed once full. Be sure not to use the "nopurge" parameter
8612 if not expiration delay is specified.
8613
Willy Tarreau08d5f982010-06-06 13:34:54 +02008614 <data_type> is used to store additional information in the stick-table. This
8615 may be used by ACLs in order to control various criteria related
8616 to the activity of the client matching the stick-table. For each
8617 item specified here, the size of each entry will be inflated so
Willy Tarreauc9705a12010-07-27 20:05:50 +02008618 that the additional data can fit. Several data types may be
8619 stored with an entry. Multiple data types may be specified after
8620 the "store" keyword, as a comma-separated list. Alternatively,
8621 it is possible to repeat the "store" keyword followed by one or
8622 several data types. Except for the "server_id" type which is
8623 automatically detected and enabled, all data types must be
8624 explicitly declared to be stored. If an ACL references a data
8625 type which is not stored, the ACL will simply not match. Some
8626 data types require an argument which must be passed just after
8627 the type between parenthesis. See below for the supported data
8628 types and their arguments.
8629
8630 The data types that can be stored with an entry are the following :
8631 - server_id : this is an integer which holds the numeric ID of the server a
8632 request was assigned to. It is used by the "stick match", "stick store",
8633 and "stick on" rules. It is automatically enabled when referenced.
8634
8635 - gpc0 : first General Purpose Counter. It is a positive 32-bit integer
8636 integer which may be used for anything. Most of the time it will be used
8637 to put a special tag on some entries, for instance to note that a
8638 specific behaviour was detected and must be known for future matches.
8639
Willy Tarreauba2ffd12013-05-29 15:54:14 +02008640 - gpc0_rate(<period>) : increment rate of the first General Purpose Counter
8641 over a period. It is a positive 32-bit integer integer which may be used
8642 for anything. Just like <gpc0>, it counts events, but instead of keeping
8643 a cumulative count, it maintains the rate at which the counter is
8644 incremented. Most of the time it will be used to measure the frequency of
8645 occurrence of certain events (eg: requests to a specific URL).
8646
Willy Tarreauc9705a12010-07-27 20:05:50 +02008647 - conn_cnt : Connection Count. It is a positive 32-bit integer which counts
8648 the absolute number of connections received from clients which matched
8649 this entry. It does not mean the connections were accepted, just that
8650 they were received.
8651
8652 - conn_cur : Current Connections. It is a positive 32-bit integer which
8653 stores the concurrent connection counts for the entry. It is incremented
8654 once an incoming connection matches the entry, and decremented once the
8655 connection leaves. That way it is possible to know at any time the exact
8656 number of concurrent connections for an entry.
8657
8658 - conn_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8659 integer parameter <period> which indicates in milliseconds the length
8660 of the period over which the average is measured. It reports the average
8661 incoming connection rate over that period, in connections per period. The
8662 result is an integer which can be matched using ACLs.
8663
8664 - sess_cnt : Session Count. It is a positive 32-bit integer which counts
8665 the absolute number of sessions received from clients which matched this
8666 entry. A session is a connection that was accepted by the layer 4 rules.
8667
8668 - sess_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8669 integer parameter <period> which indicates in milliseconds the length
8670 of the period over which the average is measured. It reports the average
8671 incoming session rate over that period, in sessions per period. The
8672 result is an integer which can be matched using ACLs.
8673
8674 - http_req_cnt : HTTP request Count. It is a positive 32-bit integer which
8675 counts the absolute number of HTTP requests received from clients which
8676 matched this entry. It does not matter whether they are valid requests or
8677 not. Note that this is different from sessions when keep-alive is used on
8678 the client side.
8679
8680 - http_req_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8681 integer parameter <period> which indicates in milliseconds the length
8682 of the period over which the average is measured. It reports the average
8683 HTTP request rate over that period, in requests per period. The result is
8684 an integer which can be matched using ACLs. It does not matter whether
8685 they are valid requests or not. Note that this is different from sessions
8686 when keep-alive is used on the client side.
8687
8688 - http_err_cnt : HTTP Error Count. It is a positive 32-bit integer which
8689 counts the absolute number of HTTP requests errors induced by clients
8690 which matched this entry. Errors are counted on invalid and truncated
8691 requests, as well as on denied or tarpitted requests, and on failed
8692 authentications. If the server responds with 4xx, then the request is
8693 also counted as an error since it's an error triggered by the client
8694 (eg: vulnerability scan).
8695
8696 - http_err_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8697 integer parameter <period> which indicates in milliseconds the length
8698 of the period over which the average is measured. It reports the average
8699 HTTP request error rate over that period, in requests per period (see
8700 http_err_cnt above for what is accounted as an error). The result is an
8701 integer which can be matched using ACLs.
8702
8703 - bytes_in_cnt : client to server byte count. It is a positive 64-bit
8704 integer which counts the cumulated amount of bytes received from clients
8705 which matched this entry. Headers are included in the count. This may be
8706 used to limit abuse of upload features on photo or video servers.
8707
8708 - bytes_in_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8709 integer parameter <period> which indicates in milliseconds the length
8710 of the period over which the average is measured. It reports the average
8711 incoming bytes rate over that period, in bytes per period. It may be used
8712 to detect users which upload too much and too fast. Warning: with large
8713 uploads, it is possible that the amount of uploaded data will be counted
8714 once upon termination, thus causing spikes in the average transfer speed
8715 instead of having a smooth one. This may partially be smoothed with
8716 "option contstats" though this is not perfect yet. Use of byte_in_cnt is
8717 recommended for better fairness.
8718
8719 - bytes_out_cnt : server to client byte count. It is a positive 64-bit
8720 integer which counts the cumulated amount of bytes sent to clients which
8721 matched this entry. Headers are included in the count. This may be used
8722 to limit abuse of bots sucking the whole site.
8723
8724 - bytes_out_rate(<period>) : frequency counter (takes 12 bytes). It takes
8725 an integer parameter <period> which indicates in milliseconds the length
8726 of the period over which the average is measured. It reports the average
8727 outgoing bytes rate over that period, in bytes per period. It may be used
8728 to detect users which download too much and too fast. Warning: with large
8729 transfers, it is possible that the amount of transferred data will be
8730 counted once upon termination, thus causing spikes in the average
8731 transfer speed instead of having a smooth one. This may partially be
8732 smoothed with "option contstats" though this is not perfect yet. Use of
8733 byte_out_cnt is recommended for better fairness.
Willy Tarreau08d5f982010-06-06 13:34:54 +02008734
Willy Tarreauc00cdc22010-06-06 16:48:26 +02008735 There is only one stick-table per proxy. At the moment of writing this doc,
8736 it does not seem useful to have multiple tables per proxy. If this happens
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008737 to be required, simply create a dummy backend with a stick-table in it and
8738 reference it.
8739
8740 It is important to understand that stickiness based on learning information
8741 has some limitations, including the fact that all learned associations are
Baptiste Assmann123ff042016-03-06 23:29:28 +01008742 lost upon restart unless peers are properly configured to transfer such
8743 information upon restart (recommended). In general it can be good as a
8744 complement but not always as an exclusive stickiness.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008745
Willy Tarreauc9705a12010-07-27 20:05:50 +02008746 Last, memory requirements may be important when storing many data types.
8747 Indeed, storing all indicators above at once in each entry requires 116 bytes
8748 per entry, or 116 MB for a 1-million entries table. This is definitely not
8749 something that can be ignored.
8750
8751 Example:
8752 # Keep track of counters of up to 1 million IP addresses over 5 minutes
8753 # and store a general purpose counter and the average connection rate
8754 # computed over a sliding window of 30 seconds.
8755 stick-table type ip size 1m expire 5m store gpc0,conn_rate(30s)
8756
Jarno Huuskonene0ee0be2017-07-04 10:35:12 +03008757 See also : "stick match", "stick on", "stick store-request", section 2.4
David du Colombiera13d1b92011-03-17 10:40:22 +01008758 about time format and section 7 about ACLs.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008759
8760
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008761stick store-response <pattern> [table <table>] [{if | unless} <condition>]
Baptiste Assmann2f2d2ec2016-03-06 23:27:24 +01008762 Define a response pattern used to create an entry in a stickiness table
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008763 May be used in sections : defaults | frontend | listen | backend
8764 no | no | yes | yes
8765
8766 Arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02008767 <pattern> is a sample expression rule as described in section 7.3. It
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008768 describes what elements of the response or connection will
8769 be analysed, extracted and stored in the table once a
8770 server is selected.
8771
8772 <table> is an optional stickiness table name. If unspecified, the same
8773 backend's table is used. A stickiness table is declared using
8774 the "stick-table" statement.
8775
8776 <cond> is an optional storage condition. It makes it possible to store
8777 certain criteria only when some conditions are met (or not met).
8778 For instance, it could be used to store the SSL session ID only
8779 when the response is a SSL server hello.
8780
8781 Some protocols or applications require complex stickiness rules and cannot
8782 always simply rely on cookies nor hashing. The "stick store-response"
8783 statement describes a rule to decide what to extract from the response and
8784 when to do it, in order to store it into a stickiness table for further
8785 requests to match it using the "stick match" statement. Obviously the
8786 extracted part must make sense and have a chance to be matched in a further
Cyril Bonté108cf6e2012-04-21 23:30:29 +02008787 request. Storing an ID found in a header of a response makes sense.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008788 See section 7 for a complete list of possible patterns and transformation
8789 rules.
8790
8791 The table has to be declared using the "stick-table" statement. It must be of
8792 a type compatible with the pattern. By default it is the one which is present
8793 in the same backend. It is possible to share a table with other backends by
8794 referencing it using the "table" keyword. If another table is referenced,
8795 the server's ID inside the backends are used. By default, all server IDs
8796 start at 1 in each backend, so the server ordering is enough. But in case of
8797 doubt, it is highly recommended to force server IDs using their "id" setting.
8798
8799 It is possible to restrict the conditions where a "stick store-response"
8800 statement will apply, using "if" or "unless" followed by a condition. This
8801 condition will be evaluated while parsing the response, so any criteria can
8802 be used. See section 7 for ACL based conditions.
8803
8804 There is no limit on the number of "stick store-response" statements, but
8805 there is a limit of 8 simultaneous stores per request or response. This
8806 makes it possible to store up to 8 criteria, all extracted from either the
8807 request or the response, regardless of the number of rules. Only the 8 first
8808 ones which match will be kept. Using this, it is possible to feed multiple
8809 tables at once in the hope to increase the chance to recognize a user on
Willy Tarreau9667a802013-12-09 12:52:13 +01008810 another protocol or access method. Using multiple store-response rules with
8811 the same table is possible and may be used to find the best criterion to rely
8812 on, by arranging the rules by decreasing preference order. Only the first
8813 extracted criterion for a given table will be stored. All subsequent store-
8814 response rules referencing the same table will be skipped and their ACLs will
8815 not be evaluated. However, even if a store-request rule references a table, a
8816 store-response rule may also use the same table. This means that each table
8817 may learn exactly one element from the request and one element from the
8818 response at once.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008819
8820 The table will contain the real server that processed the request.
8821
8822 Example :
8823 # Learn SSL session ID from both request and response and create affinity.
8824 backend https
8825 mode tcp
8826 balance roundrobin
Cyril Bontédc4d9032012-04-08 21:57:39 +02008827 # maximum SSL session ID length is 32 bytes.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008828 stick-table type binary len 32 size 30k expire 30m
Cyril Bonté108cf6e2012-04-21 23:30:29 +02008829
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008830 acl clienthello req_ssl_hello_type 1
8831 acl serverhello rep_ssl_hello_type 2
8832
8833 # use tcp content accepts to detects ssl client and server hello.
8834 tcp-request inspect-delay 5s
8835 tcp-request content accept if clienthello
8836
8837 # no timeout on response inspect delay by default.
8838 tcp-response content accept if serverhello
Cyril Bonté108cf6e2012-04-21 23:30:29 +02008839
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008840 # SSL session ID (SSLID) may be present on a client or server hello.
8841 # Its length is coded on 1 byte at offset 43 and its value starts
8842 # at offset 44.
8843
8844 # Match and learn on request if client hello.
8845 stick on payload_lv(43,1) if clienthello
8846
8847 # Learn on response if server hello.
8848 stick store-response payload_lv(43,1) if serverhello
Cyril Bontédc4d9032012-04-08 21:57:39 +02008849
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008850 server s1 192.168.1.1:443
8851 server s2 192.168.1.1:443
8852
8853 See also : "stick-table", "stick on", and section 7 about ACLs and pattern
8854 extraction.
8855
8856
Willy Tarreau938c7fe2014-04-25 14:21:39 +02008857tcp-check connect [params*]
8858 Opens a new connection
8859 May be used in sections: defaults | frontend | listen | backend
8860 no | no | yes | yes
8861
8862 When an application lies on more than a single TCP port or when HAProxy
8863 load-balance many services in a single backend, it makes sense to probe all
8864 the services individually before considering a server as operational.
8865
8866 When there are no TCP port configured on the server line neither server port
8867 directive, then the 'tcp-check connect port <port>' must be the first step
8868 of the sequence.
8869
8870 In a tcp-check ruleset a 'connect' is required, it is also mandatory to start
8871 the ruleset with a 'connect' rule. Purpose is to ensure admin know what they
8872 do.
8873
8874 Parameters :
8875 They are optional and can be used to describe how HAProxy should open and
8876 use the TCP connection.
8877
8878 port if not set, check port or server port is used.
8879 It tells HAProxy where to open the connection to.
8880 <port> must be a valid TCP port source integer, from 1 to 65535.
8881
8882 send-proxy send a PROXY protocol string
8883
8884 ssl opens a ciphered connection
8885
8886 Examples:
8887 # check HTTP and HTTPs services on a server.
8888 # first open port 80 thanks to server line port directive, then
8889 # tcp-check opens port 443, ciphered and run a request on it:
8890 option tcp-check
8891 tcp-check connect
8892 tcp-check send GET\ /\ HTTP/1.0\r\n
8893 tcp-check send Host:\ haproxy.1wt.eu\r\n
8894 tcp-check send \r\n
8895 tcp-check expect rstring (2..|3..)
8896 tcp-check connect port 443 ssl
8897 tcp-check send GET\ /\ HTTP/1.0\r\n
8898 tcp-check send Host:\ haproxy.1wt.eu\r\n
8899 tcp-check send \r\n
8900 tcp-check expect rstring (2..|3..)
8901 server www 10.0.0.1 check port 80
8902
8903 # check both POP and IMAP from a single server:
8904 option tcp-check
8905 tcp-check connect port 110
8906 tcp-check expect string +OK\ POP3\ ready
8907 tcp-check connect port 143
8908 tcp-check expect string *\ OK\ IMAP4\ ready
8909 server mail 10.0.0.1 check
8910
8911 See also : "option tcp-check", "tcp-check send", "tcp-check expect"
8912
8913
8914tcp-check expect [!] <match> <pattern>
8915 Specify data to be collected and analysed during a generic health check
8916 May be used in sections: defaults | frontend | listen | backend
8917 no | no | yes | yes
8918
8919 Arguments :
8920 <match> is a keyword indicating how to look for a specific pattern in the
8921 response. The keyword may be one of "string", "rstring" or
8922 binary.
8923 The keyword may be preceded by an exclamation mark ("!") to negate
8924 the match. Spaces are allowed between the exclamation mark and the
8925 keyword. See below for more details on the supported keywords.
8926
8927 <pattern> is the pattern to look for. It may be a string or a regular
8928 expression. If the pattern contains spaces, they must be escaped
8929 with the usual backslash ('\').
8930 If the match is set to binary, then the pattern must be passed as
8931 a serie of hexadecimal digits in an even number. Each sequence of
8932 two digits will represent a byte. The hexadecimal digits may be
8933 used upper or lower case.
8934
8935
8936 The available matches are intentionally similar to their http-check cousins :
8937
8938 string <string> : test the exact string matches in the response buffer.
8939 A health check response will be considered valid if the
8940 response's buffer contains this exact string. If the
8941 "string" keyword is prefixed with "!", then the response
8942 will be considered invalid if the body contains this
8943 string. This can be used to look for a mandatory pattern
8944 in a protocol response, or to detect a failure when a
8945 specific error appears in a protocol banner.
8946
8947 rstring <regex> : test a regular expression on the response buffer.
8948 A health check response will be considered valid if the
8949 response's buffer matches this expression. If the
8950 "rstring" keyword is prefixed with "!", then the response
8951 will be considered invalid if the body matches the
8952 expression.
8953
8954 binary <hexstring> : test the exact string in its hexadecimal form matches
8955 in the response buffer. A health check response will
8956 be considered valid if the response's buffer contains
8957 this exact hexadecimal string.
8958 Purpose is to match data on binary protocols.
8959
8960 It is important to note that the responses will be limited to a certain size
8961 defined by the global "tune.chksize" option, which defaults to 16384 bytes.
8962 Thus, too large responses may not contain the mandatory pattern when using
8963 "string", "rstring" or binary. If a large response is absolutely required, it
8964 is possible to change the default max size by setting the global variable.
8965 However, it is worth keeping in mind that parsing very large responses can
8966 waste some CPU cycles, especially when regular expressions are used, and that
8967 it is always better to focus the checks on smaller resources. Also, in its
8968 current state, the check will not find any string nor regex past a null
8969 character in the response. Similarly it is not possible to request matching
8970 the null character.
8971
8972 Examples :
8973 # perform a POP check
8974 option tcp-check
8975 tcp-check expect string +OK\ POP3\ ready
8976
8977 # perform an IMAP check
8978 option tcp-check
8979 tcp-check expect string *\ OK\ IMAP4\ ready
8980
8981 # look for the redis master server
8982 option tcp-check
8983 tcp-check send PING\r\n
Baptiste Assmanna3322992015-08-04 10:12:18 +02008984 tcp-check expect string +PONG
Willy Tarreau938c7fe2014-04-25 14:21:39 +02008985 tcp-check send info\ replication\r\n
8986 tcp-check expect string role:master
8987 tcp-check send QUIT\r\n
8988 tcp-check expect string +OK
8989
8990
8991 See also : "option tcp-check", "tcp-check connect", "tcp-check send",
8992 "tcp-check send-binary", "http-check expect", tune.chksize
8993
8994
8995tcp-check send <data>
8996 Specify a string to be sent as a question during a generic health check
8997 May be used in sections: defaults | frontend | listen | backend
8998 no | no | yes | yes
8999
9000 <data> : the data to be sent as a question during a generic health check
9001 session. For now, <data> must be a string.
9002
9003 Examples :
9004 # look for the redis master server
9005 option tcp-check
9006 tcp-check send info\ replication\r\n
9007 tcp-check expect string role:master
9008
9009 See also : "option tcp-check", "tcp-check connect", "tcp-check expect",
9010 "tcp-check send-binary", tune.chksize
9011
9012
9013tcp-check send-binary <hexastring>
9014 Specify an hexa digits string to be sent as a binary question during a raw
9015 tcp health check
9016 May be used in sections: defaults | frontend | listen | backend
9017 no | no | yes | yes
9018
9019 <data> : the data to be sent as a question during a generic health check
9020 session. For now, <data> must be a string.
9021 <hexastring> : test the exact string in its hexadecimal form matches in the
9022 response buffer. A health check response will be considered
9023 valid if the response's buffer contains this exact
9024 hexadecimal string.
9025 Purpose is to send binary data to ask on binary protocols.
9026
9027 Examples :
9028 # redis check in binary
9029 option tcp-check
9030 tcp-check send-binary 50494e470d0a # PING\r\n
9031 tcp-check expect binary 2b504F4e47 # +PONG
9032
9033
9034 See also : "option tcp-check", "tcp-check connect", "tcp-check expect",
9035 "tcp-check send", tune.chksize
9036
9037
Willy Tarreaue9656522010-08-17 15:40:09 +02009038tcp-request connection <action> [{if | unless} <condition>]
9039 Perform an action on an incoming connection depending on a layer 4 condition
Willy Tarreau1a687942010-05-23 22:40:30 +02009040 May be used in sections : defaults | frontend | listen | backend
9041 no | yes | yes | no
Willy Tarreaue9656522010-08-17 15:40:09 +02009042 Arguments :
Willy Tarreauc870bfd2015-09-28 18:47:38 +02009043 <action> defines the action to perform if the condition applies. See
9044 below.
Willy Tarreau1a687942010-05-23 22:40:30 +02009045
Willy Tarreaue9656522010-08-17 15:40:09 +02009046 <condition> is a standard layer4-only ACL-based condition (see section 7).
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009047
9048 Immediately after acceptance of a new incoming connection, it is possible to
9049 evaluate some conditions to decide whether this connection must be accepted
Willy Tarreaue9656522010-08-17 15:40:09 +02009050 or dropped or have its counters tracked. Those conditions cannot make use of
9051 any data contents because the connection has not been read from yet, and the
9052 buffers are not yet allocated. This is used to selectively and very quickly
9053 accept or drop connections from various sources with a very low overhead. If
9054 some contents need to be inspected in order to take the decision, the
9055 "tcp-request content" statements must be used instead.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009056
Willy Tarreaue9656522010-08-17 15:40:09 +02009057 The "tcp-request connection" rules are evaluated in their exact declaration
9058 order. If no rule matches or if there is no rule, the default action is to
9059 accept the incoming connection. There is no specific limit to the number of
9060 rules which may be inserted.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009061
Willy Tarreaua9083d02015-05-08 15:27:59 +02009062 Four types of actions are supported :
Willy Tarreaue9656522010-08-17 15:40:09 +02009063 - accept :
9064 accepts the connection if the condition is true (when used with "if")
9065 or false (when used with "unless"). The first such rule executed ends
9066 the rules evaluation.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009067
Willy Tarreaue9656522010-08-17 15:40:09 +02009068 - reject :
9069 rejects the connection if the condition is true (when used with "if")
9070 or false (when used with "unless"). The first such rule executed ends
9071 the rules evaluation. Rejected connections do not even become a
9072 session, which is why they are accounted separately for in the stats,
9073 as "denied connections". They are not considered for the session
9074 rate-limit and are not logged either. The reason is that these rules
9075 should only be used to filter extremely high connection rates such as
9076 the ones encountered during a massive DDoS attack. Under these extreme
9077 conditions, the simple action of logging each event would make the
9078 system collapse and would considerably lower the filtering capacity. If
9079 logging is absolutely desired, then "tcp-request content" rules should
Willy Tarreau4f614292016-10-21 17:49:36 +02009080 be used instead, as "tcp-request session" rules will not log either.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009081
Willy Tarreau4f0d9192013-06-11 20:40:55 +02009082 - expect-proxy layer4 :
9083 configures the client-facing connection to receive a PROXY protocol
9084 header before any byte is read from the socket. This is equivalent to
9085 having the "accept-proxy" keyword on the "bind" line, except that using
9086 the TCP rule allows the PROXY protocol to be accepted only for certain
9087 IP address ranges using an ACL. This is convenient when multiple layers
9088 of load balancers are passed through by traffic coming from public
9089 hosts.
9090
Bertrand Jacquin90759682016-06-06 15:35:39 +01009091 - expect-netscaler-cip layer4 :
9092 configures the client-facing connection to receive a NetScaler Client
9093 IP insertion protocol header before any byte is read from the socket.
9094 This is equivalent to having the "accept-netscaler-cip" keyword on the
9095 "bind" line, except that using the TCP rule allows the PROXY protocol
9096 to be accepted only for certain IP address ranges using an ACL. This
9097 is convenient when multiple layers of load balancers are passed
9098 through by traffic coming from public hosts.
9099
Willy Tarreau18bf01e2014-06-13 16:18:52 +02009100 - capture <sample> len <length> :
9101 This only applies to "tcp-request content" rules. It captures sample
9102 expression <sample> from the request buffer, and converts it to a
9103 string of at most <len> characters. The resulting string is stored into
9104 the next request "capture" slot, so it will possibly appear next to
9105 some captured HTTP headers. It will then automatically appear in the
9106 logs, and it will be possible to extract it using sample fetch rules to
9107 feed it into headers or anything. The length should be limited given
9108 that this size will be allocated for each capture during the whole
Willy Tarreaua9083d02015-05-08 15:27:59 +02009109 session life. Please check section 7.3 (Fetching samples) and "capture
9110 request header" for more information.
Willy Tarreau18bf01e2014-06-13 16:18:52 +02009111
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009112 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] :
Willy Tarreaue9656522010-08-17 15:40:09 +02009113 enables tracking of sticky counters from current connection. These
Willy Tarreau09448f72014-06-25 18:12:15 +02009114 rules do not stop evaluation and do not change default action. 3 sets
Willy Tarreaue9656522010-08-17 15:40:09 +02009115 of counters may be simultaneously tracked by the same connection. The
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009116 first "track-sc0" rule executed enables tracking of the counters of the
9117 specified table as the first set. The first "track-sc1" rule executed
Willy Tarreaue9656522010-08-17 15:40:09 +02009118 enables tracking of the counters of the specified table as the second
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009119 set. The first "track-sc2" rule executed enables tracking of the
9120 counters of the specified table as the third set. It is a recommended
9121 practice to use the first set of counters for the per-frontend counters
9122 and the second set for the per-backend ones. But this is just a
9123 guideline, all may be used everywhere.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009124
Willy Tarreaue9656522010-08-17 15:40:09 +02009125 These actions take one or two arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02009126 <key> is mandatory, and is a sample expression rule as described
Willy Tarreau74ca5042013-06-11 23:12:07 +02009127 in section 7.3. It describes what elements of the incoming
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009128 request or connection will be analysed, extracted, combined,
9129 and used to select which table entry to update the counters.
9130 Note that "tcp-request connection" cannot use content-based
9131 fetches.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009132
Willy Tarreaue9656522010-08-17 15:40:09 +02009133 <table> is an optional table to be used instead of the default one,
9134 which is the stick-table declared in the current proxy. All
9135 the counters for the matches and updates for the key will
9136 then be performed in that table until the session ends.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009137
Willy Tarreaue9656522010-08-17 15:40:09 +02009138 Once a "track-sc*" rule is executed, the key is looked up in the table
9139 and if it is not found, an entry is allocated for it. Then a pointer to
9140 that entry is kept during all the session's life, and this entry's
9141 counters are updated as often as possible, every time the session's
9142 counters are updated, and also systematically when the session ends.
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009143 Counters are only updated for events that happen after the tracking has
9144 been started. For example, connection counters will not be updated when
9145 tracking layer 7 information, since the connection event happens before
9146 layer7 information is extracted.
9147
Willy Tarreaue9656522010-08-17 15:40:09 +02009148 If the entry tracks concurrent connection counters, one connection is
9149 counted for as long as the entry is tracked, and the entry will not
9150 expire during that time. Tracking counters also provides a performance
9151 advantage over just checking the keys, because only one table lookup is
9152 performed for all ACL checks that make use of it.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009153
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02009154 - sc-inc-gpc0(<sc-id>):
9155 The "sc-inc-gpc0" increments the GPC0 counter according to the sticky
9156 counter designated by <sc-id>. If an error occurs, this action silently
9157 fails and the actions evaluation continues.
9158
Thierry FOURNIER236657b2015-08-19 08:25:14 +02009159 - sc-set-gpt0(<sc-id>) <int>:
9160 This action sets the GPT0 tag according to the sticky counter designated
9161 by <sc-id> and the value of <int>. The expected result is a boolean. If
9162 an error occurs, this action silently fails and the actions evaluation
9163 continues.
9164
William Lallemand2e785f22016-05-25 01:48:42 +02009165 - set-src <expr> :
9166 Is used to set the source IP address to the value of specified
9167 expression. Useful if you want to mask source IP for privacy.
9168 If you want to provide an IP from a HTTP header use "http-request
9169 set-src"
9170
9171 <expr> Is a standard HAProxy expression formed by a sample-fetch
9172 followed by some converters.
9173
9174 Example:
9175
9176 tcp-request connection set-src src,ipmask(24)
9177
Willy Tarreau0c630532016-10-21 17:52:58 +02009178 When possible, set-src preserves the original source port as long as the
9179 address family allows it, otherwise the source port is set to 0.
William Lallemand2e785f22016-05-25 01:48:42 +02009180
William Lallemand44be6402016-05-25 01:51:35 +02009181 - set-src-port <expr> :
9182 Is used to set the source port address to the value of specified
9183 expression.
9184
9185 <expr> Is a standard HAProxy expression formed by a sample-fetch
9186 followed by some converters.
9187
9188 Example:
9189
9190 tcp-request connection set-src-port int(4000)
9191
Willy Tarreau0c630532016-10-21 17:52:58 +02009192 When possible, set-src-port preserves the original source address as long
9193 as the address family supports a port, otherwise it forces the source
9194 address to IPv4 "0.0.0.0" before rewriting the port.
William Lallemand44be6402016-05-25 01:51:35 +02009195
William Lallemand13e9b0c2016-05-25 02:34:07 +02009196 - set-dst <expr> :
9197 Is used to set the destination IP address to the value of specified
9198 expression. Useful if you want to mask IP for privacy in log.
9199 If you want to provide an IP from a HTTP header use "http-request
9200 set-dst". If you want to connect to the new address/port, use
9201 '0.0.0.0:0' as a server address in the backend.
9202
9203 <expr> Is a standard HAProxy expression formed by a sample-fetch
9204 followed by some converters.
9205
9206 Example:
9207
9208 tcp-request connection set-dst dst,ipmask(24)
9209 tcp-request connection set-dst ipv4(10.0.0.1)
9210
Willy Tarreau0c630532016-10-21 17:52:58 +02009211 When possible, set-dst preserves the original destination port as long as
9212 the address family allows it, otherwise the destination port is set to 0.
9213
William Lallemand13e9b0c2016-05-25 02:34:07 +02009214 - set-dst-port <expr> :
9215 Is used to set the destination port address to the value of specified
9216 expression. If you want to connect to the new address/port, use
9217 '0.0.0.0:0' as a server address in the backend.
9218
9219
9220 <expr> Is a standard HAProxy expression formed by a sample-fetch
9221 followed by some converters.
9222
9223 Example:
9224
9225 tcp-request connection set-dst-port int(4000)
9226
Willy Tarreau0c630532016-10-21 17:52:58 +02009227 When possible, set-dst-port preserves the original destination address as
9228 long as the address family supports a port, otherwise it forces the
9229 destination address to IPv4 "0.0.0.0" before rewriting the port.
9230
Willy Tarreau2d392c22015-08-24 01:43:45 +02009231 - "silent-drop" :
9232 This stops the evaluation of the rules and makes the client-facing
9233 connection suddenly disappear using a system-dependant way that tries
9234 to prevent the client from being notified. The effect it then that the
9235 client still sees an established connection while there's none on
9236 HAProxy. The purpose is to achieve a comparable effect to "tarpit"
9237 except that it doesn't use any local resource at all on the machine
9238 running HAProxy. It can resist much higher loads than "tarpit", and
9239 slow down stronger attackers. It is important to undestand the impact
9240 of using this mechanism. All stateful equipments placed between the
9241 client and HAProxy (firewalls, proxies, load balancers) will also keep
9242 the established connection for a long time and may suffer from this
9243 action. On modern Linux systems running with enough privileges, the
9244 TCP_REPAIR socket option is used to block the emission of a TCP
9245 reset. On other systems, the socket's TTL is reduced to 1 so that the
9246 TCP reset doesn't pass the first router, though it's still delivered to
9247 local networks. Do not use it unless you fully understand how it works.
9248
Willy Tarreaue9656522010-08-17 15:40:09 +02009249 Note that the "if/unless" condition is optional. If no condition is set on
9250 the action, it is simply performed unconditionally. That can be useful for
9251 "track-sc*" actions as well as for changing the default action to a reject.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009252
Willy Tarreaue9656522010-08-17 15:40:09 +02009253 Example: accept all connections from white-listed hosts, reject too fast
9254 connection without counting them, and track accepted connections.
9255 This results in connection rate being capped from abusive sources.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009256
Willy Tarreaue9656522010-08-17 15:40:09 +02009257 tcp-request connection accept if { src -f /etc/haproxy/whitelist.lst }
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009258 tcp-request connection reject if { src_conn_rate gt 10 }
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009259 tcp-request connection track-sc0 src
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009260
Willy Tarreaue9656522010-08-17 15:40:09 +02009261 Example: accept all connections from white-listed hosts, count all other
9262 connections and reject too fast ones. This results in abusive ones
9263 being blocked as long as they don't slow down.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009264
Willy Tarreaue9656522010-08-17 15:40:09 +02009265 tcp-request connection accept if { src -f /etc/haproxy/whitelist.lst }
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009266 tcp-request connection track-sc0 src
9267 tcp-request connection reject if { sc0_conn_rate gt 10 }
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009268
Willy Tarreau4f0d9192013-06-11 20:40:55 +02009269 Example: enable the PROXY protocol for traffic coming from all known proxies.
9270
9271 tcp-request connection expect-proxy layer4 if { src -f proxies.lst }
9272
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009273 See section 7 about ACL usage.
9274
Willy Tarreau4f614292016-10-21 17:49:36 +02009275 See also : "tcp-request session", "tcp-request content", "stick-table"
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009276
9277
Willy Tarreaue9656522010-08-17 15:40:09 +02009278tcp-request content <action> [{if | unless} <condition>]
9279 Perform an action on a new session depending on a layer 4-7 condition
Willy Tarreau62644772008-07-16 18:36:06 +02009280 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaufb356202010-08-03 14:02:05 +02009281 no | yes | yes | yes
Willy Tarreaue9656522010-08-17 15:40:09 +02009282 Arguments :
Willy Tarreauc870bfd2015-09-28 18:47:38 +02009283 <action> defines the action to perform if the condition applies. See
9284 below.
Willy Tarreau62644772008-07-16 18:36:06 +02009285
Willy Tarreaue9656522010-08-17 15:40:09 +02009286 <condition> is a standard layer 4-7 ACL-based condition (see section 7).
Willy Tarreau62644772008-07-16 18:36:06 +02009287
Willy Tarreaue9656522010-08-17 15:40:09 +02009288 A request's contents can be analysed at an early stage of request processing
9289 called "TCP content inspection". During this stage, ACL-based rules are
9290 evaluated every time the request contents are updated, until either an
9291 "accept" or a "reject" rule matches, or the TCP request inspection delay
9292 expires with no matching rule.
Willy Tarreau62644772008-07-16 18:36:06 +02009293
Willy Tarreaue9656522010-08-17 15:40:09 +02009294 The first difference between these rules and "tcp-request connection" rules
9295 is that "tcp-request content" rules can make use of contents to take a
9296 decision. Most often, these decisions will consider a protocol recognition or
9297 validity. The second difference is that content-based rules can be used in
Willy Tarreauf3338342014-01-28 21:40:28 +01009298 both frontends and backends. In case of HTTP keep-alive with the client, all
9299 tcp-request content rules are evaluated again, so haproxy keeps a record of
9300 what sticky counters were assigned by a "tcp-request connection" versus a
9301 "tcp-request content" rule, and flushes all the content-related ones after
9302 processing an HTTP request, so that they may be evaluated again by the rules
9303 being evaluated again for the next request. This is of particular importance
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009304 when the rule tracks some L7 information or when it is conditioned by an
Willy Tarreauf3338342014-01-28 21:40:28 +01009305 L7-based ACL, since tracking may change between requests.
Willy Tarreau62644772008-07-16 18:36:06 +02009306
Willy Tarreaue9656522010-08-17 15:40:09 +02009307 Content-based rules are evaluated in their exact declaration order. If no
9308 rule matches or if there is no rule, the default action is to accept the
9309 contents. There is no specific limit to the number of rules which may be
9310 inserted.
Willy Tarreau62644772008-07-16 18:36:06 +02009311
Thierry FOURNIER236657b2015-08-19 08:25:14 +02009312 Several types of actions are supported :
Willy Tarreau18bf01e2014-06-13 16:18:52 +02009313 - accept : the request is accepted
9314 - reject : the request is rejected and the connection is closed
9315 - capture : the specified sample expression is captured
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009316 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>]
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02009317 - sc-inc-gpc0(<sc-id>)
Thierry Fournierb9125672016-03-29 19:34:37 +02009318 - sc-set-gpt0(<sc-id>) <int>
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009319 - set-var(<var-name>) <expr>
Christopher Faulet85d79c92016-11-09 16:54:56 +01009320 - unset-var(<var-name>)
Willy Tarreau2d392c22015-08-24 01:43:45 +02009321 - silent-drop
Christopher Faulet76c09ef2017-09-21 11:03:52 +02009322 - send-spoe-group <engin-name> <group-name>
Willy Tarreau62644772008-07-16 18:36:06 +02009323
Willy Tarreaue9656522010-08-17 15:40:09 +02009324 They have the same meaning as their counter-parts in "tcp-request connection"
9325 so please refer to that section for a complete description.
Willy Tarreau62644772008-07-16 18:36:06 +02009326
Willy Tarreauf3338342014-01-28 21:40:28 +01009327 While there is nothing mandatory about it, it is recommended to use the
9328 track-sc0 in "tcp-request connection" rules, track-sc1 for "tcp-request
9329 content" rules in the frontend, and track-sc2 for "tcp-request content"
9330 rules in the backend, because that makes the configuration more readable
9331 and easier to troubleshoot, but this is just a guideline and all counters
9332 may be used everywhere.
Willy Tarreau62644772008-07-16 18:36:06 +02009333
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01009334 Note that the "if/unless" condition is optional. If no condition is set on
Willy Tarreaue9656522010-08-17 15:40:09 +02009335 the action, it is simply performed unconditionally. That can be useful for
9336 "track-sc*" actions as well as for changing the default action to a reject.
Willy Tarreau62644772008-07-16 18:36:06 +02009337
Willy Tarreaue9656522010-08-17 15:40:09 +02009338 It is perfectly possible to match layer 7 contents with "tcp-request content"
Willy Tarreauc0239e02012-04-16 14:42:55 +02009339 rules, since HTTP-specific ACL matches are able to preliminarily parse the
9340 contents of a buffer before extracting the required data. If the buffered
9341 contents do not parse as a valid HTTP message, then the ACL does not match.
9342 The parser which is involved there is exactly the same as for all other HTTP
Willy Tarreauf3338342014-01-28 21:40:28 +01009343 processing, so there is no risk of parsing something differently. In an HTTP
9344 backend connected to from an HTTP frontend, it is guaranteed that HTTP
9345 contents will always be immediately present when the rule is evaluated first.
Willy Tarreau62644772008-07-16 18:36:06 +02009346
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009347 Tracking layer7 information is also possible provided that the information
Willy Tarreau4d54c7c2014-09-16 15:48:15 +02009348 are present when the rule is processed. The rule processing engine is able to
9349 wait until the inspect delay expires when the data to be tracked is not yet
9350 available.
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009351
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009352 The "set-var" is used to set the content of a variable. The variable is
Willy Tarreau4f614292016-10-21 17:49:36 +02009353 declared inline. For "tcp-request session" rules, only session-level
9354 variables can be used, without any layer7 contents.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009355
Daniel Schneller0b547052016-03-21 20:46:57 +01009356 <var-name> The name of the variable starts with an indication about
9357 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +01009358 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +01009359 "sess" : the variable is shared with the whole session
9360 "txn" : the variable is shared with the transaction
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009361 (request and response)
Daniel Schneller0b547052016-03-21 20:46:57 +01009362 "req" : the variable is shared only during request
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009363 processing
Daniel Schneller0b547052016-03-21 20:46:57 +01009364 "res" : the variable is shared only during response
9365 processing
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009366 This prefix is followed by a name. The separator is a '.'.
Christopher Fauletb71557a2016-10-31 10:49:03 +01009367 The name may only contain characters 'a-z', 'A-Z', '0-9',
9368 '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009369
9370 <expr> Is a standard HAProxy expression formed by a sample-fetch
9371 followed by some converters.
9372
Christopher Faulet85d79c92016-11-09 16:54:56 +01009373 The "unset-var" is used to unset a variable. See above for details about
9374 <var-name>.
9375
Christopher Faulet76c09ef2017-09-21 11:03:52 +02009376 The "send-spoe-group" is used to trigger sending of a group of SPOE
9377 messages. To do so, the SPOE engine used to send messages must be defined, as
9378 well as the SPOE group to send. Of course, the SPOE engine must refer to an
9379 existing SPOE filter. If not engine name is provided on the SPOE filter line,
9380 the SPOE agent name must be used.
9381
9382 <engine-name> The SPOE engine name.
9383
9384 <group-name> The SPOE group name as specified in the engine configuration.
9385
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009386 Example:
9387
9388 tcp-request content set-var(sess.my_var) src
Christopher Faulet85d79c92016-11-09 16:54:56 +01009389 tcp-request content unset-var(sess.my_var2)
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009390
Willy Tarreau62644772008-07-16 18:36:06 +02009391 Example:
Willy Tarreaue9656522010-08-17 15:40:09 +02009392 # Accept HTTP requests containing a Host header saying "example.com"
9393 # and reject everything else.
9394 acl is_host_com hdr(Host) -i example.com
9395 tcp-request inspect-delay 30s
Willy Tarreauc0239e02012-04-16 14:42:55 +02009396 tcp-request content accept if is_host_com
Willy Tarreaue9656522010-08-17 15:40:09 +02009397 tcp-request content reject
9398
9399 Example:
Willy Tarreau62644772008-07-16 18:36:06 +02009400 # reject SMTP connection if client speaks first
9401 tcp-request inspect-delay 30s
9402 acl content_present req_len gt 0
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009403 tcp-request content reject if content_present
Willy Tarreau62644772008-07-16 18:36:06 +02009404
9405 # Forward HTTPS connection only if client speaks
9406 tcp-request inspect-delay 30s
9407 acl content_present req_len gt 0
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009408 tcp-request content accept if content_present
Willy Tarreaue9656522010-08-17 15:40:09 +02009409 tcp-request content reject
9410
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009411 Example:
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03009412 # Track the last IP(stick-table type string) from X-Forwarded-For
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009413 tcp-request inspect-delay 10s
Willy Tarreau4d54c7c2014-09-16 15:48:15 +02009414 tcp-request content track-sc0 hdr(x-forwarded-for,-1)
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03009415 # Or track the last IP(stick-table type ip|ipv6) from X-Forwarded-For
9416 tcp-request content track-sc0 req.hdr_ip(x-forwarded-for,-1)
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009417
9418 Example:
9419 # track request counts per "base" (concatenation of Host+URL)
9420 tcp-request inspect-delay 10s
Willy Tarreau4d54c7c2014-09-16 15:48:15 +02009421 tcp-request content track-sc0 base table req-rate
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009422
Willy Tarreaue9656522010-08-17 15:40:09 +02009423 Example: track per-frontend and per-backend counters, block abusers at the
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03009424 frontend when the backend detects abuse(and marks gpc0).
Willy Tarreaue9656522010-08-17 15:40:09 +02009425
9426 frontend http
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009427 # Use General Purpose Couter 0 in SC0 as a global abuse counter
Willy Tarreaue9656522010-08-17 15:40:09 +02009428 # protecting all our sites
9429 stick-table type ip size 1m expire 5m store gpc0
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009430 tcp-request connection track-sc0 src
9431 tcp-request connection reject if { sc0_get_gpc0 gt 0 }
Willy Tarreaue9656522010-08-17 15:40:09 +02009432 ...
9433 use_backend http_dynamic if { path_end .php }
9434
9435 backend http_dynamic
9436 # if a source makes too fast requests to this dynamic site (tracked
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009437 # by SC1), block it globally in the frontend.
Willy Tarreaue9656522010-08-17 15:40:09 +02009438 stick-table type ip size 1m expire 5m store http_req_rate(10s)
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009439 acl click_too_fast sc1_http_req_rate gt 10
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03009440 acl mark_as_abuser sc0_inc_gpc0(http) gt 0
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009441 tcp-request content track-sc1 src
Willy Tarreaue9656522010-08-17 15:40:09 +02009442 tcp-request content reject if click_too_fast mark_as_abuser
Willy Tarreau62644772008-07-16 18:36:06 +02009443
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009444 See section 7 about ACL usage.
Willy Tarreau62644772008-07-16 18:36:06 +02009445
Jarno Huuskonen95b012b2017-04-06 13:59:14 +03009446 See also : "tcp-request connection", "tcp-request session",
9447 "tcp-request inspect-delay", and "http-request".
Willy Tarreau62644772008-07-16 18:36:06 +02009448
9449
9450tcp-request inspect-delay <timeout>
9451 Set the maximum allowed time to wait for data during content inspection
9452 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaufb356202010-08-03 14:02:05 +02009453 no | yes | yes | yes
Willy Tarreau62644772008-07-16 18:36:06 +02009454 Arguments :
9455 <timeout> is the timeout value specified in milliseconds by default, but
9456 can be in any other unit if the number is suffixed by the unit,
9457 as explained at the top of this document.
9458
9459 People using haproxy primarily as a TCP relay are often worried about the
9460 risk of passing any type of protocol to a server without any analysis. In
9461 order to be able to analyze the request contents, we must first withhold
9462 the data then analyze them. This statement simply enables withholding of
9463 data for at most the specified amount of time.
9464
Willy Tarreaufb356202010-08-03 14:02:05 +02009465 TCP content inspection applies very early when a connection reaches a
9466 frontend, then very early when the connection is forwarded to a backend. This
9467 means that a connection may experience a first delay in the frontend and a
9468 second delay in the backend if both have tcp-request rules.
9469
Willy Tarreau62644772008-07-16 18:36:06 +02009470 Note that when performing content inspection, haproxy will evaluate the whole
9471 rules for every new chunk which gets in, taking into account the fact that
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01009472 those data are partial. If no rule matches before the aforementioned delay,
Willy Tarreau62644772008-07-16 18:36:06 +02009473 a last check is performed upon expiration, this time considering that the
Willy Tarreaud869b242009-03-15 14:43:58 +01009474 contents are definitive. If no delay is set, haproxy will not wait at all
9475 and will immediately apply a verdict based on the available information.
9476 Obviously this is unlikely to be very useful and might even be racy, so such
9477 setups are not recommended.
Willy Tarreau62644772008-07-16 18:36:06 +02009478
9479 As soon as a rule matches, the request is released and continues as usual. If
9480 the timeout is reached and no rule matches, the default policy will be to let
9481 it pass through unaffected.
9482
9483 For most protocols, it is enough to set it to a few seconds, as most clients
9484 send the full request immediately upon connection. Add 3 or more seconds to
9485 cover TCP retransmits but that's all. For some protocols, it may make sense
Willy Tarreaud72758d2010-01-12 10:42:19 +01009486 to use large values, for instance to ensure that the client never talks
Willy Tarreau62644772008-07-16 18:36:06 +02009487 before the server (eg: SMTP), or to wait for a client to talk before passing
9488 data to the server (eg: SSL). Note that the client timeout must cover at
Willy Tarreaub824b002010-09-29 16:36:16 +02009489 least the inspection delay, otherwise it will expire first. If the client
9490 closes the connection or if the buffer is full, the delay immediately expires
9491 since the contents will not be able to change anymore.
Willy Tarreau62644772008-07-16 18:36:06 +02009492
Willy Tarreau55165fe2009-05-10 12:02:55 +02009493 See also : "tcp-request content accept", "tcp-request content reject",
Willy Tarreau62644772008-07-16 18:36:06 +02009494 "timeout client".
9495
9496
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009497tcp-response content <action> [{if | unless} <condition>]
9498 Perform an action on a session response depending on a layer 4-7 condition
9499 May be used in sections : defaults | frontend | listen | backend
9500 no | no | yes | yes
9501 Arguments :
Willy Tarreauc870bfd2015-09-28 18:47:38 +02009502 <action> defines the action to perform if the condition applies. See
9503 below.
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009504
9505 <condition> is a standard layer 4-7 ACL-based condition (see section 7).
9506
9507 Response contents can be analysed at an early stage of response processing
9508 called "TCP content inspection". During this stage, ACL-based rules are
9509 evaluated every time the response contents are updated, until either an
Willy Tarreaucc1e04b2013-09-11 23:20:29 +02009510 "accept", "close" or a "reject" rule matches, or a TCP response inspection
9511 delay is set and expires with no matching rule.
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009512
9513 Most often, these decisions will consider a protocol recognition or validity.
9514
9515 Content-based rules are evaluated in their exact declaration order. If no
9516 rule matches or if there is no rule, the default action is to accept the
9517 contents. There is no specific limit to the number of rules which may be
9518 inserted.
9519
Thierry FOURNIER236657b2015-08-19 08:25:14 +02009520 Several types of actions are supported :
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009521 - accept :
9522 accepts the response if the condition is true (when used with "if")
9523 or false (when used with "unless"). The first such rule executed ends
9524 the rules evaluation.
9525
Willy Tarreaucc1e04b2013-09-11 23:20:29 +02009526 - close :
9527 immediately closes the connection with the server if the condition is
9528 true (when used with "if"), or false (when used with "unless"). The
9529 first such rule executed ends the rules evaluation. The main purpose of
9530 this action is to force a connection to be finished between a client
9531 and a server after an exchange when the application protocol expects
9532 some long time outs to elapse first. The goal is to eliminate idle
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009533 connections which take significant resources on servers with certain
Willy Tarreaucc1e04b2013-09-11 23:20:29 +02009534 protocols.
9535
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009536 - reject :
9537 rejects the response if the condition is true (when used with "if")
9538 or false (when used with "unless"). The first such rule executed ends
Jamie Gloudonaaa21002012-08-25 00:18:33 -04009539 the rules evaluation. Rejected session are immediately closed.
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009540
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009541 - set-var(<var-name>) <expr>
9542 Sets a variable.
9543
Christopher Faulet85d79c92016-11-09 16:54:56 +01009544 - unset-var(<var-name>)
9545 Unsets a variable.
9546
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02009547 - sc-inc-gpc0(<sc-id>):
9548 This action increments the GPC0 counter according to the sticky
9549 counter designated by <sc-id>. If an error occurs, this action fails
9550 silently and the actions evaluation continues.
9551
Thierry FOURNIER236657b2015-08-19 08:25:14 +02009552 - sc-set-gpt0(<sc-id>) <int> :
9553 This action sets the GPT0 tag according to the sticky counter designated
9554 by <sc-id> and the value of <int>. The expected result is a boolean. If
9555 an error occurs, this action silently fails and the actions evaluation
9556 continues.
9557
Willy Tarreau2d392c22015-08-24 01:43:45 +02009558 - "silent-drop" :
9559 This stops the evaluation of the rules and makes the client-facing
9560 connection suddenly disappear using a system-dependant way that tries
9561 to prevent the client from being notified. The effect it then that the
9562 client still sees an established connection while there's none on
9563 HAProxy. The purpose is to achieve a comparable effect to "tarpit"
9564 except that it doesn't use any local resource at all on the machine
9565 running HAProxy. It can resist much higher loads than "tarpit", and
9566 slow down stronger attackers. It is important to undestand the impact
9567 of using this mechanism. All stateful equipments placed between the
9568 client and HAProxy (firewalls, proxies, load balancers) will also keep
9569 the established connection for a long time and may suffer from this
9570 action. On modern Linux systems running with enough privileges, the
9571 TCP_REPAIR socket option is used to block the emission of a TCP
9572 reset. On other systems, the socket's TTL is reduced to 1 so that the
9573 TCP reset doesn't pass the first router, though it's still delivered to
9574 local networks. Do not use it unless you fully understand how it works.
9575
Christopher Faulet76c09ef2017-09-21 11:03:52 +02009576 - send-spoe-group <engine-name> <group-name>
9577 Send a group of SPOE messages.
9578
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009579 Note that the "if/unless" condition is optional. If no condition is set on
9580 the action, it is simply performed unconditionally. That can be useful for
9581 for changing the default action to a reject.
9582
Jamie Gloudonaaa21002012-08-25 00:18:33 -04009583 It is perfectly possible to match layer 7 contents with "tcp-response
9584 content" rules, but then it is important to ensure that a full response has
9585 been buffered, otherwise no contents will match. In order to achieve this,
9586 the best solution involves detecting the HTTP protocol during the inspection
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009587 period.
9588
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009589 The "set-var" is used to set the content of a variable. The variable is
9590 declared inline.
9591
Daniel Schneller0b547052016-03-21 20:46:57 +01009592 <var-name> The name of the variable starts with an indication about
9593 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +01009594 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +01009595 "sess" : the variable is shared with the whole session
9596 "txn" : the variable is shared with the transaction
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009597 (request and response)
Daniel Schneller0b547052016-03-21 20:46:57 +01009598 "req" : the variable is shared only during request
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009599 processing
Daniel Schneller0b547052016-03-21 20:46:57 +01009600 "res" : the variable is shared only during response
9601 processing
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009602 This prefix is followed by a name. The separator is a '.'.
Christopher Fauletb71557a2016-10-31 10:49:03 +01009603 The name may only contain characters 'a-z', 'A-Z', '0-9',
9604 '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009605
9606 <expr> Is a standard HAProxy expression formed by a sample-fetch
9607 followed by some converters.
9608
9609 Example:
9610
9611 tcp-request content set-var(sess.my_var) src
9612
Christopher Faulet85d79c92016-11-09 16:54:56 +01009613 The "unset-var" is used to unset a variable. See above for details about
9614 <var-name>.
9615
9616 Example:
9617
9618 tcp-request content unset-var(sess.my_var)
9619
Christopher Faulet76c09ef2017-09-21 11:03:52 +02009620 The "send-spoe-group" is used to trigger sending of a group of SPOE
9621 messages. To do so, the SPOE engine used to send messages must be defined, as
9622 well as the SPOE group to send. Of course, the SPOE engine must refer to an
9623 existing SPOE filter. If not engine name is provided on the SPOE filter line,
9624 the SPOE agent name must be used.
9625
9626 <engine-name> The SPOE engine name.
9627
9628 <group-name> The SPOE group name as specified in the engine configuration.
9629
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009630 See section 7 about ACL usage.
9631
9632 See also : "tcp-request content", "tcp-response inspect-delay"
9633
9634
Willy Tarreau4f614292016-10-21 17:49:36 +02009635tcp-request session <action> [{if | unless} <condition>]
9636 Perform an action on a validated session depending on a layer 5 condition
9637 May be used in sections : defaults | frontend | listen | backend
9638 no | yes | yes | no
9639 Arguments :
9640 <action> defines the action to perform if the condition applies. See
9641 below.
9642
9643 <condition> is a standard layer5-only ACL-based condition (see section 7).
9644
9645 Once a session is validated, (ie. after all handshakes have been completed),
9646 it is possible to evaluate some conditions to decide whether this session
9647 must be accepted or dropped or have its counters tracked. Those conditions
9648 cannot make use of any data contents because no buffers are allocated yet and
9649 the processing cannot wait at this stage. The main use case it to copy some
9650 early information into variables (since variables are accessible in the
9651 session), or to keep track of some information collected after the handshake,
9652 such as SSL-level elements (SNI, ciphers, client cert's CN) or information
9653 from the PROXY protocol header (eg: track a source forwarded this way). The
9654 extracted information can thus be copied to a variable or tracked using
9655 "track-sc" rules. Of course it is also possible to decide to accept/reject as
9656 with other rulesets. Most operations performed here could also be performed
9657 in "tcp-request content" rules, except that in HTTP these rules are evaluated
9658 for each new request, and that might not always be acceptable. For example a
9659 rule might increment a counter on each evaluation. It would also be possible
9660 that a country is resolved by geolocation from the source IP address,
9661 assigned to a session-wide variable, then the source address rewritten from
9662 an HTTP header for all requests. If some contents need to be inspected in
9663 order to take the decision, the "tcp-request content" statements must be used
9664 instead.
9665
9666 The "tcp-request session" rules are evaluated in their exact declaration
9667 order. If no rule matches or if there is no rule, the default action is to
9668 accept the incoming session. There is no specific limit to the number of
9669 rules which may be inserted.
9670
9671 Several types of actions are supported :
9672 - accept : the request is accepted
9673 - reject : the request is rejected and the connection is closed
9674 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>]
9675 - sc-inc-gpc0(<sc-id>)
9676 - sc-set-gpt0(<sc-id>) <int>
9677 - set-var(<var-name>) <expr>
Christopher Faulet85d79c92016-11-09 16:54:56 +01009678 - unset-var(<var-name>)
Willy Tarreau4f614292016-10-21 17:49:36 +02009679 - silent-drop
9680
9681 These actions have the same meaning as their respective counter-parts in
9682 "tcp-request connection" and "tcp-request content", so please refer to these
9683 sections for a complete description.
9684
9685 Note that the "if/unless" condition is optional. If no condition is set on
9686 the action, it is simply performed unconditionally. That can be useful for
9687 "track-sc*" actions as well as for changing the default action to a reject.
9688
9689 Example: track the original source address by default, or the one advertised
9690 in the PROXY protocol header for connection coming from the local
9691 proxies. The first connection-level rule enables receipt of the
9692 PROXY protocol for these ones, the second rule tracks whatever
9693 address we decide to keep after optional decoding.
9694
9695 tcp-request connection expect-proxy layer4 if { src -f proxies.lst }
9696 tcp-request session track-sc0 src
9697
9698 Example: accept all sessions from white-listed hosts, reject too fast
9699 sessions without counting them, and track accepted sessions.
9700 This results in session rate being capped from abusive sources.
9701
9702 tcp-request session accept if { src -f /etc/haproxy/whitelist.lst }
9703 tcp-request session reject if { src_sess_rate gt 10 }
9704 tcp-request session track-sc0 src
9705
9706 Example: accept all sessions from white-listed hosts, count all other
9707 sessions and reject too fast ones. This results in abusive ones
9708 being blocked as long as they don't slow down.
9709
9710 tcp-request session accept if { src -f /etc/haproxy/whitelist.lst }
9711 tcp-request session track-sc0 src
9712 tcp-request session reject if { sc0_sess_rate gt 10 }
9713
9714 See section 7 about ACL usage.
9715
9716 See also : "tcp-request connection", "tcp-request content", "stick-table"
9717
9718
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009719tcp-response inspect-delay <timeout>
9720 Set the maximum allowed time to wait for a response during content inspection
9721 May be used in sections : defaults | frontend | listen | backend
9722 no | no | yes | yes
9723 Arguments :
9724 <timeout> is the timeout value specified in milliseconds by default, but
9725 can be in any other unit if the number is suffixed by the unit,
9726 as explained at the top of this document.
9727
9728 See also : "tcp-response content", "tcp-request inspect-delay".
9729
9730
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009731timeout check <timeout>
9732 Set additional check timeout, but only after a connection has been already
9733 established.
9734
9735 May be used in sections: defaults | frontend | listen | backend
9736 yes | no | yes | yes
9737 Arguments:
9738 <timeout> is the timeout value specified in milliseconds by default, but
9739 can be in any other unit if the number is suffixed by the unit,
9740 as explained at the top of this document.
9741
9742 If set, haproxy uses min("timeout connect", "inter") as a connect timeout
9743 for check and "timeout check" as an additional read timeout. The "min" is
9744 used so that people running with *very* long "timeout connect" (eg. those
9745 who needed this due to the queue or tarpit) do not slow down their checks.
Willy Tarreaud7550a22010-02-10 05:10:19 +01009746 (Please also note that there is no valid reason to have such long connect
9747 timeouts, because "timeout queue" and "timeout tarpit" can always be used to
9748 avoid that).
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009749
9750 If "timeout check" is not set haproxy uses "inter" for complete check
9751 timeout (connect + read) exactly like all <1.3.15 version.
9752
9753 In most cases check request is much simpler and faster to handle than normal
9754 requests and people may want to kick out laggy servers so this timeout should
Willy Tarreau41a340d2008-01-22 12:25:31 +01009755 be smaller than "timeout server".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009756
9757 This parameter is specific to backends, but can be specified once for all in
9758 "defaults" sections. This is in fact one of the easiest solutions not to
9759 forget about it.
9760
Willy Tarreau41a340d2008-01-22 12:25:31 +01009761 See also: "timeout connect", "timeout queue", "timeout server",
9762 "timeout tarpit".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009763
9764
Willy Tarreau0ba27502007-12-24 16:55:16 +01009765timeout client <timeout>
9766timeout clitimeout <timeout> (deprecated)
9767 Set the maximum inactivity time on the client side.
9768 May be used in sections : defaults | frontend | listen | backend
9769 yes | yes | yes | no
9770 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01009771 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01009772 can be in any other unit if the number is suffixed by the unit,
9773 as explained at the top of this document.
9774
9775 The inactivity timeout applies when the client is expected to acknowledge or
9776 send data. In HTTP mode, this timeout is particularly important to consider
9777 during the first phase, when the client sends the request, and during the
Baptiste Assmann2e1941e2016-03-06 23:24:12 +01009778 response while it is reading data sent by the server. That said, for the
9779 first phase, it is preferable to set the "timeout http-request" to better
9780 protect HAProxy from Slowloris like attacks. The value is specified in
9781 milliseconds by default, but can be in any other unit if the number is
Willy Tarreau0ba27502007-12-24 16:55:16 +01009782 suffixed by the unit, as specified at the top of this document. In TCP mode
9783 (and to a lesser extent, in HTTP mode), it is highly recommended that the
9784 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01009785 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01009786 losses by specifying timeouts that are slightly above multiples of 3 seconds
Willy Tarreauce887fd2012-05-12 12:50:00 +02009787 (eg: 4 or 5 seconds). If some long-lived sessions are mixed with short-lived
9788 sessions (eg: WebSocket and HTTP), it's worth considering "timeout tunnel",
Willy Tarreau05cdd962014-05-10 14:30:07 +02009789 which overrides "timeout client" and "timeout server" for tunnels, as well as
9790 "timeout client-fin" for half-closed connections.
Willy Tarreau0ba27502007-12-24 16:55:16 +01009791
9792 This parameter is specific to frontends, but can be specified once for all in
9793 "defaults" sections. This is in fact one of the easiest solutions not to
9794 forget about it. An unspecified timeout results in an infinite timeout, which
9795 is not recommended. Such a usage is accepted and works but reports a warning
9796 during startup because it may results in accumulation of expired sessions in
9797 the system if the system's timeouts are not configured either.
9798
9799 This parameter replaces the old, deprecated "clitimeout". It is recommended
9800 to use it to write new configurations. The form "timeout clitimeout" is
9801 provided only by backwards compatibility but its use is strongly discouraged.
9802
Baptiste Assmann2e1941e2016-03-06 23:24:12 +01009803 See also : "clitimeout", "timeout server", "timeout tunnel",
9804 "timeout http-request".
Willy Tarreau0ba27502007-12-24 16:55:16 +01009805
9806
Willy Tarreau05cdd962014-05-10 14:30:07 +02009807timeout client-fin <timeout>
9808 Set the inactivity timeout on the client side for half-closed connections.
9809 May be used in sections : defaults | frontend | listen | backend
9810 yes | yes | yes | no
9811 Arguments :
9812 <timeout> is the timeout value specified in milliseconds by default, but
9813 can be in any other unit if the number is suffixed by the unit,
9814 as explained at the top of this document.
9815
9816 The inactivity timeout applies when the client is expected to acknowledge or
9817 send data while one direction is already shut down. This timeout is different
9818 from "timeout client" in that it only applies to connections which are closed
9819 in one direction. This is particularly useful to avoid keeping connections in
9820 FIN_WAIT state for too long when clients do not disconnect cleanly. This
9821 problem is particularly common long connections such as RDP or WebSocket.
9822 Note that this timeout can override "timeout tunnel" when a connection shuts
9823 down in one direction.
9824
9825 This parameter is specific to frontends, but can be specified once for all in
9826 "defaults" sections. By default it is not set, so half-closed connections
9827 will use the other timeouts (timeout.client or timeout.tunnel).
9828
9829 See also : "timeout client", "timeout server-fin", and "timeout tunnel".
9830
9831
Willy Tarreau0ba27502007-12-24 16:55:16 +01009832timeout connect <timeout>
9833timeout contimeout <timeout> (deprecated)
9834 Set the maximum time to wait for a connection attempt to a server to succeed.
9835 May be used in sections : defaults | frontend | listen | backend
9836 yes | no | yes | yes
9837 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01009838 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01009839 can be in any other unit if the number is suffixed by the unit,
9840 as explained at the top of this document.
9841
9842 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01009843 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreaud72758d2010-01-12 10:42:19 +01009844 cover one or several TCP packet losses by specifying timeouts that are
Willy Tarreau0ba27502007-12-24 16:55:16 +01009845 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009846 connect timeout also presets both queue and tarpit timeouts to the same value
9847 if these have not been specified.
Willy Tarreau0ba27502007-12-24 16:55:16 +01009848
9849 This parameter is specific to backends, but can be specified once for all in
9850 "defaults" sections. This is in fact one of the easiest solutions not to
9851 forget about it. An unspecified timeout results in an infinite timeout, which
9852 is not recommended. Such a usage is accepted and works but reports a warning
9853 during startup because it may results in accumulation of failed sessions in
9854 the system if the system's timeouts are not configured either.
9855
9856 This parameter replaces the old, deprecated "contimeout". It is recommended
9857 to use it to write new configurations. The form "timeout contimeout" is
9858 provided only by backwards compatibility but its use is strongly discouraged.
9859
Willy Tarreau41a340d2008-01-22 12:25:31 +01009860 See also: "timeout check", "timeout queue", "timeout server", "contimeout",
9861 "timeout tarpit".
Willy Tarreau0ba27502007-12-24 16:55:16 +01009862
9863
Willy Tarreaub16a5742010-01-10 14:46:16 +01009864timeout http-keep-alive <timeout>
9865 Set the maximum allowed time to wait for a new HTTP request to appear
9866 May be used in sections : defaults | frontend | listen | backend
9867 yes | yes | yes | yes
9868 Arguments :
9869 <timeout> is the timeout value specified in milliseconds by default, but
9870 can be in any other unit if the number is suffixed by the unit,
9871 as explained at the top of this document.
9872
9873 By default, the time to wait for a new request in case of keep-alive is set
9874 by "timeout http-request". However this is not always convenient because some
9875 people want very short keep-alive timeouts in order to release connections
9876 faster, and others prefer to have larger ones but still have short timeouts
9877 once the request has started to present itself.
9878
9879 The "http-keep-alive" timeout covers these needs. It will define how long to
9880 wait for a new HTTP request to start coming after a response was sent. Once
9881 the first byte of request has been seen, the "http-request" timeout is used
9882 to wait for the complete request to come. Note that empty lines prior to a
9883 new request do not refresh the timeout and are not counted as a new request.
9884
9885 There is also another difference between the two timeouts : when a connection
9886 expires during timeout http-keep-alive, no error is returned, the connection
9887 just closes. If the connection expires in "http-request" while waiting for a
9888 connection to complete, a HTTP 408 error is returned.
9889
9890 In general it is optimal to set this value to a few tens to hundreds of
9891 milliseconds, to allow users to fetch all objects of a page at once but
9892 without waiting for further clicks. Also, if set to a very small value (eg:
9893 1 millisecond) it will probably only accept pipelined requests but not the
9894 non-pipelined ones. It may be a nice trade-off for very large sites running
Patrick Mézard2382ad62010-05-09 10:43:32 +02009895 with tens to hundreds of thousands of clients.
Willy Tarreaub16a5742010-01-10 14:46:16 +01009896
9897 If this parameter is not set, the "http-request" timeout applies, and if both
9898 are not set, "timeout client" still applies at the lower level. It should be
9899 set in the frontend to take effect, unless the frontend is in TCP mode, in
9900 which case the HTTP backend's timeout will be used.
9901
9902 See also : "timeout http-request", "timeout client".
9903
9904
Willy Tarreau036fae02008-01-06 13:24:40 +01009905timeout http-request <timeout>
9906 Set the maximum allowed time to wait for a complete HTTP request
9907 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaucd7afc02009-07-12 10:03:17 +02009908 yes | yes | yes | yes
Willy Tarreau036fae02008-01-06 13:24:40 +01009909 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01009910 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau036fae02008-01-06 13:24:40 +01009911 can be in any other unit if the number is suffixed by the unit,
9912 as explained at the top of this document.
9913
9914 In order to offer DoS protection, it may be required to lower the maximum
9915 accepted time to receive a complete HTTP request without affecting the client
9916 timeout. This helps protecting against established connections on which
9917 nothing is sent. The client timeout cannot offer a good protection against
9918 this abuse because it is an inactivity timeout, which means that if the
9919 attacker sends one character every now and then, the timeout will not
9920 trigger. With the HTTP request timeout, no matter what speed the client
Willy Tarreau2705a612014-05-23 17:38:34 +02009921 types, the request will be aborted if it does not complete in time. When the
9922 timeout expires, an HTTP 408 response is sent to the client to inform it
9923 about the problem, and the connection is closed. The logs will report
9924 termination codes "cR". Some recent browsers are having problems with this
9925 standard, well-documented behaviour, so it might be needed to hide the 408
Willy Tarreau0f228a02015-05-01 15:37:53 +02009926 code using "option http-ignore-probes" or "errorfile 408 /dev/null". See
9927 more details in the explanations of the "cR" termination code in section 8.5.
Willy Tarreau036fae02008-01-06 13:24:40 +01009928
Baptiste Assmanneccdf432015-10-28 13:49:01 +01009929 By default, this timeout only applies to the header part of the request,
9930 and not to any data. As soon as the empty line is received, this timeout is
9931 not used anymore. When combined with "option http-buffer-request", this
9932 timeout also applies to the body of the request..
9933 It is used again on keep-alive connections to wait for a second
Willy Tarreaub16a5742010-01-10 14:46:16 +01009934 request if "timeout http-keep-alive" is not set.
Willy Tarreau036fae02008-01-06 13:24:40 +01009935
9936 Generally it is enough to set it to a few seconds, as most clients send the
9937 full request immediately upon connection. Add 3 or more seconds to cover TCP
9938 retransmits but that's all. Setting it to very low values (eg: 50 ms) will
9939 generally work on local networks as long as there are no packet losses. This
9940 will prevent people from sending bare HTTP requests using telnet.
9941
9942 If this parameter is not set, the client timeout still applies between each
Willy Tarreaucd7afc02009-07-12 10:03:17 +02009943 chunk of the incoming request. It should be set in the frontend to take
9944 effect, unless the frontend is in TCP mode, in which case the HTTP backend's
9945 timeout will be used.
Willy Tarreau036fae02008-01-06 13:24:40 +01009946
Willy Tarreau0f228a02015-05-01 15:37:53 +02009947 See also : "errorfile", "http-ignore-probes", "timeout http-keep-alive", and
Baptiste Assmanneccdf432015-10-28 13:49:01 +01009948 "timeout client", "option http-buffer-request".
Willy Tarreau036fae02008-01-06 13:24:40 +01009949
Willy Tarreau844e3c52008-01-11 16:28:18 +01009950
9951timeout queue <timeout>
9952 Set the maximum time to wait in the queue for a connection slot to be free
9953 May be used in sections : defaults | frontend | listen | backend
9954 yes | no | yes | yes
9955 Arguments :
9956 <timeout> is the timeout value specified in milliseconds by default, but
9957 can be in any other unit if the number is suffixed by the unit,
9958 as explained at the top of this document.
9959
9960 When a server's maxconn is reached, connections are left pending in a queue
9961 which may be server-specific or global to the backend. In order not to wait
9962 indefinitely, a timeout is applied to requests pending in the queue. If the
9963 timeout is reached, it is considered that the request will almost never be
9964 served, so it is dropped and a 503 error is returned to the client.
9965
9966 The "timeout queue" statement allows to fix the maximum time for a request to
9967 be left pending in a queue. If unspecified, the same value as the backend's
9968 connection timeout ("timeout connect") is used, for backwards compatibility
9969 with older versions with no "timeout queue" parameter.
9970
9971 See also : "timeout connect", "contimeout".
9972
9973
9974timeout server <timeout>
9975timeout srvtimeout <timeout> (deprecated)
9976 Set the maximum inactivity time on the server side.
9977 May be used in sections : defaults | frontend | listen | backend
9978 yes | no | yes | yes
9979 Arguments :
9980 <timeout> is the timeout value specified in milliseconds by default, but
9981 can be in any other unit if the number is suffixed by the unit,
9982 as explained at the top of this document.
9983
9984 The inactivity timeout applies when the server is expected to acknowledge or
9985 send data. In HTTP mode, this timeout is particularly important to consider
9986 during the first phase of the server's response, when it has to send the
9987 headers, as it directly represents the server's processing time for the
9988 request. To find out what value to put there, it's often good to start with
9989 what would be considered as unacceptable response times, then check the logs
9990 to observe the response time distribution, and adjust the value accordingly.
9991
9992 The value is specified in milliseconds by default, but can be in any other
9993 unit if the number is suffixed by the unit, as specified at the top of this
9994 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
9995 recommended that the client timeout remains equal to the server timeout in
9996 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01009997 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01009998 packet losses by specifying timeouts that are slightly above multiples of 3
Willy Tarreauce887fd2012-05-12 12:50:00 +02009999 seconds (eg: 4 or 5 seconds minimum). If some long-lived sessions are mixed
10000 with short-lived sessions (eg: WebSocket and HTTP), it's worth considering
10001 "timeout tunnel", which overrides "timeout client" and "timeout server" for
10002 tunnels.
Willy Tarreau844e3c52008-01-11 16:28:18 +010010003
10004 This parameter is specific to backends, but can be specified once for all in
10005 "defaults" sections. This is in fact one of the easiest solutions not to
10006 forget about it. An unspecified timeout results in an infinite timeout, which
10007 is not recommended. Such a usage is accepted and works but reports a warning
10008 during startup because it may results in accumulation of expired sessions in
10009 the system if the system's timeouts are not configured either.
10010
10011 This parameter replaces the old, deprecated "srvtimeout". It is recommended
10012 to use it to write new configurations. The form "timeout srvtimeout" is
10013 provided only by backwards compatibility but its use is strongly discouraged.
10014
Willy Tarreauce887fd2012-05-12 12:50:00 +020010015 See also : "srvtimeout", "timeout client" and "timeout tunnel".
Willy Tarreau844e3c52008-01-11 16:28:18 +010010016
Willy Tarreau05cdd962014-05-10 14:30:07 +020010017
10018timeout server-fin <timeout>
10019 Set the inactivity timeout on the server side for half-closed connections.
10020 May be used in sections : defaults | frontend | listen | backend
10021 yes | no | yes | yes
10022 Arguments :
10023 <timeout> is the timeout value specified in milliseconds by default, but
10024 can be in any other unit if the number is suffixed by the unit,
10025 as explained at the top of this document.
10026
10027 The inactivity timeout applies when the server is expected to acknowledge or
10028 send data while one direction is already shut down. This timeout is different
10029 from "timeout server" in that it only applies to connections which are closed
10030 in one direction. This is particularly useful to avoid keeping connections in
10031 FIN_WAIT state for too long when a remote server does not disconnect cleanly.
10032 This problem is particularly common long connections such as RDP or WebSocket.
10033 Note that this timeout can override "timeout tunnel" when a connection shuts
10034 down in one direction. This setting was provided for completeness, but in most
10035 situations, it should not be needed.
10036
10037 This parameter is specific to backends, but can be specified once for all in
10038 "defaults" sections. By default it is not set, so half-closed connections
10039 will use the other timeouts (timeout.server or timeout.tunnel).
10040
10041 See also : "timeout client-fin", "timeout server", and "timeout tunnel".
10042
Willy Tarreau844e3c52008-01-11 16:28:18 +010010043
10044timeout tarpit <timeout>
Cyril Bonté78caf842010-03-10 22:41:43 +010010045 Set the duration for which tarpitted connections will be maintained
Willy Tarreau844e3c52008-01-11 16:28:18 +010010046 May be used in sections : defaults | frontend | listen | backend
10047 yes | yes | yes | yes
10048 Arguments :
10049 <timeout> is the tarpit duration specified in milliseconds by default, but
10050 can be in any other unit if the number is suffixed by the unit,
10051 as explained at the top of this document.
10052
Jarno Huuskonene5ae7022017-04-03 14:36:21 +030010053 When a connection is tarpitted using "http-request tarpit" or
10054 "reqtarpit", it is maintained open with no activity for a certain
10055 amount of time, then closed. "timeout tarpit" defines how long it will
10056 be maintained open.
Willy Tarreau844e3c52008-01-11 16:28:18 +010010057
10058 The value is specified in milliseconds by default, but can be in any other
10059 unit if the number is suffixed by the unit, as specified at the top of this
10060 document. If unspecified, the same value as the backend's connection timeout
10061 ("timeout connect") is used, for backwards compatibility with older versions
Cyril Bonté78caf842010-03-10 22:41:43 +010010062 with no "timeout tarpit" parameter.
Willy Tarreau844e3c52008-01-11 16:28:18 +010010063
10064 See also : "timeout connect", "contimeout".
10065
10066
Willy Tarreauce887fd2012-05-12 12:50:00 +020010067timeout tunnel <timeout>
10068 Set the maximum inactivity time on the client and server side for tunnels.
10069 May be used in sections : defaults | frontend | listen | backend
10070 yes | no | yes | yes
10071 Arguments :
10072 <timeout> is the timeout value specified in milliseconds by default, but
10073 can be in any other unit if the number is suffixed by the unit,
10074 as explained at the top of this document.
10075
Jamie Gloudonaaa21002012-08-25 00:18:33 -040010076 The tunnel timeout applies when a bidirectional connection is established
Willy Tarreauce887fd2012-05-12 12:50:00 +020010077 between a client and a server, and the connection remains inactive in both
10078 directions. This timeout supersedes both the client and server timeouts once
10079 the connection becomes a tunnel. In TCP, this timeout is used as soon as no
10080 analyser remains attached to either connection (eg: tcp content rules are
10081 accepted). In HTTP, this timeout is used when a connection is upgraded (eg:
10082 when switching to the WebSocket protocol, or forwarding a CONNECT request
10083 to a proxy), or after the first response when no keepalive/close option is
10084 specified.
10085
Willy Tarreau05cdd962014-05-10 14:30:07 +020010086 Since this timeout is usually used in conjunction with long-lived connections,
10087 it usually is a good idea to also set "timeout client-fin" to handle the
10088 situation where a client suddenly disappears from the net and does not
10089 acknowledge a close, or sends a shutdown and does not acknowledge pending
10090 data anymore. This can happen in lossy networks where firewalls are present,
10091 and is detected by the presence of large amounts of sessions in a FIN_WAIT
10092 state.
10093
Willy Tarreauce887fd2012-05-12 12:50:00 +020010094 The value is specified in milliseconds by default, but can be in any other
10095 unit if the number is suffixed by the unit, as specified at the top of this
10096 document. Whatever the expected normal idle time, it is a good practice to
10097 cover at least one or several TCP packet losses by specifying timeouts that
10098 are slightly above multiples of 3 seconds (eg: 4 or 5 seconds minimum).
10099
10100 This parameter is specific to backends, but can be specified once for all in
10101 "defaults" sections. This is in fact one of the easiest solutions not to
10102 forget about it.
10103
10104 Example :
10105 defaults http
10106 option http-server-close
10107 timeout connect 5s
10108 timeout client 30s
Willy Tarreau05cdd962014-05-10 14:30:07 +020010109 timeout client-fin 30s
Willy Tarreauce887fd2012-05-12 12:50:00 +020010110 timeout server 30s
10111 timeout tunnel 1h # timeout to use with WebSocket and CONNECT
10112
Willy Tarreau05cdd962014-05-10 14:30:07 +020010113 See also : "timeout client", "timeout client-fin", "timeout server".
Willy Tarreauce887fd2012-05-12 12:50:00 +020010114
10115
Willy Tarreau844e3c52008-01-11 16:28:18 +010010116transparent (deprecated)
10117 Enable client-side transparent proxying
10118 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau4b1f8592008-12-23 23:13:55 +010010119 yes | no | yes | yes
Willy Tarreau844e3c52008-01-11 16:28:18 +010010120 Arguments : none
10121
10122 This keyword was introduced in order to provide layer 7 persistence to layer
10123 3 load balancers. The idea is to use the OS's ability to redirect an incoming
10124 connection for a remote address to a local process (here HAProxy), and let
10125 this process know what address was initially requested. When this option is
10126 used, sessions without cookies will be forwarded to the original destination
10127 IP address of the incoming request (which should match that of another
10128 equipment), while requests with cookies will still be forwarded to the
10129 appropriate server.
10130
10131 The "transparent" keyword is deprecated, use "option transparent" instead.
10132
10133 Note that contrary to a common belief, this option does NOT make HAProxy
10134 present the client's IP to the server when establishing the connection.
10135
Willy Tarreau844e3c52008-01-11 16:28:18 +010010136 See also: "option transparent"
10137
William Lallemanda73203e2012-03-12 12:48:57 +010010138unique-id-format <string>
10139 Generate a unique ID for each request.
10140 May be used in sections : defaults | frontend | listen | backend
10141 yes | yes | yes | no
10142 Arguments :
10143 <string> is a log-format string.
10144
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010145 This keyword creates a ID for each request using the custom log format. A
10146 unique ID is useful to trace a request passing through many components of
10147 a complex infrastructure. The newly created ID may also be logged using the
10148 %ID tag the log-format string.
William Lallemanda73203e2012-03-12 12:48:57 +010010149
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010150 The format should be composed from elements that are guaranteed to be
10151 unique when combined together. For instance, if multiple haproxy instances
10152 are involved, it might be important to include the node name. It is often
10153 needed to log the incoming connection's source and destination addresses
10154 and ports. Note that since multiple requests may be performed over the same
10155 connection, including a request counter may help differentiate them.
10156 Similarly, a timestamp may protect against a rollover of the counter.
10157 Logging the process ID will avoid collisions after a service restart.
William Lallemanda73203e2012-03-12 12:48:57 +010010158
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010159 It is recommended to use hexadecimal notation for many fields since it
10160 makes them more compact and saves space in logs.
William Lallemanda73203e2012-03-12 12:48:57 +010010161
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010162 Example:
William Lallemanda73203e2012-03-12 12:48:57 +010010163
Julien Vehentf21be322014-03-07 08:27:34 -050010164 unique-id-format %{+X}o\ %ci:%cp_%fi:%fp_%Ts_%rt:%pid
William Lallemanda73203e2012-03-12 12:48:57 +010010165
10166 will generate:
10167
10168 7F000001:8296_7F00001E:1F90_4F7B0A69_0003:790A
10169
10170 See also: "unique-id-header"
10171
10172unique-id-header <name>
10173 Add a unique ID header in the HTTP request.
10174 May be used in sections : defaults | frontend | listen | backend
10175 yes | yes | yes | no
10176 Arguments :
10177 <name> is the name of the header.
10178
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010179 Add a unique-id header in the HTTP request sent to the server, using the
10180 unique-id-format. It can't work if the unique-id-format doesn't exist.
William Lallemanda73203e2012-03-12 12:48:57 +010010181
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010182 Example:
William Lallemanda73203e2012-03-12 12:48:57 +010010183
Julien Vehentf21be322014-03-07 08:27:34 -050010184 unique-id-format %{+X}o\ %ci:%cp_%fi:%fp_%Ts_%rt:%pid
William Lallemanda73203e2012-03-12 12:48:57 +010010185 unique-id-header X-Unique-ID
10186
10187 will generate:
10188
10189 X-Unique-ID: 7F000001:8296_7F00001E:1F90_4F7B0A69_0003:790A
10190
10191 See also: "unique-id-format"
Willy Tarreau844e3c52008-01-11 16:28:18 +010010192
Willy Tarreauf51658d2014-04-23 01:21:56 +020010193use_backend <backend> [{if | unless} <condition>]
Willy Tarreau1d0dfb12009-07-07 15:10:31 +020010194 Switch to a specific backend if/unless an ACL-based condition is matched.
Willy Tarreau844e3c52008-01-11 16:28:18 +010010195 May be used in sections : defaults | frontend | listen | backend
10196 no | yes | yes | no
10197 Arguments :
Bertrand Jacquin702d44f2013-11-19 11:43:06 +010010198 <backend> is the name of a valid backend or "listen" section, or a
10199 "log-format" string resolving to a backend name.
Willy Tarreau844e3c52008-01-11 16:28:18 +010010200
Willy Tarreauf51658d2014-04-23 01:21:56 +020010201 <condition> is a condition composed of ACLs, as described in section 7. If
10202 it is omitted, the rule is unconditionally applied.
Willy Tarreau844e3c52008-01-11 16:28:18 +010010203
10204 When doing content-switching, connections arrive on a frontend and are then
10205 dispatched to various backends depending on a number of conditions. The
10206 relation between the conditions and the backends is described with the
Willy Tarreau1d0dfb12009-07-07 15:10:31 +020010207 "use_backend" keyword. While it is normally used with HTTP processing, it can
10208 also be used in pure TCP, either without content using stateless ACLs (eg:
10209 source address validation) or combined with a "tcp-request" rule to wait for
10210 some payload.
Willy Tarreau844e3c52008-01-11 16:28:18 +010010211
10212 There may be as many "use_backend" rules as desired. All of these rules are
10213 evaluated in their declaration order, and the first one which matches will
10214 assign the backend.
10215
10216 In the first form, the backend will be used if the condition is met. In the
10217 second form, the backend will be used if the condition is not met. If no
10218 condition is valid, the backend defined with "default_backend" will be used.
10219 If no default backend is defined, either the servers in the same section are
10220 used (in case of a "listen" section) or, in case of a frontend, no server is
10221 used and a 503 service unavailable response is returned.
10222
Willy Tarreau51aecc72009-07-12 09:47:04 +020010223 Note that it is possible to switch from a TCP frontend to an HTTP backend. In
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010010224 this case, either the frontend has already checked that the protocol is HTTP,
Willy Tarreau51aecc72009-07-12 09:47:04 +020010225 and backend processing will immediately follow, or the backend will wait for
10226 a complete HTTP request to get in. This feature is useful when a frontend
10227 must decode several protocols on a unique port, one of them being HTTP.
10228
Bertrand Jacquin702d44f2013-11-19 11:43:06 +010010229 When <backend> is a simple name, it is resolved at configuration time, and an
10230 error is reported if the specified backend does not exist. If <backend> is
10231 a log-format string instead, no check may be done at configuration time, so
10232 the backend name is resolved dynamically at run time. If the resulting
10233 backend name does not correspond to any valid backend, no other rule is
10234 evaluated, and the default_backend directive is applied instead. Note that
10235 when using dynamic backend names, it is highly recommended to use a prefix
10236 that no other backend uses in order to ensure that an unauthorized backend
10237 cannot be forced from the request.
10238
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010239 It is worth mentioning that "use_backend" rules with an explicit name are
Bertrand Jacquin702d44f2013-11-19 11:43:06 +010010240 used to detect the association between frontends and backends to compute the
10241 backend's "fullconn" setting. This cannot be done for dynamic names.
10242
10243 See also: "default_backend", "tcp-request", "fullconn", "log-format", and
10244 section 7 about ACLs.
Willy Tarreaud72758d2010-01-12 10:42:19 +010010245
Willy Tarreau036fae02008-01-06 13:24:40 +010010246
Willy Tarreau4a5cade2012-04-05 21:09:48 +020010247use-server <server> if <condition>
10248use-server <server> unless <condition>
10249 Only use a specific server if/unless an ACL-based condition is matched.
10250 May be used in sections : defaults | frontend | listen | backend
10251 no | no | yes | yes
10252 Arguments :
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010253 <server> is the name of a valid server in the same backend section.
Willy Tarreau4a5cade2012-04-05 21:09:48 +020010254
10255 <condition> is a condition composed of ACLs, as described in section 7.
10256
10257 By default, connections which arrive to a backend are load-balanced across
10258 the available servers according to the configured algorithm, unless a
10259 persistence mechanism such as a cookie is used and found in the request.
10260
10261 Sometimes it is desirable to forward a particular request to a specific
10262 server without having to declare a dedicated backend for this server. This
10263 can be achieved using the "use-server" rules. These rules are evaluated after
10264 the "redirect" rules and before evaluating cookies, and they have precedence
10265 on them. There may be as many "use-server" rules as desired. All of these
10266 rules are evaluated in their declaration order, and the first one which
10267 matches will assign the server.
10268
10269 If a rule designates a server which is down, and "option persist" is not used
10270 and no force-persist rule was validated, it is ignored and evaluation goes on
10271 with the next rules until one matches.
10272
10273 In the first form, the server will be used if the condition is met. In the
10274 second form, the server will be used if the condition is not met. If no
10275 condition is valid, the processing continues and the server will be assigned
10276 according to other persistence mechanisms.
10277
10278 Note that even if a rule is matched, cookie processing is still performed but
10279 does not assign the server. This allows prefixed cookies to have their prefix
10280 stripped.
10281
10282 The "use-server" statement works both in HTTP and TCP mode. This makes it
10283 suitable for use with content-based inspection. For instance, a server could
10284 be selected in a farm according to the TLS SNI field. And if these servers
10285 have their weight set to zero, they will not be used for other traffic.
10286
10287 Example :
10288 # intercept incoming TLS requests based on the SNI field
10289 use-server www if { req_ssl_sni -i www.example.com }
10290 server www 192.168.0.1:443 weight 0
10291 use-server mail if { req_ssl_sni -i mail.example.com }
10292 server mail 192.168.0.1:587 weight 0
10293 use-server imap if { req_ssl_sni -i imap.example.com }
Lukas Tribus98a3e3f2017-03-26 12:55:35 +000010294 server imap 192.168.0.1:993 weight 0
Willy Tarreau4a5cade2012-04-05 21:09:48 +020010295 # all the rest is forwarded to this server
10296 server default 192.168.0.2:443 check
10297
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010298 See also: "use_backend", section 5 about server and section 7 about ACLs.
Willy Tarreau4a5cade2012-04-05 21:09:48 +020010299
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010300
103015. Bind and Server options
10302--------------------------
10303
10304The "bind", "server" and "default-server" keywords support a number of settings
10305depending on some build options and on the system HAProxy was built on. These
10306settings generally each consist in one word sometimes followed by a value,
10307written on the same line as the "bind" or "server" line. All these options are
10308described in this section.
10309
10310
103115.1. Bind options
10312-----------------
10313
10314The "bind" keyword supports a certain number of settings which are all passed
10315as arguments on the same line. The order in which those arguments appear makes
10316no importance, provided that they appear after the bind address. All of these
10317parameters are optional. Some of them consist in a single words (booleans),
10318while other ones expect a value after them. In this case, the value must be
10319provided immediately after the setting name.
10320
10321The currently supported settings are the following ones.
10322
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010010323accept-netscaler-cip <magic number>
10324 Enforces the use of the NetScaler Client IP insertion protocol over any
10325 connection accepted by any of the TCP sockets declared on the same line. The
10326 NetScaler Client IP insertion protocol dictates the layer 3/4 addresses of
10327 the incoming connection to be used everywhere an address is used, with the
10328 only exception of "tcp-request connection" rules which will only see the
10329 real connection address. Logs will reflect the addresses indicated in the
10330 protocol, unless it is violated, in which case the real address will still
10331 be used. This keyword combined with support from external components can be
10332 used as an efficient and reliable alternative to the X-Forwarded-For
Bertrand Jacquin90759682016-06-06 15:35:39 +010010333 mechanism which is not always reliable and not even always usable. See also
10334 "tcp-request connection expect-netscaler-cip" for a finer-grained setting of
10335 which client is allowed to use the protocol.
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010010336
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010337accept-proxy
10338 Enforces the use of the PROXY protocol over any connection accepted by any of
Willy Tarreau77992672014-06-14 11:06:17 +020010339 the sockets declared on the same line. Versions 1 and 2 of the PROXY protocol
10340 are supported and correctly detected. The PROXY protocol dictates the layer
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010341 3/4 addresses of the incoming connection to be used everywhere an address is
10342 used, with the only exception of "tcp-request connection" rules which will
10343 only see the real connection address. Logs will reflect the addresses
10344 indicated in the protocol, unless it is violated, in which case the real
10345 address will still be used. This keyword combined with support from external
10346 components can be used as an efficient and reliable alternative to the
10347 X-Forwarded-For mechanism which is not always reliable and not even always
Willy Tarreau4f0d9192013-06-11 20:40:55 +020010348 usable. See also "tcp-request connection expect-proxy" for a finer-grained
10349 setting of which client is allowed to use the protocol.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010350
Olivier Houchardc2aae742017-09-22 18:26:28 +020010351allow-0rtt
10352 Allow receiving early data when using TLS 1.3. This is disabled by default,
10353 due to security considerations.
10354
Willy Tarreauab861d32013-04-02 02:30:41 +020010355alpn <protocols>
10356 This enables the TLS ALPN extension and advertises the specified protocol
10357 list as supported on top of ALPN. The protocol list consists in a comma-
10358 delimited list of protocol names, for instance: "http/1.1,http/1.0" (without
10359 quotes). This requires that the SSL library is build with support for TLS
10360 extensions enabled (check with haproxy -vv). The ALPN extension replaces the
10361 initial NPN extension.
10362
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010363backlog <backlog>
10364 Sets the socket's backlog to this value. If unspecified, the frontend's
10365 backlog is used instead, which generally defaults to the maxconn value.
10366
Emmanuel Hocdete7f2b732017-01-09 16:15:54 +010010367curves <curves>
10368 This setting is only available when support for OpenSSL was built in. It sets
10369 the string describing the list of elliptic curves algorithms ("curve suite")
10370 that are negotiated during the SSL/TLS handshake with ECDHE. The format of the
10371 string is a colon-delimited list of curve name.
10372 Example: "X25519:P-256" (without quote)
10373 When "curves" is set, "ecdhe" parameter is ignored.
10374
Emeric Brun7fb34422012-09-28 15:26:15 +020010375ecdhe <named curve>
10376 This setting is only available when support for OpenSSL was built in. It sets
Emeric Brun6924ef82013-03-06 14:08:53 +010010377 the named curve (RFC 4492) used to generate ECDH ephemeral keys. By default,
10378 used named curve is prime256v1.
Emeric Brun7fb34422012-09-28 15:26:15 +020010379
Emeric Brunfd33a262012-10-11 16:28:27 +020010380ca-file <cafile>
Emeric Brun1a073b42012-09-28 17:07:34 +020010381 This setting is only available when support for OpenSSL was built in. It
10382 designates a PEM file from which to load CA certificates used to verify
10383 client's certificate.
10384
Emeric Brunb6dc9342012-09-28 17:55:37 +020010385ca-ignore-err [all|<errorID>,...]
10386 This setting is only available when support for OpenSSL was built in.
10387 Sets a comma separated list of errorIDs to ignore during verify at depth > 0.
10388 If set to 'all', all errors are ignored. SSL handshake is not aborted if an
10389 error is ignored.
10390
Christopher Faulet31af49d2015-06-09 17:29:50 +020010391ca-sign-file <cafile>
10392 This setting is only available when support for OpenSSL was built in. It
10393 designates a PEM file containing both the CA certificate and the CA private
10394 key used to create and sign server's certificates. This is a mandatory
10395 setting when the dynamic generation of certificates is enabled. See
10396 'generate-certificates' for details.
10397
Bertrand Jacquind4d0a232016-11-13 16:37:12 +000010398ca-sign-pass <passphrase>
Christopher Faulet31af49d2015-06-09 17:29:50 +020010399 This setting is only available when support for OpenSSL was built in. It is
10400 the CA private key passphrase. This setting is optional and used only when
10401 the dynamic generation of certificates is enabled. See
10402 'generate-certificates' for details.
10403
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010404ciphers <ciphers>
10405 This setting is only available when support for OpenSSL was built in. It sets
10406 the string describing the list of cipher algorithms ("cipher suite") that are
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010407 negotiated during the SSL/TLS handshake. The format of the string is defined
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010408 in "man 1 ciphers" from OpenSSL man pages, and can be for instance a string
10409 such as "AES:ALL:!aNULL:!eNULL:+RC4:@STRENGTH" (without quotes).
Daniel Schneller87e43022017-09-01 19:29:57 +020010410 Depending on the compatiblity and security requirements, the list of suitable
10411 ciphers depends on a variety of variables. For background information and
10412 recommendations see e. g. (https://wiki.mozilla.org/Security/Server_Side_TLS)
10413 and (https://mozilla.github.io/server-side-tls/ssl-config-generator/).
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010414
Emeric Brunfd33a262012-10-11 16:28:27 +020010415crl-file <crlfile>
Emeric Brun1a073b42012-09-28 17:07:34 +020010416 This setting is only available when support for OpenSSL was built in. It
10417 designates a PEM file from which to load certificate revocation list used
10418 to verify client's certificate.
10419
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010420crt <cert>
Alex Davies0fbf0162013-03-02 16:04:50 +000010421 This setting is only available when support for OpenSSL was built in. It
10422 designates a PEM file containing both the required certificates and any
10423 associated private keys. This file can be built by concatenating multiple
10424 PEM files into one (e.g. cat cert.pem key.pem > combined.pem). If your CA
10425 requires an intermediate certificate, this can also be concatenated into this
10426 file.
10427
10428 If the OpenSSL used supports Diffie-Hellman, parameters present in this file
10429 are loaded.
10430
10431 If a directory name is used instead of a PEM file, then all files found in
Cyril Bonté3180f7b2015-01-25 00:16:08 +010010432 that directory will be loaded in alphabetic order unless their name ends with
Janusz Dziemidowicz2c701b52015-03-07 23:03:59 +010010433 '.issuer', '.ocsp' or '.sctl' (reserved extensions). This directive may be
10434 specified multiple times in order to load certificates from multiple files or
10435 directories. The certificates will be presented to clients who provide a
10436 valid TLS Server Name Indication field matching one of their CN or alt
10437 subjects. Wildcards are supported, where a wildcard character '*' is used
10438 instead of the first hostname component (eg: *.example.org matches
10439 www.example.org but not www.sub.example.org).
Alex Davies0fbf0162013-03-02 16:04:50 +000010440
10441 If no SNI is provided by the client or if the SSL library does not support
10442 TLS extensions, or if the client provides an SNI hostname which does not
10443 match any certificate, then the first loaded certificate will be presented.
10444 This means that when loading certificates from a directory, it is highly
Cyril Bonté3180f7b2015-01-25 00:16:08 +010010445 recommended to load the default one first as a file or to ensure that it will
10446 always be the first one in the directory.
Alex Davies0fbf0162013-03-02 16:04:50 +000010447
Emeric Brune032bfa2012-09-28 13:01:45 +020010448 Note that the same cert may be loaded multiple times without side effects.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010449
Alex Davies0fbf0162013-03-02 16:04:50 +000010450 Some CAs (such as Godaddy) offer a drop down list of server types that do not
10451 include HAProxy when obtaining a certificate. If this happens be sure to
Godbach8bf60a12014-04-21 21:42:41 +080010452 choose a webserver that the CA believes requires an intermediate CA (for
Alex Davies0fbf0162013-03-02 16:04:50 +000010453 Godaddy, selection Apache Tomcat will get the correct bundle, but many
10454 others, e.g. nginx, result in a wrong bundle that will not work for some
10455 clients).
10456
Emeric Brun4147b2e2014-06-16 18:36:30 +020010457 For each PEM file, haproxy checks for the presence of file at the same path
10458 suffixed by ".ocsp". If such file is found, support for the TLS Certificate
10459 Status Request extension (also known as "OCSP stapling") is automatically
10460 enabled. The content of this file is optional. If not empty, it must contain
10461 a valid OCSP Response in DER format. In order to be valid an OCSP Response
10462 must comply with the following rules: it has to indicate a good status,
10463 it has to be a single response for the certificate of the PEM file, and it
10464 has to be valid at the moment of addition. If these rules are not respected
10465 the OCSP Response is ignored and a warning is emitted. In order to identify
10466 which certificate an OCSP Response applies to, the issuer's certificate is
10467 necessary. If the issuer's certificate is not found in the PEM file, it will
10468 be loaded from a file at the same path as the PEM file suffixed by ".issuer"
10469 if it exists otherwise it will fail with an error.
10470
Janusz Dziemidowicz2c701b52015-03-07 23:03:59 +010010471 For each PEM file, haproxy also checks for the presence of file at the same
10472 path suffixed by ".sctl". If such file is found, support for Certificate
10473 Transparency (RFC6962) TLS extension is enabled. The file must contain a
10474 valid Signed Certificate Timestamp List, as described in RFC. File is parsed
10475 to check basic syntax, but no signatures are verified.
10476
yanbzhu6c25e9e2016-01-05 12:52:02 -050010477 There are cases where it is desirable to support multiple key types, e.g. RSA
10478 and ECDSA in the cipher suites offered to the clients. This allows clients
10479 that support EC certificates to be able to use EC ciphers, while
10480 simultaneously supporting older, RSA only clients.
yanbzhud19630c2015-12-14 15:10:25 -050010481
10482 In order to provide this functionality, multiple PEM files, each with a
10483 different key type, are required. To associate these PEM files into a
10484 "cert bundle" that is recognized by haproxy, they must be named in the
10485 following way: All PEM files that are to be bundled must have the same base
10486 name, with a suffix indicating the key type. Currently, three suffixes are
10487 supported: rsa, dsa and ecdsa. For example, if www.example.com has two PEM
10488 files, an RSA file and an ECDSA file, they must be named: "example.pem.rsa"
10489 and "example.pem.ecdsa". The first part of the filename is arbitrary; only the
10490 suffix matters. To load this bundle into haproxy, specify the base name only:
10491
10492 Example : bind :8443 ssl crt example.pem
10493
yanbzhu6c25e9e2016-01-05 12:52:02 -050010494 Note that the suffix is not given to haproxy; this tells haproxy to look for
yanbzhud19630c2015-12-14 15:10:25 -050010495 a cert bundle.
10496
10497 Haproxy will load all PEM files in the bundle at the same time to try to
10498 support multiple key types. PEM files are combined based on Common Name
10499 (CN) and Subject Alternative Name (SAN) to support SNI lookups. This means
10500 that even if you give haproxy a cert bundle, if there are no shared CN/SAN
10501 entries in the certificates in that bundle, haproxy will not be able to
10502 provide multi-cert support.
10503
10504 Assuming bundle in the example above contained the following:
10505
10506 Filename | CN | SAN
10507 -------------------+-----------------+-------------------
10508 example.pem.rsa | www.example.com | rsa.example.com
yanbzhu6c25e9e2016-01-05 12:52:02 -050010509 -------------------+-----------------+-------------------
yanbzhud19630c2015-12-14 15:10:25 -050010510 example.pem.ecdsa | www.example.com | ecdsa.example.com
10511 -------------------+-----------------+-------------------
10512
10513 Users connecting with an SNI of "www.example.com" will be able
10514 to use both RSA and ECDSA cipher suites. Users connecting with an SNI of
10515 "rsa.example.com" will only be able to use RSA cipher suites, and users
10516 connecting with "ecdsa.example.com" will only be able to use ECDSA cipher
Emmanuel Hocdet84e417d2017-08-16 11:33:17 +020010517 suites. With BoringSSL and Openssl >= 1.1.1 multi-cert is natively supported,
10518 no need to bundle certificates. ECDSA certificate will be preferred if client
10519 support it.
yanbzhud19630c2015-12-14 15:10:25 -050010520
10521 If a directory name is given as the <cert> argument, haproxy will
10522 automatically search and load bundled files in that directory.
10523
10524 OSCP files (.ocsp) and issuer files (.issuer) are supported with multi-cert
10525 bundling. Each certificate can have its own .ocsp and .issuer file. At this
10526 time, sctl is not supported in multi-certificate bundling.
10527
Emeric Brunb6dc9342012-09-28 17:55:37 +020010528crt-ignore-err <errors>
Alex Davies0fbf0162013-03-02 16:04:50 +000010529 This setting is only available when support for OpenSSL was built in. Sets a
10530 comma separated list of errorIDs to ignore during verify at depth == 0. If
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010531 set to 'all', all errors are ignored. SSL handshake is not aborted if an error
Alex Davies0fbf0162013-03-02 16:04:50 +000010532 is ignored.
Emeric Brunb6dc9342012-09-28 17:55:37 +020010533
Emmanuel Hocdetfe616562013-01-22 15:31:15 +010010534crt-list <file>
10535 This setting is only available when support for OpenSSL was built in. It
Emmanuel Hocdet98263292016-12-29 18:26:15 +010010536 designates a list of PEM file with an optional ssl configuration and a SNI
10537 filter per certificate, with the following format for each line :
Emmanuel Hocdetfe616562013-01-22 15:31:15 +010010538
Emmanuel Hocdet98263292016-12-29 18:26:15 +010010539 <crtfile> [\[<sslbindconf> ...\]] [[!]<snifilter> ...]
10540
Emmanuel Hocdet174dfe52017-07-28 15:01:05 +020010541 sslbindconf support "npn", "alpn", "verify", "ca-file", "no-ca-names",
10542 crl-file", "ecdhe", "curves", "ciphers" configuration. With BoringSSL
Emmanuel Hocdet84e417d2017-08-16 11:33:17 +020010543 and Openssl >= 1.1.1 "ssl-min-ver" and "ssl-max-ver" are also supported.
Emmanuel Hocdet98263292016-12-29 18:26:15 +010010544 It override the configuration set in bind line for the certificate.
Emmanuel Hocdetfe616562013-01-22 15:31:15 +010010545
Emmanuel Hocdet7c41a1b2013-05-07 20:20:06 +020010546 Wildcards are supported in the SNI filter. Negative filter are also supported,
10547 only useful in combination with a wildcard filter to exclude a particular SNI.
10548 The certificates will be presented to clients who provide a valid TLS Server
10549 Name Indication field matching one of the SNI filters. If no SNI filter is
10550 specified, the CN and alt subjects are used. This directive may be specified
10551 multiple times. See the "crt" option for more information. The default
10552 certificate is still needed to meet OpenSSL expectations. If it is not used,
10553 the 'strict-sni' option may be used.
Emmanuel Hocdetfe616562013-01-22 15:31:15 +010010554
yanbzhu6c25e9e2016-01-05 12:52:02 -050010555 Multi-cert bundling (see "crt") is supported with crt-list, as long as only
Emmanuel Hocdetd294aea2016-05-13 11:14:06 +020010556 the base name is given in the crt-list. SNI filter will do the same work on
Emmanuel Hocdet84e417d2017-08-16 11:33:17 +020010557 all bundled certificates. With BoringSSL and Openssl >= 1.1.1 multi-cert is
10558 natively supported, avoid multi-cert bundling. RSA and ECDSA certificates can
10559 be declared in a row, and set different ssl and filter parameter.
yanbzhud19630c2015-12-14 15:10:25 -050010560
Emmanuel Hocdet98263292016-12-29 18:26:15 +010010561 crt-list file example:
10562 cert1.pem
Emmanuel Hocdet05942112017-02-20 16:11:50 +010010563 cert2.pem [alpn h2,http/1.1]
Emmanuel Hocdet98263292016-12-29 18:26:15 +010010564 certW.pem *.domain.tld !secure.domain.tld
Emmanuel Hocdet05942112017-02-20 16:11:50 +010010565 certS.pem [curves X25519:P-256 ciphers ECDHE-ECDSA-AES256-GCM-SHA384] secure.domain.tld
Emmanuel Hocdet98263292016-12-29 18:26:15 +010010566
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010567defer-accept
10568 Is an optional keyword which is supported only on certain Linux kernels. It
10569 states that a connection will only be accepted once some data arrive on it,
10570 or at worst after the first retransmit. This should be used only on protocols
10571 for which the client talks first (eg: HTTP). It can slightly improve
10572 performance by ensuring that most of the request is already available when
10573 the connection is accepted. On the other hand, it will not be able to detect
10574 connections which don't talk. It is important to note that this option is
10575 broken in all kernels up to 2.6.31, as the connection is never accepted until
10576 the client talks. This can cause issues with front firewalls which would see
10577 an established connection while the proxy will only see it in SYN_RECV. This
10578 option is only supported on TCPv4/TCPv6 sockets and ignored by other ones.
10579
William Lallemandf6975e92017-05-26 17:42:10 +020010580expose-fd listeners
10581 This option is only usable with the stats socket. It gives your stats socket
10582 the capability to pass listeners FD to another HAProxy process.
William Lallemande202b1e2017-06-01 17:38:56 +020010583 During a reload with the master-worker mode, the process is automatically
10584 reexecuted adding -x and one of the stats socket with this option.
William Lallemandf6975e92017-05-26 17:42:10 +020010585 See alors "-x" in the management guide.
10586
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010587force-sslv3
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010588 This option enforces use of SSLv3 only on SSL connections instantiated from
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010589 this listener. SSLv3 is generally less expensive than the TLS counterparts
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010590 for high connection rates. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010591 "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver".
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010592
10593force-tlsv10
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010594 This option enforces use of TLSv1.0 only on SSL connections instantiated from
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010595 this listener. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010596 "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver".
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010597
10598force-tlsv11
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010599 This option enforces use of TLSv1.1 only on SSL connections instantiated from
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010600 this listener. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010601 "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver".
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010602
10603force-tlsv12
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010604 This option enforces use of TLSv1.2 only on SSL connections instantiated from
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010605 this listener. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010606 "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver".
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010607
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020010608force-tlsv13
10609 This option enforces use of TLSv1.3 only on SSL connections instantiated from
10610 this listener. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010611 "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver".
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020010612
Christopher Faulet31af49d2015-06-09 17:29:50 +020010613generate-certificates
10614 This setting is only available when support for OpenSSL was built in. It
10615 enables the dynamic SSL certificates generation. A CA certificate and its
10616 private key are necessary (see 'ca-sign-file'). When HAProxy is configured as
10617 a transparent forward proxy, SSL requests generate errors because of a common
10618 name mismatch on the certificate presented to the client. With this option
10619 enabled, HAProxy will try to forge a certificate using the SNI hostname
10620 indicated by the client. This is done only if no certificate matches the SNI
10621 hostname (see 'crt-list'). If an error occurs, the default certificate is
10622 used, else the 'strict-sni' option is set.
10623 It can also be used when HAProxy is configured as a reverse proxy to ease the
10624 deployment of an architecture with many backends.
10625
10626 Creating a SSL certificate is an expensive operation, so a LRU cache is used
10627 to store forged certificates (see 'tune.ssl.ssl-ctx-cache-size'). It
10628 increases the HAProxy's memroy footprint to reduce latency when the same
10629 certificate is used many times.
10630
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010631gid <gid>
10632 Sets the group of the UNIX sockets to the designated system gid. It can also
10633 be set by default in the global section's "unix-bind" statement. Note that
10634 some platforms simply ignore this. This setting is equivalent to the "group"
10635 setting except that the group ID is used instead of its name. This setting is
10636 ignored by non UNIX sockets.
10637
10638group <group>
10639 Sets the group of the UNIX sockets to the designated system group. It can
10640 also be set by default in the global section's "unix-bind" statement. Note
10641 that some platforms simply ignore this. This setting is equivalent to the
10642 "gid" setting except that the group name is used instead of its gid. This
10643 setting is ignored by non UNIX sockets.
10644
10645id <id>
10646 Fixes the socket ID. By default, socket IDs are automatically assigned, but
10647 sometimes it is more convenient to fix them to ease monitoring. This value
10648 must be strictly positive and unique within the listener/frontend. This
10649 option can only be used when defining only a single socket.
10650
10651interface <interface>
Lukas Tribusfce2e962013-02-12 22:13:19 +010010652 Restricts the socket to a specific interface. When specified, only packets
10653 received from that particular interface are processed by the socket. This is
10654 currently only supported on Linux. The interface must be a primary system
10655 interface, not an aliased interface. It is also possible to bind multiple
10656 frontends to the same address if they are bound to different interfaces. Note
10657 that binding to a network interface requires root privileges. This parameter
10658 is only compatible with TCPv4/TCPv6 sockets.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010659
Willy Tarreauabb175f2012-09-24 12:43:26 +020010660level <level>
10661 This setting is used with the stats sockets only to restrict the nature of
10662 the commands that can be issued on the socket. It is ignored by other
10663 sockets. <level> can be one of :
10664 - "user" is the least privileged level ; only non-sensitive stats can be
10665 read, and no change is allowed. It would make sense on systems where it
10666 is not easy to restrict access to the socket.
10667 - "operator" is the default level and fits most common uses. All data can
10668 be read, and only non-sensitive changes are permitted (eg: clear max
10669 counters).
10670 - "admin" should be used with care, as everything is permitted (eg: clear
10671 all counters).
10672
Andjelko Iharosc4df59e2017-07-20 11:59:48 +020010673severity-output <format>
10674 This setting is used with the stats sockets only to configure severity
10675 level output prepended to informational feedback messages. Severity
10676 level of messages can range between 0 and 7, conforming to syslog
10677 rfc5424. Valid and successful socket commands requesting data
10678 (i.e. "show map", "get acl foo" etc.) will never have a severity level
10679 prepended. It is ignored by other sockets. <format> can be one of :
10680 - "none" (default) no severity level is prepended to feedback messages.
10681 - "number" severity level is prepended as a number.
10682 - "string" severity level is prepended as a string following the
10683 rfc5424 convention.
10684
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010685maxconn <maxconn>
10686 Limits the sockets to this number of concurrent connections. Extraneous
10687 connections will remain in the system's backlog until a connection is
10688 released. If unspecified, the limit will be the same as the frontend's
10689 maxconn. Note that in case of port ranges or multiple addresses, the same
10690 value will be applied to each socket. This setting enables different
10691 limitations on expensive sockets, for instance SSL entries which may easily
10692 eat all memory.
10693
10694mode <mode>
10695 Sets the octal mode used to define access permissions on the UNIX socket. It
10696 can also be set by default in the global section's "unix-bind" statement.
10697 Note that some platforms simply ignore this. This setting is ignored by non
10698 UNIX sockets.
10699
10700mss <maxseg>
10701 Sets the TCP Maximum Segment Size (MSS) value to be advertised on incoming
10702 connections. This can be used to force a lower MSS for certain specific
10703 ports, for instance for connections passing through a VPN. Note that this
10704 relies on a kernel feature which is theoretically supported under Linux but
10705 was buggy in all versions prior to 2.6.28. It may or may not work on other
10706 operating systems. It may also not change the advertised value but change the
10707 effective size of outgoing segments. The commonly advertised value for TCPv4
10708 over Ethernet networks is 1460 = 1500(MTU) - 40(IP+TCP). If this value is
10709 positive, it will be used as the advertised MSS. If it is negative, it will
10710 indicate by how much to reduce the incoming connection's advertised MSS for
10711 outgoing segments. This parameter is only compatible with TCP v4/v6 sockets.
10712
10713name <name>
10714 Sets an optional name for these sockets, which will be reported on the stats
10715 page.
10716
Willy Tarreaud72f0f32015-10-13 14:50:22 +020010717namespace <name>
10718 On Linux, it is possible to specify which network namespace a socket will
10719 belong to. This directive makes it possible to explicitly bind a listener to
10720 a namespace different from the default one. Please refer to your operating
10721 system's documentation to find more details about network namespaces.
10722
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010723nice <nice>
10724 Sets the 'niceness' of connections initiated from the socket. Value must be
10725 in the range -1024..1024 inclusive, and defaults to zero. Positive values
10726 means that such connections are more friendly to others and easily offer
10727 their place in the scheduler. On the opposite, negative values mean that
10728 connections want to run with a higher priority than others. The difference
10729 only happens under high loads when the system is close to saturation.
10730 Negative values are appropriate for low-latency or administration services,
10731 and high values are generally recommended for CPU intensive tasks such as SSL
10732 processing or bulk transfers which are less sensible to latency. For example,
10733 it may make sense to use a positive value for an SMTP socket and a negative
10734 one for an RDP socket.
10735
Emmanuel Hocdet174dfe52017-07-28 15:01:05 +020010736no-ca-names
10737 This setting is only available when support for OpenSSL was built in. It
10738 prevents from send CA names in server hello message when ca-file is used.
10739
Emeric Brun9b3009b2012-10-05 11:55:06 +020010740no-sslv3
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010741 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010742 disables support for SSLv3 on any sockets instantiated from the listener when
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010743 SSL is supported. Note that SSLv2 is forced disabled in the code and cannot
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010744 be enabled using any configuration option. This option is also available on
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010745 global statement "ssl-default-bind-options". Use "ssl-min-ver" and
10746 "ssl-max-ver" instead.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010747
Emeric Brun90ad8722012-10-02 14:00:59 +020010748no-tls-tickets
10749 This setting is only available when support for OpenSSL was built in. It
10750 disables the stateless session resumption (RFC 5077 TLS Ticket
10751 extension) and force to use stateful session resumption. Stateless
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010752 session resumption is more expensive in CPU usage. This option is also
10753 available on global statement "ssl-default-bind-options".
Emeric Brun90ad8722012-10-02 14:00:59 +020010754
Emeric Brun9b3009b2012-10-05 11:55:06 +020010755no-tlsv10
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010756 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010757 disables support for TLSv1.0 on any sockets instantiated from the listener
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010758 when SSL is supported. Note that SSLv2 is forced disabled in the code and
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010759 cannot be enabled using any configuration option. This option is also
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010760 available on global statement "ssl-default-bind-options". Use "ssl-min-ver"
10761 and "ssl-max-ver" instead.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010762
Emeric Brun9b3009b2012-10-05 11:55:06 +020010763no-tlsv11
Emeric Brunf5da4932012-09-28 19:42:54 +020010764 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010765 disables support for TLSv1.1 on any sockets instantiated from the listener
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010766 when SSL is supported. Note that SSLv2 is forced disabled in the code and
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010767 cannot be enabled using any configuration option. This option is also
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010768 available on global statement "ssl-default-bind-options". Use "ssl-min-ver"
10769 and "ssl-max-ver" instead.
Emeric Brunf5da4932012-09-28 19:42:54 +020010770
Emeric Brun9b3009b2012-10-05 11:55:06 +020010771no-tlsv12
Emeric Brunf5da4932012-09-28 19:42:54 +020010772 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010773 disables support for TLSv1.2 on any sockets instantiated from the listener
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010774 when SSL is supported. Note that SSLv2 is forced disabled in the code and
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010775 cannot be enabled using any configuration option. This option is also
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010776 available on global statement "ssl-default-bind-options". Use "ssl-min-ver"
10777 and "ssl-max-ver" instead.
Emeric Brunf5da4932012-09-28 19:42:54 +020010778
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020010779no-tlsv13
10780 This setting is only available when support for OpenSSL was built in. It
10781 disables support for TLSv1.3 on any sockets instantiated from the listener
10782 when SSL is supported. Note that SSLv2 is forced disabled in the code and
10783 cannot be enabled using any configuration option. This option is also
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010784 available on global statement "ssl-default-bind-options". Use "ssl-min-ver"
10785 and "ssl-max-ver" instead.
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020010786
Willy Tarreau6c9a3d52012-10-18 18:57:14 +020010787npn <protocols>
10788 This enables the NPN TLS extension and advertises the specified protocol list
10789 as supported on top of NPN. The protocol list consists in a comma-delimited
10790 list of protocol names, for instance: "http/1.1,http/1.0" (without quotes).
10791 This requires that the SSL library is build with support for TLS extensions
Willy Tarreauab861d32013-04-02 02:30:41 +020010792 enabled (check with haproxy -vv). Note that the NPN extension has been
10793 replaced with the ALPN extension (see the "alpn" keyword).
Willy Tarreau6c9a3d52012-10-18 18:57:14 +020010794
Lukas Tribus53ae85c2017-05-04 15:45:40 +000010795prefer-client-ciphers
10796 Use the client's preference when selecting the cipher suite, by default
10797 the server's preference is enforced. This option is also available on
10798 global statement "ssl-default-bind-options".
10799
Willy Tarreau6ae1ba62014-05-07 19:01:58 +020010800process [ all | odd | even | <number 1-64>[-<number 1-64>] ]
10801 This restricts the list of processes on which this listener is allowed to
10802 run. It does not enforce any process but eliminates those which do not match.
10803 If the frontend uses a "bind-process" setting, the intersection between the
10804 two is applied. If in the end the listener is not allowed to run on any
10805 remaining process, a warning is emitted, and the listener will either run on
10806 the first process of the listener if a single process was specified, or on
10807 all of its processes if multiple processes were specified. For the unlikely
Willy Tarreauae302532014-05-07 19:22:24 +020010808 case where several ranges are needed, this directive may be repeated. The
10809 main purpose of this directive is to be used with the stats sockets and have
10810 one different socket per process. The second purpose is to have multiple bind
10811 lines sharing the same IP:port but not the same process in a listener, so
10812 that the system can distribute the incoming connections into multiple queues
10813 and allow a smoother inter-process load balancing. Currently Linux 3.9 and
10814 above is known for supporting this. See also "bind-process" and "nbproc".
Willy Tarreau6ae1ba62014-05-07 19:01:58 +020010815
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010816ssl
10817 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010818 enables SSL deciphering on connections instantiated from this listener. A
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010819 certificate is necessary (see "crt" above). All contents in the buffers will
10820 appear in clear text, so that ACLs and HTTP processing will only have access
Emmanuel Hocdetbd695fe2017-05-15 15:53:41 +020010821 to deciphered contents. SSLv3 is disabled per default, use "ssl-min-ver SSLv3"
10822 to enable it.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010823
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010824ssl-max-ver [ SSLv3 | TLSv1.0 | TLSv1.1 | TLSv1.2 | TLSv1.3 ]
10825 This option enforces use of <version> or lower on SSL connections instantiated
10826 from this listener. This option is also available on global statement
10827 "ssl-default-bind-options". See also "ssl-min-ver".
10828
10829ssl-min-ver [ SSLv3 | TLSv1.0 | TLSv1.1 | TLSv1.2 | TLSv1.3 ]
10830 This option enforces use of <version> or upper on SSL connections instantiated
10831 from this listener. This option is also available on global statement
10832 "ssl-default-bind-options". See also "ssl-max-ver".
10833
Emmanuel Hocdet65623372013-01-24 17:17:15 +010010834strict-sni
10835 This setting is only available when support for OpenSSL was built in. The
10836 SSL/TLS negotiation is allow only if the client provided an SNI which match
10837 a certificate. The default certificate is not used.
10838 See the "crt" option for more information.
10839
Willy Tarreau2af207a2015-02-04 00:45:58 +010010840tcp-ut <delay>
Tim Düsterhus4896c442016-11-29 02:15:19 +010010841 Sets the TCP User Timeout for all incoming connections instantiated from this
Willy Tarreau2af207a2015-02-04 00:45:58 +010010842 listening socket. This option is available on Linux since version 2.6.37. It
10843 allows haproxy to configure a timeout for sockets which contain data not
Tim Düsterhus4896c442016-11-29 02:15:19 +010010844 receiving an acknowledgement for the configured delay. This is especially
Willy Tarreau2af207a2015-02-04 00:45:58 +010010845 useful on long-lived connections experiencing long idle periods such as
10846 remote terminals or database connection pools, where the client and server
10847 timeouts must remain high to allow a long period of idle, but where it is
10848 important to detect that the client has disappeared in order to release all
10849 resources associated with its connection (and the server's session). The
10850 argument is a delay expressed in milliseconds by default. This only works
10851 for regular TCP connections, and is ignored for other protocols.
10852
Willy Tarreau1c862c52012-10-05 16:21:00 +020010853tfo
Lukas Tribus0defb902013-02-13 23:35:39 +010010854 Is an optional keyword which is supported only on Linux kernels >= 3.7. It
Willy Tarreau1c862c52012-10-05 16:21:00 +020010855 enables TCP Fast Open on the listening socket, which means that clients which
10856 support this feature will be able to send a request and receive a response
10857 during the 3-way handshake starting from second connection, thus saving one
10858 round-trip after the first connection. This only makes sense with protocols
10859 that use high connection rates and where each round trip matters. This can
10860 possibly cause issues with many firewalls which do not accept data on SYN
10861 packets, so this option should only be enabled once well tested. This option
Lukas Tribus0999f762013-04-02 16:43:24 +020010862 is only supported on TCPv4/TCPv6 sockets and ignored by other ones. You may
10863 need to build HAProxy with USE_TFO=1 if your libc doesn't define
10864 TCP_FASTOPEN.
Willy Tarreau1c862c52012-10-05 16:21:00 +020010865
Nenad Merdanovic188ad3e2015-02-27 19:56:50 +010010866tls-ticket-keys <keyfile>
10867 Sets the TLS ticket keys file to load the keys from. The keys need to be 48
10868 bytes long, encoded with base64 (ex. openssl rand -base64 48). Number of keys
10869 is specified by the TLS_TICKETS_NO build option (default 3) and at least as
10870 many keys need to be present in the file. Last TLS_TICKETS_NO keys will be
10871 used for decryption and the penultimate one for encryption. This enables easy
10872 key rotation by just appending new key to the file and reloading the process.
10873 Keys must be periodically rotated (ex. every 12h) or Perfect Forward Secrecy
10874 is compromised. It is also a good idea to keep the keys off any permanent
10875 storage such as hard drives (hint: use tmpfs and don't swap those files).
10876 Lifetime hint can be changed using tune.ssl.timeout.
10877
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010878transparent
10879 Is an optional keyword which is supported only on certain Linux kernels. It
10880 indicates that the addresses will be bound even if they do not belong to the
10881 local machine, and that packets targeting any of these addresses will be
10882 intercepted just as if the addresses were locally configured. This normally
10883 requires that IP forwarding is enabled. Caution! do not use this with the
10884 default address '*', as it would redirect any traffic for the specified port.
10885 This keyword is available only when HAProxy is built with USE_LINUX_TPROXY=1.
10886 This parameter is only compatible with TCPv4 and TCPv6 sockets, depending on
10887 kernel version. Some distribution kernels include backports of the feature,
10888 so check for support with your vendor.
10889
Willy Tarreau77e3af92012-11-24 15:07:23 +010010890v4v6
10891 Is an optional keyword which is supported only on most recent systems
10892 including Linux kernels >= 2.4.21. It is used to bind a socket to both IPv4
10893 and IPv6 when it uses the default address. Doing so is sometimes necessary
10894 on systems which bind to IPv6 only by default. It has no effect on non-IPv6
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010895 sockets, and is overridden by the "v6only" option.
Willy Tarreau77e3af92012-11-24 15:07:23 +010010896
Willy Tarreau9b6700f2012-11-24 11:55:28 +010010897v6only
10898 Is an optional keyword which is supported only on most recent systems
10899 including Linux kernels >= 2.4.21. It is used to bind a socket to IPv6 only
10900 when it uses the default address. Doing so is sometimes preferred to doing it
Willy Tarreau77e3af92012-11-24 15:07:23 +010010901 system-wide as it is per-listener. It has no effect on non-IPv6 sockets and
10902 has precedence over the "v4v6" option.
Willy Tarreau9b6700f2012-11-24 11:55:28 +010010903
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010904uid <uid>
10905 Sets the owner of the UNIX sockets to the designated system uid. It can also
10906 be set by default in the global section's "unix-bind" statement. Note that
10907 some platforms simply ignore this. This setting is equivalent to the "user"
10908 setting except that the user numeric ID is used instead of its name. This
10909 setting is ignored by non UNIX sockets.
10910
10911user <user>
10912 Sets the owner of the UNIX sockets to the designated system user. It can also
10913 be set by default in the global section's "unix-bind" statement. Note that
10914 some platforms simply ignore this. This setting is equivalent to the "uid"
10915 setting except that the user name is used instead of its uid. This setting is
10916 ignored by non UNIX sockets.
10917
Emeric Brun1a073b42012-09-28 17:07:34 +020010918verify [none|optional|required]
10919 This setting is only available when support for OpenSSL was built in. If set
10920 to 'none', client certificate is not requested. This is the default. In other
10921 cases, a client certificate is requested. If the client does not provide a
10922 certificate after the request and if 'verify' is set to 'required', then the
10923 handshake is aborted, while it would have succeeded if set to 'optional'. The
Emeric Brunfd33a262012-10-11 16:28:27 +020010924 certificate provided by the client is always verified using CAs from
10925 'ca-file' and optional CRLs from 'crl-file'. On verify failure the handshake
10926 is aborted, regardless of the 'verify' option, unless the error code exactly
10927 matches one of those listed with 'ca-ignore-err' or 'crt-ignore-err'.
Willy Tarreau4a5cade2012-04-05 21:09:48 +020010928
Willy Tarreaub6205fd2012-09-24 12:27:33 +0200109295.2. Server and default-server options
Cyril Bontéf0c60612010-02-06 14:44:47 +010010930------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +020010931
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +010010932The "server" and "default-server" keywords support a certain number of settings
10933which are all passed as arguments on the server line. The order in which those
10934arguments appear does not count, and they are all optional. Some of those
10935settings are single words (booleans) while others expect one or several values
10936after them. In this case, the values must immediately follow the setting name.
10937Except default-server, all those settings must be specified after the server's
10938address if they are used:
Willy Tarreau6a06a402007-07-15 20:15:28 +020010939
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010940 server <name> <address>[:port] [settings ...]
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +010010941 default-server [settings ...]
Willy Tarreau6a06a402007-07-15 20:15:28 +020010942
Frédéric Lécailled2376272017-03-21 18:52:12 +010010943Note that all these settings are supported both by "server" and "default-server"
10944keywords, except "id" which is only supported by "server".
10945
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010946The currently supported settings are the following ones.
Willy Tarreau0ba27502007-12-24 16:55:16 +010010947
Willy Tarreauceb4ac92012-04-28 00:41:46 +020010948addr <ipv4|ipv6>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010949 Using the "addr" parameter, it becomes possible to use a different IP address
Baptiste Assmann13f83532016-03-06 23:14:36 +010010950 to send health-checks or to probe the agent-check. On some servers, it may be
10951 desirable to dedicate an IP address to specific component able to perform
10952 complex tests which are more suitable to health-checks than the application.
10953 This parameter is ignored if the "check" parameter is not set. See also the
10954 "port" parameter.
Willy Tarreau6a06a402007-07-15 20:15:28 +020010955
Simon Hormand60d6912013-11-25 10:46:36 +090010956agent-check
10957 Enable an auxiliary agent check which is run independently of a regular
Willy Tarreau81f5d942013-12-09 20:51:51 +010010958 health check. An agent health check is performed by making a TCP connection
10959 to the port set by the "agent-port" parameter and reading an ASCII string.
10960 The string is made of a series of words delimited by spaces, tabs or commas
10961 in any order, optionally terminated by '\r' and/or '\n', each consisting of :
Simon Hormand60d6912013-11-25 10:46:36 +090010962
Willy Tarreau81f5d942013-12-09 20:51:51 +010010963 - An ASCII representation of a positive integer percentage, e.g. "75%".
Simon Hormand60d6912013-11-25 10:46:36 +090010964 Values in this format will set the weight proportional to the initial
Willy Tarreauc5af3a62014-10-07 15:27:33 +020010965 weight of a server as configured when haproxy starts. Note that a zero
10966 weight is reported on the stats page as "DRAIN" since it has the same
10967 effect on the server (it's removed from the LB farm).
Simon Hormand60d6912013-11-25 10:46:36 +090010968
Nenad Merdanovic174dd372016-04-24 23:10:06 +020010969 - The string "maxconn:" followed by an integer (no space between). Values in
10970 this format will set the maxconn of a server. The maximum number of
10971 connections advertised needs to be multipled by the number of load balancers
10972 and different backends that use this health check to get the total number
10973 of connections the server might receive. Example: maxconn:30
10974
Willy Tarreau81f5d942013-12-09 20:51:51 +010010975 - The word "ready". This will turn the server's administrative state to the
10976 READY mode, thus cancelling any DRAIN or MAINT state
Simon Hormand60d6912013-11-25 10:46:36 +090010977
Willy Tarreau81f5d942013-12-09 20:51:51 +010010978 - The word "drain". This will turn the server's administrative state to the
10979 DRAIN mode, thus it will not accept any new connections other than those
10980 that are accepted via persistence.
Simon Hormand60d6912013-11-25 10:46:36 +090010981
Willy Tarreau81f5d942013-12-09 20:51:51 +010010982 - The word "maint". This will turn the server's administrative state to the
10983 MAINT mode, thus it will not accept any new connections at all, and health
10984 checks will be stopped.
Simon Hormand60d6912013-11-25 10:46:36 +090010985
Willy Tarreau81f5d942013-12-09 20:51:51 +010010986 - The words "down", "failed", or "stopped", optionally followed by a
10987 description string after a sharp ('#'). All of these mark the server's
10988 operating state as DOWN, but since the word itself is reported on the stats
10989 page, the difference allows an administrator to know if the situation was
10990 expected or not : the service may intentionally be stopped, may appear up
10991 but fail some validity tests, or may be seen as down (eg: missing process,
10992 or port not responding).
Simon Hormand60d6912013-11-25 10:46:36 +090010993
Willy Tarreau81f5d942013-12-09 20:51:51 +010010994 - The word "up" sets back the server's operating state as UP if health checks
10995 also report that the service is accessible.
Simon Hormand60d6912013-11-25 10:46:36 +090010996
Willy Tarreau81f5d942013-12-09 20:51:51 +010010997 Parameters which are not advertised by the agent are not changed. For
10998 example, an agent might be designed to monitor CPU usage and only report a
10999 relative weight and never interact with the operating status. Similarly, an
11000 agent could be designed as an end-user interface with 3 radio buttons
11001 allowing an administrator to change only the administrative state. However,
11002 it is important to consider that only the agent may revert its own actions,
11003 so if a server is set to DRAIN mode or to DOWN state using the agent, the
11004 agent must implement the other equivalent actions to bring the service into
11005 operations again.
Simon Hormand60d6912013-11-25 10:46:36 +090011006
Simon Horman2f1f9552013-11-25 10:46:37 +090011007 Failure to connect to the agent is not considered an error as connectivity
11008 is tested by the regular health check which is enabled by the "check"
Willy Tarreau81f5d942013-12-09 20:51:51 +010011009 parameter. Warning though, it is not a good idea to stop an agent after it
11010 reports "down", since only an agent reporting "up" will be able to turn the
11011 server up again. Note that the CLI on the Unix stats socket is also able to
Willy Tarreau989222a2016-01-15 10:26:26 +010011012 force an agent's result in order to work around a bogus agent if needed.
Simon Horman2f1f9552013-11-25 10:46:37 +090011013
Willy Tarreau81f5d942013-12-09 20:51:51 +010011014 Requires the "agent-port" parameter to be set. See also the "agent-inter"
Frédéric Lécailled2376272017-03-21 18:52:12 +010011015 and "no-agent-check" parameters.
Simon Hormand60d6912013-11-25 10:46:36 +090011016
James Brown55f9ff12015-10-21 18:19:05 -070011017agent-send <string>
11018 If this option is specified, haproxy will send the given string (verbatim)
11019 to the agent server upon connection. You could, for example, encode
11020 the backend name into this string, which would enable your agent to send
11021 different responses based on the backend. Make sure to include a '\n' if
11022 you want to terminate your request with a newline.
11023
Simon Hormand60d6912013-11-25 10:46:36 +090011024agent-inter <delay>
11025 The "agent-inter" parameter sets the interval between two agent checks
11026 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
11027
11028 Just as with every other time-based parameter, it may be entered in any
11029 other explicit unit among { us, ms, s, m, h, d }. The "agent-inter"
11030 parameter also serves as a timeout for agent checks "timeout check" is
11031 not set. In order to reduce "resonance" effects when multiple servers are
11032 hosted on the same hardware, the agent and health checks of all servers
11033 are started with a small time offset between them. It is also possible to
11034 add some random noise in the agent and health checks interval using the
11035 global "spread-checks" keyword. This makes sense for instance when a lot
11036 of backends use the same servers.
11037
11038 See also the "agent-check" and "agent-port" parameters.
11039
Misiek768d8602017-01-09 09:52:43 +010011040agent-addr <addr>
11041 The "agent-addr" parameter sets address for agent check.
11042
11043 You can offload agent-check to another target, so you can make single place
11044 managing status and weights of servers defined in haproxy in case you can't
11045 make self-aware and self-managing services. You can specify both IP or
11046 hostname, it will be resolved.
11047
Simon Hormand60d6912013-11-25 10:46:36 +090011048agent-port <port>
11049 The "agent-port" parameter sets the TCP port used for agent checks.
11050
11051 See also the "agent-check" and "agent-inter" parameters.
11052
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011053backup
11054 When "backup" is present on a server line, the server is only used in load
11055 balancing when all other non-backup servers are unavailable. Requests coming
11056 with a persistence cookie referencing the server will always be served
11057 though. By default, only the first operational backup server is used, unless
Frédéric Lécailled2376272017-03-21 18:52:12 +010011058 the "allbackups" option is set in the backend. See also the "no-backup" and
11059 "allbackups" options.
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011060
Emeric Brunef42d922012-10-11 16:11:36 +020011061ca-file <cafile>
11062 This setting is only available when support for OpenSSL was built in. It
11063 designates a PEM file from which to load CA certificates used to verify
11064 server's certificate.
11065
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011066check
11067 This option enables health checks on the server. By default, a server is
Patrick Mézardb7aeec62012-01-22 16:01:22 +010011068 always considered available. If "check" is set, the server is available when
11069 accepting periodic TCP connections, to ensure that it is really able to serve
11070 requests. The default address and port to send the tests to are those of the
11071 server, and the default source is the same as the one defined in the
11072 backend. It is possible to change the address using the "addr" parameter, the
11073 port using the "port" parameter, the source address using the "source"
11074 address, and the interval and timers using the "inter", "rise" and "fall"
Simon Hormanafc47ee2013-11-25 10:46:35 +090011075 parameters. The request method is define in the backend using the "httpchk",
11076 "smtpchk", "mysql-check", "pgsql-check" and "ssl-hello-chk" options. Please
Frédéric Lécailled2376272017-03-21 18:52:12 +010011077 refer to those options and parameters for more information. See also
11078 "no-check" option.
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011079
Willy Tarreau6c16adc2012-10-05 00:04:16 +020011080check-send-proxy
11081 This option forces emission of a PROXY protocol line with outgoing health
11082 checks, regardless of whether the server uses send-proxy or not for the
11083 normal traffic. By default, the PROXY protocol is enabled for health checks
11084 if it is already enabled for normal traffic and if no "port" nor "addr"
11085 directive is present. However, if such a directive is present, the
11086 "check-send-proxy" option needs to be used to force the use of the
11087 protocol. See also the "send-proxy" option for more information.
11088
Olivier Houchard9130a962017-10-17 17:33:43 +020011089check-sni
11090 This option allows you to specify the SNI to be used when doing health checks
11091 over SSL.
11092
Willy Tarreau763a95b2012-10-04 23:15:39 +020011093check-ssl
11094 This option forces encryption of all health checks over SSL, regardless of
11095 whether the server uses SSL or not for the normal traffic. This is generally
11096 used when an explicit "port" or "addr" directive is specified and SSL health
11097 checks are not inherited. It is important to understand that this option
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030011098 inserts an SSL transport layer below the checks, so that a simple TCP connect
Willy Tarreau763a95b2012-10-04 23:15:39 +020011099 check becomes an SSL connect, which replaces the old ssl-hello-chk. The most
11100 common use is to send HTTPS checks by combining "httpchk" with SSL checks.
11101 All SSL settings are common to health checks and traffic (eg: ciphers).
Frédéric Lécailled2376272017-03-21 18:52:12 +010011102 See the "ssl" option for more information and "no-check-ssl" to disable
11103 this option.
Willy Tarreau763a95b2012-10-04 23:15:39 +020011104
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011105ciphers <ciphers>
11106 This option sets the string describing the list of cipher algorithms that is
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030011107 is negotiated during the SSL/TLS handshake with the server. The format of the
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011108 string is defined in "man 1 ciphers". When SSL is used to communicate with
11109 servers on the local network, it is common to see a weaker set of algorithms
11110 than what is used over the internet. Doing so reduces CPU usage on both the
11111 server and haproxy while still keeping it compatible with deployed software.
11112 Some algorithms such as RC4-SHA1 are reasonably cheap. If no security at all
11113 is needed and just connectivity, using DES can be appropriate.
11114
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011115cookie <value>
11116 The "cookie" parameter sets the cookie value assigned to the server to
11117 <value>. This value will be checked in incoming requests, and the first
11118 operational server possessing the same value will be selected. In return, in
11119 cookie insertion or rewrite modes, this value will be assigned to the cookie
11120 sent to the client. There is nothing wrong in having several servers sharing
11121 the same cookie value, and it is in fact somewhat common between normal and
11122 backup servers. See also the "cookie" keyword in backend section.
11123
Emeric Brunef42d922012-10-11 16:11:36 +020011124crl-file <crlfile>
11125 This setting is only available when support for OpenSSL was built in. It
11126 designates a PEM file from which to load certificate revocation list used
11127 to verify server's certificate.
11128
Emeric Bruna7aa3092012-10-26 12:58:00 +020011129crt <cert>
11130 This setting is only available when support for OpenSSL was built in.
11131 It designates a PEM file from which to load both a certificate and the
11132 associated private key. This file can be built by concatenating both PEM
11133 files into one. This certificate will be sent if the server send a client
11134 certificate request.
11135
Willy Tarreau96839092010-03-29 10:02:24 +020011136disabled
11137 The "disabled" keyword starts the server in the "disabled" state. That means
11138 that it is marked down in maintenance mode, and no connection other than the
11139 ones allowed by persist mode will reach it. It is very well suited to setup
11140 new servers, because normal traffic will never reach them, while it is still
11141 possible to test the service by making use of the force-persist mechanism.
Frédéric Lécailled2376272017-03-21 18:52:12 +010011142 See also "enabled" setting.
Willy Tarreau96839092010-03-29 10:02:24 +020011143
Frédéric Lécailled2376272017-03-21 18:52:12 +010011144enabled
11145 This option may be used as 'server' setting to reset any 'disabled'
11146 setting which would have been inherited from 'default-server' directive as
11147 default value.
11148 It may also be used as 'default-server' setting to reset any previous
11149 'default-server' 'disabled' setting.
Willy Tarreau96839092010-03-29 10:02:24 +020011150
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011151error-limit <count>
Willy Tarreau983e01e2010-01-11 18:42:06 +010011152 If health observing is enabled, the "error-limit" parameter specifies the
11153 number of consecutive errors that triggers event selected by the "on-error"
11154 option. By default it is set to 10 consecutive errors.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010011155
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011156 See also the "check", "error-limit" and "on-error".
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010011157
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011158fall <count>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011159 The "fall" parameter states that a server will be considered as dead after
11160 <count> consecutive unsuccessful health checks. This value defaults to 3 if
11161 unspecified. See also the "check", "inter" and "rise" parameters.
11162
Emeric Brun8694b9a2012-10-05 14:39:07 +020011163force-sslv3
11164 This option enforces use of SSLv3 only when SSL is used to communicate with
11165 the server. SSLv3 is generally less expensive than the TLS counterparts for
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011166 high connection rates. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011167 "ssl-default-server-options". See also "ssl-min-ver" and ssl-max-ver".
Emeric Brun8694b9a2012-10-05 14:39:07 +020011168
11169force-tlsv10
11170 This option enforces use of TLSv1.0 only when SSL is used to communicate with
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011171 the server. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011172 "ssl-default-server-options". See also "ssl-min-ver" and ssl-max-ver".
Emeric Brun8694b9a2012-10-05 14:39:07 +020011173
11174force-tlsv11
11175 This option enforces use of TLSv1.1 only when SSL is used to communicate with
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011176 the server. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011177 "ssl-default-server-options". See also "ssl-min-ver" and ssl-max-ver".
Emeric Brun8694b9a2012-10-05 14:39:07 +020011178
11179force-tlsv12
11180 This option enforces use of TLSv1.2 only when SSL is used to communicate with
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011181 the server. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011182 "ssl-default-server-options". See also "ssl-min-ver" and ssl-max-ver".
Emeric Brun8694b9a2012-10-05 14:39:07 +020011183
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020011184force-tlsv13
11185 This option enforces use of TLSv1.3 only when SSL is used to communicate with
11186 the server. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011187 "ssl-default-server-options". See also "ssl-min-ver" and ssl-max-ver".
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020011188
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011189id <value>
Willy Tarreau53fb4ae2009-10-04 23:04:08 +020011190 Set a persistent ID for the server. This ID must be positive and unique for
11191 the proxy. An unused ID will automatically be assigned if unset. The first
11192 assigned value will be 1. This ID is currently only returned in statistics.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011193
Willy Tarreau6a031d12016-11-07 19:42:35 +010011194init-addr {last | libc | none | <ip>},[...]*
11195 Indicate in what order the server's address should be resolved upon startup
11196 if it uses an FQDN. Attempts are made to resolve the address by applying in
11197 turn each of the methods mentionned in the comma-delimited list. The first
11198 method which succeeds is used. If the end of the list is reached without
11199 finding a working method, an error is thrown. Method "last" suggests to pick
11200 the address which appears in the state file (see "server-state-file"). Method
11201 "libc" uses the libc's internal resolver (gethostbyname() or getaddrinfo()
11202 depending on the operating system and build options). Method "none"
11203 specifically indicates that the server should start without any valid IP
11204 address in a down state. It can be useful to ignore some DNS issues upon
11205 startup, waiting for the situation to get fixed later. Finally, an IP address
11206 (IPv4 or IPv6) may be provided. It can be the currently known address of the
11207 server (eg: filled by a configuration generator), or the address of a dummy
11208 server used to catch old sessions and present them with a decent error
11209 message for example. When the "first" load balancing algorithm is used, this
11210 IP address could point to a fake server used to trigger the creation of new
11211 instances on the fly. This option defaults to "last,libc" indicating that the
11212 previous address found in the state file (if any) is used first, otherwise
11213 the libc's resolver is used. This ensures continued compatibility with the
11214 historic behaviour.
11215
11216 Example:
11217 defaults
11218 # never fail on address resolution
11219 default-server init-addr last,libc,none
11220
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011221inter <delay>
11222fastinter <delay>
11223downinter <delay>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011224 The "inter" parameter sets the interval between two consecutive health checks
11225 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
11226 It is also possible to use "fastinter" and "downinter" to optimize delays
11227 between checks depending on the server state :
11228
Pieter Baauw44fc9df2015-09-17 21:30:46 +020011229 Server state | Interval used
11230 ----------------------------------------+----------------------------------
11231 UP 100% (non-transitional) | "inter"
11232 ----------------------------------------+----------------------------------
11233 Transitionally UP (going down "fall"), | "fastinter" if set,
11234 Transitionally DOWN (going up "rise"), | "inter" otherwise.
11235 or yet unchecked. |
11236 ----------------------------------------+----------------------------------
11237 DOWN 100% (non-transitional) | "downinter" if set,
11238 | "inter" otherwise.
11239 ----------------------------------------+----------------------------------
Willy Tarreaud72758d2010-01-12 10:42:19 +010011240
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011241 Just as with every other time-based parameter, they can be entered in any
11242 other explicit unit among { us, ms, s, m, h, d }. The "inter" parameter also
11243 serves as a timeout for health checks sent to servers if "timeout check" is
11244 not set. In order to reduce "resonance" effects when multiple servers are
Simon Hormand60d6912013-11-25 10:46:36 +090011245 hosted on the same hardware, the agent and health checks of all servers
11246 are started with a small time offset between them. It is also possible to
11247 add some random noise in the agent and health checks interval using the
11248 global "spread-checks" keyword. This makes sense for instance when a lot
11249 of backends use the same servers.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011250
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011251maxconn <maxconn>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011252 The "maxconn" parameter specifies the maximal number of concurrent
11253 connections that will be sent to this server. If the number of incoming
11254 concurrent requests goes higher than this value, they will be queued, waiting
11255 for a connection to be released. This parameter is very important as it can
11256 save fragile servers from going down under extreme loads. If a "minconn"
11257 parameter is specified, the limit becomes dynamic. The default value is "0"
11258 which means unlimited. See also the "minconn" and "maxqueue" parameters, and
11259 the backend's "fullconn" keyword.
11260
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011261maxqueue <maxqueue>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011262 The "maxqueue" parameter specifies the maximal number of connections which
11263 will wait in the queue for this server. If this limit is reached, next
11264 requests will be redispatched to other servers instead of indefinitely
11265 waiting to be served. This will break persistence but may allow people to
11266 quickly re-log in when the server they try to connect to is dying. The
11267 default value is "0" which means the queue is unlimited. See also the
11268 "maxconn" and "minconn" parameters.
11269
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011270minconn <minconn>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011271 When the "minconn" parameter is set, the maxconn limit becomes a dynamic
11272 limit following the backend's load. The server will always accept at least
11273 <minconn> connections, never more than <maxconn>, and the limit will be on
11274 the ramp between both values when the backend has less than <fullconn>
11275 concurrent connections. This makes it possible to limit the load on the
11276 server during normal loads, but push it further for important loads without
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010011277 overloading the server during exceptional loads. See also the "maxconn"
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011278 and "maxqueue" parameters, as well as the "fullconn" backend keyword.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010011279
Willy Tarreaud72f0f32015-10-13 14:50:22 +020011280namespace <name>
11281 On Linux, it is possible to specify which network namespace a socket will
11282 belong to. This directive makes it possible to explicitly bind a server to
11283 a namespace different from the default one. Please refer to your operating
11284 system's documentation to find more details about network namespaces.
11285
Frédéric Lécailled2376272017-03-21 18:52:12 +010011286no-agent-check
11287 This option may be used as "server" setting to reset any "agent-check"
11288 setting which would have been inherited from "default-server" directive as
11289 default value.
11290 It may also be used as "default-server" setting to reset any previous
11291 "default-server" "agent-check" setting.
11292
11293no-backup
11294 This option may be used as "server" setting to reset any "backup"
11295 setting which would have been inherited from "default-server" directive as
11296 default value.
11297 It may also be used as "default-server" setting to reset any previous
11298 "default-server" "backup" setting.
11299
11300no-check
11301 This option may be used as "server" setting to reset any "check"
11302 setting which would have been inherited from "default-server" directive as
11303 default value.
11304 It may also be used as "default-server" setting to reset any previous
11305 "default-server" "check" setting.
11306
11307no-check-ssl
11308 This option may be used as "server" setting to reset any "check-ssl"
11309 setting which would have been inherited from "default-server" directive as
11310 default value.
11311 It may also be used as "default-server" setting to reset any previous
11312 "default-server" "check-ssl" setting.
11313
Frédéric Lécailled2376272017-03-21 18:52:12 +010011314no-send-proxy
11315 This option may be used as "server" setting to reset any "send-proxy"
11316 setting which would have been inherited from "default-server" directive as
11317 default value.
11318 It may also be used as "default-server" setting to reset any previous
11319 "default-server" "send-proxy" setting.
11320
11321no-send-proxy-v2
11322 This option may be used as "server" setting to reset any "send-proxy-v2"
11323 setting which would have been inherited from "default-server" directive as
11324 default value.
11325 It may also be used as "default-server" setting to reset any previous
11326 "default-server" "send-proxy-v2" setting.
11327
11328no-send-proxy-v2-ssl
11329 This option may be used as "server" setting to reset any "send-proxy-v2-ssl"
11330 setting which would have been inherited from "default-server" directive as
11331 default value.
11332 It may also be used as "default-server" setting to reset any previous
11333 "default-server" "send-proxy-v2-ssl" setting.
11334
11335no-send-proxy-v2-ssl-cn
11336 This option may be used as "server" setting to reset any "send-proxy-v2-ssl-cn"
11337 setting which would have been inherited from "default-server" directive as
11338 default value.
11339 It may also be used as "default-server" setting to reset any previous
11340 "default-server" "send-proxy-v2-ssl-cn" setting.
11341
11342no-ssl
11343 This option may be used as "server" setting to reset any "ssl"
11344 setting which would have been inherited from "default-server" directive as
11345 default value.
11346 It may also be used as "default-server" setting to reset any previous
11347 "default-server" "ssl" setting.
11348
Willy Tarreau2a3fb1c2015-02-05 16:47:07 +010011349no-ssl-reuse
11350 This option disables SSL session reuse when SSL is used to communicate with
11351 the server. It will force the server to perform a full handshake for every
11352 new connection. It's probably only useful for benchmarking, troubleshooting,
11353 and for paranoid users.
11354
Emeric Brun9b3009b2012-10-05 11:55:06 +020011355no-sslv3
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011356 This option disables support for SSLv3 when SSL is used to communicate with
11357 the server. Note that SSLv2 is disabled in the code and cannot be enabled
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011358 using any configuration option. Use "ssl-min-ver" and "ssl-max-ver" instead.
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011359
Emmanuel Hocdet6cb2d1e2017-03-30 14:43:31 +020011360 Supported in default-server: No
11361
Emeric Brunf9c5c472012-10-11 15:28:34 +020011362no-tls-tickets
11363 This setting is only available when support for OpenSSL was built in. It
11364 disables the stateless session resumption (RFC 5077 TLS Ticket
11365 extension) and force to use stateful session resumption. Stateless
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011366 session resumption is more expensive in CPU usage for servers. This option
11367 is also available on global statement "ssl-default-server-options".
Frédéric Lécailled2376272017-03-21 18:52:12 +010011368 See also "tls-tickets".
Emeric Brunf9c5c472012-10-11 15:28:34 +020011369
Emeric Brun9b3009b2012-10-05 11:55:06 +020011370no-tlsv10
Emeric Brun8694b9a2012-10-05 14:39:07 +020011371 This option disables support for TLSv1.0 when SSL is used to communicate with
Emeric Brunf5da4932012-09-28 19:42:54 +020011372 the server. Note that SSLv2 is disabled in the code and cannot be enabled
11373 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011374 often makes sense to disable it when communicating with local servers. This
11375 option is also available on global statement "ssl-default-server-options".
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011376 Use "ssl-min-ver" and "ssl-max-ver" instead.
Willy Tarreau763a95b2012-10-04 23:15:39 +020011377
Emmanuel Hocdet6cb2d1e2017-03-30 14:43:31 +020011378 Supported in default-server: No
11379
Emeric Brun9b3009b2012-10-05 11:55:06 +020011380no-tlsv11
Emeric Brun8694b9a2012-10-05 14:39:07 +020011381 This option disables support for TLSv1.1 when SSL is used to communicate with
Emeric Brunf5da4932012-09-28 19:42:54 +020011382 the server. Note that SSLv2 is disabled in the code and cannot be enabled
11383 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011384 often makes sense to disable it when communicating with local servers. This
11385 option is also available on global statement "ssl-default-server-options".
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011386 Use "ssl-min-ver" and "ssl-max-ver" instead.
Willy Tarreau763a95b2012-10-04 23:15:39 +020011387
Emmanuel Hocdet6cb2d1e2017-03-30 14:43:31 +020011388 Supported in default-server: No
11389
Emeric Brun9b3009b2012-10-05 11:55:06 +020011390no-tlsv12
Emeric Brun8694b9a2012-10-05 14:39:07 +020011391 This option disables support for TLSv1.2 when SSL is used to communicate with
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011392 the server. Note that SSLv2 is disabled in the code and cannot be enabled
11393 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011394 often makes sense to disable it when communicating with local servers. This
11395 option is also available on global statement "ssl-default-server-options".
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011396 Use "ssl-min-ver" and "ssl-max-ver" instead.
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020011397
11398 Supported in default-server: No
11399
11400no-tlsv13
11401 This option disables support for TLSv1.3 when SSL is used to communicate with
11402 the server. Note that SSLv2 is disabled in the code and cannot be enabled
11403 using any configuration option. TLSv1 is more expensive than SSLv3 so it
11404 often makes sense to disable it when communicating with local servers. This
11405 option is also available on global statement "ssl-default-server-options".
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011406 Use "ssl-min-ver" and "ssl-max-ver" instead.
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011407
Emmanuel Hocdet6cb2d1e2017-03-30 14:43:31 +020011408 Supported in default-server: No
11409
Frédéric Lécailled2376272017-03-21 18:52:12 +010011410no-verifyhost
11411 This option may be used as "server" setting to reset any "verifyhost"
11412 setting which would have been inherited from "default-server" directive as
11413 default value.
11414 It may also be used as "default-server" setting to reset any previous
11415 "default-server" "verifyhost" setting.
Willy Tarreau763a95b2012-10-04 23:15:39 +020011416
Simon Hormanfa461682011-06-25 09:39:49 +090011417non-stick
11418 Never add connections allocated to this sever to a stick-table.
11419 This may be used in conjunction with backup to ensure that
11420 stick-table persistence is disabled for backup servers.
11421
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010011422observe <mode>
11423 This option enables health adjusting based on observing communication with
11424 the server. By default this functionality is disabled and enabling it also
11425 requires to enable health checks. There are two supported modes: "layer4" and
11426 "layer7". In layer4 mode, only successful/unsuccessful tcp connections are
11427 significant. In layer7, which is only allowed for http proxies, responses
11428 received from server are verified, like valid/wrong http code, unparsable
Willy Tarreau150d1462012-03-10 08:19:02 +010011429 headers, a timeout, etc. Valid status codes include 100 to 499, 501 and 505.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010011430
11431 See also the "check", "on-error" and "error-limit".
11432
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011433on-error <mode>
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010011434 Select what should happen when enough consecutive errors are detected.
11435 Currently, four modes are available:
11436 - fastinter: force fastinter
11437 - fail-check: simulate a failed check, also forces fastinter (default)
11438 - sudden-death: simulate a pre-fatal failed health check, one more failed
11439 check will mark a server down, forces fastinter
11440 - mark-down: mark the server immediately down and force fastinter
11441
11442 See also the "check", "observe" and "error-limit".
11443
Simon Hormane0d1bfb2011-06-21 14:34:58 +090011444on-marked-down <action>
11445 Modify what occurs when a server is marked down.
11446 Currently one action is available:
Justin Karnegeseb2c24a2012-05-24 15:28:52 -070011447 - shutdown-sessions: Shutdown peer sessions. When this setting is enabled,
11448 all connections to the server are immediately terminated when the server
11449 goes down. It might be used if the health check detects more complex cases
11450 than a simple connection status, and long timeouts would cause the service
11451 to remain unresponsive for too long a time. For instance, a health check
11452 might detect that a database is stuck and that there's no chance to reuse
11453 existing connections anymore. Connections killed this way are logged with
11454 a 'D' termination code (for "Down").
Simon Hormane0d1bfb2011-06-21 14:34:58 +090011455
11456 Actions are disabled by default
11457
Justin Karnegeseb2c24a2012-05-24 15:28:52 -070011458on-marked-up <action>
11459 Modify what occurs when a server is marked up.
11460 Currently one action is available:
11461 - shutdown-backup-sessions: Shutdown sessions on all backup servers. This is
11462 done only if the server is not in backup state and if it is not disabled
11463 (it must have an effective weight > 0). This can be used sometimes to force
11464 an active server to take all the traffic back after recovery when dealing
11465 with long sessions (eg: LDAP, SQL, ...). Doing this can cause more trouble
11466 than it tries to solve (eg: incomplete transactions), so use this feature
11467 with extreme care. Sessions killed because a server comes up are logged
11468 with an 'U' termination code (for "Up").
11469
11470 Actions are disabled by default
11471
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011472port <port>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011473 Using the "port" parameter, it becomes possible to use a different port to
11474 send health-checks. On some servers, it may be desirable to dedicate a port
11475 to a specific component able to perform complex tests which are more suitable
11476 to health-checks than the application. It is common to run a simple script in
11477 inetd for instance. This parameter is ignored if the "check" parameter is not
11478 set. See also the "addr" parameter.
11479
11480redir <prefix>
11481 The "redir" parameter enables the redirection mode for all GET and HEAD
11482 requests addressing this server. This means that instead of having HAProxy
11483 forward the request to the server, it will send an "HTTP 302" response with
11484 the "Location" header composed of this prefix immediately followed by the
11485 requested URI beginning at the leading '/' of the path component. That means
11486 that no trailing slash should be used after <prefix>. All invalid requests
11487 will be rejected, and all non-GET or HEAD requests will be normally served by
11488 the server. Note that since the response is completely forged, no header
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010011489 mangling nor cookie insertion is possible in the response. However, cookies in
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011490 requests are still analysed, making this solution completely usable to direct
11491 users to a remote location in case of local disaster. Main use consists in
11492 increasing bandwidth for static servers by having the clients directly
11493 connect to them. Note: never use a relative location here, it would cause a
11494 loop between the client and HAProxy!
11495
11496 Example : server srv1 192.168.1.1:80 redir http://image1.mydomain.com check
11497
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011498rise <count>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011499 The "rise" parameter states that a server will be considered as operational
11500 after <count> consecutive successful health checks. This value defaults to 2
11501 if unspecified. See also the "check", "inter" and "fall" parameters.
11502
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011503resolve-prefer <family>
11504 When DNS resolution is enabled for a server and multiple IP addresses from
11505 different families are returned, HAProxy will prefer using an IP address
11506 from the family mentioned in the "resolve-prefer" parameter.
11507 Available families: "ipv4" and "ipv6"
11508
Baptiste Assmannc4aabae2015-08-04 22:43:06 +020011509 Default value: ipv6
11510
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011511 Example:
11512
11513 server s1 app1.domain.com:80 resolvers mydns resolve-prefer ipv6
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011514
Thierry Fournierac88cfe2016-02-17 22:05:30 +010011515resolve-net <network>[,<network[,...]]
11516 This options prioritize th choice of an ip address matching a network. This is
11517 useful with clouds to prefer a local ip. In some cases, a cloud high
Tim Düsterhus4896c442016-11-29 02:15:19 +010011518 availability service can be announced with many ip addresses on many
Thierry Fournierac88cfe2016-02-17 22:05:30 +010011519 differents datacenters. The latency between datacenter is not negligible, so
11520 this patch permitsto prefers a local datacenter. If none address matchs the
11521 configured network, another address is selected.
11522
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011523 Example:
11524
11525 server s1 app1.domain.com:80 resolvers mydns resolve-net 10.0.0.0/8
Thierry Fournierac88cfe2016-02-17 22:05:30 +010011526
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011527resolvers <id>
11528 Points to an existing "resolvers" section to resolve current server's
11529 hostname.
11530
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011531 Example:
11532
11533 server s1 app1.domain.com:80 check resolvers mydns
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011534
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011535 See also section 5.3
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011536
Willy Tarreau5ab04ec2011-03-20 10:32:26 +010011537send-proxy
11538 The "send-proxy" parameter enforces use of the PROXY protocol over any
11539 connection established to this server. The PROXY protocol informs the other
11540 end about the layer 3/4 addresses of the incoming connection, so that it can
11541 know the client's address or the public address it accessed to, whatever the
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010011542 upper layer protocol. For connections accepted by an "accept-proxy" or
11543 "accept-netscaler-cip" listener, the advertised address will be used. Only
11544 TCPv4 and TCPv6 address families are supported. Other families such as
11545 Unix sockets, will report an UNKNOWN family. Servers using this option can
11546 fully be chained to another instance of haproxy listening with an
11547 "accept-proxy" setting. This setting must not be used if the server isn't
11548 aware of the protocol. When health checks are sent to the server, the PROXY
11549 protocol is automatically used when this option is set, unless there is an
11550 explicit "port" or "addr" directive, in which case an explicit
11551 "check-send-proxy" directive would also be needed to use the PROXY protocol.
Frédéric Lécailled2376272017-03-21 18:52:12 +010011552 See also the "no-send-proxy" option of this section and "accept-proxy" and
11553 "accept-netscaler-cip" option of the "bind" keyword.
Willy Tarreau5ab04ec2011-03-20 10:32:26 +010011554
David Safb76832014-05-08 23:42:08 -040011555send-proxy-v2
11556 The "send-proxy-v2" parameter enforces use of the PROXY protocol version 2
11557 over any connection established to this server. The PROXY protocol informs
11558 the other end about the layer 3/4 addresses of the incoming connection, so
11559 that it can know the client's address or the public address it accessed to,
Emmanuel Hocdet404d9782017-10-24 10:55:14 +020011560 whatever the upper layer protocol. It also send ALPN information if an alpn
11561 have been negotiated. This setting must not be used if the server isn't aware
11562 of this version of the protocol. See also the "no-send-proxy-v2" option of
11563 this section and send-proxy" option of the "bind" keyword.
David Safb76832014-05-08 23:42:08 -040011564
11565send-proxy-v2-ssl
11566 The "send-proxy-v2-ssl" parameter enforces use of the PROXY protocol version
11567 2 over any connection established to this server. The PROXY protocol informs
11568 the other end about the layer 3/4 addresses of the incoming connection, so
11569 that it can know the client's address or the public address it accessed to,
11570 whatever the upper layer protocol. In addition, the SSL information extension
11571 of the PROXY protocol is added to the PROXY protocol header. This setting
11572 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 +010011573 See also the "no-send-proxy-v2-ssl" option of this section and the
11574 "send-proxy-v2" option of the "bind" keyword.
David Safb76832014-05-08 23:42:08 -040011575
11576send-proxy-v2-ssl-cn
11577 The "send-proxy-v2-ssl" parameter enforces use of the PROXY protocol version
11578 2 over any connection established to this server. The PROXY protocol informs
11579 the other end about the layer 3/4 addresses of the incoming connection, so
11580 that it can know the client's address or the public address it accessed to,
11581 whatever the upper layer protocol. In addition, the SSL information extension
11582 of the PROXY protocol, along along with the Common Name from the subject of
11583 the client certificate (if any), is added to the PROXY protocol header. This
11584 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 +010011585 protocol. See also the "no-send-proxy-v2-ssl-cn" option of this section and the
11586 "send-proxy-v2" option of the "bind" keyword.
David Safb76832014-05-08 23:42:08 -040011587
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011588slowstart <start_time_in_ms>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011589 The "slowstart" parameter for a server accepts a value in milliseconds which
11590 indicates after how long a server which has just come back up will run at
11591 full speed. Just as with every other time-based parameter, it can be entered
11592 in any other explicit unit among { us, ms, s, m, h, d }. The speed grows
11593 linearly from 0 to 100% during this time. The limitation applies to two
11594 parameters :
11595
11596 - maxconn: the number of connections accepted by the server will grow from 1
11597 to 100% of the usual dynamic limit defined by (minconn,maxconn,fullconn).
11598
11599 - weight: when the backend uses a dynamic weighted algorithm, the weight
11600 grows linearly from 1 to 100%. In this case, the weight is updated at every
11601 health-check. For this reason, it is important that the "inter" parameter
11602 is smaller than the "slowstart", in order to maximize the number of steps.
11603
11604 The slowstart never applies when haproxy starts, otherwise it would cause
11605 trouble to running servers. It only applies when a server has been previously
11606 seen as failed.
11607
Willy Tarreau732eac42015-07-09 11:40:25 +020011608sni <expression>
11609 The "sni" parameter evaluates the sample fetch expression, converts it to a
11610 string and uses the result as the host name sent in the SNI TLS extension to
11611 the server. A typical use case is to send the SNI received from the client in
11612 a bridged HTTPS scenario, using the "ssl_fc_sni" sample fetch for the
Willy Tarreau2ab88672017-07-05 18:23:03 +020011613 expression, though alternatives such as req.hdr(host) can also make sense. If
11614 "verify required" is set (which is the recommended setting), the resulting
Willy Tarreauad92a9a2017-07-28 11:38:41 +020011615 name will also be matched against the server certificate's names. See the
11616 "verify" directive for more details.
Willy Tarreau732eac42015-07-09 11:40:25 +020011617
Willy Tarreauc6f4ce82009-06-10 11:09:37 +020011618source <addr>[:<pl>[-<ph>]] [usesrc { <addr2>[:<port2>] | client | clientip } ]
Willy Tarreaubce70882009-09-07 11:51:47 +020011619source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | hdr_ip(<hdr>[,<occ>]) } ]
Willy Tarreauc6f4ce82009-06-10 11:09:37 +020011620source <addr>[:<pl>[-<ph>]] [interface <name>] ...
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011621 The "source" parameter sets the source address which will be used when
11622 connecting to the server. It follows the exact same parameters and principle
11623 as the backend "source" keyword, except that it only applies to the server
11624 referencing it. Please consult the "source" keyword for details.
11625
Willy Tarreauc6f4ce82009-06-10 11:09:37 +020011626 Additionally, the "source" statement on a server line allows one to specify a
11627 source port range by indicating the lower and higher bounds delimited by a
11628 dash ('-'). Some operating systems might require a valid IP address when a
11629 source port range is specified. It is permitted to have the same IP/range for
11630 several servers. Doing so makes it possible to bypass the maximum of 64k
11631 total concurrent connections. The limit will then reach 64k connections per
11632 server.
11633
Lukas Tribus7d56c6d2016-09-13 09:51:15 +000011634 Since Linux 4.2/libc 2.23 IP_BIND_ADDRESS_NO_PORT is set for connections
11635 specifying the source address without port(s).
11636
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011637ssl
Willy Tarreau44f65392013-06-25 07:56:20 +020011638 This option enables SSL ciphering on outgoing connections to the server. It
11639 is critical to verify server certificates using "verify" when using SSL to
11640 connect to servers, otherwise the communication is prone to trivial man in
11641 the-middle attacks rendering SSL useless. When this option is used, health
11642 checks are automatically sent in SSL too unless there is a "port" or an
11643 "addr" directive indicating the check should be sent to a different location.
Frédéric Lécailled2376272017-03-21 18:52:12 +010011644 See the "no-ssl" to disable "ssl" option and "check-ssl" option to force
11645 SSL health checks.
Willy Tarreau763a95b2012-10-04 23:15:39 +020011646
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011647ssl-max-ver [ SSLv3 | TLSv1.0 | TLSv1.1 | TLSv1.2 | TLSv1.3 ]
11648 This option enforces use of <version> or lower when SSL is used to communicate
11649 with the server. This option is also available on global statement
11650 "ssl-default-server-options". See also "ssl-min-ver".
11651
11652ssl-min-ver [ SSLv3 | TLSv1.0 | TLSv1.1 | TLSv1.2 | TLSv1.3 ]
11653 This option enforces use of <version> or upper when SSL is used to communicate
11654 with the server. This option is also available on global statement
11655 "ssl-default-server-options". See also "ssl-max-ver".
11656
Frédéric Lécailled2376272017-03-21 18:52:12 +010011657ssl-reuse
11658 This option may be used as "server" setting to reset any "no-ssl-reuse"
11659 setting which would have been inherited from "default-server" directive as
11660 default value.
11661 It may also be used as "default-server" setting to reset any previous
11662 "default-server" "no-ssl-reuse" setting.
11663
11664stick
11665 This option may be used as "server" setting to reset any "non-stick"
11666 setting which would have been inherited from "default-server" directive as
11667 default value.
11668 It may also be used as "default-server" setting to reset any previous
11669 "default-server" "non-stick" setting.
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011670
Willy Tarreau163d4622015-10-13 16:16:41 +020011671tcp-ut <delay>
11672 Sets the TCP User Timeout for all outgoing connections to this server. This
11673 option is available on Linux since version 2.6.37. It allows haproxy to
11674 configure a timeout for sockets which contain data not receiving an
Tim Düsterhus4896c442016-11-29 02:15:19 +010011675 acknowledgement for the configured delay. This is especially useful on
Willy Tarreau163d4622015-10-13 16:16:41 +020011676 long-lived connections experiencing long idle periods such as remote
11677 terminals or database connection pools, where the client and server timeouts
11678 must remain high to allow a long period of idle, but where it is important to
11679 detect that the server has disappeared in order to release all resources
11680 associated with its connection (and the client's session). One typical use
11681 case is also to force dead server connections to die when health checks are
11682 too slow or during a soft reload since health checks are then disabled. The
11683 argument is a delay expressed in milliseconds by default. This only works for
11684 regular TCP connections, and is ignored for other protocols.
11685
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011686track [<proxy>/]<server>
Willy Tarreau32091232014-05-16 13:52:00 +020011687 This option enables ability to set the current state of the server by tracking
11688 another one. It is possible to track a server which itself tracks another
11689 server, provided that at the end of the chain, a server has health checks
11690 enabled. If <proxy> is omitted the current one is used. If disable-on-404 is
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011691 used, it has to be enabled on both proxies.
11692
Frédéric Lécailled2376272017-03-21 18:52:12 +010011693tls-tickets
11694 This option may be used as "server" setting to reset any "no-tls-tickets"
11695 setting which would have been inherited from "default-server" directive as
11696 default value.
11697 It may also be used as "default-server" setting to reset any previous
11698 "default-server" "no-tlsv-tickets" setting.
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011699
Emeric Brunef42d922012-10-11 16:11:36 +020011700verify [none|required]
11701 This setting is only available when support for OpenSSL was built in. If set
Emeric Brun850efd52014-01-29 12:24:34 +010011702 to 'none', server certificate is not verified. In the other case, The
Willy Tarreauad92a9a2017-07-28 11:38:41 +020011703 certificate provided by the server is verified using CAs from 'ca-file' and
11704 optional CRLs from 'crl-file' after having checked that the names provided in
11705 the certificate's subject and subjectAlternateNames attributs match either
11706 the name passed using the "sni" directive, or if not provided, the static
11707 host name passed using the "verifyhost" directive. When no name is found, the
11708 certificate's names are ignored. For this reason, without SNI it's important
11709 to use "verifyhost". On verification failure the handshake is aborted. It is
11710 critically important to verify server certificates when using SSL to connect
11711 to servers, otherwise the communication is prone to trivial man-in-the-middle
11712 attacks rendering SSL totally useless. Unless "ssl_server_verify" appears in
11713 the global section, "verify" is set to "required" by default.
Emeric Brunef42d922012-10-11 16:11:36 +020011714
Evan Broderbe554312013-06-27 00:05:25 -070011715verifyhost <hostname>
11716 This setting is only available when support for OpenSSL was built in, and
Willy Tarreauad92a9a2017-07-28 11:38:41 +020011717 only takes effect if 'verify required' is also specified. This directive sets
11718 a default static hostname to check the server's certificate against when no
11719 SNI was used to connect to the server. If SNI is not used, this is the only
11720 way to enable hostname verification. This static hostname, when set, will
11721 also be used for health checks (which cannot provide an SNI value). If none
11722 of the hostnames in the certificate match the specified hostname, the
11723 handshake is aborted. The hostnames in the server-provided certificate may
11724 include wildcards. See also "verify", "sni" and "no-verifyhost" options.
Evan Broderbe554312013-06-27 00:05:25 -070011725
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011726weight <weight>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011727 The "weight" parameter is used to adjust the server's weight relative to
11728 other servers. All servers will receive a load proportional to their weight
11729 relative to the sum of all weights, so the higher the weight, the higher the
Willy Tarreau6704d672009-06-15 10:56:05 +020011730 load. The default weight is 1, and the maximal value is 256. A value of 0
11731 means the server will not participate in load-balancing but will still accept
11732 persistent connections. If this parameter is used to distribute the load
11733 according to server's capacity, it is recommended to start with values which
11734 can both grow and shrink, for instance between 10 and 100 to leave enough
11735 room above and below for later adjustments.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011736
11737
Cyril Bonté46175dd2015-07-02 22:45:32 +0200117385.3. Server IP address resolution using DNS
11739-------------------------------------------
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011740
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011741HAProxy allows using a host name on the server line to retrieve its IP address
11742using name servers. By default, HAProxy resolves the name when parsing the
11743configuration file, at startup and cache the result for the process' life.
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011744This is not sufficient in some cases, such as in Amazon where a server's IP
11745can change after a reboot or an ELB Virtual IP can change based on current
11746workload.
11747This chapter describes how HAProxy can be configured to process server's name
11748resolution at run time.
11749Whether run time server name resolution has been enable or not, HAProxy will
11750carry on doing the first resolution when parsing the configuration.
11751
11752
Cyril Bonté46175dd2015-07-02 22:45:32 +0200117535.3.1. Global overview
11754----------------------
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011755
11756As we've seen in introduction, name resolution in HAProxy occurs at two
11757different steps of the process life:
11758
11759 1. when starting up, HAProxy parses the server line definition and matches a
11760 host name. It uses libc functions to get the host name resolved. This
11761 resolution relies on /etc/resolv.conf file.
11762
Christopher Faulet67957bd2017-09-27 11:00:59 +020011763 2. at run time, HAProxy performs periodically name resolutions for servers
11764 requiring DNS resolutions.
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011765
11766A few other events can trigger a name resolution at run time:
11767 - when a server's health check ends up in a connection timeout: this may be
11768 because the server has a new IP address. So we need to trigger a name
11769 resolution to know this new IP.
11770
Christopher Faulet67957bd2017-09-27 11:00:59 +020011771When using resolvers, the server name can either be a hostname, or a SRV label.
11772HAProxy considers anything that starts with an underscore as a SRV label. If a
11773SRV label is specified, then the corresponding SRV records will be retrieved
11774from the DNS server, and the provided hostnames will be used. The SRV label
11775will be checked periodically, and if any server are added or removed, haproxy
11776will automatically do the same.
Olivier Houchardecfa18d2017-08-07 17:30:03 +020011777
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011778A few things important to notice:
11779 - all the name servers are queried in the mean time. HAProxy will process the
11780 first valid response.
11781
11782 - a resolution is considered as invalid (NX, timeout, refused), when all the
11783 servers return an error.
11784
11785
Cyril Bonté46175dd2015-07-02 22:45:32 +0200117865.3.2. The resolvers section
11787----------------------------
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011788
11789This section is dedicated to host information related to name resolution in
Christopher Faulet67957bd2017-09-27 11:00:59 +020011790HAProxy. There can be as many as resolvers section as needed. Each section can
11791contain many name servers.
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011792
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011793When multiple name servers are configured in a resolvers section, then HAProxy
11794uses the first valid response. In case of invalid responses, only the last one
11795is treated. Purpose is to give the chance to a slow server to deliver a valid
11796answer after a fast faulty or outdated server.
11797
11798When each server returns a different error type, then only the last error is
Christopher Faulet67957bd2017-09-27 11:00:59 +020011799used by HAProxy. The following processing is applied on this error:
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011800
Christopher Faulet67957bd2017-09-27 11:00:59 +020011801 1. HAProxy retries the same DNS query with a new query type. The A queries are
11802 switch to AAAA or the opposite. SRV queries are not concerned here. Timeout
11803 errors are also excluded.
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011804
Christopher Faulet67957bd2017-09-27 11:00:59 +020011805 2. When the fallback on the query type was done (or not applicable), HAProxy
11806 retries the original DNS query, with the preferred query type.
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011807
Christopher Faulet67957bd2017-09-27 11:00:59 +020011808 3. HAProxy retries previous steps <resolve_retires> times. If no valid
11809 response is received after that, it stops the DNS resolution and reports
11810 the error.
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011811
Christopher Faulet67957bd2017-09-27 11:00:59 +020011812For example, with 2 name servers configured in a resolvers section, the
11813following scenarios are possible:
11814
11815 - First response is valid and is applied directly, second response is
11816 ignored
11817
11818 - First response is invalid and second one is valid, then second response is
11819 applied
11820
11821 - First response is a NX domain and second one a truncated response, then
11822 HAProxy retries the query with a new type
11823
11824 - First response is a NX domain and second one is a timeout, then HAProxy
11825 retries the query with a new type
11826
11827 - Query timed out for both name servers, then HAProxy retries it with the
11828 same query type
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011829
Olivier Houcharda8c6db82017-07-06 18:46:47 +020011830As a DNS server may not answer all the IPs in one DNS request, haproxy keeps
11831a cache of previous answers, an answer will be considered obsolete after
Christopher Faulet67957bd2017-09-27 11:00:59 +020011832<hold obsolete> seconds without the IP returned.
Olivier Houcharda8c6db82017-07-06 18:46:47 +020011833
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011834
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011835resolvers <resolvers id>
11836 Creates a new name server list labelled <resolvers id>
11837
11838A resolvers section accept the following parameters:
11839
Baptiste Assmann2af08fe2017-08-14 00:13:01 +020011840accepted_payload_size <nb>
11841 Defines the maxium payload size accepted by HAProxy and announced to all the
Christopher Faulet67957bd2017-09-27 11:00:59 +020011842 name servers configured in this resolvers section.
Baptiste Assmann2af08fe2017-08-14 00:13:01 +020011843 <nb> is in bytes. If not set, HAProxy announces 512. (minimal value defined
11844 by RFC 6891)
11845
Baptiste Assmann9d8dbbc2017-08-18 23:35:08 +020011846 Note: to get bigger responses but still be sure that responses won't be
Baptiste Assmann2af08fe2017-08-14 00:13:01 +020011847 dropped on the wire, one can choose a value between 1280 and 1410.
11848
Baptiste Assmann9d8dbbc2017-08-18 23:35:08 +020011849 Note: the maximum allowed value is 8192.
11850
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011851nameserver <id> <ip>:<port>
11852 DNS server description:
11853 <id> : label of the server, should be unique
11854 <ip> : IP address of the server
11855 <port> : port where the DNS service actually runs
11856
11857hold <status> <period>
11858 Defines <period> during which the last name resolution should be kept based
11859 on last resolution <status>
Baptiste Assmann987e16d2016-11-02 22:23:31 +010011860 <status> : last name resolution status. Acceptable values are "nx",
Olivier Houcharda8c6db82017-07-06 18:46:47 +020011861 "other", "refused", "timeout", "valid", "obsolete".
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011862 <period> : interval between two successive name resolution when the last
11863 answer was in <status>. It follows the HAProxy time format.
11864 <period> is in milliseconds by default.
11865
Baptiste Assmann686408b2017-08-18 10:15:42 +020011866 Default value is 10s for "valid", 0s for "obsolete" and 30s for others.
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011867
Christopher Faulet67957bd2017-09-27 11:00:59 +020011868resolution_pool_size <nb> (deprecated)
Baptiste Assmann201c07f2017-05-22 15:17:15 +020011869 Defines the number of resolutions available in the pool for this resolvers.
11870 If not defines, it defaults to 64. If your configuration requires more than
11871 <nb>, then HAProxy will return an error when parsing the configuration.
11872
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011873resolve_retries <nb>
11874 Defines the number <nb> of queries to send to resolve a server name before
11875 giving up.
11876 Default value: 3
11877
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011878 A retry occurs on name server timeout or when the full sequence of DNS query
11879 type failover is over and we need to start up from the default ANY query
11880 type.
11881
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011882timeout <event> <time>
11883 Defines timeouts related to name resolution
11884 <event> : the event on which the <time> timeout period applies to.
11885 events available are:
Christopher Faulet67957bd2017-09-27 11:00:59 +020011886 - resolve : default time to trigger name resolutions when no
11887 other time applied.
11888 Default value: 1s
11889 - retry : time between two DNS queries, when no valid response
11890 have been received.
11891 Default value: 1s
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011892 <time> : time related to the event. It follows the HAProxy time format.
11893 <time> is expressed in milliseconds.
11894
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011895 Example:
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011896
11897 resolvers mydns
11898 nameserver dns1 10.0.0.1:53
11899 nameserver dns2 10.0.0.2:53
11900 resolve_retries 3
Christopher Faulet67957bd2017-09-27 11:00:59 +020011901 timeout resolve 1s
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011902 timeout retry 1s
Baptiste Assmann987e16d2016-11-02 22:23:31 +010011903 hold other 30s
11904 hold refused 30s
11905 hold nx 30s
11906 hold timeout 30s
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011907 hold valid 10s
Olivier Houcharda8c6db82017-07-06 18:46:47 +020011908 hold obsolete 30s
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011909
11910
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200119116. HTTP header manipulation
11912---------------------------
11913
11914In HTTP mode, it is possible to rewrite, add or delete some of the request and
11915response headers based on regular expressions. It is also possible to block a
11916request or a response if a particular header matches a regular expression,
11917which is enough to stop most elementary protocol attacks, and to protect
Willy Tarreau70dffda2014-01-30 03:07:23 +010011918against information leak from the internal network.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011919
Willy Tarreau70dffda2014-01-30 03:07:23 +010011920If HAProxy encounters an "Informational Response" (status code 1xx), it is able
11921to process all rsp* rules which can allow, deny, rewrite or delete a header,
11922but it will refuse to add a header to any such messages as this is not
11923HTTP-compliant. The reason for still processing headers in such responses is to
11924stop and/or fix any possible information leak which may happen, for instance
11925because another downstream equipment would unconditionally add a header, or if
11926a server name appears there. When such messages are seen, normal processing
11927still occurs on the next non-informational messages.
Willy Tarreau816b9792009-09-15 21:25:21 +020011928
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011929This section covers common usage of the following keywords, described in detail
11930in section 4.2 :
11931
11932 - reqadd <string>
11933 - reqallow <search>
11934 - reqiallow <search>
11935 - reqdel <search>
11936 - reqidel <search>
11937 - reqdeny <search>
11938 - reqideny <search>
11939 - reqpass <search>
11940 - reqipass <search>
11941 - reqrep <search> <replace>
11942 - reqirep <search> <replace>
11943 - reqtarpit <search>
11944 - reqitarpit <search>
11945 - rspadd <string>
11946 - rspdel <search>
11947 - rspidel <search>
11948 - rspdeny <search>
11949 - rspideny <search>
11950 - rsprep <search> <replace>
11951 - rspirep <search> <replace>
11952
11953With all these keywords, the same conventions are used. The <search> parameter
11954is a POSIX extended regular expression (regex) which supports grouping through
11955parenthesis (without the backslash). Spaces and other delimiters must be
11956prefixed with a backslash ('\') to avoid confusion with a field delimiter.
11957Other characters may be prefixed with a backslash to change their meaning :
11958
11959 \t for a tab
11960 \r for a carriage return (CR)
11961 \n for a new line (LF)
11962 \ to mark a space and differentiate it from a delimiter
11963 \# to mark a sharp and differentiate it from a comment
11964 \\ to use a backslash in a regex
11965 \\\\ to use a backslash in the text (*2 for regex, *2 for haproxy)
11966 \xXX to write the ASCII hex code XX as in the C language
11967
11968The <replace> parameter contains the string to be used to replace the largest
11969portion of text matching the regex. It can make use of the special characters
11970above, and can reference a substring which is delimited by parenthesis in the
11971regex, by writing a backslash ('\') immediately followed by one digit from 0 to
119729 indicating the group position (0 designating the entire line). This practice
11973is very common to users of the "sed" program.
11974
11975The <string> parameter represents the string which will systematically be added
11976after the last header line. It can also use special character sequences above.
11977
11978Notes related to these keywords :
11979---------------------------------
11980 - these keywords are not always convenient to allow/deny based on header
11981 contents. It is strongly recommended to use ACLs with the "block" keyword
11982 instead, resulting in far more flexible and manageable rules.
11983
11984 - lines are always considered as a whole. It is not possible to reference
11985 a header name only or a value only. This is important because of the way
11986 headers are written (notably the number of spaces after the colon).
11987
11988 - the first line is always considered as a header, which makes it possible to
11989 rewrite or filter HTTP requests URIs or response codes, but in turn makes
11990 it harder to distinguish between headers and request line. The regex prefix
11991 ^[^\ \t]*[\ \t] matches any HTTP method followed by a space, and the prefix
11992 ^[^ \t:]*: matches any header name followed by a colon.
11993
11994 - for performances reasons, the number of characters added to a request or to
11995 a response is limited at build time to values between 1 and 4 kB. This
11996 should normally be far more than enough for most usages. If it is too short
11997 on occasional usages, it is possible to gain some space by removing some
11998 useless headers before adding new ones.
11999
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010012000 - keywords beginning with "reqi" and "rspi" are the same as their counterpart
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012001 without the 'i' letter except that they ignore case when matching patterns.
12002
12003 - when a request passes through a frontend then a backend, all req* rules
12004 from the frontend will be evaluated, then all req* rules from the backend
12005 will be evaluated. The reverse path is applied to responses.
12006
12007 - req* statements are applied after "block" statements, so that "block" is
12008 always the first one, but before "use_backend" in order to permit rewriting
Willy Tarreaud72758d2010-01-12 10:42:19 +010012009 before switching.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012010
12011
Willy Tarreau74ca5042013-06-11 23:12:07 +0200120127. Using ACLs and fetching samples
12013----------------------------------
12014
12015Haproxy is capable of extracting data from request or response streams, from
12016client or server information, from tables, environmental information etc...
12017The action of extracting such data is called fetching a sample. Once retrieved,
12018these samples may be used for various purposes such as a key to a stick-table,
12019but most common usages consist in matching them against predefined constant
12020data called patterns.
12021
12022
120237.1. ACL basics
12024---------------
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012025
12026The use of Access Control Lists (ACL) provides a flexible solution to perform
12027content switching and generally to take decisions based on content extracted
12028from the request, the response or any environmental status. The principle is
12029simple :
12030
Willy Tarreau74ca5042013-06-11 23:12:07 +020012031 - extract a data sample from a stream, table or the environment
Willy Tarreaue6b11e42013-11-26 19:02:32 +010012032 - optionally apply some format conversion to the extracted sample
Willy Tarreau74ca5042013-06-11 23:12:07 +020012033 - apply one or multiple pattern matching methods on this sample
12034 - perform actions only when a pattern matches the sample
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012035
Willy Tarreau74ca5042013-06-11 23:12:07 +020012036The actions generally consist in blocking a request, selecting a backend, or
12037adding a header.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012038
12039In order to define a test, the "acl" keyword is used. The syntax is :
12040
Willy Tarreau74ca5042013-06-11 23:12:07 +020012041 acl <aclname> <criterion> [flags] [operator] [<value>] ...
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012042
12043This creates a new ACL <aclname> or completes an existing one with new tests.
12044Those tests apply to the portion of request/response specified in <criterion>
12045and may be adjusted with optional flags [flags]. Some criteria also support
Willy Tarreaue6b11e42013-11-26 19:02:32 +010012046an operator which may be specified before the set of values. Optionally some
12047conversion operators may be applied to the sample, and they will be specified
12048as a comma-delimited list of keywords just after the first keyword. The values
12049are of the type supported by the criterion, and are separated by spaces.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012050
12051ACL names must be formed from upper and lower case letters, digits, '-' (dash),
12052'_' (underscore) , '.' (dot) and ':' (colon). ACL names are case-sensitive,
12053which means that "my_acl" and "My_Acl" are two different ACLs.
12054
12055There is no enforced limit to the number of ACLs. The unused ones do not affect
12056performance, they just consume a small amount of memory.
12057
Willy Tarreau74ca5042013-06-11 23:12:07 +020012058The criterion generally is the name of a sample fetch method, or one of its ACL
12059specific declinations. The default test method is implied by the output type of
12060this sample fetch method. The ACL declinations can describe alternate matching
Willy Tarreaue6b11e42013-11-26 19:02:32 +010012061methods of a same sample fetch method. The sample fetch methods are the only
12062ones supporting a conversion.
Willy Tarreau74ca5042013-06-11 23:12:07 +020012063
12064Sample fetch methods return data which can be of the following types :
12065 - boolean
12066 - integer (signed or unsigned)
12067 - IPv4 or IPv6 address
12068 - string
12069 - data block
12070
Willy Tarreaue6b11e42013-11-26 19:02:32 +010012071Converters transform any of these data into any of these. For example, some
12072converters might convert a string to a lower-case string while other ones
12073would turn a string to an IPv4 address, or apply a netmask to an IP address.
12074The resulting sample is of the type of the last converter applied to the list,
12075which defaults to the type of the sample fetch method.
12076
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012077Each sample or converter returns data of a specific type, specified with its
12078keyword in this documentation. When an ACL is declared using a standard sample
12079fetch method, certain types automatically involved a default matching method
12080which are summarized in the table below :
12081
12082 +---------------------+-----------------+
12083 | Sample or converter | Default |
12084 | output type | matching method |
12085 +---------------------+-----------------+
12086 | boolean | bool |
12087 +---------------------+-----------------+
12088 | integer | int |
12089 +---------------------+-----------------+
12090 | ip | ip |
12091 +---------------------+-----------------+
12092 | string | str |
12093 +---------------------+-----------------+
12094 | binary | none, use "-m" |
12095 +---------------------+-----------------+
12096
12097Note that in order to match a binary samples, it is mandatory to specify a
12098matching method, see below.
12099
Willy Tarreau74ca5042013-06-11 23:12:07 +020012100The ACL engine can match these types against patterns of the following types :
12101 - boolean
12102 - integer or integer range
12103 - IP address / network
12104 - string (exact, substring, suffix, prefix, subdir, domain)
12105 - regular expression
12106 - hex block
12107
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012108The following ACL flags are currently supported :
12109
Willy Tarreau2b5285d2010-05-09 23:45:24 +020012110 -i : ignore case during matching of all subsequent patterns.
12111 -f : load patterns from a file.
Willy Tarreau74ca5042013-06-11 23:12:07 +020012112 -m : use a specific pattern matching method
Thierry FOURNIERb7729c92014-02-11 16:24:41 +010012113 -n : forbid the DNS resolutions
Thierry FOURNIER9860c412014-01-29 14:23:29 +010012114 -M : load the file pointed by -f like a map file.
Thierry FOURNIER3534d882014-01-20 17:01:44 +010012115 -u : force the unique id of the ACL
Willy Tarreau6a06a402007-07-15 20:15:28 +020012116 -- : force end of flags. Useful when a string looks like one of the flags.
12117
Willy Tarreau74ca5042013-06-11 23:12:07 +020012118The "-f" flag is followed by the name of a file from which all lines will be
12119read as individual values. It is even possible to pass multiple "-f" arguments
12120if the patterns are to be loaded from multiple files. Empty lines as well as
12121lines beginning with a sharp ('#') will be ignored. All leading spaces and tabs
12122will be stripped. If it is absolutely necessary to insert a valid pattern
12123beginning with a sharp, just prefix it with a space so that it is not taken for
12124a comment. Depending on the data type and match method, haproxy may load the
12125lines into a binary tree, allowing very fast lookups. This is true for IPv4 and
12126exact string matching. In this case, duplicates will automatically be removed.
12127
Thierry FOURNIER9860c412014-01-29 14:23:29 +010012128The "-M" flag allows an ACL to use a map file. If this flag is set, the file is
12129parsed as two column file. The first column contains the patterns used by the
12130ACL, and the second column contain the samples. The sample can be used later by
12131a map. This can be useful in some rare cases where an ACL would just be used to
12132check for the existence of a pattern in a map before a mapping is applied.
12133
Thierry FOURNIER3534d882014-01-20 17:01:44 +010012134The "-u" flag forces the unique id of the ACL. This unique id is used with the
12135socket interface to identify ACL and dynamically change its values. Note that a
12136file is always identified by its name even if an id is set.
12137
Willy Tarreau74ca5042013-06-11 23:12:07 +020012138Also, note that the "-i" flag applies to subsequent entries and not to entries
12139loaded from files preceding it. For instance :
12140
12141 acl valid-ua hdr(user-agent) -f exact-ua.lst -i -f generic-ua.lst test
12142
12143In this example, each line of "exact-ua.lst" will be exactly matched against
12144the "user-agent" header of the request. Then each line of "generic-ua" will be
12145case-insensitively matched. Then the word "test" will be insensitively matched
12146as well.
12147
12148The "-m" flag is used to select a specific pattern matching method on the input
12149sample. All ACL-specific criteria imply a pattern matching method and generally
12150do not need this flag. However, this flag is useful with generic sample fetch
12151methods to describe how they're going to be matched against the patterns. This
12152is required for sample fetches which return data type for which there is no
12153obvious matching method (eg: string or binary). When "-m" is specified and
12154followed by a pattern matching method name, this method is used instead of the
12155default one for the criterion. This makes it possible to match contents in ways
12156that were not initially planned, or with sample fetch methods which return a
12157string. The matching method also affects the way the patterns are parsed.
12158
Thierry FOURNIERb7729c92014-02-11 16:24:41 +010012159The "-n" flag forbids the dns resolutions. It is used with the load of ip files.
12160By default, if the parser cannot parse ip address it considers that the parsed
12161string is maybe a domain name and try dns resolution. The flag "-n" disable this
12162resolution. It is useful for detecting malformed ip lists. Note that if the DNS
12163server is not reachable, the haproxy configuration parsing may last many minutes
12164waiting fir the timeout. During this time no error messages are displayed. The
12165flag "-n" disable this behavior. Note also that during the runtime, this
12166function is disabled for the dynamic acl modifications.
12167
Willy Tarreau74ca5042013-06-11 23:12:07 +020012168There are some restrictions however. Not all methods can be used with all
12169sample fetch methods. Also, if "-m" is used in conjunction with "-f", it must
12170be placed first. The pattern matching method must be one of the following :
Willy Tarreau5adeda12013-03-31 22:13:34 +020012171
12172 - "found" : only check if the requested sample could be found in the stream,
12173 but do not compare it against any pattern. It is recommended not
Willy Tarreau74ca5042013-06-11 23:12:07 +020012174 to pass any pattern to avoid confusion. This matching method is
12175 particularly useful to detect presence of certain contents such
12176 as headers, cookies, etc... even if they are empty and without
12177 comparing them to anything nor counting them.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012178
12179 - "bool" : check the value as a boolean. It can only be applied to fetches
12180 which return a boolean or integer value, and takes no pattern.
Willy Tarreau74ca5042013-06-11 23:12:07 +020012181 Value zero or false does not match, all other values do match.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012182
12183 - "int" : match the value as an integer. It can be used with integer and
Willy Tarreau74ca5042013-06-11 23:12:07 +020012184 boolean samples. Boolean false is integer 0, true is integer 1.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012185
12186 - "ip" : match the value as an IPv4 or IPv6 address. It is compatible
Willy Tarreau74ca5042013-06-11 23:12:07 +020012187 with IP address samples only, so it is implied and never needed.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012188
12189 - "bin" : match the contents against an hexadecimal string representing a
12190 binary sequence. This may be used with binary or string samples.
12191
12192 - "len" : match the sample's length as an integer. This may be used with
12193 binary or string samples.
12194
Willy Tarreau74ca5042013-06-11 23:12:07 +020012195 - "str" : exact match : match the contents against a string. This may be
12196 used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012197
Willy Tarreau74ca5042013-06-11 23:12:07 +020012198 - "sub" : substring match : check that the contents contain at least one of
12199 the provided string patterns. This may be used with binary or
12200 string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012201
Willy Tarreau74ca5042013-06-11 23:12:07 +020012202 - "reg" : regex match : match the contents against a list of regular
12203 expressions. This may be used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012204
Willy Tarreau74ca5042013-06-11 23:12:07 +020012205 - "beg" : prefix match : check that the contents begin like the provided
12206 string patterns. This may be used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012207
Willy Tarreau74ca5042013-06-11 23:12:07 +020012208 - "end" : suffix match : check that the contents end like the provided
12209 string patterns. This may be used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012210
Willy Tarreau74ca5042013-06-11 23:12:07 +020012211 - "dir" : subdir match : check that a slash-delimited portion of the
12212 contents exactly matches one of the provided string patterns.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012213 This may be used with binary or string samples.
12214
Willy Tarreau74ca5042013-06-11 23:12:07 +020012215 - "dom" : domain match : check that a dot-delimited portion of the contents
12216 exactly match one of the provided string patterns. This may be
12217 used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012218
12219For example, to quickly detect the presence of cookie "JSESSIONID" in an HTTP
12220request, it is possible to do :
12221
12222 acl jsess_present cook(JSESSIONID) -m found
12223
12224In order to apply a regular expression on the 500 first bytes of data in the
12225buffer, one would use the following acl :
12226
12227 acl script_tag payload(0,500) -m reg -i <script>
12228
Willy Tarreaue6b11e42013-11-26 19:02:32 +010012229On systems where the regex library is much slower when using "-i", it is
12230possible to convert the sample to lowercase before matching, like this :
12231
12232 acl script_tag payload(0,500),lower -m reg <script>
12233
Willy Tarreau74ca5042013-06-11 23:12:07 +020012234All ACL-specific criteria imply a default matching method. Most often, these
12235criteria are composed by concatenating the name of the original sample fetch
12236method and the matching method. For example, "hdr_beg" applies the "beg" match
12237to samples retrieved using the "hdr" fetch method. Since all ACL-specific
12238criteria rely on a sample fetch method, it is always possible instead to use
12239the original sample fetch method and the explicit matching method using "-m".
Willy Tarreau2b5285d2010-05-09 23:45:24 +020012240
Willy Tarreau74ca5042013-06-11 23:12:07 +020012241If an alternate match is specified using "-m" on an ACL-specific criterion,
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030012242the matching method is simply applied to the underlying sample fetch method.
12243For example, all ACLs below are exact equivalent :
Willy Tarreau2b5285d2010-05-09 23:45:24 +020012244
Willy Tarreau74ca5042013-06-11 23:12:07 +020012245 acl short_form hdr_beg(host) www.
12246 acl alternate1 hdr_beg(host) -m beg www.
12247 acl alternate2 hdr_dom(host) -m beg www.
12248 acl alternate3 hdr(host) -m beg www.
Willy Tarreau2b5285d2010-05-09 23:45:24 +020012249
Willy Tarreau2b5285d2010-05-09 23:45:24 +020012250
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012251The table below summarizes the compatibility matrix between sample or converter
12252types and the pattern types to fetch against. It indicates for each compatible
12253combination the name of the matching method to be used, surrounded with angle
12254brackets ">" and "<" when the method is the default one and will work by
12255default without "-m".
Willy Tarreau0ba27502007-12-24 16:55:16 +010012256
Willy Tarreau74ca5042013-06-11 23:12:07 +020012257 +-------------------------------------------------+
12258 | Input sample type |
12259 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012260 | pattern type | boolean | integer | ip | string | binary |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012261 +----------------------+---------+---------+---------+---------+---------+
12262 | none (presence only) | found | found | found | found | found |
12263 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012264 | none (boolean value) |> bool <| bool | | bool | |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012265 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012266 | integer (value) | int |> int <| int | int | |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012267 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012268 | integer (length) | len | len | len | len | len |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012269 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012270 | IP address | | |> ip <| ip | ip |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012271 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012272 | exact string | str | str | str |> str <| str |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012273 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012274 | prefix | beg | beg | beg | beg | beg |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012275 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012276 | suffix | end | end | end | end | end |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012277 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012278 | substring | sub | sub | sub | sub | sub |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012279 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012280 | subdir | dir | dir | dir | dir | dir |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012281 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012282 | domain | dom | dom | dom | dom | dom |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012283 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012284 | regex | reg | reg | reg | reg | reg |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012285 +----------------------+---------+---------+---------+---------+---------+
12286 | hex block | | | | bin | bin |
12287 +----------------------+---------+---------+---------+---------+---------+
Willy Tarreau6a06a402007-07-15 20:15:28 +020012288
12289
Willy Tarreau74ca5042013-06-11 23:12:07 +0200122907.1.1. Matching booleans
12291------------------------
12292
12293In order to match a boolean, no value is needed and all values are ignored.
12294Boolean matching is used by default for all fetch methods of type "boolean".
12295When boolean matching is used, the fetched value is returned as-is, which means
12296that a boolean "true" will always match and a boolean "false" will never match.
12297
12298Boolean matching may also be enforced using "-m bool" on fetch methods which
12299return an integer value. Then, integer value 0 is converted to the boolean
12300"false" and all other values are converted to "true".
12301
Willy Tarreau6a06a402007-07-15 20:15:28 +020012302
Willy Tarreau74ca5042013-06-11 23:12:07 +0200123037.1.2. Matching integers
12304------------------------
12305
12306Integer matching applies by default to integer fetch methods. It can also be
12307enforced on boolean fetches using "-m int". In this case, "false" is converted
12308to the integer 0, and "true" is converted to the integer 1.
12309
12310Integer matching also supports integer ranges and operators. Note that integer
12311matching only applies to positive values. A range is a value expressed with a
12312lower and an upper bound separated with a colon, both of which may be omitted.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012313
12314For instance, "1024:65535" is a valid range to represent a range of
12315unprivileged ports, and "1024:" would also work. "0:1023" is a valid
12316representation of privileged ports, and ":1023" would also work.
12317
Willy Tarreau62644772008-07-16 18:36:06 +020012318As a special case, some ACL functions support decimal numbers which are in fact
12319two integers separated by a dot. This is used with some version checks for
12320instance. All integer properties apply to those decimal numbers, including
12321ranges and operators.
12322
Willy Tarreau6a06a402007-07-15 20:15:28 +020012323For an easier usage, comparison operators are also supported. Note that using
Willy Tarreau0ba27502007-12-24 16:55:16 +010012324operators with ranges does not make much sense and is strongly discouraged.
12325Similarly, it does not make much sense to perform order comparisons with a set
12326of values.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012327
Willy Tarreau0ba27502007-12-24 16:55:16 +010012328Available operators for integer matching are :
Willy Tarreau6a06a402007-07-15 20:15:28 +020012329
12330 eq : true if the tested value equals at least one value
12331 ge : true if the tested value is greater than or equal to at least one value
12332 gt : true if the tested value is greater than at least one value
12333 le : true if the tested value is less than or equal to at least one value
12334 lt : true if the tested value is less than at least one value
12335
Willy Tarreau0ba27502007-12-24 16:55:16 +010012336For instance, the following ACL matches any negative Content-Length header :
Willy Tarreau6a06a402007-07-15 20:15:28 +020012337
12338 acl negative-length hdr_val(content-length) lt 0
12339
Willy Tarreau62644772008-07-16 18:36:06 +020012340This one matches SSL versions between 3.0 and 3.1 (inclusive) :
12341
12342 acl sslv3 req_ssl_ver 3:3.1
12343
Willy Tarreau6a06a402007-07-15 20:15:28 +020012344
Willy Tarreau74ca5042013-06-11 23:12:07 +0200123457.1.3. Matching strings
12346-----------------------
12347
12348String matching applies to string or binary fetch methods, and exists in 6
12349different forms :
12350
12351 - exact match (-m str) : the extracted string must exactly match the
12352 patterns ;
12353
12354 - substring match (-m sub) : the patterns are looked up inside the
12355 extracted string, and the ACL matches if any of them is found inside ;
12356
12357 - prefix match (-m beg) : the patterns are compared with the beginning of
12358 the extracted string, and the ACL matches if any of them matches.
12359
12360 - suffix match (-m end) : the patterns are compared with the end of the
12361 extracted string, and the ACL matches if any of them matches.
12362
Baptiste Assmann33db6002016-03-06 23:32:10 +010012363 - subdir match (-m dir) : the patterns are looked up inside the extracted
Willy Tarreau74ca5042013-06-11 23:12:07 +020012364 string, delimited with slashes ("/"), and the ACL matches if any of them
12365 matches.
12366
12367 - domain match (-m dom) : the patterns are looked up inside the extracted
12368 string, delimited with dots ("."), and the ACL matches if any of them
12369 matches.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012370
12371String matching applies to verbatim strings as they are passed, with the
12372exception of the backslash ("\") which makes it possible to escape some
12373characters such as the space. If the "-i" flag is passed before the first
12374string, then the matching will be performed ignoring the case. In order
12375to match the string "-i", either set it second, or pass the "--" flag
Willy Tarreau0ba27502007-12-24 16:55:16 +010012376before the first string. Same applies of course to match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +020012377
12378
Willy Tarreau74ca5042013-06-11 23:12:07 +0200123797.1.4. Matching regular expressions (regexes)
12380---------------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +020012381
12382Just like with string matching, regex matching applies to verbatim strings as
12383they are passed, with the exception of the backslash ("\") which makes it
12384possible to escape some characters such as the space. If the "-i" flag is
12385passed before the first regex, then the matching will be performed ignoring
12386the case. In order to match the string "-i", either set it second, or pass
Willy Tarreau0ba27502007-12-24 16:55:16 +010012387the "--" flag before the first string. Same principle applies of course to
12388match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +020012389
12390
Willy Tarreau74ca5042013-06-11 23:12:07 +0200123917.1.5. Matching arbitrary data blocks
12392-------------------------------------
12393
12394It is possible to match some extracted samples against a binary block which may
12395not safely be represented as a string. For this, the patterns must be passed as
12396a series of hexadecimal digits in an even number, when the match method is set
12397to binary. Each sequence of two digits will represent a byte. The hexadecimal
12398digits may be used upper or lower case.
12399
12400Example :
12401 # match "Hello\n" in the input stream (\x48 \x65 \x6c \x6c \x6f \x0a)
12402 acl hello payload(0,6) -m bin 48656c6c6f0a
12403
12404
124057.1.6. Matching IPv4 and IPv6 addresses
12406---------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +020012407
12408IPv4 addresses values can be specified either as plain addresses or with a
12409netmask appended, in which case the IPv4 address matches whenever it is
12410within the network. Plain addresses may also be replaced with a resolvable
Willy Tarreaud2a4aa22008-01-31 15:28:22 +010012411host name, but this practice is generally discouraged as it makes it more
Willy Tarreau0ba27502007-12-24 16:55:16 +010012412difficult to read and debug configurations. If hostnames are used, you should
12413at least ensure that they are present in /etc/hosts so that the configuration
12414does not depend on any random DNS match at the moment the configuration is
12415parsed.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012416
Daniel Schnellereba56342016-04-13 00:26:52 +020012417The dotted IPv4 address notation is supported in both regular as well as the
12418abbreviated form with all-0-octets omitted:
12419
12420 +------------------+------------------+------------------+
12421 | Example 1 | Example 2 | Example 3 |
12422 +------------------+------------------+------------------+
12423 | 192.168.0.1 | 10.0.0.12 | 127.0.0.1 |
12424 | 192.168.1 | 10.12 | 127.1 |
12425 | 192.168.0.1/22 | 10.0.0.12/8 | 127.0.0.1/8 |
12426 | 192.168.1/22 | 10.12/8 | 127.1/8 |
12427 +------------------+------------------+------------------+
12428
12429Notice that this is different from RFC 4632 CIDR address notation in which
12430192.168.42/24 would be equivalent to 192.168.42.0/24.
12431
Willy Tarreauceb4ac92012-04-28 00:41:46 +020012432IPv6 may be entered in their usual form, with or without a netmask appended.
12433Only bit counts are accepted for IPv6 netmasks. In order to avoid any risk of
12434trouble with randomly resolved IP addresses, host names are never allowed in
12435IPv6 patterns.
12436
12437HAProxy is also able to match IPv4 addresses with IPv6 addresses in the
12438following situations :
12439 - tested address is IPv4, pattern address is IPv4, the match applies
12440 in IPv4 using the supplied mask if any.
12441 - tested address is IPv6, pattern address is IPv6, the match applies
12442 in IPv6 using the supplied mask if any.
12443 - tested address is IPv6, pattern address is IPv4, the match applies in IPv4
12444 using the pattern's mask if the IPv6 address matches with 2002:IPV4::,
12445 ::IPV4 or ::ffff:IPV4, otherwise it fails.
12446 - tested address is IPv4, pattern address is IPv6, the IPv4 address is first
12447 converted to IPv6 by prefixing ::ffff: in front of it, then the match is
12448 applied in IPv6 using the supplied IPv6 mask.
12449
Willy Tarreau74ca5042013-06-11 23:12:07 +020012450
124517.2. Using ACLs to form conditions
12452----------------------------------
12453
12454Some actions are only performed upon a valid condition. A condition is a
12455combination of ACLs with operators. 3 operators are supported :
12456
12457 - AND (implicit)
12458 - OR (explicit with the "or" keyword or the "||" operator)
12459 - Negation with the exclamation mark ("!")
Willy Tarreau6a06a402007-07-15 20:15:28 +020012460
Willy Tarreau74ca5042013-06-11 23:12:07 +020012461A condition is formed as a disjunctive form:
Willy Tarreau6a06a402007-07-15 20:15:28 +020012462
Willy Tarreau74ca5042013-06-11 23:12:07 +020012463 [!]acl1 [!]acl2 ... [!]acln { or [!]acl1 [!]acl2 ... [!]acln } ...
Willy Tarreaubef91e72013-03-31 23:14:46 +020012464
Willy Tarreau74ca5042013-06-11 23:12:07 +020012465Such conditions are generally used after an "if" or "unless" statement,
12466indicating when the condition will trigger the action.
Willy Tarreaubef91e72013-03-31 23:14:46 +020012467
Willy Tarreau74ca5042013-06-11 23:12:07 +020012468For instance, to block HTTP requests to the "*" URL with methods other than
12469"OPTIONS", as well as POST requests without content-length, and GET or HEAD
12470requests with a content-length greater than 0, and finally every request which
12471is not either GET/HEAD/POST/OPTIONS !
12472
12473 acl missing_cl hdr_cnt(Content-length) eq 0
Jarno Huuskonen84c51ec2017-04-03 14:20:34 +030012474 http-request deny if HTTP_URL_STAR !METH_OPTIONS || METH_POST missing_cl
12475 http-request deny if METH_GET HTTP_CONTENT
12476 http-request deny unless METH_GET or METH_POST or METH_OPTIONS
Willy Tarreau74ca5042013-06-11 23:12:07 +020012477
12478To select a different backend for requests to static contents on the "www" site
12479and to every request on the "img", "video", "download" and "ftp" hosts :
12480
12481 acl url_static path_beg /static /images /img /css
12482 acl url_static path_end .gif .png .jpg .css .js
12483 acl host_www hdr_beg(host) -i www
12484 acl host_static hdr_beg(host) -i img. video. download. ftp.
12485
12486 # now use backend "static" for all static-only hosts, and for static urls
12487 # of host "www". Use backend "www" for the rest.
12488 use_backend static if host_static or host_www url_static
12489 use_backend www if host_www
12490
12491It is also possible to form rules using "anonymous ACLs". Those are unnamed ACL
12492expressions that are built on the fly without needing to be declared. They must
12493be enclosed between braces, with a space before and after each brace (because
12494the braces must be seen as independent words). Example :
12495
12496 The following rule :
12497
12498 acl missing_cl hdr_cnt(Content-length) eq 0
Jarno Huuskonen84c51ec2017-04-03 14:20:34 +030012499 http-request deny if METH_POST missing_cl
Willy Tarreau74ca5042013-06-11 23:12:07 +020012500
12501 Can also be written that way :
12502
Jarno Huuskonen84c51ec2017-04-03 14:20:34 +030012503 http-request deny if METH_POST { hdr_cnt(Content-length) eq 0 }
Willy Tarreau74ca5042013-06-11 23:12:07 +020012504
12505It is generally not recommended to use this construct because it's a lot easier
12506to leave errors in the configuration when written that way. However, for very
12507simple rules matching only one source IP address for instance, it can make more
12508sense to use them than to declare ACLs with random names. Another example of
12509good use is the following :
12510
12511 With named ACLs :
12512
12513 acl site_dead nbsrv(dynamic) lt 2
12514 acl site_dead nbsrv(static) lt 2
12515 monitor fail if site_dead
12516
12517 With anonymous ACLs :
12518
12519 monitor fail if { nbsrv(dynamic) lt 2 } || { nbsrv(static) lt 2 }
12520
Jarno Huuskonen84c51ec2017-04-03 14:20:34 +030012521See section 4.2 for detailed help on the "http-request deny" and "use_backend"
12522keywords.
Willy Tarreau74ca5042013-06-11 23:12:07 +020012523
12524
125257.3. Fetching samples
12526---------------------
12527
12528Historically, sample fetch methods were only used to retrieve data to match
12529against patterns using ACLs. With the arrival of stick-tables, a new class of
12530sample fetch methods was created, most often sharing the same syntax as their
12531ACL counterpart. These sample fetch methods are also known as "fetches". As
12532of now, ACLs and fetches have converged. All ACL fetch methods have been made
12533available as fetch methods, and ACLs may use any sample fetch method as well.
12534
12535This section details all available sample fetch methods and their output type.
12536Some sample fetch methods have deprecated aliases that are used to maintain
12537compatibility with existing configurations. They are then explicitly marked as
12538deprecated and should not be used in new setups.
12539
12540The ACL derivatives are also indicated when available, with their respective
12541matching methods. These ones all have a well defined default pattern matching
12542method, so it is never necessary (though allowed) to pass the "-m" option to
12543indicate how the sample will be matched using ACLs.
12544
12545As indicated in the sample type versus matching compatibility matrix above,
12546when using a generic sample fetch method in an ACL, the "-m" option is
12547mandatory unless the sample type is one of boolean, integer, IPv4 or IPv6. When
12548the same keyword exists as an ACL keyword and as a standard fetch method, the
12549ACL engine will automatically pick the ACL-only one by default.
12550
12551Some of these keywords support one or multiple mandatory arguments, and one or
12552multiple optional arguments. These arguments are strongly typed and are checked
12553when the configuration is parsed so that there is no risk of running with an
12554incorrect argument (eg: an unresolved backend name). Fetch function arguments
12555are passed between parenthesis and are delimited by commas. When an argument
12556is optional, it will be indicated below between square brackets ('[ ]'). When
12557all arguments are optional, the parenthesis may be omitted.
12558
12559Thus, the syntax of a standard sample fetch method is one of the following :
12560 - name
12561 - name(arg1)
12562 - name(arg1,arg2)
12563
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012564
125657.3.1. Converters
12566-----------------
12567
Willy Tarreaue6b11e42013-11-26 19:02:32 +010012568Sample fetch methods may be combined with transformations to be applied on top
12569of the fetched sample (also called "converters"). These combinations form what
12570is called "sample expressions" and the result is a "sample". Initially this
12571was only supported by "stick on" and "stick store-request" directives but this
12572has now be extended to all places where samples may be used (acls, log-format,
12573unique-id-format, add-header, ...).
12574
12575These transformations are enumerated as a series of specific keywords after the
12576sample fetch method. These keywords may equally be appended immediately after
12577the fetch keyword's argument, delimited by a comma. These keywords can also
12578support some arguments (eg: a netmask) which must be passed in parenthesis.
Willy Tarreau0ba27502007-12-24 16:55:16 +010012579
Willy Tarreau97707872015-01-27 15:12:13 +010012580A certain category of converters are bitwise and arithmetic operators which
12581support performing basic operations on integers. Some bitwise operations are
12582supported (and, or, xor, cpl) and some arithmetic operations are supported
12583(add, sub, mul, div, mod, neg). Some comparators are provided (odd, even, not,
12584bool) which make it possible to report a match without having to write an ACL.
12585
Willy Tarreau74ca5042013-06-11 23:12:07 +020012586The currently available list of transformation keywords include :
Willy Tarreau0ba27502007-12-24 16:55:16 +010012587
Ben Shillitof25e8e52016-12-02 14:25:37 +00001258851d.single(<prop>[,<prop>*])
12589 Returns values for the properties requested as a string, where values are
12590 separated by the delimiter specified with "51degrees-property-separator".
12591 The device is identified using the User-Agent header passed to the
12592 converter. The function can be passed up to five property names, and if a
12593 property name can't be found, the value "NoData" is returned.
12594
12595 Example :
12596 # Here the header "X-51D-DeviceTypeMobileTablet" is added to the request
12597 # containg values for the three properties requested by using the
12598 # User-Agent passed to the converter.
12599 frontend http-in
12600 bind *:8081
12601 default_backend servers
12602 http-request set-header X-51D-DeviceTypeMobileTablet \
12603 %[req.fhdr(User-Agent),51d.single(DeviceType,IsMobile,IsTablet)]
12604
Willy Tarreau97707872015-01-27 15:12:13 +010012605add(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012606 Adds <value> to the input value of type signed integer, and returns the
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012607 result as a signed integer. <value> can be a numeric value or a variable
Daniel Schneller0b547052016-03-21 20:46:57 +010012608 name. The name of the variable starts with an indication about its scope. The
12609 scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012610 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012611 "sess" : the variable is shared with the whole session
12612 "txn" : the variable is shared with the transaction (request and response)
12613 "req" : the variable is shared only during request processing
12614 "res" : the variable is shared only during response processing
12615 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012616 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012617
12618and(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012619 Performs a bitwise "AND" between <value> and the input value of type signed
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012620 integer, and returns the result as an signed integer. <value> can be a
Daniel Schneller0b547052016-03-21 20:46:57 +010012621 numeric value or a variable name. The name of the variable starts with an
12622 indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012623 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012624 "sess" : the variable is shared with the whole session
12625 "txn" : the variable is shared with the transaction (request and response)
12626 "req" : the variable is shared only during request processing
12627 "res" : the variable is shared only during response processing
12628 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012629 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012630
Holger Just1bfc24b2017-05-06 00:56:53 +020012631b64dec
12632 Converts (decodes) a base64 encoded input string to its binary
12633 representation. It performs the inverse operation of base64().
12634
Emeric Brun53d1a982014-04-30 18:21:37 +020012635base64
12636 Converts a binary input sample to a base64 string. It is used to log or
12637 transfer binary content in a way that can be reliably transferred (eg:
12638 an SSL ID can be copied in a header).
12639
Willy Tarreau97707872015-01-27 15:12:13 +010012640bool
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012641 Returns a boolean TRUE if the input value of type signed integer is
Willy Tarreau97707872015-01-27 15:12:13 +010012642 non-null, otherwise returns FALSE. Used in conjunction with and(), it can be
12643 used to report true/false for bit testing on input values (eg: verify the
12644 presence of a flag).
12645
Emeric Brun54c4ac82014-11-03 15:32:43 +010012646bytes(<offset>[,<length>])
12647 Extracts some bytes from an input binary sample. The result is a binary
12648 sample starting at an offset (in bytes) of the original sample and
Tim Düsterhus4896c442016-11-29 02:15:19 +010012649 optionally truncated at the given length.
Emeric Brun54c4ac82014-11-03 15:32:43 +010012650
Willy Tarreau97707872015-01-27 15:12:13 +010012651cpl
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012652 Takes the input value of type signed integer, applies a ones-complement
12653 (flips all bits) and returns the result as an signed integer.
Willy Tarreau97707872015-01-27 15:12:13 +010012654
Willy Tarreau80599772015-01-20 19:35:24 +010012655crc32([<avalanche>])
12656 Hashes a binary input sample into an unsigned 32-bit quantity using the CRC32
12657 hash function. Optionally, it is possible to apply a full avalanche hash
12658 function to the output if the optional <avalanche> argument equals 1. This
12659 converter uses the same functions as used by the various hash-based load
12660 balancing algorithms, so it will provide exactly the same results. It is
12661 provided for compatibility with other software which want a CRC32 to be
12662 computed on some input keys, so it follows the most common implementation as
12663 found in Ethernet, Gzip, PNG, etc... It is slower than the other algorithms
12664 but may provide a better or at least less predictable distribution. It must
12665 not be used for security purposes as a 32-bit hash is trivial to break. See
12666 also "djb2", "sdbm", "wt6" and the "hash-type" directive.
12667
David Carlier29b3ca32015-09-25 14:09:21 +010012668da-csv-conv(<prop>[,<prop>*])
David Carlier4542b102015-06-01 13:54:29 +020012669 Asks the DeviceAtlas converter to identify the User Agent string passed on
12670 input, and to emit a string made of the concatenation of the properties
12671 enumerated in argument, delimited by the separator defined by the global
12672 keyword "deviceatlas-property-separator", or by default the pipe character
David Carlier840b0242016-03-16 10:09:55 +000012673 ('|'). There's a limit of 12 different properties imposed by the haproxy
David Carlier4542b102015-06-01 13:54:29 +020012674 configuration language.
12675
12676 Example:
12677 frontend www
Cyril Bonté307ee1e2015-09-28 23:16:06 +020012678 bind *:8881
12679 default_backend servers
David Carlier840b0242016-03-16 10:09:55 +000012680 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 +020012681
Thierry FOURNIER9687c772015-05-07 15:46:29 +020012682debug
12683 This converter is used as debug tool. It dumps on screen the content and the
12684 type of the input sample. The sample is returned as is on its output. This
12685 converter only exists when haproxy was built with debugging enabled.
12686
Willy Tarreau97707872015-01-27 15:12:13 +010012687div(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012688 Divides the input value of type signed integer by <value>, and returns the
12689 result as an signed integer. If <value> is null, the largest unsigned
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012690 integer is returned (typically 2^63-1). <value> can be a numeric value or a
Daniel Schneller0b547052016-03-21 20:46:57 +010012691 variable name. The name of the variable starts with an indication about its
12692 scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012693 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012694 "sess" : the variable is shared with the whole session
12695 "txn" : the variable is shared with the transaction (request and response)
12696 "req" : the variable is shared only during request processing
12697 "res" : the variable is shared only during response processing
12698 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012699 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012700
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020012701djb2([<avalanche>])
12702 Hashes a binary input sample into an unsigned 32-bit quantity using the DJB2
12703 hash function. Optionally, it is possible to apply a full avalanche hash
12704 function to the output if the optional <avalanche> argument equals 1. This
12705 converter uses the same functions as used by the various hash-based load
12706 balancing algorithms, so it will provide exactly the same results. It is
12707 mostly intended for debugging, but can be used as a stick-table entry to
12708 collect rough statistics. It must not be used for security purposes as a
Willy Tarreau80599772015-01-20 19:35:24 +010012709 32-bit hash is trivial to break. See also "crc32", "sdbm", "wt6" and the
12710 "hash-type" directive.
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020012711
Willy Tarreau97707872015-01-27 15:12:13 +010012712even
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012713 Returns a boolean TRUE if the input value of type signed integer is even
Willy Tarreau97707872015-01-27 15:12:13 +010012714 otherwise returns FALSE. It is functionally equivalent to "not,and(1),bool".
12715
Emeric Brunf399b0d2014-11-03 17:07:03 +010012716field(<index>,<delimiters>)
12717 Extracts the substring at the given index considering given delimiters from
12718 an input string. Indexes start at 1 and delimiters are a string formatted
12719 list of chars.
12720
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012721hex
12722 Converts a binary input sample to an hex string containing two hex digits per
12723 input byte. It is used to log or transfer hex dumps of some binary input data
12724 in a way that can be reliably transferred (eg: an SSL ID can be copied in a
12725 header).
Thierry FOURNIER2f49d6d2014-03-12 15:01:52 +010012726
Dragan Dosen3f957b22017-10-24 09:27:34 +020012727hex2i
12728 Converts a hex string containing two hex digits per input byte to an
12729 integer. If the input value can not be converted, then zero is returned.
12730
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012731http_date([<offset>])
12732 Converts an integer supposed to contain a date since epoch to a string
12733 representing this date in a format suitable for use in HTTP header fields. If
12734 an offset value is specified, then it is a number of seconds that is added to
12735 the date before the conversion is operated. This is particularly useful to
12736 emit Date header fields, Expires values in responses when combined with a
12737 positive offset, or Last-Modified values when the offset is negative.
Willy Tarreau74ca5042013-06-11 23:12:07 +020012738
Willy Tarreaud9f316a2014-07-10 14:03:38 +020012739in_table(<table>)
12740 Uses the string representation of the input sample to perform a look up in
12741 the specified table. If the key is not found in the table, a boolean false
12742 is returned. Otherwise a boolean true is returned. This can be used to verify
12743 the presence of a certain key in a table tracking some elements (eg: whether
12744 or not a source IP address or an Authorization header was already seen).
12745
Willy Tarreauffcb2e42014-07-10 16:29:08 +020012746ipmask(<mask>)
12747 Apply a mask to an IPv4 address, and use the result for lookups and storage.
12748 This can be used to make all hosts within a certain mask to share the same
12749 table entries and as such use the same server. The mask can be passed in
12750 dotted form (eg: 255.255.255.0) or in CIDR form (eg: 24).
12751
Thierry FOURNIER317e1c42014-08-12 10:20:47 +020012752json([<input-code>])
12753 Escapes the input string and produces an ASCII ouput string ready to use as a
12754 JSON string. The converter tries to decode the input string according to the
Herve COMMOWICK8dfe8632016-08-05 12:01:20 +020012755 <input-code> parameter. It can be "ascii", "utf8", "utf8s", "utf8p" or
Thierry FOURNIER317e1c42014-08-12 10:20:47 +020012756 "utf8ps". The "ascii" decoder never fails. The "utf8" decoder detects 3 types
12757 of errors:
12758 - bad UTF-8 sequence (lone continuation byte, bad number of continuation
12759 bytes, ...)
12760 - invalid range (the decoded value is within a UTF-8 prohibited range),
12761 - code overlong (the value is encoded with more bytes than necessary).
12762
12763 The UTF-8 JSON encoding can produce a "too long value" error when the UTF-8
12764 character is greater than 0xffff because the JSON string escape specification
12765 only authorizes 4 hex digits for the value encoding. The UTF-8 decoder exists
12766 in 4 variants designated by a combination of two suffix letters : "p" for
12767 "permissive" and "s" for "silently ignore". The behaviors of the decoders
12768 are :
12769 - "ascii" : never fails ;
12770 - "utf8" : fails on any detected errors ;
12771 - "utf8s" : never fails, but removes characters corresponding to errors ;
12772 - "utf8p" : accepts and fixes the overlong errors, but fails on any other
12773 error ;
12774 - "utf8ps" : never fails, accepts and fixes the overlong errors, but removes
12775 characters corresponding to the other errors.
12776
12777 This converter is particularly useful for building properly escaped JSON for
12778 logging to servers which consume JSON-formated traffic logs.
12779
12780 Example:
Thierry FOURNIER317e1c42014-08-12 10:20:47 +020012781 capture request header Host len 15
Herve COMMOWICK8dfe8632016-08-05 12:01:20 +020012782 capture request header user-agent len 150
12783 log-format '{"ip":"%[src]","user-agent":"%[capture.req.hdr(1),json(utf8s)]"}'
Thierry FOURNIER317e1c42014-08-12 10:20:47 +020012784
12785 Input request from client 127.0.0.1:
12786 GET / HTTP/1.0
12787 User-Agent: Very "Ugly" UA 1/2
12788
12789 Output log:
12790 {"ip":"127.0.0.1","user-agent":"Very \"Ugly\" UA 1\/2"}
12791
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012792language(<value>[,<default>])
12793 Returns the value with the highest q-factor from a list as extracted from the
12794 "accept-language" header using "req.fhdr". Values with no q-factor have a
12795 q-factor of 1. Values with a q-factor of 0 are dropped. Only values which
12796 belong to the list of semi-colon delimited <values> will be considered. The
12797 argument <value> syntax is "lang[;lang[;lang[;...]]]". If no value matches the
12798 given list and a default value is provided, it is returned. Note that language
12799 names may have a variant after a dash ('-'). If this variant is present in the
12800 list, it will be matched, but if it is not, only the base language is checked.
12801 The match is case-sensitive, and the output string is always one of those
12802 provided in arguments. The ordering of arguments is meaningless, only the
12803 ordering of the values in the request counts, as the first value among
12804 multiple sharing the same q-factor is used.
Thierry FOURNIERad903512014-04-11 17:51:01 +020012805
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012806 Example :
Thierry FOURNIERad903512014-04-11 17:51:01 +020012807
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012808 # this configuration switches to the backend matching a
12809 # given language based on the request :
Thierry FOURNIERad903512014-04-11 17:51:01 +020012810
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012811 acl es req.fhdr(accept-language),language(es;fr;en) -m str es
12812 acl fr req.fhdr(accept-language),language(es;fr;en) -m str fr
12813 acl en req.fhdr(accept-language),language(es;fr;en) -m str en
12814 use_backend spanish if es
12815 use_backend french if fr
12816 use_backend english if en
12817 default_backend choose_your_language
Thierry FOURNIERad903512014-04-11 17:51:01 +020012818
Willy Tarreauffcb2e42014-07-10 16:29:08 +020012819lower
12820 Convert a string sample to lower case. This can only be placed after a string
12821 sample fetch function or after a transformation keyword returning a string
12822 type. The result is of type string.
12823
Willy Tarreau0dbfdba2014-07-10 16:37:47 +020012824ltime(<format>[,<offset>])
12825 Converts an integer supposed to contain a date since epoch to a string
12826 representing this date in local time using a format defined by the <format>
12827 string using strftime(3). The purpose is to allow any date format to be used
12828 in logs. An optional <offset> in seconds may be applied to the input date
12829 (positive or negative). See the strftime() man page for the format supported
12830 by your operating system. See also the utime converter.
12831
12832 Example :
12833
12834 # Emit two colons, one with the local time and another with ip:port
12835 # Eg: 20140710162350 127.0.0.1:57325
12836 log-format %[date,ltime(%Y%m%d%H%M%S)]\ %ci:%cp
12837
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012838map(<map_file>[,<default_value>])
12839map_<match_type>(<map_file>[,<default_value>])
12840map_<match_type>_<output_type>(<map_file>[,<default_value>])
12841 Search the input value from <map_file> using the <match_type> matching method,
12842 and return the associated value converted to the type <output_type>. If the
12843 input value cannot be found in the <map_file>, the converter returns the
12844 <default_value>. If the <default_value> is not set, the converter fails and
12845 acts as if no input value could be fetched. If the <match_type> is not set, it
12846 defaults to "str". Likewise, if the <output_type> is not set, it defaults to
12847 "str". For convenience, the "map" keyword is an alias for "map_str" and maps a
12848 string to another string.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012849
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012850 It is important to avoid overlapping between the keys : IP addresses and
12851 strings are stored in trees, so the first of the finest match will be used.
12852 Other keys are stored in lists, so the first matching occurrence will be used.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012853
Tim Düsterhus4896c442016-11-29 02:15:19 +010012854 The following array contains the list of all map functions available sorted by
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012855 input type, match type and output type.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012856
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012857 input type | match method | output type str | output type int | output type ip
12858 -----------+--------------+-----------------+-----------------+---------------
12859 str | str | map_str | map_str_int | map_str_ip
12860 -----------+--------------+-----------------+-----------------+---------------
Willy Tarreau787a4c02014-05-10 07:55:30 +020012861 str | beg | map_beg | map_beg_int | map_end_ip
12862 -----------+--------------+-----------------+-----------------+---------------
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012863 str | sub | map_sub | map_sub_int | map_sub_ip
12864 -----------+--------------+-----------------+-----------------+---------------
12865 str | dir | map_dir | map_dir_int | map_dir_ip
12866 -----------+--------------+-----------------+-----------------+---------------
12867 str | dom | map_dom | map_dom_int | map_dom_ip
12868 -----------+--------------+-----------------+-----------------+---------------
12869 str | end | map_end | map_end_int | map_end_ip
12870 -----------+--------------+-----------------+-----------------+---------------
Ruoshan Huang3c5e3742016-12-02 16:25:31 +080012871 str | reg | map_reg | map_reg_int | map_reg_ip
12872 -----------+--------------+-----------------+-----------------+---------------
12873 str | reg | map_regm | map_reg_int | map_reg_ip
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012874 -----------+--------------+-----------------+-----------------+---------------
12875 int | int | map_int | map_int_int | map_int_ip
12876 -----------+--------------+-----------------+-----------------+---------------
12877 ip | ip | map_ip | map_ip_int | map_ip_ip
12878 -----------+--------------+-----------------+-----------------+---------------
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012879
Thierry Fournier8feaa662016-02-10 22:55:20 +010012880 The special map called "map_regm" expect matching zone in the regular
12881 expression and modify the output replacing back reference (like "\1") by
12882 the corresponding match text.
12883
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012884 The file contains one key + value per line. Lines which start with '#' are
12885 ignored, just like empty lines. Leading tabs and spaces are stripped. The key
12886 is then the first "word" (series of non-space/tabs characters), and the value
12887 is what follows this series of space/tab till the end of the line excluding
12888 trailing spaces/tabs.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012889
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012890 Example :
12891
12892 # this is a comment and is ignored
12893 2.22.246.0/23 United Kingdom \n
12894 <-><-----------><--><------------><---->
12895 | | | | `- trailing spaces ignored
12896 | | | `---------- value
12897 | | `-------------------- middle spaces ignored
12898 | `---------------------------- key
12899 `------------------------------------ leading spaces ignored
12900
Willy Tarreau97707872015-01-27 15:12:13 +010012901mod(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012902 Divides the input value of type signed integer by <value>, and returns the
12903 remainder as an signed integer. If <value> is null, then zero is returned.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012904 <value> can be a numeric value or a variable name. The name of the variable
Daniel Schneller0b547052016-03-21 20:46:57 +010012905 starts with an indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012906 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012907 "sess" : the variable is shared with the whole session
12908 "txn" : the variable is shared with the transaction (request and response)
12909 "req" : the variable is shared only during request processing
12910 "res" : the variable is shared only during response processing
12911 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012912 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012913
12914mul(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012915 Multiplies the input value of type signed integer by <value>, and returns
Thierry FOURNIER00c005c2015-07-08 01:10:21 +020012916 the product as an signed integer. In case of overflow, the largest possible
12917 value for the sign is returned so that the operation doesn't wrap around.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012918 <value> can be a numeric value or a variable name. The name of the variable
Daniel Schneller0b547052016-03-21 20:46:57 +010012919 starts with an indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012920 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012921 "sess" : the variable is shared with the whole session
12922 "txn" : the variable is shared with the transaction (request and response)
12923 "req" : the variable is shared only during request processing
12924 "res" : the variable is shared only during response processing
12925 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012926 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012927
Nenad Merdanovicb7e7c472017-03-12 21:56:55 +010012928nbsrv
12929 Takes an input value of type string, interprets it as a backend name and
12930 returns the number of usable servers in that backend. Can be used in places
12931 where we want to look up a backend from a dynamic name, like a result of a
12932 map lookup.
12933
Willy Tarreau97707872015-01-27 15:12:13 +010012934neg
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012935 Takes the input value of type signed integer, computes the opposite value,
12936 and returns the remainder as an signed integer. 0 is identity. This operator
12937 is provided for reversed subtracts : in order to subtract the input from a
12938 constant, simply perform a "neg,add(value)".
Willy Tarreau97707872015-01-27 15:12:13 +010012939
12940not
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012941 Returns a boolean FALSE if the input value of type signed integer is
Willy Tarreau97707872015-01-27 15:12:13 +010012942 non-null, otherwise returns TRUE. Used in conjunction with and(), it can be
12943 used to report true/false for bit testing on input values (eg: verify the
12944 absence of a flag).
12945
12946odd
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012947 Returns a boolean TRUE if the input value of type signed integer is odd
Willy Tarreau97707872015-01-27 15:12:13 +010012948 otherwise returns FALSE. It is functionally equivalent to "and(1),bool".
12949
12950or(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012951 Performs a bitwise "OR" between <value> and the input value of type signed
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012952 integer, and returns the result as an signed integer. <value> can be a
Daniel Schneller0b547052016-03-21 20:46:57 +010012953 numeric value or a variable name. The name of the variable starts with an
12954 indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012955 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012956 "sess" : the variable is shared with the whole session
12957 "txn" : the variable is shared with the transaction (request and response)
12958 "req" : the variable is shared only during request processing
12959 "res" : the variable is shared only during response processing
12960 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012961 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012962
Willy Tarreauc4dc3502015-01-23 20:39:28 +010012963regsub(<regex>,<subst>[,<flags>])
Willy Tarreau7eda8492015-01-20 19:47:06 +010012964 Applies a regex-based substitution to the input string. It does the same
12965 operation as the well-known "sed" utility with "s/<regex>/<subst>/". By
12966 default it will replace in the input string the first occurrence of the
12967 largest part matching the regular expression <regex> with the substitution
12968 string <subst>. It is possible to replace all occurrences instead by adding
12969 the flag "g" in the third argument <flags>. It is also possible to make the
12970 regex case insensitive by adding the flag "i" in <flags>. Since <flags> is a
12971 string, it is made up from the concatenation of all desired flags. Thus if
12972 both "i" and "g" are desired, using "gi" or "ig" will have the same effect.
12973 It is important to note that due to the current limitations of the
Baptiste Assmann66025d82016-03-06 23:36:48 +010012974 configuration parser, some characters such as closing parenthesis, closing
12975 square brackets or comma are not possible to use in the arguments. The first
12976 use of this converter is to replace certain characters or sequence of
12977 characters with other ones.
Willy Tarreau7eda8492015-01-20 19:47:06 +010012978
12979 Example :
12980
12981 # de-duplicate "/" in header "x-path".
12982 # input: x-path: /////a///b/c/xzxyz/
12983 # output: x-path: /a/b/c/xzxyz/
12984 http-request set-header x-path %[hdr(x-path),regsub(/+,/,g)]
12985
Thierry FOURNIER35ab2752015-05-28 13:22:03 +020012986capture-req(<id>)
12987 Capture the string entry in the request slot <id> and returns the entry as
12988 is. If the slot doesn't exist, the capture fails silently.
12989
12990 See also: "declare capture", "http-request capture",
Baptiste Assmann5ac425c2015-10-21 23:13:46 +020012991 "http-response capture", "capture.req.hdr" and
12992 "capture.res.hdr" (sample fetches).
Thierry FOURNIER35ab2752015-05-28 13:22:03 +020012993
12994capture-res(<id>)
12995 Capture the string entry in the response slot <id> and returns the entry as
12996 is. If the slot doesn't exist, the capture fails silently.
12997
12998 See also: "declare capture", "http-request capture",
Baptiste Assmann5ac425c2015-10-21 23:13:46 +020012999 "http-response capture", "capture.req.hdr" and
13000 "capture.res.hdr" (sample fetches).
Thierry FOURNIER35ab2752015-05-28 13:22:03 +020013001
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020013002sdbm([<avalanche>])
13003 Hashes a binary input sample into an unsigned 32-bit quantity using the SDBM
13004 hash function. Optionally, it is possible to apply a full avalanche hash
13005 function to the output if the optional <avalanche> argument equals 1. This
13006 converter uses the same functions as used by the various hash-based load
13007 balancing algorithms, so it will provide exactly the same results. It is
13008 mostly intended for debugging, but can be used as a stick-table entry to
13009 collect rough statistics. It must not be used for security purposes as a
Willy Tarreau80599772015-01-20 19:35:24 +010013010 32-bit hash is trivial to break. See also "crc32", "djb2", "wt6" and the
13011 "hash-type" directive.
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020013012
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013013set-var(<var name>)
Daniel Schneller0b547052016-03-21 20:46:57 +010013014 Sets a variable with the input content and returns the content on the output as
13015 is. The variable keeps the value and the associated input type. The name of the
13016 variable starts with an indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010013017 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010013018 "sess" : the variable is shared with the whole session
13019 "txn" : the variable is shared with the transaction (request and
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013020 response),
Daniel Schneller0b547052016-03-21 20:46:57 +010013021 "req" : the variable is shared only during request processing,
13022 "res" : the variable is shared only during response processing.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013023 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010013024 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013025
Dragan Dosen6e5a9ca2017-10-24 09:18:23 +020013026sha1
13027 Converts a binary input sample to a SHA1 digest. The result is a binary
13028 sample with length of 20 bytes.
13029
Willy Tarreau97707872015-01-27 15:12:13 +010013030sub(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020013031 Subtracts <value> from the input value of type signed integer, and returns
13032 the result as an signed integer. Note: in order to subtract the input from
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020013033 a constant, simply perform a "neg,add(value)". <value> can be a numeric value
Daniel Schneller0b547052016-03-21 20:46:57 +010013034 or a variable name. The name of the variable starts with an indication about
13035 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010013036 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010013037 "sess" : the variable is shared with the whole session
13038 "txn" : the variable is shared with the transaction (request and
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020013039 response),
Daniel Schneller0b547052016-03-21 20:46:57 +010013040 "req" : the variable is shared only during request processing,
13041 "res" : the variable is shared only during response processing.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020013042 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010013043 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010013044
Willy Tarreaud9f316a2014-07-10 14:03:38 +020013045table_bytes_in_rate(<table>)
13046 Uses the string representation of the input sample to perform a look up in
13047 the specified table. If the key is not found in the table, integer value zero
13048 is returned. Otherwise the converter returns the average client-to-server
13049 bytes rate associated with the input sample in the designated table, measured
13050 in amount of bytes over the period configured in the table. See also the
13051 sc_bytes_in_rate sample fetch keyword.
13052
13053
13054table_bytes_out_rate(<table>)
13055 Uses the string representation of the input sample to perform a look up in
13056 the specified table. If the key is not found in the table, integer value zero
13057 is returned. Otherwise the converter returns the average server-to-client
13058 bytes rate associated with the input sample in the designated table, measured
13059 in amount of bytes over the period configured in the table. See also the
13060 sc_bytes_out_rate sample fetch keyword.
13061
13062table_conn_cnt(<table>)
13063 Uses the string representation of the input sample to perform a look up in
13064 the specified table. If the key is not found in the table, integer value zero
13065 is returned. Otherwise the converter returns the cumulated amount of incoming
13066 connections associated with the input sample in the designated table. See
13067 also the sc_conn_cnt sample fetch keyword.
13068
13069table_conn_cur(<table>)
13070 Uses the string representation of the input sample to perform a look up in
13071 the specified table. If the key is not found in the table, integer value zero
13072 is returned. Otherwise the converter returns the current amount of concurrent
13073 tracked connections associated with the input sample in the designated table.
13074 See also the sc_conn_cur sample fetch keyword.
13075
13076table_conn_rate(<table>)
13077 Uses the string representation of the input sample to perform a look up in
13078 the specified table. If the key is not found in the table, integer value zero
13079 is returned. Otherwise the converter returns the average incoming connection
13080 rate associated with the input sample in the designated table. See also the
13081 sc_conn_rate sample fetch keyword.
13082
Thierry FOURNIER236657b2015-08-19 08:25:14 +020013083table_gpt0(<table>)
13084 Uses the string representation of the input sample to perform a look up in
13085 the specified table. If the key is not found in the table, boolean value zero
13086 is returned. Otherwise the converter returns the current value of the first
13087 general purpose tag associated with the input sample in the designated table.
13088 See also the sc_get_gpt0 sample fetch keyword.
13089
Willy Tarreaud9f316a2014-07-10 14:03:38 +020013090table_gpc0(<table>)
13091 Uses the string representation of the input sample to perform a look up in
13092 the specified table. If the key is not found in the table, integer value zero
13093 is returned. Otherwise the converter returns the current value of the first
13094 general purpose counter associated with the input sample in the designated
13095 table. See also the sc_get_gpc0 sample fetch keyword.
13096
13097table_gpc0_rate(<table>)
13098 Uses the string representation of the input sample to perform a look up in
13099 the specified table. If the key is not found in the table, integer value zero
13100 is returned. Otherwise the converter returns the frequency which the gpc0
13101 counter was incremented over the configured period in the table, associated
13102 with the input sample in the designated table. See also the sc_get_gpc0_rate
13103 sample fetch keyword.
13104
13105table_http_err_cnt(<table>)
13106 Uses the string representation of the input sample to perform a look up in
13107 the specified table. If the key is not found in the table, integer value zero
13108 is returned. Otherwise the converter returns the cumulated amount of HTTP
13109 errors associated with the input sample in the designated table. See also the
13110 sc_http_err_cnt sample fetch keyword.
13111
13112table_http_err_rate(<table>)
13113 Uses the string representation of the input sample to perform a look up in
13114 the specified table. If the key is not found in the table, integer value zero
13115 is returned. Otherwise the average rate of HTTP errors associated with the
13116 input sample in the designated table, measured in amount of errors over the
13117 period configured in the table. See also the sc_http_err_rate sample fetch
13118 keyword.
13119
13120table_http_req_cnt(<table>)
13121 Uses the string representation of the input sample to perform a look up in
13122 the specified table. If the key is not found in the table, integer value zero
13123 is returned. Otherwise the converter returns the cumulated amount of HTTP
13124 requests associated with the input sample in the designated table. See also
13125 the sc_http_req_cnt sample fetch keyword.
13126
13127table_http_req_rate(<table>)
13128 Uses the string representation of the input sample to perform a look up in
13129 the specified table. If the key is not found in the table, integer value zero
13130 is returned. Otherwise the average rate of HTTP requests associated with the
13131 input sample in the designated table, measured in amount of requests over the
13132 period configured in the table. See also the sc_http_req_rate sample fetch
13133 keyword.
13134
13135table_kbytes_in(<table>)
13136 Uses the string representation of the input sample to perform a look up in
13137 the specified table. If the key is not found in the table, integer value zero
13138 is returned. Otherwise the converter returns the cumulated amount of client-
13139 to-server data associated with the input sample in the designated table,
13140 measured in kilobytes. The test is currently performed on 32-bit integers,
13141 which limits values to 4 terabytes. See also the sc_kbytes_in sample fetch
13142 keyword.
13143
13144table_kbytes_out(<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 cumulated amount of server-
13148 to-client data associated with the input sample in the designated table,
13149 measured in kilobytes. The test is currently performed on 32-bit integers,
13150 which limits values to 4 terabytes. See also the sc_kbytes_out sample fetch
13151 keyword.
13152
13153table_server_id(<table>)
13154 Uses the string representation of the input sample to perform a look up in
13155 the specified table. If the key is not found in the table, integer value zero
13156 is returned. Otherwise the converter returns the server ID associated with
13157 the input sample in the designated table. A server ID is associated to a
13158 sample by a "stick" rule when a connection to a server succeeds. A server ID
13159 zero means that no server is associated with this key.
13160
13161table_sess_cnt(<table>)
13162 Uses the string representation of the input sample to perform a look up in
13163 the specified table. If the key is not found in the table, integer value zero
13164 is returned. Otherwise the converter returns the cumulated amount of incoming
13165 sessions associated with the input sample in the designated table. Note that
13166 a session here refers to an incoming connection being accepted by the
13167 "tcp-request connection" rulesets. See also the sc_sess_cnt sample fetch
13168 keyword.
13169
13170table_sess_rate(<table>)
13171 Uses the string representation of the input sample to perform a look up in
13172 the specified table. If the key is not found in the table, integer value zero
13173 is returned. Otherwise the converter returns the average incoming session
13174 rate associated with the input sample in the designated table. Note that a
13175 session here refers to an incoming connection being accepted by the
13176 "tcp-request connection" rulesets. See also the sc_sess_rate sample fetch
13177 keyword.
13178
13179table_trackers(<table>)
13180 Uses the string representation of the input sample to perform a look up in
13181 the specified table. If the key is not found in the table, integer value zero
13182 is returned. Otherwise the converter returns the current amount of concurrent
13183 connections tracking the same key as the input sample in the designated
13184 table. It differs from table_conn_cur in that it does not rely on any stored
13185 information but on the table's reference count (the "use" value which is
13186 returned by "show table" on the CLI). This may sometimes be more suited for
13187 layer7 tracking. It can be used to tell a server how many concurrent
13188 connections there are from a given address for example. See also the
13189 sc_trackers sample fetch keyword.
13190
Willy Tarreauffcb2e42014-07-10 16:29:08 +020013191upper
13192 Convert a string sample to upper case. This can only be placed after a string
13193 sample fetch function or after a transformation keyword returning a string
13194 type. The result is of type string.
13195
Thierry FOURNIER82ff3c92015-05-07 15:46:20 +020013196url_dec
13197 Takes an url-encoded string provided as input and returns the decoded
13198 version as output. The input and the output are of type string.
13199
Christopher Faulet85d79c92016-11-09 16:54:56 +010013200unset-var(<var name>)
13201 Unsets a variable if the input content is defined. The name of the variable
13202 starts with an indication about its scope. The scopes allowed are:
13203 "proc" : the variable is shared with the whole process
13204 "sess" : the variable is shared with the whole session
13205 "txn" : the variable is shared with the transaction (request and
13206 response),
13207 "req" : the variable is shared only during request processing,
13208 "res" : the variable is shared only during response processing.
13209 This prefix is followed by a name. The separator is a '.'. The name may only
13210 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
13211
Willy Tarreau0dbfdba2014-07-10 16:37:47 +020013212utime(<format>[,<offset>])
13213 Converts an integer supposed to contain a date since epoch to a string
13214 representing this date in UTC time using a format defined by the <format>
13215 string using strftime(3). The purpose is to allow any date format to be used
13216 in logs. An optional <offset> in seconds may be applied to the input date
13217 (positive or negative). See the strftime() man page for the format supported
13218 by your operating system. See also the ltime converter.
13219
13220 Example :
13221
13222 # Emit two colons, one with the UTC time and another with ip:port
13223 # Eg: 20140710162350 127.0.0.1:57325
13224 log-format %[date,utime(%Y%m%d%H%M%S)]\ %ci:%cp
13225
Emeric Brunc9a0f6d2014-11-25 14:09:01 +010013226word(<index>,<delimiters>)
13227 Extracts the nth word considering given delimiters from an input string.
13228 Indexes start at 1 and delimiters are a string formatted list of chars.
13229
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020013230wt6([<avalanche>])
13231 Hashes a binary input sample into an unsigned 32-bit quantity using the WT6
13232 hash function. Optionally, it is possible to apply a full avalanche hash
13233 function to the output if the optional <avalanche> argument equals 1. This
13234 converter uses the same functions as used by the various hash-based load
13235 balancing algorithms, so it will provide exactly the same results. It is
13236 mostly intended for debugging, but can be used as a stick-table entry to
13237 collect rough statistics. It must not be used for security purposes as a
Willy Tarreau80599772015-01-20 19:35:24 +010013238 32-bit hash is trivial to break. See also "crc32", "djb2", "sdbm", and the
13239 "hash-type" directive.
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020013240
Willy Tarreau97707872015-01-27 15:12:13 +010013241xor(<value>)
13242 Performs a bitwise "XOR" (exclusive OR) between <value> and the input value
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020013243 of type signed integer, and returns the result as an signed integer.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020013244 <value> can be a numeric value or a variable name. The name of the variable
Daniel Schneller0b547052016-03-21 20:46:57 +010013245 starts with an indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010013246 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010013247 "sess" : the variable is shared with the whole session
13248 "txn" : the variable is shared with the transaction (request and
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020013249 response),
Daniel Schneller0b547052016-03-21 20:46:57 +010013250 "req" : the variable is shared only during request processing,
13251 "res" : the variable is shared only during response processing.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020013252 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010013253 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010013254
Thierry FOURNIER01e09742016-12-26 11:46:11 +010013255xxh32([<seed>])
13256 Hashes a binary input sample into an unsigned 32-bit quantity using the 32-bit
13257 variant of the XXHash hash function. This hash supports a seed which defaults
13258 to zero but a different value maybe passed as the <seed> argument. This hash
13259 is known to be very good and very fast so it can be used to hash URLs and/or
13260 URL parameters for use as stick-table keys to collect statistics with a low
13261 collision rate, though care must be taken as the algorithm is not considered
13262 as cryptographically secure.
13263
13264xxh64([<seed>])
13265 Hashes a binary input sample into a signed 64-bit quantity using the 64-bit
13266 variant of the XXHash hash function. This hash supports a seed which defaults
13267 to zero but a different value maybe passed as the <seed> argument. This hash
13268 is known to be very good and very fast so it can be used to hash URLs and/or
13269 URL parameters for use as stick-table keys to collect statistics with a low
13270 collision rate, though care must be taken as the algorithm is not considered
13271 as cryptographically secure.
13272
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010013273
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200132747.3.2. Fetching samples from internal states
Willy Tarreau74ca5042013-06-11 23:12:07 +020013275--------------------------------------------
13276
13277A first set of sample fetch methods applies to internal information which does
13278not even relate to any client information. These ones are sometimes used with
13279"monitor-fail" directives to report an internal status to external watchers.
13280The sample fetch methods described in this section are usable anywhere.
13281
13282always_false : boolean
13283 Always returns the boolean "false" value. It may be used with ACLs as a
13284 temporary replacement for another one when adjusting configurations.
13285
13286always_true : boolean
13287 Always returns the boolean "true" value. It may be used with ACLs as a
13288 temporary replacement for another one when adjusting configurations.
13289
13290avg_queue([<backend>]) : integer
Willy Tarreaud63335a2010-02-26 12:56:52 +010013291 Returns the total number of queued connections of the designated backend
Willy Tarreau74ca5042013-06-11 23:12:07 +020013292 divided by the number of active servers. The current backend is used if no
13293 backend is specified. This is very similar to "queue" except that the size of
13294 the farm is considered, in order to give a more accurate measurement of the
13295 time it may take for a new connection to be processed. The main usage is with
13296 ACL to return a sorry page to new users when it becomes certain they will get
13297 a degraded service, or to pass to the backend servers in a header so that
13298 they decide to work in degraded mode or to disable some functions to speed up
13299 the processing a bit. Note that in the event there would not be any active
13300 server anymore, twice the number of queued connections would be considered as
13301 the measured value. This is a fair estimate, as we expect one server to get
13302 back soon anyway, but we still prefer to send new traffic to another backend
13303 if in better shape. See also the "queue", "be_conn", and "be_sess_rate"
13304 sample fetches.
Krzysztof Piotr Oledzki346f76d2010-01-12 21:59:30 +010013305
Willy Tarreau74ca5042013-06-11 23:12:07 +020013306be_conn([<backend>]) : integer
Willy Tarreaua36af912009-10-10 12:02:45 +020013307 Applies to the number of currently established connections on the backend,
13308 possibly including the connection being evaluated. If no backend name is
13309 specified, the current one is used. But it is also possible to check another
13310 backend. It can be used to use a specific farm when the nominal one is full.
13311 See also the "fe_conn", "queue" and "be_sess_rate" criteria.
Willy Tarreau6a06a402007-07-15 20:15:28 +020013312
Willy Tarreau74ca5042013-06-11 23:12:07 +020013313be_sess_rate([<backend>]) : integer
13314 Returns an integer value corresponding to the sessions creation rate on the
13315 backend, in number of new sessions per second. This is used with ACLs to
13316 switch to an alternate backend when an expensive or fragile one reaches too
13317 high a session rate, or to limit abuse of service (eg. prevent sucking of an
13318 online dictionary). It can also be useful to add this element to logs using a
13319 log-format directive.
Willy Tarreaud63335a2010-02-26 12:56:52 +010013320
13321 Example :
13322 # Redirect to an error page if the dictionary is requested too often
13323 backend dynamic
13324 mode http
13325 acl being_scanned be_sess_rate gt 100
13326 redirect location /denied.html if being_scanned
Willy Tarreau0ba27502007-12-24 16:55:16 +010013327
Thierry FOURNIERcc103292015-06-06 19:30:17 +020013328bin(<hexa>) : bin
13329 Returns a binary chain. The input is the hexadecimal representation
13330 of the string.
13331
13332bool(<bool>) : bool
13333 Returns a boolean value. <bool> can be 'true', 'false', '1' or '0'.
13334 'false' and '0' are the same. 'true' and '1' are the same.
13335
Willy Tarreau74ca5042013-06-11 23:12:07 +020013336connslots([<backend>]) : integer
13337 Returns an integer value corresponding to the number of connection slots
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030013338 still available in the backend, by totaling the maximum amount of
Willy Tarreau74ca5042013-06-11 23:12:07 +020013339 connections on all servers and the maximum queue size. This is probably only
13340 used with ACLs.
Tait Clarridge7896d522012-12-05 21:39:31 -050013341
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080013342 The basic idea here is to be able to measure the number of connection "slots"
Willy Tarreau55165fe2009-05-10 12:02:55 +020013343 still available (connection + queue), so that anything beyond that (intended
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080013344 usage; see "use_backend" keyword) can be redirected to a different backend.
13345
Willy Tarreau55165fe2009-05-10 12:02:55 +020013346 'connslots' = number of available server connection slots, + number of
13347 available server queue slots.
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080013348
Willy Tarreaua36af912009-10-10 12:02:45 +020013349 Note that while "fe_conn" may be used, "connslots" comes in especially
Willy Tarreau55165fe2009-05-10 12:02:55 +020013350 useful when you have a case of traffic going to one single ip, splitting into
Willy Tarreau74ca5042013-06-11 23:12:07 +020013351 multiple backends (perhaps using ACLs to do name-based load balancing) and
Willy Tarreau55165fe2009-05-10 12:02:55 +020013352 you want to be able to differentiate between different backends, and their
13353 available "connslots". Also, whereas "nbsrv" only measures servers that are
Willy Tarreau74ca5042013-06-11 23:12:07 +020013354 actually *down*, this fetch is more fine-grained and looks into the number of
Willy Tarreaua36af912009-10-10 12:02:45 +020013355 available connection slots as well. See also "queue" and "avg_queue".
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080013356
Willy Tarreau55165fe2009-05-10 12:02:55 +020013357 OTHER CAVEATS AND NOTES: at this point in time, the code does not take care
13358 of dynamic connections. Also, if any of the server maxconn, or maxqueue is 0,
Willy Tarreau74ca5042013-06-11 23:12:07 +020013359 then this fetch clearly does not make sense, in which case the value returned
Willy Tarreau55165fe2009-05-10 12:02:55 +020013360 will be -1.
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080013361
Willy Tarreau6236d3a2013-07-25 14:28:25 +020013362date([<offset>]) : integer
13363 Returns the current date as the epoch (number of seconds since 01/01/1970).
13364 If an offset value is specified, then it is a number of seconds that is added
13365 to the current date before returning the value. This is particularly useful
13366 to compute relative dates, as both positive and negative offsets are allowed.
Willy Tarreau276fae92013-07-25 14:36:01 +020013367 It is useful combined with the http_date converter.
13368
13369 Example :
13370
13371 # set an expires header to now+1 hour in every response
13372 http-response set-header Expires %[date(3600),http_date]
Willy Tarreau6236d3a2013-07-25 14:28:25 +020013373
Willy Tarreaud716f9b2017-10-13 11:03:15 +020013374distcc_body(<token>[,<occ>]) : binary
13375 Parses a distcc message and returns the body associated to occurrence #<occ>
13376 of the token <token>. Occurrences start at 1, and when unspecified, any may
13377 match though in practice only the first one is checked for now. This can be
13378 used to extract file names or arguments in files built using distcc through
13379 haproxy. Please refer to distcc's protocol documentation for the complete
13380 list of supported tokens.
13381
13382distcc_param(<token>[,<occ>]) : integer
13383 Parses a distcc message and returns the parameter associated to occurrence
13384 #<occ> of the token <token>. Occurrences start at 1, and when unspecified,
13385 any may match though in practice only the first one is checked for now. This
13386 can be used to extract certain information such as the protocol version, the
13387 file size or the argument in files built using distcc through haproxy.
13388 Another use case consists in waiting for the start of the preprocessed file
13389 contents before connecting to the server to avoid keeping idle connections.
13390 Please refer to distcc's protocol documentation for the complete list of
13391 supported tokens.
13392
13393 Example :
13394 # wait up to 20s for the pre-processed file to be uploaded
13395 tcp-request inspect-delay 20s
13396 tcp-request content accept if { distcc_param(DOTI) -m found }
13397 # send large files to the big farm
13398 use_backend big_farm if { distcc_param(DOTI) gt 1000000 }
13399
Willy Tarreau595ec542013-06-12 21:34:28 +020013400env(<name>) : string
13401 Returns a string containing the value of environment variable <name>. As a
13402 reminder, environment variables are per-process and are sampled when the
13403 process starts. This can be useful to pass some information to a next hop
13404 server, or with ACLs to take specific action when the process is started a
13405 certain way.
13406
13407 Examples :
13408 # Pass the Via header to next hop with the local hostname in it
13409 http-request add-header Via 1.1\ %[env(HOSTNAME)]
13410
13411 # reject cookie-less requests when the STOP environment variable is set
13412 http-request deny if !{ cook(SESSIONID) -m found } { env(STOP) -m found }
13413
Willy Tarreau74ca5042013-06-11 23:12:07 +020013414fe_conn([<frontend>]) : integer
13415 Returns the number of currently established connections on the frontend,
Willy Tarreaud63335a2010-02-26 12:56:52 +010013416 possibly including the connection being evaluated. If no frontend name is
13417 specified, the current one is used. But it is also possible to check another
Willy Tarreau74ca5042013-06-11 23:12:07 +020013418 frontend. It can be used to return a sorry page before hard-blocking, or to
13419 use a specific backend to drain new requests when the farm is considered
13420 full. This is mostly used with ACLs but can also be used to pass some
13421 statistics to servers in HTTP headers. See also the "dst_conn", "be_conn",
13422 "fe_sess_rate" fetches.
Willy Tarreaua36af912009-10-10 12:02:45 +020013423
Nenad Merdanovicad9a7e92016-10-03 04:57:37 +020013424fe_req_rate([<frontend>]) : integer
13425 Returns an integer value corresponding to the number of HTTP requests per
13426 second sent to a frontend. This number can differ from "fe_sess_rate" in
13427 situations where client-side keep-alive is enabled.
13428
Willy Tarreau74ca5042013-06-11 23:12:07 +020013429fe_sess_rate([<frontend>]) : integer
13430 Returns an integer value corresponding to the sessions creation rate on the
13431 frontend, in number of new sessions per second. This is used with ACLs to
13432 limit the incoming session rate to an acceptable range in order to prevent
13433 abuse of service at the earliest moment, for example when combined with other
13434 layer 4 ACLs in order to force the clients to wait a bit for the rate to go
13435 down below the limit. It can also be useful to add this element to logs using
13436 a log-format directive. See also the "rate-limit sessions" directive for use
13437 in frontends.
Willy Tarreau079ff0a2009-03-05 21:34:28 +010013438
13439 Example :
13440 # This frontend limits incoming mails to 10/s with a max of 100
13441 # concurrent connections. We accept any connection below 10/s, and
13442 # force excess clients to wait for 100 ms. Since clients are limited to
13443 # 100 max, there cannot be more than 10 incoming mails per second.
13444 frontend mail
13445 bind :25
13446 mode tcp
13447 maxconn 100
13448 acl too_fast fe_sess_rate ge 10
13449 tcp-request inspect-delay 100ms
13450 tcp-request content accept if ! too_fast
13451 tcp-request content accept if WAIT_END
Willy Tarreaud72758d2010-01-12 10:42:19 +010013452
Nenad Merdanovic807a6e72017-03-12 22:00:00 +010013453hostname : string
13454 Returns the system hostname.
13455
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020013456int(<integer>) : signed integer
13457 Returns a signed integer.
13458
Thierry FOURNIERcc103292015-06-06 19:30:17 +020013459ipv4(<ipv4>) : ipv4
13460 Returns an ipv4.
13461
13462ipv6(<ipv6>) : ipv6
13463 Returns an ipv6.
13464
13465meth(<method>) : method
13466 Returns a method.
13467
Willy Tarreau0f30d262014-11-24 16:02:05 +010013468nbproc : integer
13469 Returns an integer value corresponding to the number of processes that were
13470 started (it equals the global "nbproc" setting). This is useful for logging
13471 and debugging purposes.
13472
Willy Tarreau74ca5042013-06-11 23:12:07 +020013473nbsrv([<backend>]) : integer
13474 Returns an integer value corresponding to the number of usable servers of
13475 either the current backend or the named backend. This is mostly used with
13476 ACLs but can also be useful when added to logs. This is normally used to
Willy Tarreaud63335a2010-02-26 12:56:52 +010013477 switch to an alternate backend when the number of servers is too low to
13478 to handle some load. It is useful to report a failure when combined with
13479 "monitor fail".
Willy Tarreau079ff0a2009-03-05 21:34:28 +010013480
Willy Tarreau0f30d262014-11-24 16:02:05 +010013481proc : integer
13482 Returns an integer value corresponding to the position of the process calling
13483 the function, between 1 and global.nbproc. This is useful for logging and
13484 debugging purposes.
13485
Willy Tarreau74ca5042013-06-11 23:12:07 +020013486queue([<backend>]) : integer
Willy Tarreaud63335a2010-02-26 12:56:52 +010013487 Returns the total number of queued connections of the designated backend,
13488 including all the connections in server queues. If no backend name is
13489 specified, the current one is used, but it is also possible to check another
Willy Tarreau74ca5042013-06-11 23:12:07 +020013490 one. This is useful with ACLs or to pass statistics to backend servers. This
13491 can be used to take actions when queuing goes above a known level, generally
13492 indicating a surge of traffic or a massive slowdown on the servers. One
13493 possible action could be to reject new users but still accept old ones. See
13494 also the "avg_queue", "be_conn", and "be_sess_rate" fetches.
13495
Willy Tarreau84310e22014-02-14 11:59:04 +010013496rand([<range>]) : integer
13497 Returns a random integer value within a range of <range> possible values,
13498 starting at zero. If the range is not specified, it defaults to 2^32, which
13499 gives numbers between 0 and 4294967295. It can be useful to pass some values
13500 needed to take some routing decisions for example, or just for debugging
13501 purposes. This random must not be used for security purposes.
13502
Willy Tarreau74ca5042013-06-11 23:12:07 +020013503srv_conn([<backend>/]<server>) : integer
13504 Returns an integer value corresponding to the number of currently established
13505 connections on the designated server, possibly including the connection being
13506 evaluated. If <backend> is omitted, then the server is looked up in the
13507 current backend. It can be used to use a specific farm when one server is
13508 full, or to inform the server about our view of the number of active
13509 connections with it. See also the "fe_conn", "be_conn" and "queue" fetch
13510 methods.
13511
13512srv_is_up([<backend>/]<server>) : boolean
13513 Returns true when the designated server is UP, and false when it is either
13514 DOWN or in maintenance mode. If <backend> is omitted, then the server is
13515 looked up in the current backend. It is mainly used to take action based on
13516 an external status reported via a health check (eg: a geographical site's
13517 availability). Another possible use which is more of a hack consists in
13518 using dummy servers as boolean variables that can be enabled or disabled from
13519 the CLI, so that rules depending on those ACLs can be tweaked in realtime.
13520
Willy Tarreauff2b7af2017-10-13 11:46:26 +020013521srv_queue([<backend>/]<server>) : integer
13522 Returns an integer value corresponding to the number of connections currently
13523 pending in the designated server's queue. If <backend> is omitted, then the
13524 server is looked up in the current backend. It can sometimes be used together
13525 with the "use-server" directive to force to use a known faster server when it
13526 is not much loaded. See also the "srv_conn", "avg_queue" and "queue" sample
13527 fetch methods.
13528
Willy Tarreau74ca5042013-06-11 23:12:07 +020013529srv_sess_rate([<backend>/]<server>) : integer
13530 Returns an integer corresponding to the sessions creation rate on the
13531 designated server, in number of new sessions per second. If <backend> is
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030013532 omitted, then the server is looked up in the current backend. This is mostly
Willy Tarreau74ca5042013-06-11 23:12:07 +020013533 used with ACLs but can make sense with logs too. This is used to switch to an
13534 alternate backend when an expensive or fragile one reaches too high a session
13535 rate, or to limit abuse of service (eg. prevent latent requests from
13536 overloading servers).
13537
13538 Example :
13539 # Redirect to a separate back
13540 acl srv1_full srv_sess_rate(be1/srv1) gt 50
13541 acl srv2_full srv_sess_rate(be1/srv2) gt 50
13542 use_backend be2 if srv1_full or srv2_full
13543
Willy Tarreau0f30d262014-11-24 16:02:05 +010013544stopping : boolean
13545 Returns TRUE if the process calling the function is currently stopping. This
13546 can be useful for logging, or for relaxing certain checks or helping close
13547 certain connections upon graceful shutdown.
13548
Thierry FOURNIERcc103292015-06-06 19:30:17 +020013549str(<string>) : string
13550 Returns a string.
13551
Willy Tarreau74ca5042013-06-11 23:12:07 +020013552table_avl([<table>]) : integer
13553 Returns the total number of available entries in the current proxy's
13554 stick-table or in the designated stick-table. See also table_cnt.
13555
13556table_cnt([<table>]) : integer
13557 Returns the total number of entries currently in use in the current proxy's
13558 stick-table or in the designated stick-table. See also src_conn_cnt and
13559 table_avl for other entry counting methods.
13560
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013561var(<var-name>) : undefined
13562 Returns a variable with the stored type. If the variable is not set, the
Daniel Schneller0b547052016-03-21 20:46:57 +010013563 sample fetch fails. The name of the variable starts with an indication
13564 about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010013565 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010013566 "sess" : the variable is shared with the whole session
13567 "txn" : the variable is shared with the transaction (request and
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013568 response),
Daniel Schneller0b547052016-03-21 20:46:57 +010013569 "req" : the variable is shared only during request processing,
13570 "res" : the variable is shared only during response processing.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013571 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010013572 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013573
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200135747.3.3. Fetching samples at Layer 4
Willy Tarreau74ca5042013-06-11 23:12:07 +020013575----------------------------------
13576
13577The layer 4 usually describes just the transport layer which in haproxy is
13578closest to the connection, where no content is yet made available. The fetch
13579methods described here are usable as low as the "tcp-request connection" rule
13580sets unless they require some future information. Those generally include
13581TCP/IP addresses and ports, as well as elements from stick-tables related to
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013582the incoming connection. For retrieving a value from a sticky counters, the
13583counter number can be explicitly set as 0, 1, or 2 using the pre-defined
13584"sc0_", "sc1_", or "sc2_" prefix, or it can be specified as the first integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013585argument when using the "sc_" prefix. An optional table may be specified with
13586the "sc*" form, in which case the currently tracked key will be looked up into
13587this alternate table instead of the table currently being tracked.
Willy Tarreau74ca5042013-06-11 23:12:07 +020013588
13589be_id : integer
13590 Returns an integer containing the current backend's id. It can be used in
13591 frontends with responses to check which backend processed the request.
13592
Marcin Deranekd2471c22016-12-12 14:08:05 +010013593be_name : string
13594 Returns a string containing the current backend's name. It can be used in
13595 frontends with responses to check which backend processed the request.
13596
Willy Tarreau74ca5042013-06-11 23:12:07 +020013597dst : ip
13598 This is the destination IPv4 address of the connection on the client side,
13599 which is the address the client connected to. It can be useful when running
13600 in transparent mode. It is of type IP and works on both IPv4 and IPv6 tables.
13601 On IPv6 tables, IPv4 address is mapped to its IPv6 equivalent, according to
13602 RFC 4291.
13603
13604dst_conn : integer
13605 Returns an integer value corresponding to the number of currently established
13606 connections on the same socket including the one being evaluated. It is
13607 normally used with ACLs but can as well be used to pass the information to
13608 servers in an HTTP header or in logs. It can be used to either return a sorry
13609 page before hard-blocking, or to use a specific backend to drain new requests
13610 when the socket is considered saturated. This offers the ability to assign
13611 different limits to different listening ports or addresses. See also the
13612 "fe_conn" and "be_conn" fetches.
Willy Tarreaud63335a2010-02-26 12:56:52 +010013613
Willy Tarreau16e01562016-08-09 16:46:18 +020013614dst_is_local : boolean
13615 Returns true if the destination address of the incoming connection is local
13616 to the system, or false if the address doesn't exist on the system, meaning
13617 that it was intercepted in transparent mode. It can be useful to apply
13618 certain rules by default to forwarded traffic and other rules to the traffic
13619 targetting the real address of the machine. For example the stats page could
13620 be delivered only on this address, or SSH access could be locally redirected.
13621 Please note that the check involves a few system calls, so it's better to do
13622 it only once per connection.
13623
Willy Tarreau74ca5042013-06-11 23:12:07 +020013624dst_port : integer
13625 Returns an integer value corresponding to the destination TCP port of the
13626 connection on the client side, which is the port the client connected to.
13627 This might be used when running in transparent mode, when assigning dynamic
13628 ports to some clients for a whole application session, to stick all users to
13629 a same server, or to pass the destination port information to a server using
13630 an HTTP header.
13631
Willy Tarreau60ca10a2017-08-18 15:26:54 +020013632fc_http_major : integer
13633 Reports the front connection's HTTP major version encoding, which may be 1
13634 for HTTP/0.9 to HTTP/1.1 or 2 for HTTP/2. Note, this is based on the on-wire
13635 encoding and not on the version present in the request header.
13636
Emeric Brun4f603012017-01-05 15:11:44 +010013637fc_rcvd_proxy : boolean
13638 Returns true if the client initiated the connection with a PROXY protocol
13639 header.
13640
Thierry Fournier / OZON.IO6310bef2016-07-24 20:16:50 +020013641fc_rtt(<unit>) : integer
13642 Returns the Round Trip Time (RTT) measured by the kernel for the client
13643 connection. <unit> is facultative, by default the unit is milliseconds. <unit>
13644 can be set to "ms" for milliseconds or "us" for microseconds. If the server
13645 connection is not established, if the connection is not TCP or if the
13646 operating system does not support TCP_INFO, for example Linux kernels before
13647 2.4, the sample fetch fails.
13648
13649fc_rttvar(<unit>) : integer
13650 Returns the Round Trip Time (RTT) variance measured by the kernel for the
13651 client connection. <unit> is facultative, by default the unit is milliseconds.
13652 <unit> can be set to "ms" for milliseconds or "us" for microseconds. If the
13653 server connection is not established, if the connection is not TCP or if the
13654 operating system does not support TCP_INFO, for example Linux kernels before
13655 2.4, the sample fetch fails.
13656
Joe Williams30fcd392016-08-10 07:06:44 -070013657fc_unacked(<unit>) : integer
13658 Returns the unacked counter measured by the kernel for the client connection.
13659 If the server connection is not established, if the connection is not TCP or
13660 if the operating system does not support TCP_INFO, for example Linux kernels
13661 before 2.4, the sample fetch fails.
13662
13663fc_sacked(<unit>) : integer
13664 Returns the sacked counter measured by the kernel for the client connection.
13665 If the server connection is not established, if the connection is not TCP or
13666 if the operating system does not support TCP_INFO, for example Linux kernels
13667 before 2.4, the sample fetch fails.
13668
13669fc_retrans(<unit>) : integer
13670 Returns the retransmits counter measured by the kernel for the client
13671 connection. If the server connection is not established, if the connection is
13672 not TCP or if the operating system does not support TCP_INFO, for example
13673 Linux kernels before 2.4, the sample fetch fails.
13674
13675fc_fackets(<unit>) : integer
13676 Returns the fack counter measured by the kernel for the client
13677 connection. If the server connection is not established, if the connection is
13678 not TCP or if the operating system does not support TCP_INFO, for example
13679 Linux kernels before 2.4, the sample fetch fails.
13680
13681fc_lost(<unit>) : integer
13682 Returns the lost counter measured by the kernel for the client
13683 connection. If the server connection is not established, if the connection is
13684 not TCP or if the operating system does not support TCP_INFO, for example
13685 Linux kernels before 2.4, the sample fetch fails.
13686
13687fc_reordering(<unit>) : integer
13688 Returns the reordering counter measured by the kernel for the client
13689 connection. If the server connection is not established, if the connection is
13690 not TCP or if the operating system does not support TCP_INFO, for example
13691 Linux kernels before 2.4, the sample fetch fails.
13692
Willy Tarreau74ca5042013-06-11 23:12:07 +020013693fe_id : integer
13694 Returns an integer containing the current frontend's id. It can be used in
Marcin Deranek6e413ed2016-12-13 12:40:01 +010013695 backends to check from which frontend it was called, or to stick all users
Willy Tarreau74ca5042013-06-11 23:12:07 +020013696 coming via a same frontend to the same server.
13697
Marcin Deranekd2471c22016-12-12 14:08:05 +010013698fe_name : string
13699 Returns a string containing the current frontend's name. It can be used in
13700 backends to check from which frontend it was called, or to stick all users
13701 coming via a same frontend to the same server.
13702
Cyril Bonté62ba8702014-04-22 23:52:25 +020013703sc_bytes_in_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013704sc0_bytes_in_rate([<table>]) : integer
13705sc1_bytes_in_rate([<table>]) : integer
13706sc2_bytes_in_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013707 Returns the average client-to-server bytes rate from the currently tracked
13708 counters, measured in amount of bytes over the period configured in the
13709 table. See also src_bytes_in_rate.
13710
Cyril Bonté62ba8702014-04-22 23:52:25 +020013711sc_bytes_out_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013712sc0_bytes_out_rate([<table>]) : integer
13713sc1_bytes_out_rate([<table>]) : integer
13714sc2_bytes_out_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013715 Returns the average server-to-client bytes rate from the currently tracked
13716 counters, measured in amount of bytes over the period configured in the
13717 table. See also src_bytes_out_rate.
13718
Cyril Bonté62ba8702014-04-22 23:52:25 +020013719sc_clr_gpc0(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013720sc0_clr_gpc0([<table>]) : integer
13721sc1_clr_gpc0([<table>]) : integer
13722sc2_clr_gpc0([<table>]) : integer
Willy Tarreauf73cd112011-08-13 01:45:16 +020013723 Clears the first General Purpose Counter associated to the currently tracked
13724 counters, and returns its previous value. Before the first invocation, the
Willy Tarreau869948b2013-01-04 14:14:57 +010013725 stored value is zero, so first invocation will always return zero. This is
13726 typically used as a second ACL in an expression in order to mark a connection
13727 when a first ACL was verified :
Willy Tarreauf73cd112011-08-13 01:45:16 +020013728
Jarno Huuskonen676f6222017-03-30 09:19:45 +030013729 Example:
Willy Tarreauf73cd112011-08-13 01:45:16 +020013730 # block if 5 consecutive requests continue to come faster than 10 sess
13731 # per second, and reset the counter as soon as the traffic slows down.
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020013732 acl abuse sc0_http_req_rate gt 10
13733 acl kill sc0_inc_gpc0 gt 5
13734 acl save sc0_clr_gpc0 ge 0
Willy Tarreauf73cd112011-08-13 01:45:16 +020013735 tcp-request connection accept if !abuse save
13736 tcp-request connection reject if abuse kill
13737
Cyril Bonté62ba8702014-04-22 23:52:25 +020013738sc_conn_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013739sc0_conn_cnt([<table>]) : integer
13740sc1_conn_cnt([<table>]) : integer
13741sc2_conn_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013742 Returns the cumulated number of incoming connections from currently tracked
13743 counters. See also src_conn_cnt.
13744
Cyril Bonté62ba8702014-04-22 23:52:25 +020013745sc_conn_cur(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013746sc0_conn_cur([<table>]) : integer
13747sc1_conn_cur([<table>]) : integer
13748sc2_conn_cur([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013749 Returns the current amount of concurrent connections tracking the same
13750 tracked counters. This number is automatically incremented when tracking
13751 begins and decremented when tracking stops. See also src_conn_cur.
13752
Cyril Bonté62ba8702014-04-22 23:52:25 +020013753sc_conn_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013754sc0_conn_rate([<table>]) : integer
13755sc1_conn_rate([<table>]) : integer
13756sc2_conn_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013757 Returns the average connection rate from the currently tracked counters,
13758 measured in amount of connections over the period configured in the table.
13759 See also src_conn_rate.
13760
Cyril Bonté62ba8702014-04-22 23:52:25 +020013761sc_get_gpc0(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013762sc0_get_gpc0([<table>]) : integer
13763sc1_get_gpc0([<table>]) : integer
13764sc2_get_gpc0([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013765 Returns the value of the first General Purpose Counter associated to the
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013766 currently tracked counters. See also src_get_gpc0 and sc/sc0/sc1/sc2_inc_gpc0.
Willy Tarreauba2ffd12013-05-29 15:54:14 +020013767
Thierry FOURNIER236657b2015-08-19 08:25:14 +020013768sc_get_gpt0(<ctr>[,<table>]) : integer
13769sc0_get_gpt0([<table>]) : integer
13770sc1_get_gpt0([<table>]) : integer
13771sc2_get_gpt0([<table>]) : integer
13772 Returns the value of the first General Purpose Tag associated to the
13773 currently tracked counters. See also src_get_gpt0.
13774
Cyril Bonté62ba8702014-04-22 23:52:25 +020013775sc_gpc0_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013776sc0_gpc0_rate([<table>]) : integer
13777sc1_gpc0_rate([<table>]) : integer
13778sc2_gpc0_rate([<table>]) : integer
Willy Tarreauba2ffd12013-05-29 15:54:14 +020013779 Returns the average increment rate of the first General Purpose Counter
13780 associated to the currently tracked counters. It reports the frequency
13781 which the gpc0 counter was incremented over the configured period. See also
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013782 src_gpc0_rate, sc/sc0/sc1/sc2_get_gpc0, and sc/sc0/sc1/sc2_inc_gpc0. Note
13783 that the "gpc0_rate" counter must be stored in the stick-table for a value to
13784 be returned, as "gpc0" only holds the event count.
Willy Tarreaue9656522010-08-17 15:40:09 +020013785
Cyril Bonté62ba8702014-04-22 23:52:25 +020013786sc_http_err_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013787sc0_http_err_cnt([<table>]) : integer
13788sc1_http_err_cnt([<table>]) : integer
13789sc2_http_err_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013790 Returns the cumulated number of HTTP errors from the currently tracked
13791 counters. This includes the both request errors and 4xx error responses.
13792 See also src_http_err_cnt.
13793
Cyril Bonté62ba8702014-04-22 23:52:25 +020013794sc_http_err_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013795sc0_http_err_rate([<table>]) : integer
13796sc1_http_err_rate([<table>]) : integer
13797sc2_http_err_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013798 Returns the average rate of HTTP errors from the currently tracked counters,
13799 measured in amount of errors over the period configured in the table. This
13800 includes the both request errors and 4xx error responses. See also
13801 src_http_err_rate.
13802
Cyril Bonté62ba8702014-04-22 23:52:25 +020013803sc_http_req_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013804sc0_http_req_cnt([<table>]) : integer
13805sc1_http_req_cnt([<table>]) : integer
13806sc2_http_req_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013807 Returns the cumulated number of HTTP requests from the currently tracked
13808 counters. This includes every started request, valid or not. See also
13809 src_http_req_cnt.
13810
Cyril Bonté62ba8702014-04-22 23:52:25 +020013811sc_http_req_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013812sc0_http_req_rate([<table>]) : integer
13813sc1_http_req_rate([<table>]) : integer
13814sc2_http_req_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013815 Returns the average rate of HTTP requests from the currently tracked
13816 counters, measured in amount of requests over the period configured in
13817 the table. This includes every started request, valid or not. See also
13818 src_http_req_rate.
13819
Cyril Bonté62ba8702014-04-22 23:52:25 +020013820sc_inc_gpc0(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013821sc0_inc_gpc0([<table>]) : integer
13822sc1_inc_gpc0([<table>]) : integer
13823sc2_inc_gpc0([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013824 Increments the first General Purpose Counter associated to the currently
Willy Tarreau869948b2013-01-04 14:14:57 +010013825 tracked counters, and returns its new value. Before the first invocation,
13826 the stored value is zero, so first invocation will increase it to 1 and will
13827 return 1. This is typically used as a second ACL in an expression in order
13828 to mark a connection when a first ACL was verified :
Willy Tarreaue9656522010-08-17 15:40:09 +020013829
Jarno Huuskonen676f6222017-03-30 09:19:45 +030013830 Example:
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020013831 acl abuse sc0_http_req_rate gt 10
13832 acl kill sc0_inc_gpc0 gt 0
Willy Tarreaue9656522010-08-17 15:40:09 +020013833 tcp-request connection reject if abuse kill
13834
Cyril Bonté62ba8702014-04-22 23:52:25 +020013835sc_kbytes_in(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013836sc0_kbytes_in([<table>]) : integer
13837sc1_kbytes_in([<table>]) : integer
13838sc2_kbytes_in([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020013839 Returns the total amount of client-to-server data from the currently tracked
13840 counters, measured in kilobytes. The test is currently performed on 32-bit
13841 integers, which limits values to 4 terabytes. See also src_kbytes_in.
Willy Tarreaue9656522010-08-17 15:40:09 +020013842
Cyril Bonté62ba8702014-04-22 23:52:25 +020013843sc_kbytes_out(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013844sc0_kbytes_out([<table>]) : integer
13845sc1_kbytes_out([<table>]) : integer
13846sc2_kbytes_out([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020013847 Returns the total amount of server-to-client data from the currently tracked
13848 counters, measured in kilobytes. The test is currently performed on 32-bit
13849 integers, which limits values to 4 terabytes. See also src_kbytes_out.
Willy Tarreaue9656522010-08-17 15:40:09 +020013850
Cyril Bonté62ba8702014-04-22 23:52:25 +020013851sc_sess_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013852sc0_sess_cnt([<table>]) : integer
13853sc1_sess_cnt([<table>]) : integer
13854sc2_sess_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013855 Returns the cumulated number of incoming connections that were transformed
13856 into sessions, which means that they were accepted by a "tcp-request
13857 connection" rule, from the currently tracked counters. A backend may count
13858 more sessions than connections because each connection could result in many
Jamie Gloudonaaa21002012-08-25 00:18:33 -040013859 backend sessions if some HTTP keep-alive is performed over the connection
Willy Tarreaue9656522010-08-17 15:40:09 +020013860 with the client. See also src_sess_cnt.
13861
Cyril Bonté62ba8702014-04-22 23:52:25 +020013862sc_sess_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013863sc0_sess_rate([<table>]) : integer
13864sc1_sess_rate([<table>]) : integer
13865sc2_sess_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013866 Returns the average session rate from the currently tracked counters,
13867 measured in amount of sessions over the period configured in the table. A
13868 session is a connection that got past the early "tcp-request connection"
13869 rules. A backend may count more sessions than connections because each
13870 connection could result in many backend sessions if some HTTP keep-alive is
Jamie Gloudonaaa21002012-08-25 00:18:33 -040013871 performed over the connection with the client. See also src_sess_rate.
Willy Tarreaue9656522010-08-17 15:40:09 +020013872
Cyril Bonté62ba8702014-04-22 23:52:25 +020013873sc_tracked(<ctr>[,<table>]) : boolean
Willy Tarreau0f791d42013-07-23 19:56:43 +020013874sc0_tracked([<table>]) : boolean
13875sc1_tracked([<table>]) : boolean
13876sc2_tracked([<table>]) : boolean
Willy Tarreau6f1615f2013-06-03 15:15:22 +020013877 Returns true if the designated session counter is currently being tracked by
13878 the current session. This can be useful when deciding whether or not we want
13879 to set some values in a header passed to the server.
13880
Cyril Bonté62ba8702014-04-22 23:52:25 +020013881sc_trackers(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013882sc0_trackers([<table>]) : integer
13883sc1_trackers([<table>]) : integer
13884sc2_trackers([<table>]) : integer
Willy Tarreau2406db42012-12-09 12:16:43 +010013885 Returns the current amount of concurrent connections tracking the same
13886 tracked counters. This number is automatically incremented when tracking
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020013887 begins and decremented when tracking stops. It differs from sc0_conn_cur in
Willy Tarreau2406db42012-12-09 12:16:43 +010013888 that it does not rely on any stored information but on the table's reference
13889 count (the "use" value which is returned by "show table" on the CLI). This
Willy Tarreau74ca5042013-06-11 23:12:07 +020013890 may sometimes be more suited for layer7 tracking. It can be used to tell a
13891 server how many concurrent connections there are from a given address for
13892 example.
Willy Tarreau2406db42012-12-09 12:16:43 +010013893
Willy Tarreau74ca5042013-06-11 23:12:07 +020013894so_id : integer
13895 Returns an integer containing the current listening socket's id. It is useful
13896 in frontends involving many "bind" lines, or to stick all users coming via a
13897 same socket to the same server.
Willy Tarreaud63335a2010-02-26 12:56:52 +010013898
Willy Tarreau74ca5042013-06-11 23:12:07 +020013899src : ip
13900 This is the source IPv4 address of the client of the session. It is of type
13901 IP and works on both IPv4 and IPv6 tables. On IPv6 tables, IPv4 addresses are
13902 mapped to their IPv6 equivalent, according to RFC 4291. Note that it is the
13903 TCP-level source address which is used, and not the address of a client
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010013904 behind a proxy. However if the "accept-proxy" or "accept-netscaler-cip" bind
13905 directive is used, it can be the address of a client behind another
13906 PROXY-protocol compatible component for all rule sets except
13907 "tcp-request connection" which sees the real address.
Willy Tarreaud63335a2010-02-26 12:56:52 +010013908
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010013909 Example:
13910 # add an HTTP header in requests with the originating address' country
13911 http-request set-header X-Country %[src,map_ip(geoip.lst)]
13912
Willy Tarreau74ca5042013-06-11 23:12:07 +020013913src_bytes_in_rate([<table>]) : integer
13914 Returns the average bytes rate from the incoming connection's source address
13915 in the current proxy's stick-table or in the designated stick-table, measured
13916 in amount of bytes over the period configured in the table. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013917 not found, zero is returned. See also sc/sc0/sc1/sc2_bytes_in_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013918
Willy Tarreau74ca5042013-06-11 23:12:07 +020013919src_bytes_out_rate([<table>]) : integer
13920 Returns the average bytes rate to the incoming connection's source address in
13921 the current proxy's stick-table or in the designated stick-table, measured in
Willy Tarreauc9705a12010-07-27 20:05:50 +020013922 amount of bytes over the period configured in the table. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013923 not found, zero is returned. See also sc/sc0/sc1/sc2_bytes_out_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013924
Willy Tarreau74ca5042013-06-11 23:12:07 +020013925src_clr_gpc0([<table>]) : integer
13926 Clears the first General Purpose Counter associated to the incoming
13927 connection's source address in the current proxy's stick-table or in the
13928 designated stick-table, and returns its previous value. If the address is not
13929 found, an entry is created and 0 is returned. This is typically used as a
13930 second ACL in an expression in order to mark a connection when a first ACL
13931 was verified :
Willy Tarreauf73cd112011-08-13 01:45:16 +020013932
Jarno Huuskonen676f6222017-03-30 09:19:45 +030013933 Example:
Willy Tarreauf73cd112011-08-13 01:45:16 +020013934 # block if 5 consecutive requests continue to come faster than 10 sess
13935 # per second, and reset the counter as soon as the traffic slows down.
13936 acl abuse src_http_req_rate gt 10
13937 acl kill src_inc_gpc0 gt 5
Willy Tarreau869948b2013-01-04 14:14:57 +010013938 acl save src_clr_gpc0 ge 0
Willy Tarreauf73cd112011-08-13 01:45:16 +020013939 tcp-request connection accept if !abuse save
13940 tcp-request connection reject if abuse kill
13941
Willy Tarreau74ca5042013-06-11 23:12:07 +020013942src_conn_cnt([<table>]) : integer
Willy Tarreauc9705a12010-07-27 20:05:50 +020013943 Returns the cumulated number of connections initiated from the current
Willy Tarreau74ca5042013-06-11 23:12:07 +020013944 incoming connection's source address in the current proxy's stick-table or in
Willy Tarreauc9705a12010-07-27 20:05:50 +020013945 the designated stick-table. If the address is not found, zero is returned.
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013946 See also sc/sc0/sc1/sc2_conn_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013947
Willy Tarreau74ca5042013-06-11 23:12:07 +020013948src_conn_cur([<table>]) : integer
Willy Tarreauc9705a12010-07-27 20:05:50 +020013949 Returns the current amount of concurrent connections initiated from the
Willy Tarreau74ca5042013-06-11 23:12:07 +020013950 current incoming connection's source address in the current proxy's
13951 stick-table or in the designated stick-table. If the address is not found,
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013952 zero is returned. See also sc/sc0/sc1/sc2_conn_cur.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013953
Willy Tarreau74ca5042013-06-11 23:12:07 +020013954src_conn_rate([<table>]) : integer
13955 Returns the average connection rate from the incoming connection's source
13956 address in the current proxy's stick-table or in the designated stick-table,
13957 measured in amount of connections over the period configured in the table. If
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013958 the address is not found, zero is returned. See also sc/sc0/sc1/sc2_conn_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013959
Willy Tarreau74ca5042013-06-11 23:12:07 +020013960src_get_gpc0([<table>]) : integer
Willy Tarreauc9705a12010-07-27 20:05:50 +020013961 Returns the value of the first General Purpose Counter associated to the
Willy Tarreau74ca5042013-06-11 23:12:07 +020013962 incoming connection's source address in the current proxy's stick-table or in
Willy Tarreauc9705a12010-07-27 20:05:50 +020013963 the designated stick-table. If the address is not found, zero is returned.
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013964 See also sc/sc0/sc1/sc2_get_gpc0 and src_inc_gpc0.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013965
Thierry FOURNIER236657b2015-08-19 08:25:14 +020013966src_get_gpt0([<table>]) : integer
13967 Returns the value of the first General Purpose Tag associated to the
13968 incoming connection's source address in the current proxy's stick-table or in
13969 the designated stick-table. If the address is not found, zero is returned.
13970 See also sc/sc0/sc1/sc2_get_gpt0.
13971
Willy Tarreau74ca5042013-06-11 23:12:07 +020013972src_gpc0_rate([<table>]) : integer
Willy Tarreauba2ffd12013-05-29 15:54:14 +020013973 Returns the average increment rate of the first General Purpose Counter
Willy Tarreau74ca5042013-06-11 23:12:07 +020013974 associated to the incoming connection's source address in the current proxy's
Willy Tarreauba2ffd12013-05-29 15:54:14 +020013975 stick-table or in the designated stick-table. It reports the frequency
13976 which the gpc0 counter was incremented over the configured period. See also
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013977 sc/sc0/sc1/sc2_gpc0_rate, src_get_gpc0, and sc/sc0/sc1/sc2_inc_gpc0. Note
13978 that the "gpc0_rate" counter must be stored in the stick-table for a value to
13979 be returned, as "gpc0" only holds the event count.
Willy Tarreauba2ffd12013-05-29 15:54:14 +020013980
Willy Tarreau74ca5042013-06-11 23:12:07 +020013981src_http_err_cnt([<table>]) : integer
13982 Returns the cumulated number of HTTP errors from the incoming connection's
13983 source address in the current proxy's stick-table or in the designated
Willy Tarreauc9705a12010-07-27 20:05:50 +020013984 stick-table. This includes the both request errors and 4xx error responses.
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013985 See also sc/sc0/sc1/sc2_http_err_cnt. If the address is not found, zero is
Willy Tarreau74ca5042013-06-11 23:12:07 +020013986 returned.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013987
Willy Tarreau74ca5042013-06-11 23:12:07 +020013988src_http_err_rate([<table>]) : integer
13989 Returns the average rate of HTTP errors from the incoming connection's source
13990 address in the current proxy's stick-table or in the designated stick-table,
13991 measured in amount of errors over the period configured in the table. This
13992 includes the both request errors and 4xx error responses. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013993 not found, zero is returned. See also sc/sc0/sc1/sc2_http_err_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013994
Willy Tarreau74ca5042013-06-11 23:12:07 +020013995src_http_req_cnt([<table>]) : integer
13996 Returns the cumulated number of HTTP requests from the incoming connection's
13997 source address in the current proxy's stick-table or in the designated stick-
13998 table. This includes every started request, valid or not. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013999 not found, zero is returned. See also sc/sc0/sc1/sc2_http_req_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +020014000
Willy Tarreau74ca5042013-06-11 23:12:07 +020014001src_http_req_rate([<table>]) : integer
14002 Returns the average rate of HTTP requests from the incoming connection's
14003 source address in the current proxy's stick-table or in the designated stick-
14004 table, measured in amount of requests over the period configured in the
Willy Tarreauc9705a12010-07-27 20:05:50 +020014005 table. This includes every started request, valid or not. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020014006 not found, zero is returned. See also sc/sc0/sc1/sc2_http_req_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020014007
Willy Tarreau74ca5042013-06-11 23:12:07 +020014008src_inc_gpc0([<table>]) : integer
14009 Increments the first General Purpose Counter associated to the incoming
14010 connection's source address in the current proxy's stick-table or in the
14011 designated stick-table, and returns its new value. If the address is not
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020014012 found, an entry is created and 1 is returned. See also sc0/sc2/sc2_inc_gpc0.
Willy Tarreau74ca5042013-06-11 23:12:07 +020014013 This is typically used as a second ACL in an expression in order to mark a
14014 connection when a first ACL was verified :
Willy Tarreauc9705a12010-07-27 20:05:50 +020014015
Jarno Huuskonen676f6222017-03-30 09:19:45 +030014016 Example:
Willy Tarreauc9705a12010-07-27 20:05:50 +020014017 acl abuse src_http_req_rate gt 10
Willy Tarreau869948b2013-01-04 14:14:57 +010014018 acl kill src_inc_gpc0 gt 0
Willy Tarreaue9656522010-08-17 15:40:09 +020014019 tcp-request connection reject if abuse kill
Willy Tarreauc9705a12010-07-27 20:05:50 +020014020
Willy Tarreau16e01562016-08-09 16:46:18 +020014021src_is_local : boolean
14022 Returns true if the source address of the incoming connection is local to the
14023 system, or false if the address doesn't exist on the system, meaning that it
14024 comes from a remote machine. Note that UNIX addresses are considered local.
14025 It can be useful to apply certain access restrictions based on where the
14026 client comes from (eg: require auth or https for remote machines). Please
14027 note that the check involves a few system calls, so it's better to do it only
14028 once per connection.
14029
Willy Tarreau74ca5042013-06-11 23:12:07 +020014030src_kbytes_in([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020014031 Returns the total amount of data received from the incoming connection's
14032 source address in the current proxy's stick-table or in the designated
14033 stick-table, measured in kilobytes. If the address is not found, zero is
14034 returned. The test is currently performed on 32-bit integers, which limits
14035 values to 4 terabytes. See also sc/sc0/sc1/sc2_kbytes_in.
Willy Tarreauc9705a12010-07-27 20:05:50 +020014036
Willy Tarreau74ca5042013-06-11 23:12:07 +020014037src_kbytes_out([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020014038 Returns the total amount of data sent to the incoming connection's source
14039 address in the current proxy's stick-table or in the designated stick-table,
14040 measured in kilobytes. If the address is not found, zero is returned. The
14041 test is currently performed on 32-bit integers, which limits values to 4
14042 terabytes. See also sc/sc0/sc1/sc2_kbytes_out.
Willy Tarreaua975b8f2010-06-05 19:13:27 +020014043
Willy Tarreau74ca5042013-06-11 23:12:07 +020014044src_port : integer
14045 Returns an integer value corresponding to the TCP source port of the
14046 connection on the client side, which is the port the client connected from.
14047 Usage of this function is very limited as modern protocols do not care much
14048 about source ports nowadays.
Willy Tarreau079ff0a2009-03-05 21:34:28 +010014049
Willy Tarreau74ca5042013-06-11 23:12:07 +020014050src_sess_cnt([<table>]) : integer
14051 Returns the cumulated number of connections initiated from the incoming
Willy Tarreauc9705a12010-07-27 20:05:50 +020014052 connection's source IPv4 address in the current proxy's stick-table or in the
14053 designated stick-table, that were transformed into sessions, which means that
14054 they were accepted by "tcp-request" rules. If the address is not found, zero
Willy Tarreau4d4149c2013-07-23 19:33:46 +020014055 is returned. See also sc/sc0/sc1/sc2_sess_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +020014056
Willy Tarreau74ca5042013-06-11 23:12:07 +020014057src_sess_rate([<table>]) : integer
14058 Returns the average session rate from the incoming connection's source
14059 address in the current proxy's stick-table or in the designated stick-table,
14060 measured in amount of sessions over the period configured in the table. A
14061 session is a connection that went past the early "tcp-request" rules. If the
Willy Tarreau4d4149c2013-07-23 19:33:46 +020014062 address is not found, zero is returned. See also sc/sc0/sc1/sc2_sess_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020014063
Willy Tarreau74ca5042013-06-11 23:12:07 +020014064src_updt_conn_cnt([<table>]) : integer
14065 Creates or updates the entry associated to the incoming connection's source
14066 address in the current proxy's stick-table or in the designated stick-table.
14067 This table must be configured to store the "conn_cnt" data type, otherwise
14068 the match will be ignored. The current count is incremented by one, and the
14069 expiration timer refreshed. The updated count is returned, so this match
14070 can't return zero. This was used to reject service abusers based on their
14071 source address. Note: it is recommended to use the more complete "track-sc*"
14072 actions in "tcp-request" rules instead.
Willy Tarreaua975b8f2010-06-05 19:13:27 +020014073
14074 Example :
14075 # This frontend limits incoming SSH connections to 3 per 10 second for
14076 # each source address, and rejects excess connections until a 10 second
14077 # silence is observed. At most 20 addresses are tracked.
14078 listen ssh
14079 bind :22
14080 mode tcp
14081 maxconn 100
Willy Tarreauc9705a12010-07-27 20:05:50 +020014082 stick-table type ip size 20 expire 10s store conn_cnt
Willy Tarreau74ca5042013-06-11 23:12:07 +020014083 tcp-request content reject if { src_updt_conn_cnt gt 3 }
Willy Tarreaua975b8f2010-06-05 19:13:27 +020014084 server local 127.0.0.1:22
14085
Willy Tarreau74ca5042013-06-11 23:12:07 +020014086srv_id : integer
14087 Returns an integer containing the server's id when processing the response.
14088 While it's almost only used with ACLs, it may be used for logging or
14089 debugging.
Hervé COMMOWICKdaa824e2011-08-05 12:09:44 +020014090
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200140917.3.4. Fetching samples at Layer 5
Willy Tarreau74ca5042013-06-11 23:12:07 +020014092----------------------------------
Willy Tarreau0b1cd942010-05-16 22:18:27 +020014093
Willy Tarreau74ca5042013-06-11 23:12:07 +020014094The layer 5 usually describes just the session layer which in haproxy is
14095closest to the session once all the connection handshakes are finished, but
14096when no content is yet made available. The fetch methods described here are
14097usable as low as the "tcp-request content" rule sets unless they require some
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030014098future information. Those generally include the results of SSL negotiations.
Willy Tarreauc735a072011-03-29 00:57:02 +020014099
Ben Shillitof25e8e52016-12-02 14:25:37 +00001410051d.all(<prop>[,<prop>*]) : string
14101 Returns values for the properties requested as a string, where values are
14102 separated by the delimiter specified with "51degrees-property-separator".
14103 The device is identified using all the important HTTP headers from the
14104 request. The function can be passed up to five property names, and if a
14105 property name can't be found, the value "NoData" is returned.
14106
14107 Example :
14108 # Here the header "X-51D-DeviceTypeMobileTablet" is added to the request
14109 # containing the three properties requested using all relevant headers from
14110 # the request.
14111 frontend http-in
14112 bind *:8081
14113 default_backend servers
14114 http-request set-header X-51D-DeviceTypeMobileTablet \
14115 %[51d.all(DeviceType,IsMobile,IsTablet)]
14116
Emeric Brun645ae792014-04-30 14:21:06 +020014117ssl_bc : boolean
14118 Returns true when the back connection was made via an SSL/TLS transport
14119 layer and is locally deciphered. This means the outgoing connection was made
14120 other a server with the "ssl" option.
14121
14122ssl_bc_alg_keysize : integer
14123 Returns the symmetric cipher key size supported in bits when the outgoing
14124 connection was made over an SSL/TLS transport layer.
14125
14126ssl_bc_cipher : string
14127 Returns the name of the used cipher when the outgoing connection was made
14128 over an SSL/TLS transport layer.
14129
14130ssl_bc_protocol : string
14131 Returns the name of the used protocol when the outgoing connection was made
14132 over an SSL/TLS transport layer.
14133
Emeric Brunb73a9b02014-04-30 18:49:19 +020014134ssl_bc_unique_id : binary
Emeric Brun645ae792014-04-30 14:21:06 +020014135 When the outgoing connection was made over an SSL/TLS transport layer,
Emeric Brunb73a9b02014-04-30 18:49:19 +020014136 returns the TLS unique ID as defined in RFC5929 section 3. The unique id
14137 can be encoded to base64 using the converter: "ssl_bc_unique_id,base64".
Emeric Brun645ae792014-04-30 14:21:06 +020014138
14139ssl_bc_session_id : binary
14140 Returns the SSL ID of the back connection when the outgoing connection was
14141 made over an SSL/TLS transport layer. It is useful to log if we want to know
14142 if session was reused or not.
14143
14144ssl_bc_use_keysize : integer
14145 Returns the symmetric cipher key size used in bits when the outgoing
14146 connection was made over an SSL/TLS transport layer.
14147
Willy Tarreau74ca5042013-06-11 23:12:07 +020014148ssl_c_ca_err : integer
14149 When the incoming connection was made over an SSL/TLS transport layer,
14150 returns the ID of the first error detected during verification of the client
14151 certificate at depth > 0, or 0 if no error was encountered during this
14152 verification process. Please refer to your SSL library's documentation to
14153 find the exhaustive list of error codes.
Willy Tarreauc735a072011-03-29 00:57:02 +020014154
Willy Tarreau74ca5042013-06-11 23:12:07 +020014155ssl_c_ca_err_depth : integer
14156 When the incoming connection was made over an SSL/TLS transport layer,
14157 returns the depth in the CA chain of the first error detected during the
14158 verification of the client certificate. If no error is encountered, 0 is
14159 returned.
Willy Tarreau0ba27502007-12-24 16:55:16 +010014160
Emeric Brun43e79582014-10-29 19:03:26 +010014161ssl_c_der : binary
14162 Returns the DER formatted certificate presented by the client when the
14163 incoming connection was made over an SSL/TLS transport layer. When used for
14164 an ACL, the value(s) to match against can be passed in hexadecimal form.
14165
Willy Tarreau74ca5042013-06-11 23:12:07 +020014166ssl_c_err : integer
14167 When the incoming connection was made over an SSL/TLS transport layer,
14168 returns the ID of the first error detected during verification at depth 0, or
14169 0 if no error was encountered during this verification process. Please refer
14170 to your SSL library's documentation to find the exhaustive list of error
14171 codes.
Willy Tarreau62644772008-07-16 18:36:06 +020014172
Willy Tarreau74ca5042013-06-11 23:12:07 +020014173ssl_c_i_dn([<entry>[,<occ>]]) : string
14174 When the incoming connection was made over an SSL/TLS transport layer,
14175 returns the full distinguished name of the issuer of the certificate
14176 presented by the client when no <entry> is specified, or the value of the
14177 first given entry found from the beginning of the DN. If a positive/negative
14178 occurrence number is specified as the optional second argument, it returns
14179 the value of the nth given entry value from the beginning/end of the DN.
14180 For instance, "ssl_c_i_dn(OU,2)" the second organization unit, and
14181 "ssl_c_i_dn(CN)" retrieves the common name.
Willy Tarreau62644772008-07-16 18:36:06 +020014182
Willy Tarreau74ca5042013-06-11 23:12:07 +020014183ssl_c_key_alg : string
14184 Returns the name of the algorithm used to generate the key of the certificate
14185 presented by the client when the incoming connection was made over an SSL/TLS
14186 transport layer.
Willy Tarreau62644772008-07-16 18:36:06 +020014187
Willy Tarreau74ca5042013-06-11 23:12:07 +020014188ssl_c_notafter : string
14189 Returns the end date presented by the client as a formatted string
14190 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
14191 transport layer.
Emeric Brunbede3d02009-06-30 17:54:00 +020014192
Willy Tarreau74ca5042013-06-11 23:12:07 +020014193ssl_c_notbefore : string
14194 Returns the start date presented by the client as a formatted string
14195 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
14196 transport layer.
Willy Tarreaub6672b52011-12-12 17:23:41 +010014197
Willy Tarreau74ca5042013-06-11 23:12:07 +020014198ssl_c_s_dn([<entry>[,<occ>]]) : string
14199 When the incoming connection was made over an SSL/TLS transport layer,
14200 returns the full distinguished name of the subject of the certificate
14201 presented by the client when no <entry> is specified, or the value of the
14202 first given entry found from the beginning of the DN. If a positive/negative
14203 occurrence number is specified as the optional second argument, it returns
14204 the value of the nth given entry value from the beginning/end of the DN.
14205 For instance, "ssl_c_s_dn(OU,2)" the second organization unit, and
14206 "ssl_c_s_dn(CN)" retrieves the common name.
Willy Tarreaub6672b52011-12-12 17:23:41 +010014207
Willy Tarreau74ca5042013-06-11 23:12:07 +020014208ssl_c_serial : binary
14209 Returns the serial of the certificate presented by the client when the
14210 incoming connection was made over an SSL/TLS transport layer. When used for
14211 an ACL, the value(s) to match against can be passed in hexadecimal form.
Emeric Brun2525b6b2012-10-18 15:59:43 +020014212
Willy Tarreau74ca5042013-06-11 23:12:07 +020014213ssl_c_sha1 : binary
14214 Returns the SHA-1 fingerprint of the certificate presented by the client when
14215 the incoming connection was made over an SSL/TLS transport layer. This can be
14216 used to stick a client to a server, or to pass this information to a server.
Willy Tarreau2d0caa32014-07-02 19:01:22 +020014217 Note that the output is binary, so if you want to pass that signature to the
14218 server, you need to encode it in hex or base64, such as in the example below:
14219
Jarno Huuskonen676f6222017-03-30 09:19:45 +030014220 Example:
Willy Tarreau2d0caa32014-07-02 19:01:22 +020014221 http-request set-header X-SSL-Client-SHA1 %[ssl_c_sha1,hex]
Emeric Brun2525b6b2012-10-18 15:59:43 +020014222
Willy Tarreau74ca5042013-06-11 23:12:07 +020014223ssl_c_sig_alg : string
14224 Returns the name of the algorithm used to sign the certificate presented by
14225 the client when the incoming connection was made over an SSL/TLS transport
14226 layer.
Emeric Brun87855892012-10-17 17:39:35 +020014227
Willy Tarreau74ca5042013-06-11 23:12:07 +020014228ssl_c_used : boolean
14229 Returns true if current SSL session uses a client certificate even if current
14230 connection uses SSL session resumption. See also "ssl_fc_has_crt".
Emeric Brun7f56e742012-10-19 18:15:40 +020014231
Willy Tarreau74ca5042013-06-11 23:12:07 +020014232ssl_c_verify : integer
14233 Returns the verify result error ID when the incoming connection was made over
14234 an SSL/TLS transport layer, otherwise zero if no error is encountered. Please
14235 refer to your SSL library's documentation for an exhaustive list of error
14236 codes.
Emeric Brunce5ad802012-10-22 14:11:22 +020014237
Willy Tarreau74ca5042013-06-11 23:12:07 +020014238ssl_c_version : integer
14239 Returns the version of the certificate presented by the client when the
14240 incoming connection was made over an SSL/TLS transport layer.
Emeric Brunce5ad802012-10-22 14:11:22 +020014241
Emeric Brun43e79582014-10-29 19:03:26 +010014242ssl_f_der : binary
14243 Returns the DER formatted certificate presented by the frontend when the
14244 incoming connection was made over an SSL/TLS transport layer. When used for
14245 an ACL, the value(s) to match against can be passed in hexadecimal form.
14246
Willy Tarreau74ca5042013-06-11 23:12:07 +020014247ssl_f_i_dn([<entry>[,<occ>]]) : string
14248 When the incoming connection was made over an SSL/TLS transport layer,
14249 returns the full distinguished name of the issuer of the certificate
14250 presented by the frontend when no <entry> is specified, or the value of the
14251 first given entry found from the beginning of the DN. If a positive/negative
Emeric Brun87855892012-10-17 17:39:35 +020014252 occurrence number is specified as the optional second argument, it returns
Willy Tarreau74ca5042013-06-11 23:12:07 +020014253 the value of the nth given entry value from the beginning/end of the DN.
14254 For instance, "ssl_f_i_dn(OU,2)" the second organization unit, and
14255 "ssl_f_i_dn(CN)" retrieves the common name.
Emeric Brun87855892012-10-17 17:39:35 +020014256
Willy Tarreau74ca5042013-06-11 23:12:07 +020014257ssl_f_key_alg : string
14258 Returns the name of the algorithm used to generate the key of the certificate
14259 presented by the frontend when the incoming connection was made over an
14260 SSL/TLS transport layer.
Emeric Brun7f56e742012-10-19 18:15:40 +020014261
Willy Tarreau74ca5042013-06-11 23:12:07 +020014262ssl_f_notafter : string
14263 Returns the end date presented by the frontend as a formatted string
14264 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
14265 transport layer.
Emeric Brun2525b6b2012-10-18 15:59:43 +020014266
Willy Tarreau74ca5042013-06-11 23:12:07 +020014267ssl_f_notbefore : string
14268 Returns the start date presented by the frontend as a formatted string
14269 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
14270 transport layer.
Emeric Brun87855892012-10-17 17:39:35 +020014271
Willy Tarreau74ca5042013-06-11 23:12:07 +020014272ssl_f_s_dn([<entry>[,<occ>]]) : string
14273 When the incoming connection was made over an SSL/TLS transport layer,
14274 returns the full distinguished name of the subject of the certificate
14275 presented by the frontend when no <entry> is specified, or the value of the
14276 first given entry found from the beginning of the DN. If a positive/negative
14277 occurrence number is specified as the optional second argument, it returns
14278 the value of the nth given entry value from the beginning/end of the DN.
14279 For instance, "ssl_f_s_dn(OU,2)" the second organization unit, and
14280 "ssl_f_s_dn(CN)" retrieves the common name.
Emeric Brunce5ad802012-10-22 14:11:22 +020014281
Willy Tarreau74ca5042013-06-11 23:12:07 +020014282ssl_f_serial : binary
14283 Returns the serial of the certificate presented by the frontend when the
14284 incoming connection was made over an SSL/TLS transport layer. When used for
14285 an ACL, the value(s) to match against can be passed in hexadecimal form.
Emeric Brun87855892012-10-17 17:39:35 +020014286
Emeric Brun55f4fa82014-04-30 17:11:25 +020014287ssl_f_sha1 : binary
14288 Returns the SHA-1 fingerprint of the certificate presented by the frontend
14289 when the incoming connection was made over an SSL/TLS transport layer. This
14290 can be used to know which certificate was chosen using SNI.
14291
Willy Tarreau74ca5042013-06-11 23:12:07 +020014292ssl_f_sig_alg : string
14293 Returns the name of the algorithm used to sign the certificate presented by
14294 the frontend when the incoming connection was made over an SSL/TLS transport
14295 layer.
Emeric Brun7f56e742012-10-19 18:15:40 +020014296
Willy Tarreau74ca5042013-06-11 23:12:07 +020014297ssl_f_version : integer
14298 Returns the version of the certificate presented by the frontend when the
14299 incoming connection was made over an SSL/TLS transport layer.
14300
14301ssl_fc : boolean
Emeric Brun2525b6b2012-10-18 15:59:43 +020014302 Returns true when the front connection was made via an SSL/TLS transport
14303 layer and is locally deciphered. This means it has matched a socket declared
14304 with a "bind" line having the "ssl" option.
14305
Willy Tarreau74ca5042013-06-11 23:12:07 +020014306 Example :
14307 # This passes "X-Proto: https" to servers when client connects over SSL
14308 listen http-https
14309 bind :80
14310 bind :443 ssl crt /etc/haproxy.pem
14311 http-request add-header X-Proto https if { ssl_fc }
14312
14313ssl_fc_alg_keysize : integer
14314 Returns the symmetric cipher key size supported in bits when the incoming
14315 connection was made over an SSL/TLS transport layer.
14316
14317ssl_fc_alpn : string
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030014318 This extracts the Application Layer Protocol Negotiation field from an
Willy Tarreau74ca5042013-06-11 23:12:07 +020014319 incoming connection made via a TLS transport layer and locally deciphered by
14320 haproxy. The result is a string containing the protocol name advertised by
14321 the client. The SSL library must have been built with support for TLS
14322 extensions enabled (check haproxy -vv). Note that the TLS ALPN extension is
14323 not advertised unless the "alpn" keyword on the "bind" line specifies a
14324 protocol list. Also, nothing forces the client to pick a protocol from this
14325 list, any other one may be requested. The TLS ALPN extension is meant to
14326 replace the TLS NPN extension. See also "ssl_fc_npn".
14327
Willy Tarreau74ca5042013-06-11 23:12:07 +020014328ssl_fc_cipher : string
14329 Returns the name of the used cipher when the incoming connection was made
14330 over an SSL/TLS transport layer.
Willy Tarreauab861d32013-04-02 02:30:41 +020014331
Thierry FOURNIER5bf77322017-02-25 12:45:22 +010014332ssl_fc_cipherlist_bin : binary
14333 Returns the binary form of the client hello cipher list. The maximum returned
14334 value length is according with the value of
Emmanuel Hocdetaaee7502017-03-07 18:34:58 +010014335 "tune.ssl.capture-cipherlist-size".
Thierry FOURNIER5bf77322017-02-25 12:45:22 +010014336
14337ssl_fc_cipherlist_hex : string
14338 Returns the binary form of the client hello cipher list encoded as
14339 hexadecimal. The maximum returned value length is according with the value of
Emmanuel Hocdetaaee7502017-03-07 18:34:58 +010014340 "tune.ssl.capture-cipherlist-size".
Thierry FOURNIER5bf77322017-02-25 12:45:22 +010014341
14342ssl_fc_cipherlist_str : string
14343 Returns the decoded text form of the client hello cipher list. The maximum
14344 number of ciphers returned is according with the value of
14345 "tune.ssl.capture-cipherlist-size". Note that this sample-fetch is only
Emmanuel Hocdetddcde192017-09-01 17:32:08 +020014346 avaible with OpenSSL >= 1.0.2. If the function is not enabled, this
14347 sample-fetch returns the hash like "ssl_fc_cipherlist_xxh".
Thierry FOURNIER5bf77322017-02-25 12:45:22 +010014348
14349ssl_fc_cipherlist_xxh : integer
14350 Returns a xxh64 of the cipher list. This hash can be return only is the value
14351 "tune.ssl.capture-cipherlist-size" is set greater than 0, however the hash
Emmanuel Hocdetaaee7502017-03-07 18:34:58 +010014352 take in account all the data of the cipher list.
Thierry FOURNIER5bf77322017-02-25 12:45:22 +010014353
Willy Tarreau74ca5042013-06-11 23:12:07 +020014354ssl_fc_has_crt : boolean
Emeric Brun2525b6b2012-10-18 15:59:43 +020014355 Returns true if a client certificate is present in an incoming connection over
14356 SSL/TLS transport layer. Useful if 'verify' statement is set to 'optional'.
Emeric Brun9143d372012-12-20 15:44:16 +010014357 Note: on SSL session resumption with Session ID or TLS ticket, client
14358 certificate is not present in the current connection but may be retrieved
14359 from the cache or the ticket. So prefer "ssl_c_used" if you want to check if
14360 current SSL session uses a client certificate.
Emeric Brun2525b6b2012-10-18 15:59:43 +020014361
Olivier Houchardccaa7de2017-10-02 11:51:03 +020014362ssl_fc_has_early : boolean
14363 Returns true if early data were sent, and the handshake didn't happen yet. As
14364 it has security implications, it is useful to be able to refuse those, or
14365 wait until the handshake happened.
14366
Willy Tarreau74ca5042013-06-11 23:12:07 +020014367ssl_fc_has_sni : boolean
14368 This checks for the presence of a Server Name Indication TLS extension (SNI)
Willy Tarreauf7bc57c2012-10-03 00:19:48 +020014369 in an incoming connection was made over an SSL/TLS transport layer. Returns
14370 true when the incoming connection presents a TLS SNI field. This requires
14371 that the SSL library is build with support for TLS extensions enabled (check
14372 haproxy -vv).
Willy Tarreau7875d092012-09-10 08:20:03 +020014373
Nenad Merdanovic1516fe32016-05-17 03:31:21 +020014374ssl_fc_is_resumed : boolean
Nenad Merdanovic26ea8222015-05-18 02:28:57 +020014375 Returns true if the SSL/TLS session has been resumed through the use of
14376 SSL session cache or TLS tickets.
14377
Willy Tarreau74ca5042013-06-11 23:12:07 +020014378ssl_fc_npn : string
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030014379 This extracts the Next Protocol Negotiation field from an incoming connection
Willy Tarreau74ca5042013-06-11 23:12:07 +020014380 made via a TLS transport layer and locally deciphered by haproxy. The result
14381 is a string containing the protocol name advertised by the client. The SSL
14382 library must have been built with support for TLS extensions enabled (check
14383 haproxy -vv). Note that the TLS NPN extension is not advertised unless the
14384 "npn" keyword on the "bind" line specifies a protocol list. Also, nothing
14385 forces the client to pick a protocol from this list, any other one may be
14386 requested. Please note that the TLS NPN extension was replaced with ALPN.
Willy Tarreaua33c6542012-10-15 13:19:06 +020014387
Willy Tarreau74ca5042013-06-11 23:12:07 +020014388ssl_fc_protocol : string
14389 Returns the name of the used protocol when the incoming connection was made
14390 over an SSL/TLS transport layer.
Willy Tarreau7875d092012-09-10 08:20:03 +020014391
Emeric Brunb73a9b02014-04-30 18:49:19 +020014392ssl_fc_unique_id : binary
David Sc1ad52e2014-04-08 18:48:47 -040014393 When the incoming connection was made over an SSL/TLS transport layer,
Emeric Brunb73a9b02014-04-30 18:49:19 +020014394 returns the TLS unique ID as defined in RFC5929 section 3. The unique id
14395 can be encoded to base64 using the converter: "ssl_bc_unique_id,base64".
David Sc1ad52e2014-04-08 18:48:47 -040014396
Willy Tarreau74ca5042013-06-11 23:12:07 +020014397ssl_fc_session_id : binary
14398 Returns the SSL ID of the front connection when the incoming connection was
14399 made over an SSL/TLS transport layer. It is useful to stick a given client to
14400 a server. It is important to note that some browsers refresh their session ID
14401 every few minutes.
Willy Tarreau7875d092012-09-10 08:20:03 +020014402
Willy Tarreau74ca5042013-06-11 23:12:07 +020014403ssl_fc_sni : string
14404 This extracts the Server Name Indication TLS extension (SNI) field from an
14405 incoming connection made via an SSL/TLS transport layer and locally
14406 deciphered by haproxy. The result (when present) typically is a string
14407 matching the HTTPS host name (253 chars or less). The SSL library must have
14408 been built with support for TLS extensions enabled (check haproxy -vv).
14409
14410 This fetch is different from "req_ssl_sni" above in that it applies to the
14411 connection being deciphered by haproxy and not to SSL contents being blindly
14412 forwarded. See also "ssl_fc_sni_end" and "ssl_fc_sni_reg" below. This
Cyril Bonté9c1eb1e2012-10-09 22:45:34 +020014413 requires that the SSL library is build with support for TLS extensions
14414 enabled (check haproxy -vv).
Willy Tarreau62644772008-07-16 18:36:06 +020014415
Willy Tarreau74ca5042013-06-11 23:12:07 +020014416 ACL derivatives :
Willy Tarreau74ca5042013-06-11 23:12:07 +020014417 ssl_fc_sni_end : suffix match
14418 ssl_fc_sni_reg : regex match
Emeric Brun589fcad2012-10-16 14:13:26 +020014419
Willy Tarreau74ca5042013-06-11 23:12:07 +020014420ssl_fc_use_keysize : integer
14421 Returns the symmetric cipher key size used in bits when the incoming
14422 connection was made over an SSL/TLS transport layer.
Willy Tarreaub6fb4202008-07-20 11:18:28 +020014423
Willy Tarreaub6fb4202008-07-20 11:18:28 +020014424
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200144257.3.5. Fetching samples from buffer contents (Layer 6)
Willy Tarreau74ca5042013-06-11 23:12:07 +020014426------------------------------------------------------
Willy Tarreaub6fb4202008-07-20 11:18:28 +020014427
Willy Tarreau74ca5042013-06-11 23:12:07 +020014428Fetching samples from buffer contents is a bit different from the previous
14429sample fetches above because the sampled data are ephemeral. These data can
14430only be used when they're available and will be lost when they're forwarded.
14431For this reason, samples fetched from buffer contents during a request cannot
14432be used in a response for example. Even while the data are being fetched, they
14433can change. Sometimes it is necessary to set some delays or combine multiple
14434sample fetch methods to ensure that the expected data are complete and usable,
14435for example through TCP request content inspection. Please see the "tcp-request
14436content" keyword for more detailed information on the subject.
Willy Tarreau62644772008-07-16 18:36:06 +020014437
Willy Tarreau74ca5042013-06-11 23:12:07 +020014438payload(<offset>,<length>) : binary (deprecated)
14439 This is an alias for "req.payload" when used in the context of a request (eg:
14440 "stick on", "stick match"), and for "res.payload" when used in the context of
14441 a response such as in "stick store response".
Willy Tarreau0ba27502007-12-24 16:55:16 +010014442
Willy Tarreau74ca5042013-06-11 23:12:07 +020014443payload_lv(<offset1>,<length>[,<offset2>]) : binary (deprecated)
14444 This is an alias for "req.payload_lv" when used in the context of a request
14445 (eg: "stick on", "stick match"), and for "res.payload_lv" when used in the
14446 context of a response such as in "stick store response".
Willy Tarreau0ba27502007-12-24 16:55:16 +010014447
Thierry FOURNIERd7d88812017-04-19 15:15:14 +020014448req.hdrs : string
14449 Returns the current request headers as string including the last empty line
14450 separating headers from the request body. The last empty line can be used to
14451 detect a truncated header block. This sample fetch is useful for some SPOE
14452 headers analyzers and for advanced logging.
14453
Thierry FOURNIER5617dce2017-04-09 05:38:19 +020014454req.hdrs_bin : binary
14455 Returns the current request headers contained in preparsed binary form. This
14456 is useful for offloading some processing with SPOE. Each string is described
14457 by a length followed by the number of bytes indicated in the length. The
14458 length is represented using the variable integer encoding detailed in the
14459 SPOE documentation. The end of the list is marked by a couple of empty header
14460 names and values (length of 0 for both).
14461
14462 *(<str:header-name><str:header-value>)<empty string><empty string>
14463
14464 int: refer to the SPOE documentation for the encoding
14465 str: <int:length><bytes>
14466
Willy Tarreau74ca5042013-06-11 23:12:07 +020014467req.len : integer
14468req_len : integer (deprecated)
14469 Returns an integer value corresponding to the number of bytes present in the
14470 request buffer. This is mostly used in ACL. It is important to understand
14471 that this test does not return false as long as the buffer is changing. This
14472 means that a check with equality to zero will almost always immediately match
14473 at the beginning of the session, while a test for more data will wait for
14474 that data to come in and return false only when haproxy is certain that no
14475 more data will come in. This test was designed to be used with TCP request
14476 content inspection.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014477
Willy Tarreau74ca5042013-06-11 23:12:07 +020014478req.payload(<offset>,<length>) : binary
14479 This extracts a binary block of <length> bytes and starting at byte <offset>
Willy Tarreau00f00842013-08-02 11:07:32 +020014480 in the request buffer. As a special case, if the <length> argument is zero,
14481 the the whole buffer from <offset> to the end is extracted. This can be used
14482 with ACLs in order to check for the presence of some content in a buffer at
14483 any location.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014484
Willy Tarreau74ca5042013-06-11 23:12:07 +020014485 ACL alternatives :
14486 payload(<offset>,<length>) : hex binary match
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014487
Willy Tarreau74ca5042013-06-11 23:12:07 +020014488req.payload_lv(<offset1>,<length>[,<offset2>]) : binary
14489 This extracts a binary block whose size is specified at <offset1> for <length>
14490 bytes, and which starts at <offset2> if specified or just after the length in
14491 the request buffer. The <offset2> parameter also supports relative offsets if
14492 prepended with a '+' or '-' sign.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014493
Willy Tarreau74ca5042013-06-11 23:12:07 +020014494 ACL alternatives :
14495 payload_lv(<offset1>,<length>[,<offset2>]) : hex binary match
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014496
Willy Tarreau74ca5042013-06-11 23:12:07 +020014497 Example : please consult the example from the "stick store-response" keyword.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014498
Willy Tarreau74ca5042013-06-11 23:12:07 +020014499req.proto_http : boolean
14500req_proto_http : boolean (deprecated)
14501 Returns true when data in the request buffer look like HTTP and correctly
14502 parses as such. It is the same parser as the common HTTP request parser which
14503 is used so there should be no surprises. The test does not match until the
14504 request is complete, failed or timed out. This test may be used to report the
14505 protocol in TCP logs, but the biggest use is to block TCP request analysis
14506 until a complete HTTP request is present in the buffer, for example to track
14507 a header.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014508
Willy Tarreau74ca5042013-06-11 23:12:07 +020014509 Example:
14510 # track request counts per "base" (concatenation of Host+URL)
14511 tcp-request inspect-delay 10s
14512 tcp-request content reject if !HTTP
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020014513 tcp-request content track-sc0 base table req-rate
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014514
Willy Tarreau74ca5042013-06-11 23:12:07 +020014515req.rdp_cookie([<name>]) : string
14516rdp_cookie([<name>]) : string (deprecated)
14517 When the request buffer looks like the RDP protocol, extracts the RDP cookie
14518 <name>, or any cookie if unspecified. The parser only checks for the first
14519 cookie, as illustrated in the RDP protocol specification. The cookie name is
14520 case insensitive. Generally the "MSTS" cookie name will be used, as it can
14521 contain the user name of the client connecting to the server if properly
14522 configured on the client. The "MSTSHASH" cookie is often used as well for
14523 session stickiness to servers.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014524
Willy Tarreau74ca5042013-06-11 23:12:07 +020014525 This differs from "balance rdp-cookie" in that any balancing algorithm may be
14526 used and thus the distribution of clients to backend servers is not linked to
14527 a hash of the RDP cookie. It is envisaged that using a balancing algorithm
14528 such as "balance roundrobin" or "balance leastconn" will lead to a more even
14529 distribution of clients to backend servers than the hash used by "balance
14530 rdp-cookie".
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014531
Willy Tarreau74ca5042013-06-11 23:12:07 +020014532 ACL derivatives :
14533 req_rdp_cookie([<name>]) : exact string match
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014534
Willy Tarreau74ca5042013-06-11 23:12:07 +020014535 Example :
14536 listen tse-farm
14537 bind 0.0.0.0:3389
14538 # wait up to 5s for an RDP cookie in the request
14539 tcp-request inspect-delay 5s
14540 tcp-request content accept if RDP_COOKIE
14541 # apply RDP cookie persistence
14542 persist rdp-cookie
14543 # Persist based on the mstshash cookie
14544 # This is only useful makes sense if
14545 # balance rdp-cookie is not used
14546 stick-table type string size 204800
14547 stick on req.rdp_cookie(mstshash)
14548 server srv1 1.1.1.1:3389
14549 server srv1 1.1.1.2:3389
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014550
Willy Tarreau74ca5042013-06-11 23:12:07 +020014551 See also : "balance rdp-cookie", "persist rdp-cookie", "tcp-request" and the
14552 "req_rdp_cookie" ACL.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014553
Willy Tarreau74ca5042013-06-11 23:12:07 +020014554req.rdp_cookie_cnt([name]) : integer
14555rdp_cookie_cnt([name]) : integer (deprecated)
14556 Tries to parse the request buffer as RDP protocol, then returns an integer
14557 corresponding to the number of RDP cookies found. If an optional cookie name
14558 is passed, only cookies matching this name are considered. This is mostly
14559 used in ACL.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014560
Willy Tarreau74ca5042013-06-11 23:12:07 +020014561 ACL derivatives :
14562 req_rdp_cookie_cnt([<name>]) : integer match
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014563
Nenad Merdanovic5fc7d7e2015-07-07 22:00:17 +020014564req.ssl_ec_ext : boolean
14565 Returns a boolean identifying if client sent the Supported Elliptic Curves
14566 Extension as defined in RFC4492, section 5.1. within the SSL ClientHello
Cyril Bonté307ee1e2015-09-28 23:16:06 +020014567 message. This can be used to present ECC compatible clients with EC
14568 certificate and to use RSA for all others, on the same IP address. Note that
14569 this only applies to raw contents found in the request buffer and not to
14570 contents deciphered via an SSL data layer, so this will not work with "bind"
14571 lines having the "ssl" option.
Nenad Merdanovic5fc7d7e2015-07-07 22:00:17 +020014572
Willy Tarreau74ca5042013-06-11 23:12:07 +020014573req.ssl_hello_type : integer
14574req_ssl_hello_type : integer (deprecated)
14575 Returns an integer value containing the type of the SSL hello message found
14576 in the request buffer if the buffer contains data that parse as a complete
14577 SSL (v3 or superior) client hello message. Note that this only applies to raw
14578 contents found in the request buffer and not to contents deciphered via an
14579 SSL data layer, so this will not work with "bind" lines having the "ssl"
14580 option. This is mostly used in ACL to detect presence of an SSL hello message
14581 that is supposed to contain an SSL session ID usable for stickiness.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014582
Willy Tarreau74ca5042013-06-11 23:12:07 +020014583req.ssl_sni : string
14584req_ssl_sni : string (deprecated)
14585 Returns a string containing the value of the Server Name TLS extension sent
14586 by a client in a TLS stream passing through the request buffer if the buffer
14587 contains data that parse as a complete SSL (v3 or superior) client hello
14588 message. Note that this only applies to raw contents found in the request
14589 buffer and not to contents deciphered via an SSL data layer, so this will not
14590 work with "bind" lines having the "ssl" option. SNI normally contains the
14591 name of the host the client tries to connect to (for recent browsers). SNI is
14592 useful for allowing or denying access to certain hosts when SSL/TLS is used
14593 by the client. This test was designed to be used with TCP request content
14594 inspection. If content switching is needed, it is recommended to first wait
14595 for a complete client hello (type 1), like in the example below. See also
14596 "ssl_fc_sni".
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014597
Willy Tarreau74ca5042013-06-11 23:12:07 +020014598 ACL derivatives :
14599 req_ssl_sni : exact string match
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014600
Willy Tarreau74ca5042013-06-11 23:12:07 +020014601 Examples :
14602 # Wait for a client hello for at most 5 seconds
14603 tcp-request inspect-delay 5s
14604 tcp-request content accept if { req_ssl_hello_type 1 }
14605 use_backend bk_allow if { req_ssl_sni -f allowed_sites }
14606 default_backend bk_sorry_page
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014607
Pradeep Jindalbb2acf52015-09-29 10:12:57 +053014608req.ssl_st_ext : integer
14609 Returns 0 if the client didn't send a SessionTicket TLS Extension (RFC5077)
14610 Returns 1 if the client sent SessionTicket TLS Extension
14611 Returns 2 if the client also sent non-zero length TLS SessionTicket
14612 Note that this only applies to raw contents found in the request buffer and
14613 not to contents deciphered via an SSL data layer, so this will not work with
14614 "bind" lines having the "ssl" option. This can for example be used to detect
14615 whether the client sent a SessionTicket or not and stick it accordingly, if
14616 no SessionTicket then stick on SessionID or don't stick as there's no server
14617 side state is there when SessionTickets are in use.
14618
Willy Tarreau74ca5042013-06-11 23:12:07 +020014619req.ssl_ver : integer
14620req_ssl_ver : integer (deprecated)
14621 Returns an integer value containing the version of the SSL/TLS protocol of a
14622 stream present in the request buffer. Both SSLv2 hello messages and SSLv3
14623 messages are supported. TLSv1 is announced as SSL version 3.1. The value is
14624 composed of the major version multiplied by 65536, added to the minor
14625 version. Note that this only applies to raw contents found in the request
14626 buffer and not to contents deciphered via an SSL data layer, so this will not
14627 work with "bind" lines having the "ssl" option. The ACL version of the test
14628 matches against a decimal notation in the form MAJOR.MINOR (eg: 3.1). This
14629 fetch is mostly used in ACL.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014630
Willy Tarreau74ca5042013-06-11 23:12:07 +020014631 ACL derivatives :
14632 req_ssl_ver : decimal match
Willy Tarreaud63335a2010-02-26 12:56:52 +010014633
Willy Tarreau47e8eba2013-09-11 23:28:46 +020014634res.len : integer
14635 Returns an integer value corresponding to the number of bytes present in the
14636 response buffer. This is mostly used in ACL. It is important to understand
14637 that this test does not return false as long as the buffer is changing. This
14638 means that a check with equality to zero will almost always immediately match
14639 at the beginning of the session, while a test for more data will wait for
14640 that data to come in and return false only when haproxy is certain that no
14641 more data will come in. This test was designed to be used with TCP response
14642 content inspection.
14643
Willy Tarreau74ca5042013-06-11 23:12:07 +020014644res.payload(<offset>,<length>) : binary
14645 This extracts a binary block of <length> bytes and starting at byte <offset>
Willy Tarreau00f00842013-08-02 11:07:32 +020014646 in the response buffer. As a special case, if the <length> argument is zero,
14647 the the whole buffer from <offset> to the end is extracted. This can be used
14648 with ACLs in order to check for the presence of some content in a buffer at
14649 any location.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014650
Willy Tarreau74ca5042013-06-11 23:12:07 +020014651res.payload_lv(<offset1>,<length>[,<offset2>]) : binary
14652 This extracts a binary block whose size is specified at <offset1> for <length>
14653 bytes, and which starts at <offset2> if specified or just after the length in
14654 the response buffer. The <offset2> parameter also supports relative offsets
14655 if prepended with a '+' or '-' sign.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014656
Willy Tarreau74ca5042013-06-11 23:12:07 +020014657 Example : please consult the example from the "stick store-response" keyword.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014658
Willy Tarreau971f7b62015-09-29 14:06:59 +020014659res.ssl_hello_type : integer
14660rep_ssl_hello_type : integer (deprecated)
14661 Returns an integer value containing the type of the SSL hello message found
14662 in the response buffer if the buffer contains data that parses as a complete
14663 SSL (v3 or superior) hello message. Note that this only applies to raw
14664 contents found in the response buffer and not to contents deciphered via an
14665 SSL data layer, so this will not work with "server" lines having the "ssl"
14666 option. This is mostly used in ACL to detect presence of an SSL hello message
14667 that is supposed to contain an SSL session ID usable for stickiness.
14668
Willy Tarreau74ca5042013-06-11 23:12:07 +020014669wait_end : boolean
14670 This fetch either returns true when the inspection period is over, or does
14671 not fetch. It is only used in ACLs, in conjunction with content analysis to
14672 avoid returning a wrong verdict early. It may also be used to delay some
14673 actions, such as a delayed reject for some special addresses. Since it either
14674 stops the rules evaluation or immediately returns true, it is recommended to
14675 use this acl as the last one in a rule. Please note that the default ACL
14676 "WAIT_END" is always usable without prior declaration. This test was designed
14677 to be used with TCP request content inspection.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014678
Willy Tarreau74ca5042013-06-11 23:12:07 +020014679 Examples :
14680 # delay every incoming request by 2 seconds
14681 tcp-request inspect-delay 2s
14682 tcp-request content accept if WAIT_END
Willy Tarreaud63335a2010-02-26 12:56:52 +010014683
Willy Tarreau74ca5042013-06-11 23:12:07 +020014684 # don't immediately tell bad guys they are rejected
14685 tcp-request inspect-delay 10s
14686 acl goodguys src 10.0.0.0/24
14687 acl badguys src 10.0.1.0/24
14688 tcp-request content accept if goodguys
14689 tcp-request content reject if badguys WAIT_END
14690 tcp-request content reject
14691
14692
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200146937.3.6. Fetching HTTP samples (Layer 7)
Willy Tarreau74ca5042013-06-11 23:12:07 +020014694--------------------------------------
14695
14696It is possible to fetch samples from HTTP contents, requests and responses.
14697This application layer is also called layer 7. It is only possible to fetch the
14698data in this section when a full HTTP request or response has been parsed from
14699its respective request or response buffer. This is always the case with all
14700HTTP specific rules and for sections running with "mode http". When using TCP
14701content inspection, it may be necessary to support an inspection delay in order
14702to let the request or response come in first. These fetches may require a bit
14703more CPU resources than the layer 4 ones, but not much since the request and
14704response are indexed.
14705
14706base : string
14707 This returns the concatenation of the first Host header and the path part of
14708 the request, which starts at the first slash and ends before the question
14709 mark. It can be useful in virtual hosted environments to detect URL abuses as
14710 well as to improve shared caches efficiency. Using this with a limited size
14711 stick table also allows one to collect statistics about most commonly
14712 requested objects by host/path. With ACLs it can allow simple content
14713 switching rules involving the host and the path at the same time, such as
14714 "www.example.com/favicon.ico". See also "path" and "uri".
14715
14716 ACL derivatives :
14717 base : exact string match
14718 base_beg : prefix match
14719 base_dir : subdir match
14720 base_dom : domain match
14721 base_end : suffix match
14722 base_len : length match
14723 base_reg : regex match
14724 base_sub : substring match
14725
14726base32 : integer
14727 This returns a 32-bit hash of the value returned by the "base" fetch method
14728 above. This is useful to track per-URL activity on high traffic sites without
14729 having to store all URLs. Instead a shorter hash is stored, saving a lot of
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020014730 memory. The output type is an unsigned integer. The hash function used is
14731 SDBM with full avalanche on the output. Technically, base32 is exactly equal
14732 to "base,sdbm(1)".
Willy Tarreau74ca5042013-06-11 23:12:07 +020014733
14734base32+src : binary
14735 This returns the concatenation of the base32 fetch above and the src fetch
14736 below. The resulting type is of type binary, with a size of 8 or 20 bytes
14737 depending on the source address family. This can be used to track per-IP,
14738 per-URL counters.
14739
William Lallemand65ad6e12014-01-31 15:08:02 +010014740capture.req.hdr(<idx>) : string
14741 This extracts the content of the header captured by the "capture request
14742 header", idx is the position of the capture keyword in the configuration.
14743 The first entry is an index of 0. See also: "capture request header".
14744
14745capture.req.method : string
14746 This extracts the METHOD of an HTTP request. It can be used in both request
14747 and response. Unlike "method", it can be used in both request and response
14748 because it's allocated.
14749
14750capture.req.uri : string
14751 This extracts the request's URI, which starts at the first slash and ends
14752 before the first space in the request (without the host part). Unlike "path"
14753 and "url", it can be used in both request and response because it's
14754 allocated.
14755
Willy Tarreau3c1b5ec2014-04-24 23:41:57 +020014756capture.req.ver : string
14757 This extracts the request's HTTP version and returns either "HTTP/1.0" or
14758 "HTTP/1.1". Unlike "req.ver", it can be used in both request, response, and
14759 logs because it relies on a persistent flag.
14760
William Lallemand65ad6e12014-01-31 15:08:02 +010014761capture.res.hdr(<idx>) : string
14762 This extracts the content of the header captured by the "capture response
14763 header", idx is the position of the capture keyword in the configuration.
14764 The first entry is an index of 0.
14765 See also: "capture response header"
14766
Willy Tarreau3c1b5ec2014-04-24 23:41:57 +020014767capture.res.ver : string
14768 This extracts the response's HTTP version and returns either "HTTP/1.0" or
14769 "HTTP/1.1". Unlike "res.ver", it can be used in logs because it relies on a
14770 persistent flag.
14771
Willy Tarreaua5910cc2015-05-02 00:46:08 +020014772req.body : binary
14773 This returns the HTTP request's available body as a block of data. It
14774 requires that the request body has been buffered made available using
14775 "option http-buffer-request". In case of chunked-encoded body, currently only
14776 the first chunk is analyzed.
14777
Thierry FOURNIER9826c772015-05-20 15:50:54 +020014778req.body_param([<name>) : string
14779 This fetch assumes that the body of the POST request is url-encoded. The user
14780 can check if the "content-type" contains the value
14781 "application/x-www-form-urlencoded". This extracts the first occurrence of the
14782 parameter <name> in the body, which ends before '&'. The parameter name is
14783 case-sensitive. If no name is given, any parameter will match, and the first
14784 one will be returned. The result is a string corresponding to the value of the
14785 parameter <name> as presented in the request body (no URL decoding is
14786 performed). Note that the ACL version of this fetch iterates over multiple
14787 parameters and will iteratively report all parameters values if no name is
14788 given.
14789
Willy Tarreaua5910cc2015-05-02 00:46:08 +020014790req.body_len : integer
14791 This returns the length of the HTTP request's available body in bytes. It may
14792 be lower than the advertised length if the body is larger than the buffer. It
14793 requires that the request body has been buffered made available using
14794 "option http-buffer-request".
14795
14796req.body_size : integer
14797 This returns the advertised length of the HTTP request's body in bytes. It
14798 will represent the advertised Content-Length header, or the size of the first
14799 chunk in case of chunked encoding. In order to parse the chunks, it requires
14800 that the request body has been buffered made available using
14801 "option http-buffer-request".
14802
Willy Tarreau74ca5042013-06-11 23:12:07 +020014803req.cook([<name>]) : string
14804cook([<name>]) : string (deprecated)
14805 This extracts the last occurrence of the cookie name <name> on a "Cookie"
14806 header line from the request, and returns its value as string. If no name is
14807 specified, the first cookie value is returned. When used with ACLs, all
14808 matching cookies are evaluated. Spaces around the name and the value are
14809 ignored as requested by the Cookie header specification (RFC6265). The cookie
14810 name is case-sensitive. Empty cookies are valid, so an empty cookie may very
14811 well return an empty value if it is present. Use the "found" match to detect
14812 presence. Use the res.cook() variant for response cookies sent by the server.
14813
14814 ACL derivatives :
14815 cook([<name>]) : exact string match
14816 cook_beg([<name>]) : prefix match
14817 cook_dir([<name>]) : subdir match
14818 cook_dom([<name>]) : domain match
14819 cook_end([<name>]) : suffix match
14820 cook_len([<name>]) : length match
14821 cook_reg([<name>]) : regex match
14822 cook_sub([<name>]) : substring match
Willy Tarreaud63335a2010-02-26 12:56:52 +010014823
Willy Tarreau74ca5042013-06-11 23:12:07 +020014824req.cook_cnt([<name>]) : integer
14825cook_cnt([<name>]) : integer (deprecated)
14826 Returns an integer value representing the number of occurrences of the cookie
14827 <name> in the request, or all cookies if <name> is not specified.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014828
Willy Tarreau74ca5042013-06-11 23:12:07 +020014829req.cook_val([<name>]) : integer
14830cook_val([<name>]) : integer (deprecated)
14831 This extracts the last occurrence of the cookie name <name> on a "Cookie"
14832 header line from the request, and converts its value to an integer which is
14833 returned. If no name is specified, the first cookie value is returned. When
14834 used in ACLs, all matching names are iterated over until a value matches.
Willy Tarreau0e698542011-09-16 08:32:32 +020014835
Willy Tarreau74ca5042013-06-11 23:12:07 +020014836cookie([<name>]) : string (deprecated)
14837 This extracts the last occurrence of the cookie name <name> on a "Cookie"
14838 header line from the request, or a "Set-Cookie" header from the response, and
14839 returns its value as a string. A typical use is to get multiple clients
14840 sharing a same profile use the same server. This can be similar to what
Willy Tarreau294d0f02015-08-10 19:40:12 +020014841 "appsession" did with the "request-learn" statement, but with support for
Willy Tarreau74ca5042013-06-11 23:12:07 +020014842 multi-peer synchronization and state keeping across restarts. If no name is
14843 specified, the first cookie value is returned. This fetch should not be used
14844 anymore and should be replaced by req.cook() or res.cook() instead as it
14845 ambiguously uses the direction based on the context where it is used.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014846
Willy Tarreau74ca5042013-06-11 23:12:07 +020014847hdr([<name>[,<occ>]]) : string
14848 This is equivalent to req.hdr() when used on requests, and to res.hdr() when
14849 used on responses. Please refer to these respective fetches for more details.
14850 In case of doubt about the fetch direction, please use the explicit ones.
14851 Note that contrary to the hdr() sample fetch method, the hdr_* ACL keywords
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030014852 unambiguously apply to the request headers.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014853
Willy Tarreau74ca5042013-06-11 23:12:07 +020014854req.fhdr(<name>[,<occ>]) : string
14855 This extracts the last occurrence of header <name> in an HTTP request. When
14856 used from an ACL, all occurrences are iterated over until a match is found.
14857 Optionally, a specific occurrence might be specified as a position number.
14858 Positive values indicate a position from the first occurrence, with 1 being
14859 the first one. Negative values indicate positions relative to the last one,
14860 with -1 being the last one. It differs from req.hdr() in that any commas
14861 present in the value are returned and are not used as delimiters. This is
14862 sometimes useful with headers such as User-Agent.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014863
Willy Tarreau74ca5042013-06-11 23:12:07 +020014864req.fhdr_cnt([<name>]) : integer
14865 Returns an integer value representing the number of occurrences of request
14866 header field name <name>, or the total number of header fields if <name> is
14867 not specified. Contrary to its req.hdr_cnt() cousin, this function returns
14868 the number of full line headers and does not stop on commas.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014869
Willy Tarreau74ca5042013-06-11 23:12:07 +020014870req.hdr([<name>[,<occ>]]) : string
14871 This extracts the last occurrence of header <name> in an HTTP request. When
14872 used from an ACL, all occurrences are iterated over until a match is found.
14873 Optionally, a specific occurrence might be specified as a position number.
14874 Positive values indicate a position from the first occurrence, with 1 being
14875 the first one. Negative values indicate positions relative to the last one,
14876 with -1 being the last one. A typical use is with the X-Forwarded-For header
14877 once converted to IP, associated with an IP stick-table. The function
14878 considers any comma as a delimiter for distinct values. If full-line headers
Lukas Tribus23953682017-04-28 13:24:30 +000014879 are desired instead, use req.fhdr(). Please carefully check RFC7231 to know
Willy Tarreau74ca5042013-06-11 23:12:07 +020014880 how certain headers are supposed to be parsed. Also, some of them are case
14881 insensitive (eg: Connection).
Willy Tarreaud63335a2010-02-26 12:56:52 +010014882
Willy Tarreau74ca5042013-06-11 23:12:07 +020014883 ACL derivatives :
14884 hdr([<name>[,<occ>]]) : exact string match
14885 hdr_beg([<name>[,<occ>]]) : prefix match
14886 hdr_dir([<name>[,<occ>]]) : subdir match
14887 hdr_dom([<name>[,<occ>]]) : domain match
14888 hdr_end([<name>[,<occ>]]) : suffix match
14889 hdr_len([<name>[,<occ>]]) : length match
14890 hdr_reg([<name>[,<occ>]]) : regex match
14891 hdr_sub([<name>[,<occ>]]) : substring match
14892
14893req.hdr_cnt([<name>]) : integer
14894hdr_cnt([<header>]) : integer (deprecated)
14895 Returns an integer value representing the number of occurrences of request
14896 header field name <name>, or the total number of header field values if
14897 <name> is not specified. It is important to remember that one header line may
14898 count as several headers if it has several values. The function considers any
14899 comma as a delimiter for distinct values. If full-line headers are desired
14900 instead, req.fhdr_cnt() should be used instead. With ACLs, it can be used to
14901 detect presence, absence or abuse of a specific header, as well as to block
14902 request smuggling attacks by rejecting requests which contain more than one
14903 of certain headers. See "req.hdr" for more information on header matching.
14904
14905req.hdr_ip([<name>[,<occ>]]) : ip
14906hdr_ip([<name>[,<occ>]]) : ip (deprecated)
14907 This extracts the last occurrence of header <name> in an HTTP request,
14908 converts it to an IPv4 or IPv6 address and returns this address. When used
14909 with ACLs, all occurrences are checked, and if <name> is omitted, every value
14910 of every header is checked. Optionally, a specific occurrence might be
14911 specified as a position number. Positive values indicate a position from the
14912 first occurrence, with 1 being the first one. Negative values indicate
14913 positions relative to the last one, with -1 being the last one. A typical use
14914 is with the X-Forwarded-For and X-Client-IP headers.
14915
14916req.hdr_val([<name>[,<occ>]]) : integer
14917hdr_val([<name>[,<occ>]]) : integer (deprecated)
14918 This extracts the last occurrence of header <name> in an HTTP request, and
14919 converts it to an integer value. When used with ACLs, all occurrences are
14920 checked, and if <name> is omitted, every value of every header is checked.
14921 Optionally, a specific occurrence might be specified as a position number.
14922 Positive values indicate a position from the first occurrence, with 1 being
14923 the first one. Negative values indicate positions relative to the last one,
14924 with -1 being the last one. A typical use is with the X-Forwarded-For header.
14925
14926http_auth(<userlist>) : boolean
14927 Returns a boolean indicating whether the authentication data received from
14928 the client match a username & password stored in the specified userlist. This
14929 fetch function is not really useful outside of ACLs. Currently only http
14930 basic auth is supported.
14931
Thierry FOURNIER9eec0a62014-01-22 18:38:02 +010014932http_auth_group(<userlist>) : string
14933 Returns a string corresponding to the user name found in the authentication
14934 data received from the client if both the user name and password are valid
14935 according to the specified userlist. The main purpose is to use it in ACLs
14936 where it is then checked whether the user belongs to any group within a list.
Willy Tarreau74ca5042013-06-11 23:12:07 +020014937 This fetch function is not really useful outside of ACLs. Currently only http
14938 basic auth is supported.
14939
14940 ACL derivatives :
Thierry FOURNIER9eec0a62014-01-22 18:38:02 +010014941 http_auth_group(<userlist>) : group ...
14942 Returns true when the user extracted from the request and whose password is
14943 valid according to the specified userlist belongs to at least one of the
14944 groups.
Willy Tarreau74ca5042013-06-11 23:12:07 +020014945
14946http_first_req : boolean
Willy Tarreau7f18e522010-10-22 20:04:13 +020014947 Returns true when the request being processed is the first one of the
14948 connection. This can be used to add or remove headers that may be missing
Willy Tarreau74ca5042013-06-11 23:12:07 +020014949 from some requests when a request is not the first one, or to help grouping
14950 requests in the logs.
Willy Tarreau7f18e522010-10-22 20:04:13 +020014951
Willy Tarreau74ca5042013-06-11 23:12:07 +020014952method : integer + string
14953 Returns an integer value corresponding to the method in the HTTP request. For
14954 example, "GET" equals 1 (check sources to establish the matching). Value 9
14955 means "other method" and may be converted to a string extracted from the
14956 stream. This should not be used directly as a sample, this is only meant to
14957 be used from ACLs, which transparently convert methods from patterns to these
14958 integer + string values. Some predefined ACL already check for most common
14959 methods.
Willy Tarreau6a06a402007-07-15 20:15:28 +020014960
Willy Tarreau74ca5042013-06-11 23:12:07 +020014961 ACL derivatives :
14962 method : case insensitive method match
Willy Tarreau6a06a402007-07-15 20:15:28 +020014963
Willy Tarreau74ca5042013-06-11 23:12:07 +020014964 Example :
14965 # only accept GET and HEAD requests
14966 acl valid_method method GET HEAD
14967 http-request deny if ! valid_method
Willy Tarreau6a06a402007-07-15 20:15:28 +020014968
Willy Tarreau74ca5042013-06-11 23:12:07 +020014969path : string
14970 This extracts the request's URL path, which starts at the first slash and
14971 ends before the question mark (without the host part). A typical use is with
14972 prefetch-capable caches, and with portals which need to aggregate multiple
14973 information from databases and keep them in caches. Note that with outgoing
14974 caches, it would be wiser to use "url" instead. With ACLs, it's typically
14975 used to match exact file names (eg: "/login.php"), or directory parts using
14976 the derivative forms. See also the "url" and "base" fetch methods.
Willy Tarreau6a06a402007-07-15 20:15:28 +020014977
Willy Tarreau74ca5042013-06-11 23:12:07 +020014978 ACL derivatives :
14979 path : exact string match
14980 path_beg : prefix match
14981 path_dir : subdir match
14982 path_dom : domain match
14983 path_end : suffix match
14984 path_len : length match
14985 path_reg : regex match
14986 path_sub : substring match
Willy Tarreau6a06a402007-07-15 20:15:28 +020014987
Willy Tarreau49ad95c2015-01-19 15:06:26 +010014988query : string
14989 This extracts the request's query string, which starts after the first
14990 question mark. If no question mark is present, this fetch returns nothing. If
14991 a question mark is present but nothing follows, it returns an empty string.
14992 This means it's possible to easily know whether a query string is present
Tim Düsterhus4896c442016-11-29 02:15:19 +010014993 using the "found" matching method. This fetch is the complement of "path"
Willy Tarreau49ad95c2015-01-19 15:06:26 +010014994 which stops before the question mark.
14995
Willy Tarreaueb27ec72015-02-20 13:55:29 +010014996req.hdr_names([<delim>]) : string
14997 This builds a string made from the concatenation of all header names as they
14998 appear in the request when the rule is evaluated. The default delimiter is
14999 the comma (',') but it may be overridden as an optional argument <delim>. In
15000 this case, only the first character of <delim> is considered.
15001
Willy Tarreau74ca5042013-06-11 23:12:07 +020015002req.ver : string
15003req_ver : string (deprecated)
15004 Returns the version string from the HTTP request, for example "1.1". This can
15005 be useful for logs, but is mostly there for ACL. Some predefined ACL already
15006 check for versions 1.0 and 1.1.
Willy Tarreaud63335a2010-02-26 12:56:52 +010015007
Willy Tarreau74ca5042013-06-11 23:12:07 +020015008 ACL derivatives :
15009 req_ver : exact string match
Willy Tarreau0e698542011-09-16 08:32:32 +020015010
Willy Tarreau74ca5042013-06-11 23:12:07 +020015011res.comp : boolean
15012 Returns the boolean "true" value if the response has been compressed by
15013 HAProxy, otherwise returns boolean "false". This may be used to add
15014 information in the logs.
Willy Tarreau6a06a402007-07-15 20:15:28 +020015015
Willy Tarreau74ca5042013-06-11 23:12:07 +020015016res.comp_algo : string
15017 Returns a string containing the name of the algorithm used if the response
15018 was compressed by HAProxy, for example : "deflate". This may be used to add
15019 some information in the logs.
Willy Tarreaud63335a2010-02-26 12:56:52 +010015020
Willy Tarreau74ca5042013-06-11 23:12:07 +020015021res.cook([<name>]) : string
15022scook([<name>]) : string (deprecated)
15023 This extracts the last occurrence of the cookie name <name> on a "Set-Cookie"
15024 header line from the response, and returns its value as string. If no name is
15025 specified, the first cookie value is returned.
Willy Tarreau0ce3aa02012-04-25 18:46:33 +020015026
Willy Tarreau74ca5042013-06-11 23:12:07 +020015027 ACL derivatives :
15028 scook([<name>] : exact string match
Willy Tarreau0ce3aa02012-04-25 18:46:33 +020015029
Willy Tarreau74ca5042013-06-11 23:12:07 +020015030res.cook_cnt([<name>]) : integer
15031scook_cnt([<name>]) : integer (deprecated)
15032 Returns an integer value representing the number of occurrences of the cookie
15033 <name> in the response, or all cookies if <name> is not specified. This is
15034 mostly useful when combined with ACLs to detect suspicious responses.
Willy Tarreaud63335a2010-02-26 12:56:52 +010015035
Willy Tarreau74ca5042013-06-11 23:12:07 +020015036res.cook_val([<name>]) : integer
15037scook_val([<name>]) : integer (deprecated)
15038 This extracts the last occurrence of the cookie name <name> on a "Set-Cookie"
15039 header line from the response, and converts its value to an integer which is
15040 returned. If no name is specified, the first cookie value is returned.
Willy Tarreaud63335a2010-02-26 12:56:52 +010015041
Willy Tarreau74ca5042013-06-11 23:12:07 +020015042res.fhdr([<name>[,<occ>]]) : string
15043 This extracts the last occurrence of header <name> in an HTTP response, or of
15044 the last header if no <name> is specified. Optionally, a specific occurrence
15045 might be specified as a position number. Positive values indicate a position
15046 from the first occurrence, with 1 being the first one. Negative values
15047 indicate positions relative to the last one, with -1 being the last one. It
15048 differs from res.hdr() in that any commas present in the value are returned
15049 and are not used as delimiters. If this is not desired, the res.hdr() fetch
15050 should be used instead. This is sometimes useful with headers such as Date or
15051 Expires.
Willy Tarreau6a06a402007-07-15 20:15:28 +020015052
Willy Tarreau74ca5042013-06-11 23:12:07 +020015053res.fhdr_cnt([<name>]) : integer
15054 Returns an integer value representing the number of occurrences of response
15055 header field name <name>, or the total number of header fields if <name> is
15056 not specified. Contrary to its res.hdr_cnt() cousin, this function returns
15057 the number of full line headers and does not stop on commas. If this is not
15058 desired, the res.hdr_cnt() fetch should be used instead.
Willy Tarreau6a06a402007-07-15 20:15:28 +020015059
Willy Tarreau74ca5042013-06-11 23:12:07 +020015060res.hdr([<name>[,<occ>]]) : string
15061shdr([<name>[,<occ>]]) : string (deprecated)
15062 This extracts the last occurrence of header <name> in an HTTP response, or of
15063 the last header if no <name> is specified. Optionally, a specific occurrence
15064 might be specified as a position number. Positive values indicate a position
15065 from the first occurrence, with 1 being the first one. Negative values
15066 indicate positions relative to the last one, with -1 being the last one. This
15067 can be useful to learn some data into a stick-table. The function considers
15068 any comma as a delimiter for distinct values. If this is not desired, the
15069 res.fhdr() fetch should be used instead.
Willy Tarreau6a06a402007-07-15 20:15:28 +020015070
Willy Tarreau74ca5042013-06-11 23:12:07 +020015071 ACL derivatives :
15072 shdr([<name>[,<occ>]]) : exact string match
15073 shdr_beg([<name>[,<occ>]]) : prefix match
15074 shdr_dir([<name>[,<occ>]]) : subdir match
15075 shdr_dom([<name>[,<occ>]]) : domain match
15076 shdr_end([<name>[,<occ>]]) : suffix match
15077 shdr_len([<name>[,<occ>]]) : length match
15078 shdr_reg([<name>[,<occ>]]) : regex match
15079 shdr_sub([<name>[,<occ>]]) : substring match
15080
15081res.hdr_cnt([<name>]) : integer
15082shdr_cnt([<name>]) : integer (deprecated)
15083 Returns an integer value representing the number of occurrences of response
15084 header field name <name>, or the total number of header fields if <name> is
15085 not specified. The function considers any comma as a delimiter for distinct
15086 values. If this is not desired, the res.fhdr_cnt() fetch should be used
15087 instead.
Willy Tarreau6a06a402007-07-15 20:15:28 +020015088
Willy Tarreau74ca5042013-06-11 23:12:07 +020015089res.hdr_ip([<name>[,<occ>]]) : ip
15090shdr_ip([<name>[,<occ>]]) : ip (deprecated)
15091 This extracts the last occurrence of header <name> in an HTTP response,
15092 convert it to an IPv4 or IPv6 address and returns this address. Optionally, a
15093 specific occurrence might be specified as a position number. Positive values
15094 indicate a position from the first occurrence, with 1 being the first one.
15095 Negative values indicate positions relative to the last one, with -1 being
15096 the last one. This can be useful to learn some data into a stick table.
Willy Tarreau6a06a402007-07-15 20:15:28 +020015097
Willy Tarreaueb27ec72015-02-20 13:55:29 +010015098res.hdr_names([<delim>]) : string
15099 This builds a string made from the concatenation of all header names as they
15100 appear in the response when the rule is evaluated. The default delimiter is
15101 the comma (',') but it may be overridden as an optional argument <delim>. In
15102 this case, only the first character of <delim> is considered.
15103
Willy Tarreau74ca5042013-06-11 23:12:07 +020015104res.hdr_val([<name>[,<occ>]]) : integer
15105shdr_val([<name>[,<occ>]]) : integer (deprecated)
15106 This extracts the last occurrence of header <name> in an HTTP response, and
15107 converts it to an integer value. Optionally, a specific occurrence might be
15108 specified as a position number. Positive values indicate a position from the
15109 first occurrence, with 1 being the first one. Negative values indicate
15110 positions relative to the last one, with -1 being the last one. This can be
15111 useful to learn some data into a stick table.
Alexandre Cassen5eb1a902007-11-29 15:43:32 +010015112
Willy Tarreau74ca5042013-06-11 23:12:07 +020015113res.ver : string
15114resp_ver : string (deprecated)
15115 Returns the version string from the HTTP response, for example "1.1". This
15116 can be useful for logs, but is mostly there for ACL.
Willy Tarreau0e698542011-09-16 08:32:32 +020015117
Willy Tarreau74ca5042013-06-11 23:12:07 +020015118 ACL derivatives :
15119 resp_ver : exact string match
Alexandre Cassen5eb1a902007-11-29 15:43:32 +010015120
Willy Tarreau74ca5042013-06-11 23:12:07 +020015121set-cookie([<name>]) : string (deprecated)
15122 This extracts the last occurrence of the cookie name <name> on a "Set-Cookie"
15123 header line from the response and uses the corresponding value to match. This
Willy Tarreau294d0f02015-08-10 19:40:12 +020015124 can be comparable to what "appsession" did with default options, but with
Willy Tarreau74ca5042013-06-11 23:12:07 +020015125 support for multi-peer synchronization and state keeping across restarts.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +010015126
Willy Tarreau74ca5042013-06-11 23:12:07 +020015127 This fetch function is deprecated and has been superseded by the "res.cook"
15128 fetch. This keyword will disappear soon.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +010015129
Willy Tarreau74ca5042013-06-11 23:12:07 +020015130status : integer
15131 Returns an integer containing the HTTP status code in the HTTP response, for
15132 example, 302. It is mostly used within ACLs and integer ranges, for example,
15133 to remove any Location header if the response is not a 3xx.
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015134
Thierry Fournier0e00dca2016-04-07 15:47:40 +020015135unique-id : string
15136 Returns the unique-id attached to the request. The directive
15137 "unique-id-format" must be set. If it is not set, the unique-id sample fetch
15138 fails. Note that the unique-id is usually used with HTTP requests, however this
15139 sample fetch can be used with other protocols. Obviously, if it is used with
15140 other protocols than HTTP, the unique-id-format directive must not contain
15141 HTTP parts. See: unique-id-format and unique-id-header
15142
Willy Tarreau74ca5042013-06-11 23:12:07 +020015143url : string
15144 This extracts the request's URL as presented in the request. A typical use is
15145 with prefetch-capable caches, and with portals which need to aggregate
15146 multiple information from databases and keep them in caches. With ACLs, using
15147 "path" is preferred over using "url", because clients may send a full URL as
15148 is normally done with proxies. The only real use is to match "*" which does
15149 not match in "path", and for which there is already a predefined ACL. See
15150 also "path" and "base".
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015151
Willy Tarreau74ca5042013-06-11 23:12:07 +020015152 ACL derivatives :
15153 url : exact string match
15154 url_beg : prefix match
15155 url_dir : subdir match
15156 url_dom : domain match
15157 url_end : suffix match
15158 url_len : length match
15159 url_reg : regex match
15160 url_sub : substring match
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015161
Willy Tarreau74ca5042013-06-11 23:12:07 +020015162url_ip : ip
15163 This extracts the IP address from the request's URL when the host part is
15164 presented as an IP address. Its use is very limited. For instance, a
15165 monitoring system might use this field as an alternative for the source IP in
15166 order to test what path a given source address would follow, or to force an
15167 entry in a table for a given source address. With ACLs it can be used to
15168 restrict access to certain systems through a proxy, for example when combined
15169 with option "http_proxy".
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015170
Willy Tarreau74ca5042013-06-11 23:12:07 +020015171url_port : integer
15172 This extracts the port part from the request's URL. Note that if the port is
15173 not specified in the request, port 80 is assumed. With ACLs it can be used to
15174 restrict access to certain systems through a proxy, for example when combined
15175 with option "http_proxy".
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015176
Willy Tarreau1ede1da2015-05-07 16:06:18 +020015177urlp([<name>[,<delim>]]) : string
15178url_param([<name>[,<delim>]]) : string
Willy Tarreau74ca5042013-06-11 23:12:07 +020015179 This extracts the first occurrence of the parameter <name> in the query
15180 string, which begins after either '?' or <delim>, and which ends before '&',
Willy Tarreau1ede1da2015-05-07 16:06:18 +020015181 ';' or <delim>. The parameter name is case-sensitive. If no name is given,
15182 any parameter will match, and the first one will be returned. The result is
15183 a string corresponding to the value of the parameter <name> as presented in
15184 the request (no URL decoding is performed). This can be used for session
Willy Tarreau74ca5042013-06-11 23:12:07 +020015185 stickiness based on a client ID, to extract an application cookie passed as a
15186 URL parameter, or in ACLs to apply some checks. Note that the ACL version of
Willy Tarreau1ede1da2015-05-07 16:06:18 +020015187 this fetch iterates over multiple parameters and will iteratively report all
15188 parameters values if no name is given
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015189
Willy Tarreau74ca5042013-06-11 23:12:07 +020015190 ACL derivatives :
15191 urlp(<name>[,<delim>]) : exact string match
15192 urlp_beg(<name>[,<delim>]) : prefix match
15193 urlp_dir(<name>[,<delim>]) : subdir match
15194 urlp_dom(<name>[,<delim>]) : domain match
15195 urlp_end(<name>[,<delim>]) : suffix match
15196 urlp_len(<name>[,<delim>]) : length match
15197 urlp_reg(<name>[,<delim>]) : regex match
15198 urlp_sub(<name>[,<delim>]) : substring match
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015199
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015200
Willy Tarreau74ca5042013-06-11 23:12:07 +020015201 Example :
15202 # match http://example.com/foo?PHPSESSIONID=some_id
15203 stick on urlp(PHPSESSIONID)
15204 # match http://example.com/foo;JSESSIONID=some_id
15205 stick on urlp(JSESSIONID,;)
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015206
Jarno Huuskonen676f6222017-03-30 09:19:45 +030015207urlp_val([<name>[,<delim>]]) : integer
Willy Tarreau74ca5042013-06-11 23:12:07 +020015208 See "urlp" above. This one extracts the URL parameter <name> in the request
15209 and converts it to an integer value. This can be used for session stickiness
15210 based on a user ID for example, or with ACLs to match a page number or price.
Willy Tarreaua9fddca2012-07-31 07:51:48 +020015211
Dragan Dosen0070cd52016-06-16 12:19:49 +020015212url32 : integer
15213 This returns a 32-bit hash of the value obtained by concatenating the first
15214 Host header and the whole URL including parameters (not only the path part of
15215 the request, as in the "base32" fetch above). This is useful to track per-URL
15216 activity. A shorter hash is stored, saving a lot of memory. The output type
15217 is an unsigned integer.
15218
15219url32+src : binary
15220 This returns the concatenation of the "url32" fetch and the "src" fetch. The
15221 resulting type is of type binary, with a size of 8 or 20 bytes depending on
15222 the source address family. This can be used to track per-IP, per-URL counters.
15223
Willy Tarreau198a7442008-01-17 12:05:32 +010015224
Willy Tarreau74ca5042013-06-11 23:12:07 +0200152257.4. Pre-defined ACLs
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015226---------------------
Willy Tarreauced27012008-01-17 20:35:34 +010015227
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015228Some predefined ACLs are hard-coded so that they do not have to be declared in
15229every frontend which needs them. They all have their names in upper case in
Patrick Mézard2382ad62010-05-09 10:43:32 +020015230order to avoid confusion. Their equivalence is provided below.
Willy Tarreauced27012008-01-17 20:35:34 +010015231
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015232ACL name Equivalent to Usage
15233---------------+-----------------------------+---------------------------------
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015234FALSE always_false never match
Willy Tarreau2492d5b2009-07-11 00:06:00 +020015235HTTP req_proto_http match if protocol is valid HTTP
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015236HTTP_1.0 req_ver 1.0 match HTTP version 1.0
15237HTTP_1.1 req_ver 1.1 match HTTP version 1.1
Willy Tarreaud63335a2010-02-26 12:56:52 +010015238HTTP_CONTENT hdr_val(content-length) gt 0 match an existing content-length
15239HTTP_URL_ABS url_reg ^[^/:]*:// match absolute URL with scheme
15240HTTP_URL_SLASH url_beg / match URL beginning with "/"
15241HTTP_URL_STAR url * match URL equal to "*"
15242LOCALHOST src 127.0.0.1/8 match connection from local host
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015243METH_CONNECT method CONNECT match HTTP CONNECT method
Daniel Schneller9ff96c72016-04-11 17:45:29 +020015244METH_DELETE method DELETE match HTTP DELETE method
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015245METH_GET method GET HEAD match HTTP GET or HEAD method
15246METH_HEAD method HEAD match HTTP HEAD method
15247METH_OPTIONS method OPTIONS match HTTP OPTIONS method
15248METH_POST method POST match HTTP POST method
Daniel Schneller9ff96c72016-04-11 17:45:29 +020015249METH_PUT method PUT match HTTP PUT method
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015250METH_TRACE method TRACE match HTTP TRACE method
Emeric Brunbede3d02009-06-30 17:54:00 +020015251RDP_COOKIE req_rdp_cookie_cnt gt 0 match presence of an RDP cookie
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015252REQ_CONTENT req_len gt 0 match data in the request buffer
Willy Tarreaud63335a2010-02-26 12:56:52 +010015253TRUE always_true always match
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015254WAIT_END wait_end wait for end of content analysis
15255---------------+-----------------------------+---------------------------------
Willy Tarreauced27012008-01-17 20:35:34 +010015256
Willy Tarreaub937b7e2010-01-12 15:27:54 +010015257
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200152588. Logging
15259----------
Willy Tarreau844e3c52008-01-11 16:28:18 +010015260
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015261One of HAProxy's strong points certainly lies is its precise logs. It probably
15262provides the finest level of information available for such a product, which is
15263very important for troubleshooting complex environments. Standard information
15264provided in logs include client ports, TCP/HTTP state timers, precise session
15265state at termination and precise termination cause, information about decisions
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010015266to direct traffic to a server, and of course the ability to capture arbitrary
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015267headers.
15268
15269In order to improve administrators reactivity, it offers a great transparency
15270about encountered problems, both internal and external, and it is possible to
15271send logs to different sources at the same time with different level filters :
15272
15273 - global process-level logs (system errors, start/stop, etc..)
15274 - per-instance system and internal errors (lack of resource, bugs, ...)
15275 - per-instance external troubles (servers up/down, max connections)
15276 - per-instance activity (client connections), either at the establishment or
15277 at the termination.
Jim Freeman9e8714b2015-05-26 09:16:34 -060015278 - per-request control of log-level, eg:
15279 http-request set-log-level silent if sensitive_request
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015280
15281The ability to distribute different levels of logs to different log servers
15282allow several production teams to interact and to fix their problems as soon
15283as possible. For example, the system team might monitor system-wide errors,
15284while the application team might be monitoring the up/down for their servers in
15285real time, and the security team might analyze the activity logs with one hour
15286delay.
15287
15288
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200152898.1. Log levels
15290---------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015291
Simon Hormandf791f52011-05-29 15:01:10 +090015292TCP and HTTP connections can be logged with information such as the date, time,
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015293source IP address, destination address, connection duration, response times,
Simon Hormandf791f52011-05-29 15:01:10 +090015294HTTP request, HTTP return code, number of bytes transmitted, conditions
15295in which the session ended, and even exchanged cookies values. For example
15296track a particular user's problems. All messages may be sent to up to two
15297syslog servers. Check the "log" keyword in section 4.2 for more information
15298about log facilities.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015299
15300
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200153018.2. Log formats
15302----------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015303
William Lallemand48940402012-01-30 16:47:22 +010015304HAProxy supports 5 log formats. Several fields are common between these formats
Simon Hormandf791f52011-05-29 15:01:10 +090015305and will be detailed in the following sections. A few of them may vary
15306slightly with the configuration, due to indicators specific to certain
15307options. The supported formats are as follows :
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015308
15309 - the default format, which is very basic and very rarely used. It only
15310 provides very basic information about the incoming connection at the moment
15311 it is accepted : source IP:port, destination IP:port, and frontend-name.
15312 This mode will eventually disappear so it will not be described to great
15313 extents.
15314
15315 - the TCP format, which is more advanced. This format is enabled when "option
15316 tcplog" is set on the frontend. HAProxy will then usually wait for the
15317 connection to terminate before logging. This format provides much richer
15318 information, such as timers, connection counts, queue size, etc... This
15319 format is recommended for pure TCP proxies.
15320
15321 - the HTTP format, which is the most advanced for HTTP proxying. This format
15322 is enabled when "option httplog" is set on the frontend. It provides the
15323 same information as the TCP format with some HTTP-specific fields such as
15324 the request, the status code, and captures of headers and cookies. This
15325 format is recommended for HTTP proxies.
15326
Emeric Brun3a058f32009-06-30 18:26:00 +020015327 - the CLF HTTP format, which is equivalent to the HTTP format, but with the
15328 fields arranged in the same order as the CLF format. In this mode, all
15329 timers, captures, flags, etc... appear one per field after the end of the
15330 common fields, in the same order they appear in the standard HTTP format.
15331
William Lallemand48940402012-01-30 16:47:22 +010015332 - the custom log format, allows you to make your own log line.
15333
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015334Next sections will go deeper into details for each of these formats. Format
15335specification will be performed on a "field" basis. Unless stated otherwise, a
15336field is a portion of text delimited by any number of spaces. Since syslog
15337servers are susceptible of inserting fields at the beginning of a line, it is
15338always assumed that the first field is the one containing the process name and
15339identifier.
15340
15341Note : Since log lines may be quite long, the log examples in sections below
15342 might be broken into multiple lines. The example log lines will be
15343 prefixed with 3 closing angle brackets ('>>>') and each time a log is
15344 broken into multiple lines, each non-final line will end with a
15345 backslash ('\') and the next line will start indented by two characters.
15346
15347
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200153488.2.1. Default log format
15349-------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015350
15351This format is used when no specific option is set. The log is emitted as soon
15352as the connection is accepted. One should note that this currently is the only
15353format which logs the request's destination IP and ports.
15354
15355 Example :
15356 listen www
15357 mode http
15358 log global
15359 server srv1 127.0.0.1:8000
15360
15361 >>> Feb 6 12:12:09 localhost \
15362 haproxy[14385]: Connect from 10.0.1.2:33312 to 10.0.3.31:8012 \
15363 (www/HTTP)
15364
15365 Field Format Extract from the example above
15366 1 process_name '[' pid ']:' haproxy[14385]:
15367 2 'Connect from' Connect from
15368 3 source_ip ':' source_port 10.0.1.2:33312
15369 4 'to' to
15370 5 destination_ip ':' destination_port 10.0.3.31:8012
15371 6 '(' frontend_name '/' mode ')' (www/HTTP)
15372
15373Detailed fields description :
15374 - "source_ip" is the IP address of the client which initiated the connection.
15375 - "source_port" is the TCP port of the client which initiated the connection.
15376 - "destination_ip" is the IP address the client connected to.
15377 - "destination_port" is the TCP port the client connected to.
15378 - "frontend_name" is the name of the frontend (or listener) which received
15379 and processed the connection.
15380 - "mode is the mode the frontend is operating (TCP or HTTP).
15381
Willy Tarreauceb24bc2010-11-09 12:46:41 +010015382In case of a UNIX socket, the source and destination addresses are marked as
15383"unix:" and the ports reflect the internal ID of the socket which accepted the
15384connection (the same ID as reported in the stats).
15385
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015386It is advised not to use this deprecated format for newer installations as it
15387will eventually disappear.
15388
15389
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200153908.2.2. TCP log format
15391---------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015392
15393The TCP format is used when "option tcplog" is specified in the frontend, and
15394is the recommended format for pure TCP proxies. It provides a lot of precious
15395information for troubleshooting. Since this format includes timers and byte
15396counts, the log is normally emitted at the end of the session. It can be
15397emitted earlier if "option logasap" is specified, which makes sense in most
15398environments with long sessions such as remote terminals. Sessions which match
15399the "monitor" rules are never logged. It is also possible not to emit logs for
15400sessions for which no data were exchanged between the client and the server, by
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020015401specifying "option dontlognull" in the frontend. Successful connections will
15402not be logged if "option dontlog-normal" is specified in the frontend. A few
15403fields may slightly vary depending on some configuration options, those are
15404marked with a star ('*') after the field name below.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015405
15406 Example :
15407 frontend fnt
15408 mode tcp
15409 option tcplog
15410 log global
15411 default_backend bck
15412
15413 backend bck
15414 server srv1 127.0.0.1:8000
15415
15416 >>> Feb 6 12:12:56 localhost \
15417 haproxy[14387]: 10.0.1.2:33313 [06/Feb/2009:12:12:51.443] fnt \
15418 bck/srv1 0/0/5007 212 -- 0/0/0/0/3 0/0
15419
15420 Field Format Extract from the example above
15421 1 process_name '[' pid ']:' haproxy[14387]:
15422 2 client_ip ':' client_port 10.0.1.2:33313
15423 3 '[' accept_date ']' [06/Feb/2009:12:12:51.443]
15424 4 frontend_name fnt
15425 5 backend_name '/' server_name bck/srv1
15426 6 Tw '/' Tc '/' Tt* 0/0/5007
15427 7 bytes_read* 212
15428 8 termination_state --
15429 9 actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 0/0/0/0/3
15430 10 srv_queue '/' backend_queue 0/0
15431
15432Detailed fields description :
15433 - "client_ip" is the IP address of the client which initiated the TCP
Willy Tarreauceb24bc2010-11-09 12:46:41 +010015434 connection to haproxy. If the connection was accepted on a UNIX socket
15435 instead, the IP address would be replaced with the word "unix". Note that
15436 when the connection is accepted on a socket configured with "accept-proxy"
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010015437 and the PROXY protocol is correctly used, or with a "accept-netscaler-cip"
15438 and the NetScaler Client IP insetion protocol is correctly used, then the
15439 logs will reflect the forwarded connection's information.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015440
15441 - "client_port" is the TCP port of the client which initiated the connection.
Willy Tarreauceb24bc2010-11-09 12:46:41 +010015442 If the connection was accepted on a UNIX socket instead, the port would be
15443 replaced with the ID of the accepting socket, which is also reported in the
15444 stats interface.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015445
15446 - "accept_date" is the exact date when the connection was received by haproxy
15447 (which might be very slightly different from the date observed on the
15448 network if there was some queuing in the system's backlog). This is usually
15449 the same date which may appear in any upstream firewall's log.
15450
15451 - "frontend_name" is the name of the frontend (or listener) which received
15452 and processed the connection.
15453
15454 - "backend_name" is the name of the backend (or listener) which was selected
15455 to manage the connection to the server. This will be the same as the
15456 frontend if no switching rule has been applied, which is common for TCP
15457 applications.
15458
15459 - "server_name" is the name of the last server to which the connection was
15460 sent, which might differ from the first one if there were connection errors
15461 and a redispatch occurred. Note that this server belongs to the backend
15462 which processed the request. If the connection was aborted before reaching
15463 a server, "<NOSRV>" is indicated instead of a server name.
15464
15465 - "Tw" is the total time in milliseconds spent waiting in the various queues.
15466 It can be "-1" if the connection was aborted before reaching the queue.
15467 See "Timers" below for more details.
15468
15469 - "Tc" is the total time in milliseconds spent waiting for the connection to
15470 establish to the final server, including retries. It can be "-1" if the
15471 connection was aborted before a connection could be established. See
15472 "Timers" below for more details.
15473
15474 - "Tt" is the total time in milliseconds elapsed between the accept and the
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030015475 last close. It covers all possible processing. There is one exception, if
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015476 "option logasap" was specified, then the time counting stops at the moment
15477 the log is emitted. In this case, a '+' sign is prepended before the value,
15478 indicating that the final one will be larger. See "Timers" below for more
15479 details.
15480
15481 - "bytes_read" is the total number of bytes transmitted from the server to
15482 the client when the log is emitted. If "option logasap" is specified, the
15483 this value will be prefixed with a '+' sign indicating that the final one
15484 may be larger. Please note that this value is a 64-bit counter, so log
15485 analysis tools must be able to handle it without overflowing.
15486
15487 - "termination_state" is the condition the session was in when the session
15488 ended. This indicates the session state, which side caused the end of
15489 session to happen, and for what reason (timeout, error, ...). The normal
15490 flags should be "--", indicating the session was closed by either end with
15491 no data remaining in buffers. See below "Session state at disconnection"
15492 for more details.
15493
15494 - "actconn" is the total number of concurrent connections on the process when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040015495 the session was logged. It is useful to detect when some per-process system
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015496 limits have been reached. For instance, if actconn is close to 512 when
15497 multiple connection errors occur, chances are high that the system limits
15498 the process to use a maximum of 1024 file descriptors and that all of them
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015499 are used. See section 3 "Global parameters" to find how to tune the system.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015500
15501 - "feconn" is the total number of concurrent connections on the frontend when
15502 the session was logged. It is useful to estimate the amount of resource
15503 required to sustain high loads, and to detect when the frontend's "maxconn"
15504 has been reached. Most often when this value increases by huge jumps, it is
15505 because there is congestion on the backend servers, but sometimes it can be
15506 caused by a denial of service attack.
15507
15508 - "beconn" is the total number of concurrent connections handled by the
15509 backend when the session was logged. It includes the total number of
15510 concurrent connections active on servers as well as the number of
15511 connections pending in queues. It is useful to estimate the amount of
15512 additional servers needed to support high loads for a given application.
15513 Most often when this value increases by huge jumps, it is because there is
15514 congestion on the backend servers, but sometimes it can be caused by a
15515 denial of service attack.
15516
15517 - "srv_conn" is the total number of concurrent connections still active on
15518 the server when the session was logged. It can never exceed the server's
15519 configured "maxconn" parameter. If this value is very often close or equal
15520 to the server's "maxconn", it means that traffic regulation is involved a
15521 lot, meaning that either the server's maxconn value is too low, or that
15522 there aren't enough servers to process the load with an optimal response
15523 time. When only one of the server's "srv_conn" is high, it usually means
15524 that this server has some trouble causing the connections to take longer to
15525 be processed than on other servers.
15526
15527 - "retries" is the number of connection retries experienced by this session
15528 when trying to connect to the server. It must normally be zero, unless a
15529 server is being stopped at the same moment the connection was attempted.
15530 Frequent retries generally indicate either a network problem between
15531 haproxy and the server, or a misconfigured system backlog on the server
15532 preventing new connections from being queued. This field may optionally be
15533 prefixed with a '+' sign, indicating that the session has experienced a
15534 redispatch after the maximal retry count has been reached on the initial
15535 server. In this case, the server name appearing in the log is the one the
15536 connection was redispatched to, and not the first one, though both may
15537 sometimes be the same in case of hashing for instance. So as a general rule
15538 of thumb, when a '+' is present in front of the retry count, this count
15539 should not be attributed to the logged server.
15540
15541 - "srv_queue" is the total number of requests which were processed before
15542 this one in the server queue. It is zero when the request has not gone
15543 through the server queue. It makes it possible to estimate the approximate
15544 server's response time by dividing the time spent in queue by the number of
15545 requests in the queue. It is worth noting that if a session experiences a
15546 redispatch and passes through two server queues, their positions will be
15547 cumulated. A request should not pass through both the server queue and the
15548 backend queue unless a redispatch occurs.
15549
15550 - "backend_queue" is the total number of requests which were processed before
15551 this one in the backend's global queue. It is zero when the request has not
15552 gone through the global queue. It makes it possible to estimate the average
15553 queue length, which easily translates into a number of missing servers when
15554 divided by a server's "maxconn" parameter. It is worth noting that if a
15555 session experiences a redispatch, it may pass twice in the backend's queue,
15556 and then both positions will be cumulated. A request should not pass
15557 through both the server queue and the backend queue unless a redispatch
15558 occurs.
15559
15560
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200155618.2.3. HTTP log format
15562----------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015563
15564The HTTP format is the most complete and the best suited for HTTP proxies. It
15565is enabled by when "option httplog" is specified in the frontend. It provides
15566the same level of information as the TCP format with additional features which
15567are specific to the HTTP protocol. Just like the TCP format, the log is usually
15568emitted at the end of the session, unless "option logasap" is specified, which
15569generally only makes sense for download sites. A session which matches the
15570"monitor" rules will never logged. It is also possible not to log sessions for
15571which no data were sent by the client by specifying "option dontlognull" in the
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020015572frontend. Successful connections will not be logged if "option dontlog-normal"
15573is specified in the frontend.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015574
15575Most fields are shared with the TCP log, some being different. A few fields may
15576slightly vary depending on some configuration options. Those ones are marked
15577with a star ('*') after the field name below.
15578
15579 Example :
15580 frontend http-in
15581 mode http
15582 option httplog
15583 log global
15584 default_backend bck
15585
15586 backend static
15587 server srv1 127.0.0.1:8000
15588
15589 >>> Feb 6 12:14:14 localhost \
15590 haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
15591 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 +010015592 {} "GET /index.html HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015593
15594 Field Format Extract from the example above
15595 1 process_name '[' pid ']:' haproxy[14389]:
15596 2 client_ip ':' client_port 10.0.1.2:33317
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015597 3 '[' request_date ']' [06/Feb/2009:12:14:14.655]
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015598 4 frontend_name http-in
15599 5 backend_name '/' server_name static/srv1
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015600 6 TR '/' Tw '/' Tc '/' Tr '/' Ta* 10/0/30/69/109
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015601 7 status_code 200
15602 8 bytes_read* 2750
15603 9 captured_request_cookie -
15604 10 captured_response_cookie -
15605 11 termination_state ----
15606 12 actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 1/1/1/1/0
15607 13 srv_queue '/' backend_queue 0/0
15608 14 '{' captured_request_headers* '}' {haproxy.1wt.eu}
15609 15 '{' captured_response_headers* '}' {}
15610 16 '"' http_request '"' "GET /index.html HTTP/1.1"
Willy Tarreaud72758d2010-01-12 10:42:19 +010015611
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015612Detailed fields description :
15613 - "client_ip" is the IP address of the client which initiated the TCP
Willy Tarreauceb24bc2010-11-09 12:46:41 +010015614 connection to haproxy. If the connection was accepted on a UNIX socket
15615 instead, the IP address would be replaced with the word "unix". Note that
15616 when the connection is accepted on a socket configured with "accept-proxy"
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010015617 and the PROXY protocol is correctly used, or with a "accept-netscaler-cip"
15618 and the NetScaler Client IP insetion protocol is correctly used, then the
15619 logs will reflect the forwarded connection's information.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015620
15621 - "client_port" is the TCP port of the client which initiated the connection.
Willy Tarreauceb24bc2010-11-09 12:46:41 +010015622 If the connection was accepted on a UNIX socket instead, the port would be
15623 replaced with the ID of the accepting socket, which is also reported in the
15624 stats interface.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015625
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015626 - "request_date" is the exact date when the first byte of the HTTP request
15627 was received by haproxy (log field %tr).
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015628
15629 - "frontend_name" is the name of the frontend (or listener) which received
15630 and processed the connection.
15631
15632 - "backend_name" is the name of the backend (or listener) which was selected
15633 to manage the connection to the server. This will be the same as the
15634 frontend if no switching rule has been applied.
15635
15636 - "server_name" is the name of the last server to which the connection was
15637 sent, which might differ from the first one if there were connection errors
15638 and a redispatch occurred. Note that this server belongs to the backend
15639 which processed the request. If the request was aborted before reaching a
15640 server, "<NOSRV>" is indicated instead of a server name. If the request was
15641 intercepted by the stats subsystem, "<STATS>" is indicated instead.
15642
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015643 - "TR" is the total time in milliseconds spent waiting for a full HTTP
15644 request from the client (not counting body) after the first byte was
15645 received. It can be "-1" if the connection was aborted before a complete
15646 request could be received or the a bad request was received. It should
15647 always be very small because a request generally fits in one single packet.
15648 Large times here generally indicate network issues between the client and
15649 haproxy or requests being typed by hand. See "Timers" below for more details.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015650
15651 - "Tw" is the total time in milliseconds spent waiting in the various queues.
15652 It can be "-1" if the connection was aborted before reaching the queue.
15653 See "Timers" below for more details.
15654
15655 - "Tc" is the total time in milliseconds spent waiting for the connection to
15656 establish to the final server, including retries. It can be "-1" if the
15657 request was aborted before a connection could be established. See "Timers"
15658 below for more details.
15659
15660 - "Tr" is the total time in milliseconds spent waiting for the server to send
15661 a full HTTP response, not counting data. It can be "-1" if the request was
15662 aborted before a complete response could be received. It generally matches
15663 the server's processing time for the request, though it may be altered by
15664 the amount of data sent by the client to the server. Large times here on
15665 "GET" requests generally indicate an overloaded server. See "Timers" below
15666 for more details.
15667
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015668 - "Ta" is the time the request remained active in haproxy, which is the total
15669 time in milliseconds elapsed between the first byte of the request was
15670 received and the last byte of response was sent. It covers all possible
15671 processing except the handshake (see Th) and idle time (see Ti). There is
15672 one exception, if "option logasap" was specified, then the time counting
15673 stops at the moment the log is emitted. In this case, a '+' sign is
15674 prepended before the value, indicating that the final one will be larger.
15675 See "Timers" below for more details.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015676
15677 - "status_code" is the HTTP status code returned to the client. This status
15678 is generally set by the server, but it might also be set by haproxy when
15679 the server cannot be reached or when its response is blocked by haproxy.
15680
15681 - "bytes_read" is the total number of bytes transmitted to the client when
15682 the log is emitted. This does include HTTP headers. If "option logasap" is
15683 specified, the this value will be prefixed with a '+' sign indicating that
15684 the final one may be larger. Please note that this value is a 64-bit
15685 counter, so log analysis tools must be able to handle it without
15686 overflowing.
15687
15688 - "captured_request_cookie" is an optional "name=value" entry indicating that
15689 the client had this cookie in the request. The cookie name and its maximum
15690 length are defined by the "capture cookie" statement in the frontend
15691 configuration. The field is a single dash ('-') when the option is not
15692 set. Only one cookie may be captured, it is generally used to track session
15693 ID exchanges between a client and a server to detect session crossing
15694 between clients due to application bugs. For more details, please consult
15695 the section "Capturing HTTP headers and cookies" below.
15696
15697 - "captured_response_cookie" is an optional "name=value" entry indicating
15698 that the server has returned a cookie with its response. The cookie name
15699 and its maximum length are defined by the "capture cookie" statement in the
15700 frontend configuration. The field is a single dash ('-') when the option is
15701 not set. Only one cookie may be captured, it is generally used to track
15702 session ID exchanges between a client and a server to detect session
15703 crossing between clients due to application bugs. For more details, please
15704 consult the section "Capturing HTTP headers and cookies" below.
15705
15706 - "termination_state" is the condition the session was in when the session
15707 ended. This indicates the session state, which side caused the end of
15708 session to happen, for what reason (timeout, error, ...), just like in TCP
15709 logs, and information about persistence operations on cookies in the last
15710 two characters. The normal flags should begin with "--", indicating the
15711 session was closed by either end with no data remaining in buffers. See
15712 below "Session state at disconnection" for more details.
15713
15714 - "actconn" is the total number of concurrent connections on the process when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040015715 the session was logged. It is useful to detect when some per-process system
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015716 limits have been reached. For instance, if actconn is close to 512 or 1024
15717 when multiple connection errors occur, chances are high that the system
15718 limits the process to use a maximum of 1024 file descriptors and that all
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015719 of them are used. See section 3 "Global parameters" to find how to tune the
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015720 system.
15721
15722 - "feconn" is the total number of concurrent connections on the frontend when
15723 the session was logged. It is useful to estimate the amount of resource
15724 required to sustain high loads, and to detect when the frontend's "maxconn"
15725 has been reached. Most often when this value increases by huge jumps, it is
15726 because there is congestion on the backend servers, but sometimes it can be
15727 caused by a denial of service attack.
15728
15729 - "beconn" is the total number of concurrent connections handled by the
15730 backend when the session was logged. It includes the total number of
15731 concurrent connections active on servers as well as the number of
15732 connections pending in queues. It is useful to estimate the amount of
15733 additional servers needed to support high loads for a given application.
15734 Most often when this value increases by huge jumps, it is because there is
15735 congestion on the backend servers, but sometimes it can be caused by a
15736 denial of service attack.
15737
15738 - "srv_conn" is the total number of concurrent connections still active on
15739 the server when the session was logged. It can never exceed the server's
15740 configured "maxconn" parameter. If this value is very often close or equal
15741 to the server's "maxconn", it means that traffic regulation is involved a
15742 lot, meaning that either the server's maxconn value is too low, or that
15743 there aren't enough servers to process the load with an optimal response
15744 time. When only one of the server's "srv_conn" is high, it usually means
15745 that this server has some trouble causing the requests to take longer to be
15746 processed than on other servers.
15747
15748 - "retries" is the number of connection retries experienced by this session
15749 when trying to connect to the server. It must normally be zero, unless a
15750 server is being stopped at the same moment the connection was attempted.
15751 Frequent retries generally indicate either a network problem between
15752 haproxy and the server, or a misconfigured system backlog on the server
15753 preventing new connections from being queued. This field may optionally be
15754 prefixed with a '+' sign, indicating that the session has experienced a
15755 redispatch after the maximal retry count has been reached on the initial
15756 server. In this case, the server name appearing in the log is the one the
15757 connection was redispatched to, and not the first one, though both may
15758 sometimes be the same in case of hashing for instance. So as a general rule
15759 of thumb, when a '+' is present in front of the retry count, this count
15760 should not be attributed to the logged server.
15761
15762 - "srv_queue" is the total number of requests which were processed before
15763 this one in the server queue. It is zero when the request has not gone
15764 through the server queue. It makes it possible to estimate the approximate
15765 server's response time by dividing the time spent in queue by the number of
15766 requests in the queue. It is worth noting that if a session experiences a
15767 redispatch and passes through two server queues, their positions will be
15768 cumulated. A request should not pass through both the server queue and the
15769 backend queue unless a redispatch occurs.
15770
15771 - "backend_queue" is the total number of requests which were processed before
15772 this one in the backend's global queue. It is zero when the request has not
15773 gone through the global queue. It makes it possible to estimate the average
15774 queue length, which easily translates into a number of missing servers when
15775 divided by a server's "maxconn" parameter. It is worth noting that if a
15776 session experiences a redispatch, it may pass twice in the backend's queue,
15777 and then both positions will be cumulated. A request should not pass
15778 through both the server queue and the backend queue unless a redispatch
15779 occurs.
15780
15781 - "captured_request_headers" is a list of headers captured in the request due
15782 to the presence of the "capture request header" statement in the frontend.
15783 Multiple headers can be captured, they will be delimited by a vertical bar
15784 ('|'). When no capture is enabled, the braces do not appear, causing a
15785 shift of remaining fields. It is important to note that this field may
15786 contain spaces, and that using it requires a smarter log parser than when
15787 it's not used. Please consult the section "Capturing HTTP headers and
15788 cookies" below for more details.
15789
15790 - "captured_response_headers" is a list of headers captured in the response
15791 due to the presence of the "capture response header" statement in the
15792 frontend. Multiple headers can be captured, they will be delimited by a
15793 vertical bar ('|'). When no capture is enabled, the braces do not appear,
15794 causing a shift of remaining fields. It is important to note that this
15795 field may contain spaces, and that using it requires a smarter log parser
15796 than when it's not used. Please consult the section "Capturing HTTP headers
15797 and cookies" below for more details.
15798
15799 - "http_request" is the complete HTTP request line, including the method,
15800 request and HTTP version string. Non-printable characters are encoded (see
15801 below the section "Non-printable characters"). This is always the last
15802 field, and it is always delimited by quotes and is the only one which can
15803 contain quotes. If new fields are added to the log format, they will be
15804 added before this field. This field might be truncated if the request is
15805 huge and does not fit in the standard syslog buffer (1024 characters). This
15806 is the reason why this field must always remain the last one.
15807
15808
Cyril Bontédc4d9032012-04-08 21:57:39 +0200158098.2.4. Custom log format
15810------------------------
William Lallemand48940402012-01-30 16:47:22 +010015811
Willy Tarreau2beef582012-12-20 17:22:52 +010015812The directive log-format allows you to customize the logs in http mode and tcp
William Lallemandbddd4fd2012-02-27 11:23:10 +010015813mode. It takes a string as argument.
William Lallemand48940402012-01-30 16:47:22 +010015814
15815HAproxy understands some log format variables. % precedes log format variables.
15816Variables can take arguments using braces ('{}'), and multiple arguments are
15817separated by commas within the braces. Flags may be added or removed by
15818prefixing them with a '+' or '-' sign.
15819
15820Special variable "%o" may be used to propagate its flags to all other
15821variables on the same format string. This is particularly handy with quoted
Dragan Dosen835b9212016-02-12 13:23:03 +010015822("Q") and escaped ("E") string formats.
William Lallemand48940402012-01-30 16:47:22 +010015823
Willy Tarreauc8368452012-12-21 00:09:23 +010015824If a variable is named between square brackets ('[' .. ']') then it is used
Willy Tarreaube722a22014-06-13 16:31:59 +020015825as a sample expression rule (see section 7.3). This it useful to add some
Willy Tarreauc8368452012-12-21 00:09:23 +010015826less common information such as the client's SSL certificate's DN, or to log
15827the key that would be used to store an entry into a stick table.
15828
William Lallemand48940402012-01-30 16:47:22 +010015829Note: spaces must be escaped. A space character is considered as a separator.
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030015830In order to emit a verbatim '%', it must be preceded by another '%' resulting
Willy Tarreau06d97f92013-12-02 17:45:48 +010015831in '%%'. HAProxy will automatically merge consecutive separators.
William Lallemand48940402012-01-30 16:47:22 +010015832
Dragan Dosen835b9212016-02-12 13:23:03 +010015833Note: when using the RFC5424 syslog message format, the characters '"',
15834'\' and ']' inside PARAM-VALUE should be escaped with '\' as prefix (see
15835https://tools.ietf.org/html/rfc5424#section-6.3.3 for more details). In
15836such cases, the use of the flag "E" should be considered.
15837
William Lallemand48940402012-01-30 16:47:22 +010015838Flags are :
15839 * Q: quote a string
Jamie Gloudonaaa21002012-08-25 00:18:33 -040015840 * X: hexadecimal representation (IPs, Ports, %Ts, %rt, %pid)
Dragan Dosen835b9212016-02-12 13:23:03 +010015841 * E: escape characters '"', '\' and ']' in a string with '\' as prefix
15842 (intended purpose is for the RFC5424 structured-data log formats)
William Lallemand48940402012-01-30 16:47:22 +010015843
15844 Example:
15845
15846 log-format %T\ %t\ Some\ Text
15847 log-format %{+Q}o\ %t\ %s\ %{-Q}r
15848
Dragan Dosen835b9212016-02-12 13:23:03 +010015849 log-format-sd %{+Q,+E}o\ [exampleSDID@1234\ header=%[capture.req.hdr(0)]]
15850
William Lallemand48940402012-01-30 16:47:22 +010015851At the moment, the default HTTP format is defined this way :
15852
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015853 log-format "%ci:%cp [%tr] %ft %b/%s %TR/%Tw/%Tc/%Tr/%Ta %ST %B %CC \
15854 %CS %tsc %ac/%fc/%bc/%sc/%rc %sq/%bq %hr %hs %{+Q}r"
William Lallemand48940402012-01-30 16:47:22 +010015855
William Lallemandbddd4fd2012-02-27 11:23:10 +010015856the default CLF format is defined this way :
William Lallemand48940402012-01-30 16:47:22 +010015857
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015858 log-format "%{+Q}o %{-Q}ci - - [%trg] %r %ST %B \"\" \"\" %cp \
15859 %ms %ft %b %s %TR %Tw %Tc %Tr %Ta %tsc %ac %fc \
15860 %bc %sc %rc %sq %bq %CC %CS %hrl %hsl"
William Lallemand48940402012-01-30 16:47:22 +010015861
William Lallemandbddd4fd2012-02-27 11:23:10 +010015862and the default TCP format is defined this way :
15863
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015864 log-format "%ci:%cp [%t] %ft %b/%s %Tw/%Tc/%Tt %B %ts \
15865 %ac/%fc/%bc/%sc/%rc %sq/%bq"
William Lallemandbddd4fd2012-02-27 11:23:10 +010015866
William Lallemand48940402012-01-30 16:47:22 +010015867Please refer to the table below for currently defined variables :
15868
William Lallemandbddd4fd2012-02-27 11:23:10 +010015869 +---+------+-----------------------------------------------+-------------+
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015870 | R | var | field name (8.2.2 and 8.2.3 for description) | type |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015871 +---+------+-----------------------------------------------+-------------+
15872 | | %o | special variable, apply flags on all next var | |
15873 +---+------+-----------------------------------------------+-------------+
Willy Tarreau2beef582012-12-20 17:22:52 +010015874 | | %B | bytes_read (from server to client) | numeric |
15875 | H | %CC | captured_request_cookie | string |
15876 | H | %CS | captured_response_cookie | string |
William Lallemand5f232402012-04-05 18:02:55 +020015877 | | %H | hostname | string |
Andrew Hayworth0ebc55f2015-04-27 21:37:03 +000015878 | H | %HM | HTTP method (ex: POST) | string |
15879 | H | %HP | HTTP request URI without query string (path) | string |
Andrew Hayworthe63ac872015-07-31 16:14:16 +000015880 | H | %HQ | HTTP request URI query string (ex: ?bar=baz) | string |
Andrew Hayworth0ebc55f2015-04-27 21:37:03 +000015881 | H | %HU | HTTP request URI (ex: /foo?bar=baz) | string |
15882 | H | %HV | HTTP version (ex: HTTP/1.0) | string |
William Lallemanda73203e2012-03-12 12:48:57 +010015883 | | %ID | unique-id | string |
Willy Tarreau4bf99632014-06-13 12:21:40 +020015884 | | %ST | status_code | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020015885 | | %T | gmt_date_time | date |
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015886 | | %Ta | Active time of the request (from TR to end) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015887 | | %Tc | Tc | numeric |
Willy Tarreau27b639d2016-05-17 17:55:27 +020015888 | | %Td | Td = Tt - (Tq + Tw + Tc + Tr) | numeric |
Yuxans Yao4e25b012012-10-19 10:36:09 +080015889 | | %Tl | local_date_time | date |
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015890 | | %Th | connection handshake time (SSL, PROXY proto) | numeric |
15891 | H | %Ti | idle time before the HTTP request | numeric |
15892 | H | %Tq | Th + Ti + TR | numeric |
15893 | H | %TR | time to receive the full request from 1st byte| numeric |
15894 | H | %Tr | Tr (response time) | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020015895 | | %Ts | timestamp | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015896 | | %Tt | Tt | numeric |
15897 | | %Tw | Tw | numeric |
Willy Tarreau2beef582012-12-20 17:22:52 +010015898 | | %U | bytes_uploaded (from client to server) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015899 | | %ac | actconn | numeric |
15900 | | %b | backend_name | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010015901 | | %bc | beconn (backend concurrent connections) | numeric |
15902 | | %bi | backend_source_ip (connecting address) | IP |
15903 | | %bp | backend_source_port (connecting address) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015904 | | %bq | backend_queue | numeric |
Willy Tarreau2beef582012-12-20 17:22:52 +010015905 | | %ci | client_ip (accepted address) | IP |
15906 | | %cp | client_port (accepted address) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015907 | | %f | frontend_name | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010015908 | | %fc | feconn (frontend concurrent connections) | numeric |
15909 | | %fi | frontend_ip (accepting address) | IP |
15910 | | %fp | frontend_port (accepting address) | numeric |
Willy Tarreau773d65f2012-10-12 14:56:11 +020015911 | | %ft | frontend_name_transport ('~' suffix for SSL) | string |
Willy Tarreau7346acb2014-08-28 15:03:15 +020015912 | | %lc | frontend_log_counter | numeric |
Willy Tarreaud9ed3d22014-06-13 12:23:06 +020015913 | | %hr | captured_request_headers default style | string |
15914 | | %hrl | captured_request_headers CLF style | string list |
15915 | | %hs | captured_response_headers default style | string |
15916 | | %hsl | captured_response_headers CLF style | string list |
Willy Tarreau812c88e2015-08-09 10:56:35 +020015917 | | %ms | accept date milliseconds (left-padded with 0) | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020015918 | | %pid | PID | numeric |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015919 | H | %r | http_request | string |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015920 | | %rc | retries | numeric |
Willy Tarreau1f0da242014-01-25 11:01:50 +010015921 | | %rt | request_counter (HTTP req or TCP session) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015922 | | %s | server_name | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010015923 | | %sc | srv_conn (server concurrent connections) | numeric |
15924 | | %si | server_IP (target address) | IP |
15925 | | %sp | server_port (target address) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015926 | | %sq | srv_queue | numeric |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015927 | S | %sslc| ssl_ciphers (ex: AES-SHA) | string |
15928 | S | %sslv| ssl_version (ex: TLSv1) | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010015929 | | %t | date_time (with millisecond resolution) | date |
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015930 | H | %tr | date_time of HTTP request | date |
15931 | H | %trg | gmt_date_time of start of HTTP request | date |
15932 | H | %trl | locla_date_time of start of HTTP request | date |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015933 | | %ts | termination_state | string |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015934 | H | %tsc | termination_state with cookie status | string |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015935 +---+------+-----------------------------------------------+-------------+
William Lallemand48940402012-01-30 16:47:22 +010015936
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015937 R = Restrictions : H = mode http only ; S = SSL only
William Lallemand48940402012-01-30 16:47:22 +010015938
Willy Tarreau5f51e1a2012-12-03 18:40:10 +010015939
159408.2.5. Error log format
15941-----------------------
15942
15943When an incoming connection fails due to an SSL handshake or an invalid PROXY
15944protocol header, haproxy will log the event using a shorter, fixed line format.
15945By default, logs are emitted at the LOG_INFO level, unless the option
15946"log-separate-errors" is set in the backend, in which case the LOG_ERR level
15947will be used. Connections on which no data are exchanged (eg: probes) are not
15948logged if the "dontlognull" option is set.
15949
15950The format looks like this :
15951
15952 >>> Dec 3 18:27:14 localhost \
15953 haproxy[6103]: 127.0.0.1:56059 [03/Dec/2012:17:35:10.380] frt/f1: \
15954 Connection error during SSL handshake
15955
15956 Field Format Extract from the example above
15957 1 process_name '[' pid ']:' haproxy[6103]:
15958 2 client_ip ':' client_port 127.0.0.1:56059
15959 3 '[' accept_date ']' [03/Dec/2012:17:35:10.380]
15960 4 frontend_name "/" bind_name ":" frt/f1:
15961 5 message Connection error during SSL handshake
15962
15963These fields just provide minimal information to help debugging connection
15964failures.
15965
15966
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200159678.3. Advanced logging options
15968-----------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015969
15970Some advanced logging options are often looked for but are not easy to find out
15971just by looking at the various options. Here is an entry point for the few
15972options which can enable better logging. Please refer to the keywords reference
15973for more information about their usage.
15974
15975
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200159768.3.1. Disabling logging of external tests
15977------------------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015978
15979It is quite common to have some monitoring tools perform health checks on
15980haproxy. Sometimes it will be a layer 3 load-balancer such as LVS or any
15981commercial load-balancer, and sometimes it will simply be a more complete
15982monitoring system such as Nagios. When the tests are very frequent, users often
15983ask how to disable logging for those checks. There are three possibilities :
15984
15985 - if connections come from everywhere and are just TCP probes, it is often
15986 desired to simply disable logging of connections without data exchange, by
15987 setting "option dontlognull" in the frontend. It also disables logging of
15988 port scans, which may or may not be desired.
15989
15990 - if the connection come from a known source network, use "monitor-net" to
15991 declare this network as monitoring only. Any host in this network will then
15992 only be able to perform health checks, and their requests will not be
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030015993 logged. This is generally appropriate to designate a list of equipment
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015994 such as other load-balancers.
15995
15996 - if the tests are performed on a known URI, use "monitor-uri" to declare
15997 this URI as dedicated to monitoring. Any host sending this request will
15998 only get the result of a health-check, and the request will not be logged.
15999
16000
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200160018.3.2. Logging before waiting for the session to terminate
16002----------------------------------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016003
16004The problem with logging at end of connection is that you have no clue about
16005what is happening during very long sessions, such as remote terminal sessions
16006or large file downloads. This problem can be worked around by specifying
16007"option logasap" in the frontend. Haproxy will then log as soon as possible,
16008just before data transfer begins. This means that in case of TCP, it will still
16009log the connection status to the server, and in case of HTTP, it will log just
16010after processing the server headers. In this case, the number of bytes reported
16011is the number of header bytes sent to the client. In order to avoid confusion
16012with normal logs, the total time field and the number of bytes are prefixed
16013with a '+' sign which means that real numbers are certainly larger.
16014
16015
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200160168.3.3. Raising log level upon errors
16017------------------------------------
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020016018
16019Sometimes it is more convenient to separate normal traffic from errors logs,
16020for instance in order to ease error monitoring from log files. When the option
16021"log-separate-errors" is used, connections which experience errors, timeouts,
16022retries, redispatches or HTTP status codes 5xx will see their syslog level
16023raised from "info" to "err". This will help a syslog daemon store the log in
16024a separate file. It is very important to keep the errors in the normal traffic
16025file too, so that log ordering is not altered. You should also be careful if
16026you already have configured your syslog daemon to store all logs higher than
16027"notice" in an "admin" file, because the "err" level is higher than "notice".
16028
16029
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200160308.3.4. Disabling logging of successful connections
16031--------------------------------------------------
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020016032
16033Although this may sound strange at first, some large sites have to deal with
16034multiple thousands of logs per second and are experiencing difficulties keeping
16035them intact for a long time or detecting errors within them. If the option
16036"dontlog-normal" is set on the frontend, all normal connections will not be
16037logged. In this regard, a normal connection is defined as one without any
16038error, timeout, retry nor redispatch. In HTTP, the status code is checked too,
16039and a response with a status 5xx is not considered normal and will be logged
16040too. Of course, doing is is really discouraged as it will remove most of the
16041useful information from the logs. Do this only if you have no other
16042alternative.
16043
16044
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200160458.4. Timing events
16046------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016047
16048Timers provide a great help in troubleshooting network problems. All values are
16049reported in milliseconds (ms). These timers should be used in conjunction with
16050the session termination flags. In TCP mode with "option tcplog" set on the
16051frontend, 3 control points are reported under the form "Tw/Tc/Tt", and in HTTP
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016052mode, 5 control points are reported under the form "TR/Tw/Tc/Tr/Ta". In
16053addition, three other measures are provided, "Th", "Ti", and "Tq".
16054
Guillaume de Lafondf27cddc2016-12-23 17:32:43 +010016055Timings events in HTTP mode:
16056
16057 first request 2nd request
16058 |<-------------------------------->|<-------------- ...
16059 t tr t tr ...
16060 ---|----|----|----|----|----|----|----|----|--
16061 : Th Ti TR Tw Tc Tr Td : Ti ...
16062 :<---- Tq ---->: :
16063 :<-------------- Tt -------------->:
16064 :<--------- Ta --------->:
16065
16066Timings events in TCP mode:
16067
16068 TCP session
16069 |<----------------->|
16070 t t
16071 ---|----|----|----|----|---
16072 | Th Tw Tc Td |
16073 |<------ Tt ------->|
16074
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016075 - Th: total time to accept tcp connection and execute handshakes for low level
16076 protocols. Currently, these protocoles are proxy-protocol and SSL. This may
16077 only happen once during the whole connection's lifetime. A large time here
16078 may indicate that the client only pre-established the connection without
16079 speaking, that it is experiencing network issues preventing it from
16080 completing a handshake in a reasonable time (eg: MTU issues), or that an
16081 SSL handshake was very expensive to compute.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016082
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016083 - Ti: is the idle time before the HTTP request (HTTP mode only). This timer
16084 counts between the end of the handshakes and the first byte of the HTTP
16085 request. When dealing with a second request in keep-alive mode, it starts
16086 to count after the end of the transmission the previous response. Some
16087 browsers pre-establish connections to a server in order to reduce the
16088 latency of a future request, and keep them pending until they need it. This
16089 delay will be reported as the idle time. A value of -1 indicates that
16090 nothing was received on the connection.
16091
16092 - TR: total time to get the client request (HTTP mode only). It's the time
16093 elapsed between the first bytes received and the moment the proxy received
16094 the empty line marking the end of the HTTP headers. The value "-1"
16095 indicates that the end of headers has never been seen. This happens when
16096 the client closes prematurely or times out. This time is usually very short
16097 since most requests fit in a single packet. A large time may indicate a
16098 request typed by hand during a test.
16099
16100 - Tq: total time to get the client request from the accept date or since the
16101 emission of the last byte of the previous response (HTTP mode only). It's
16102 exactly equalt to Th + Ti + TR unless any of them is -1, in which case it
16103 returns -1 as well. This timer used to be very useful before the arrival of
16104 HTTP keep-alive and browsers' pre-connect feature. It's recommended to drop
16105 it in favor of TR nowadays, as the idle time adds a lot of noise to the
16106 reports.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016107
16108 - Tw: total time spent in the queues waiting for a connection slot. It
16109 accounts for backend queue as well as the server queues, and depends on the
16110 queue size, and the time needed for the server to complete previous
16111 requests. The value "-1" means that the request was killed before reaching
16112 the queue, which is generally what happens with invalid or denied requests.
16113
16114 - Tc: total time to establish the TCP connection to the server. It's the time
16115 elapsed between the moment the proxy sent the connection request, and the
16116 moment it was acknowledged by the server, or between the TCP SYN packet and
16117 the matching SYN/ACK packet in return. The value "-1" means that the
16118 connection never established.
16119
16120 - Tr: server response time (HTTP mode only). It's the time elapsed between
16121 the moment the TCP connection was established to the server and the moment
16122 the server sent its complete response headers. It purely shows its request
16123 processing time, without the network overhead due to the data transmission.
16124 It is worth noting that when the client has data to send to the server, for
16125 instance during a POST request, the time already runs, and this can distort
16126 apparent response time. For this reason, it's generally wise not to trust
16127 too much this field for POST requests initiated from clients behind an
16128 untrusted network. A value of "-1" here means that the last the response
16129 header (empty line) was never seen, most likely because the server timeout
16130 stroke before the server managed to process the request.
16131
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016132 - Ta: total active time for the HTTP request, between the moment the proxy
16133 received the first byte of the request header and the emission of the last
16134 byte of the response body. The exception is when the "logasap" option is
16135 specified. In this case, it only equals (TR+Tw+Tc+Tr), and is prefixed with
16136 a '+' sign. From this field, we can deduce "Td", the data transmission time,
16137 by subtracting other timers when valid :
16138
16139 Td = Ta - (TR + Tw + Tc + Tr)
16140
16141 Timers with "-1" values have to be excluded from this equation. Note that
16142 "Ta" can never be negative.
16143
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016144 - Tt: total session duration time, between the moment the proxy accepted it
16145 and the moment both ends were closed. The exception is when the "logasap"
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016146 option is specified. In this case, it only equals (Th+Ti+TR+Tw+Tc+Tr), and
16147 is prefixed with a '+' sign. From this field, we can deduce "Td", the data
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030016148 transmission time, by subtracting other timers when valid :
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016149
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016150 Td = Tt - (Th + Ti + TR + Tw + Tc + Tr)
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016151
16152 Timers with "-1" values have to be excluded from this equation. In TCP
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016153 mode, "Ti", "Tq" and "Tr" have to be excluded too. Note that "Tt" can never
16154 be negative and that for HTTP, Tt is simply equal to (Th+Ti+Ta).
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016155
16156These timers provide precious indications on trouble causes. Since the TCP
16157protocol defines retransmit delays of 3, 6, 12... seconds, we know for sure
16158that timers close to multiples of 3s are nearly always related to lost packets
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016159due to network problems (wires, negotiation, congestion). Moreover, if "Ta" or
16160"Tt" is close to a timeout value specified in the configuration, it often means
16161that a session has been aborted on timeout.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016162
16163Most common cases :
16164
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016165 - If "Th" or "Ti" are close to 3000, a packet has probably been lost between
16166 the client and the proxy. This is very rare on local networks but might
16167 happen when clients are on far remote networks and send large requests. It
16168 may happen that values larger than usual appear here without any network
16169 cause. Sometimes, during an attack or just after a resource starvation has
16170 ended, haproxy may accept thousands of connections in a few milliseconds.
16171 The time spent accepting these connections will inevitably slightly delay
16172 processing of other connections, and it can happen that request times in the
16173 order of a few tens of milliseconds are measured after a few thousands of
16174 new connections have been accepted at once. Using one of the keep-alive
16175 modes may display larger idle times since "Ti" measures the time spent
Patrick Mezard105faca2010-06-12 17:02:46 +020016176 waiting for additional requests.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016177
16178 - If "Tc" is close to 3000, a packet has probably been lost between the
16179 server and the proxy during the server connection phase. This value should
16180 always be very low, such as 1 ms on local networks and less than a few tens
16181 of ms on remote networks.
16182
Willy Tarreau55165fe2009-05-10 12:02:55 +020016183 - If "Tr" is nearly always lower than 3000 except some rare values which seem
16184 to be the average majored by 3000, there are probably some packets lost
16185 between the proxy and the server.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016186
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016187 - If "Ta" is large even for small byte counts, it generally is because
16188 neither the client nor the server decides to close the connection while
16189 haproxy is running in tunnel mode and both have agreed on a keep-alive
16190 connection mode. In order to solve this issue, it will be needed to specify
16191 one of the HTTP options to manipulate keep-alive or close options on either
16192 the frontend or the backend. Having the smallest possible 'Ta' or 'Tt' is
16193 important when connection regulation is used with the "maxconn" option on
16194 the servers, since no new connection will be sent to the server until
16195 another one is released.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016196
16197Other noticeable HTTP log cases ('xx' means any value to be ignored) :
16198
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016199 TR/Tw/Tc/Tr/+Ta The "option logasap" is present on the frontend and the log
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016200 was emitted before the data phase. All the timers are valid
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016201 except "Ta" which is shorter than reality.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016202
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016203 -1/xx/xx/xx/Ta The client was not able to send a complete request in time
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016204 or it aborted too early. Check the session termination flags
16205 then "timeout http-request" and "timeout client" settings.
16206
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016207 TR/-1/xx/xx/Ta It was not possible to process the request, maybe because
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016208 servers were out of order, because the request was invalid
16209 or forbidden by ACL rules. Check the session termination
16210 flags.
16211
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016212 TR/Tw/-1/xx/Ta The connection could not establish on the server. Either it
16213 actively refused it or it timed out after Ta-(TR+Tw) ms.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016214 Check the session termination flags, then check the
16215 "timeout connect" setting. Note that the tarpit action might
16216 return similar-looking patterns, with "Tw" equal to the time
16217 the client connection was maintained open.
16218
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016219 TR/Tw/Tc/-1/Ta The server has accepted the connection but did not return
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030016220 a complete response in time, or it closed its connection
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016221 unexpectedly after Ta-(TR+Tw+Tc) ms. Check the session
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016222 termination flags, then check the "timeout server" setting.
16223
16224
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200162258.5. Session state at disconnection
16226-----------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016227
16228TCP and HTTP logs provide a session termination indicator in the
16229"termination_state" field, just before the number of active connections. It is
162302-characters long in TCP mode, and is extended to 4 characters in HTTP mode,
16231each of which has a special meaning :
16232
16233 - On the first character, a code reporting the first event which caused the
16234 session to terminate :
16235
16236 C : the TCP session was unexpectedly aborted by the client.
16237
16238 S : the TCP session was unexpectedly aborted by the server, or the
16239 server explicitly refused it.
16240
16241 P : the session was prematurely aborted by the proxy, because of a
16242 connection limit enforcement, because a DENY filter was matched,
16243 because of a security check which detected and blocked a dangerous
16244 error in server response which might have caused information leak
Willy Tarreau570f2212013-06-10 16:42:09 +020016245 (eg: cacheable cookie).
16246
16247 L : the session was locally processed by haproxy and was not passed to
16248 a server. This is what happens for stats and redirects.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016249
16250 R : a resource on the proxy has been exhausted (memory, sockets, source
16251 ports, ...). Usually, this appears during the connection phase, and
16252 system logs should contain a copy of the precise error. If this
16253 happens, it must be considered as a very serious anomaly which
16254 should be fixed as soon as possible by any means.
16255
16256 I : an internal error was identified by the proxy during a self-check.
16257 This should NEVER happen, and you are encouraged to report any log
16258 containing this, because this would almost certainly be a bug. It
16259 would be wise to preventively restart the process after such an
16260 event too, in case it would be caused by memory corruption.
16261
Simon Horman752dc4a2011-06-21 14:34:59 +090016262 D : the session was killed by haproxy because the server was detected
16263 as down and was configured to kill all connections when going down.
16264
Justin Karnegeseb2c24a2012-05-24 15:28:52 -070016265 U : the session was killed by haproxy on this backup server because an
16266 active server was detected as up and was configured to kill all
16267 backup connections when going up.
16268
Willy Tarreaua2a64e92011-09-07 23:01:56 +020016269 K : the session was actively killed by an admin operating on haproxy.
16270
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016271 c : the client-side timeout expired while waiting for the client to
16272 send or receive data.
16273
16274 s : the server-side timeout expired while waiting for the server to
16275 send or receive data.
16276
16277 - : normal session completion, both the client and the server closed
16278 with nothing left in the buffers.
16279
16280 - on the second character, the TCP or HTTP session state when it was closed :
16281
Willy Tarreauf7b30a92010-12-06 22:59:17 +010016282 R : the proxy was waiting for a complete, valid REQUEST from the client
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016283 (HTTP mode only). Nothing was sent to any server.
16284
16285 Q : the proxy was waiting in the QUEUE for a connection slot. This can
16286 only happen when servers have a 'maxconn' parameter set. It can
16287 also happen in the global queue after a redispatch consecutive to
16288 a failed attempt to connect to a dying server. If no redispatch is
16289 reported, then no connection attempt was made to any server.
16290
16291 C : the proxy was waiting for the CONNECTION to establish on the
16292 server. The server might at most have noticed a connection attempt.
16293
16294 H : the proxy was waiting for complete, valid response HEADERS from the
16295 server (HTTP only).
16296
16297 D : the session was in the DATA phase.
16298
16299 L : the proxy was still transmitting LAST data to the client while the
16300 server had already finished. This one is very rare as it can only
16301 happen when the client dies while receiving the last packets.
16302
16303 T : the request was tarpitted. It has been held open with the client
16304 during the whole "timeout tarpit" duration or until the client
16305 closed, both of which will be reported in the "Tw" timer.
16306
16307 - : normal session completion after end of data transfer.
16308
16309 - the third character tells whether the persistence cookie was provided by
16310 the client (only in HTTP mode) :
16311
16312 N : the client provided NO cookie. This is usually the case for new
16313 visitors, so counting the number of occurrences of this flag in the
16314 logs generally indicate a valid trend for the site frequentation.
16315
16316 I : the client provided an INVALID cookie matching no known server.
16317 This might be caused by a recent configuration change, mixed
Cyril Bontéa8e7bbc2010-04-25 22:29:29 +020016318 cookies between HTTP/HTTPS sites, persistence conditionally
16319 ignored, or an attack.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016320
16321 D : the client provided a cookie designating a server which was DOWN,
16322 so either "option persist" was used and the client was sent to
16323 this server, or it was not set and the client was redispatched to
16324 another server.
16325
Willy Tarreau996a92c2010-10-13 19:30:47 +020016326 V : the client provided a VALID cookie, and was sent to the associated
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016327 server.
16328
Willy Tarreau996a92c2010-10-13 19:30:47 +020016329 E : the client provided a valid cookie, but with a last date which was
16330 older than what is allowed by the "maxidle" cookie parameter, so
16331 the cookie is consider EXPIRED and is ignored. The request will be
16332 redispatched just as if there was no cookie.
16333
16334 O : the client provided a valid cookie, but with a first date which was
16335 older than what is allowed by the "maxlife" cookie parameter, so
16336 the cookie is consider too OLD and is ignored. The request will be
16337 redispatched just as if there was no cookie.
16338
Willy Tarreauc89ccb62012-04-05 21:18:22 +020016339 U : a cookie was present but was not used to select the server because
16340 some other server selection mechanism was used instead (typically a
16341 "use-server" rule).
16342
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016343 - : does not apply (no cookie set in configuration).
16344
16345 - the last character reports what operations were performed on the persistence
16346 cookie returned by the server (only in HTTP mode) :
16347
16348 N : NO cookie was provided by the server, and none was inserted either.
16349
16350 I : no cookie was provided by the server, and the proxy INSERTED one.
16351 Note that in "cookie insert" mode, if the server provides a cookie,
16352 it will still be overwritten and reported as "I" here.
16353
Willy Tarreau996a92c2010-10-13 19:30:47 +020016354 U : the proxy UPDATED the last date in the cookie that was presented by
16355 the client. This can only happen in insert mode with "maxidle". It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030016356 happens every time there is activity at a different date than the
Willy Tarreau996a92c2010-10-13 19:30:47 +020016357 date indicated in the cookie. If any other change happens, such as
16358 a redispatch, then the cookie will be marked as inserted instead.
16359
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016360 P : a cookie was PROVIDED by the server and transmitted as-is.
16361
16362 R : the cookie provided by the server was REWRITTEN by the proxy, which
16363 happens in "cookie rewrite" or "cookie prefix" modes.
16364
16365 D : the cookie provided by the server was DELETED by the proxy.
16366
16367 - : does not apply (no cookie set in configuration).
16368
Willy Tarreau996a92c2010-10-13 19:30:47 +020016369The combination of the two first flags gives a lot of information about what
16370was happening when the session terminated, and why it did terminate. It can be
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016371helpful to detect server saturation, network troubles, local system resource
16372starvation, attacks, etc...
16373
16374The most common termination flags combinations are indicated below. They are
16375alphabetically sorted, with the lowercase set just after the upper case for
16376easier finding and understanding.
16377
16378 Flags Reason
16379
16380 -- Normal termination.
16381
16382 CC The client aborted before the connection could be established to the
16383 server. This can happen when haproxy tries to connect to a recently
16384 dead (or unchecked) server, and the client aborts while haproxy is
16385 waiting for the server to respond or for "timeout connect" to expire.
16386
16387 CD The client unexpectedly aborted during data transfer. This can be
16388 caused by a browser crash, by an intermediate equipment between the
16389 client and haproxy which decided to actively break the connection,
16390 by network routing issues between the client and haproxy, or by a
16391 keep-alive session between the server and the client terminated first
16392 by the client.
Willy Tarreaud72758d2010-01-12 10:42:19 +010016393
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016394 cD The client did not send nor acknowledge any data for as long as the
16395 "timeout client" delay. This is often caused by network failures on
Cyril Bontédc4d9032012-04-08 21:57:39 +020016396 the client side, or the client simply leaving the net uncleanly.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016397
16398 CH The client aborted while waiting for the server to start responding.
16399 It might be the server taking too long to respond or the client
16400 clicking the 'Stop' button too fast.
16401
16402 cH The "timeout client" stroke while waiting for client data during a
16403 POST request. This is sometimes caused by too large TCP MSS values
16404 for PPPoE networks which cannot transport full-sized packets. It can
16405 also happen when client timeout is smaller than server timeout and
16406 the server takes too long to respond.
16407
16408 CQ The client aborted while its session was queued, waiting for a server
16409 with enough empty slots to accept it. It might be that either all the
16410 servers were saturated or that the assigned server was taking too
16411 long a time to respond.
16412
16413 CR The client aborted before sending a full HTTP request. Most likely
16414 the request was typed by hand using a telnet client, and aborted
16415 too early. The HTTP status code is likely a 400 here. Sometimes this
16416 might also be caused by an IDS killing the connection between haproxy
Willy Tarreau0f228a02015-05-01 15:37:53 +020016417 and the client. "option http-ignore-probes" can be used to ignore
16418 connections without any data transfer.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016419
16420 cR The "timeout http-request" stroke before the client sent a full HTTP
16421 request. This is sometimes caused by too large TCP MSS values on the
16422 client side for PPPoE networks which cannot transport full-sized
16423 packets, or by clients sending requests by hand and not typing fast
16424 enough, or forgetting to enter the empty line at the end of the
Willy Tarreau2705a612014-05-23 17:38:34 +020016425 request. The HTTP status code is likely a 408 here. Note: recently,
Willy Tarreau0f228a02015-05-01 15:37:53 +020016426 some browsers started to implement a "pre-connect" feature consisting
16427 in speculatively connecting to some recently visited web sites just
16428 in case the user would like to visit them. This results in many
16429 connections being established to web sites, which end up in 408
16430 Request Timeout if the timeout strikes first, or 400 Bad Request when
16431 the browser decides to close them first. These ones pollute the log
16432 and feed the error counters. Some versions of some browsers have even
16433 been reported to display the error code. It is possible to work
16434 around the undesirable effects of this behaviour by adding "option
16435 http-ignore-probes" in the frontend, resulting in connections with
16436 zero data transfer to be totally ignored. This will definitely hide
16437 the errors of people experiencing connectivity issues though.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016438
16439 CT The client aborted while its session was tarpitted. It is important to
16440 check if this happens on valid requests, in order to be sure that no
Willy Tarreau55165fe2009-05-10 12:02:55 +020016441 wrong tarpit rules have been written. If a lot of them happen, it
16442 might make sense to lower the "timeout tarpit" value to something
16443 closer to the average reported "Tw" timer, in order not to consume
16444 resources for just a few attackers.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016445
Willy Tarreau570f2212013-06-10 16:42:09 +020016446 LR The request was intercepted and locally handled by haproxy. Generally
16447 it means that this was a redirect or a stats request.
16448
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010016449 SC The server or an equipment between it and haproxy explicitly refused
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016450 the TCP connection (the proxy received a TCP RST or an ICMP message
16451 in return). Under some circumstances, it can also be the network
16452 stack telling the proxy that the server is unreachable (eg: no route,
16453 or no ARP response on local network). When this happens in HTTP mode,
16454 the status code is likely a 502 or 503 here.
16455
16456 sC The "timeout connect" stroke before a connection to the server could
16457 complete. When this happens in HTTP mode, the status code is likely a
16458 503 or 504 here.
16459
16460 SD The connection to the server died with an error during the data
16461 transfer. This usually means that haproxy has received an RST from
16462 the server or an ICMP message from an intermediate equipment while
16463 exchanging data with the server. This can be caused by a server crash
16464 or by a network issue on an intermediate equipment.
16465
16466 sD The server did not send nor acknowledge any data for as long as the
16467 "timeout server" setting during the data phase. This is often caused
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010016468 by too short timeouts on L4 equipments before the server (firewalls,
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016469 load-balancers, ...), as well as keep-alive sessions maintained
16470 between the client and the server expiring first on haproxy.
16471
16472 SH The server aborted before sending its full HTTP response headers, or
16473 it crashed while processing the request. Since a server aborting at
16474 this moment is very rare, it would be wise to inspect its logs to
16475 control whether it crashed and why. The logged request may indicate a
16476 small set of faulty requests, demonstrating bugs in the application.
16477 Sometimes this might also be caused by an IDS killing the connection
16478 between haproxy and the server.
16479
16480 sH The "timeout server" stroke before the server could return its
16481 response headers. This is the most common anomaly, indicating too
16482 long transactions, probably caused by server or database saturation.
16483 The immediate workaround consists in increasing the "timeout server"
16484 setting, but it is important to keep in mind that the user experience
16485 will suffer from these long response times. The only long term
16486 solution is to fix the application.
16487
16488 sQ The session spent too much time in queue and has been expired. See
16489 the "timeout queue" and "timeout connect" settings to find out how to
16490 fix this if it happens too often. If it often happens massively in
16491 short periods, it may indicate general problems on the affected
16492 servers due to I/O or database congestion, or saturation caused by
16493 external attacks.
16494
16495 PC The proxy refused to establish a connection to the server because the
16496 process' socket limit has been reached while attempting to connect.
Cyril Bontédc4d9032012-04-08 21:57:39 +020016497 The global "maxconn" parameter may be increased in the configuration
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016498 so that it does not happen anymore. This status is very rare and
16499 might happen when the global "ulimit-n" parameter is forced by hand.
16500
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010016501 PD The proxy blocked an incorrectly formatted chunked encoded message in
16502 a request or a response, after the server has emitted its headers. In
16503 most cases, this will indicate an invalid message from the server to
Willy Tarreauf3a3e132013-08-31 08:16:26 +020016504 the client. Haproxy supports chunk sizes of up to 2GB - 1 (2147483647
16505 bytes). Any larger size will be considered as an error.
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010016506
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016507 PH The proxy blocked the server's response, because it was invalid,
16508 incomplete, dangerous (cache control), or matched a security filter.
16509 In any case, an HTTP 502 error is sent to the client. One possible
16510 cause for this error is an invalid syntax in an HTTP header name
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010016511 containing unauthorized characters. It is also possible but quite
16512 rare, that the proxy blocked a chunked-encoding request from the
16513 client due to an invalid syntax, before the server responded. In this
16514 case, an HTTP 400 error is sent to the client and reported in the
16515 logs.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016516
16517 PR The proxy blocked the client's HTTP request, either because of an
16518 invalid HTTP syntax, in which case it returned an HTTP 400 error to
16519 the client, or because a deny filter matched, in which case it
16520 returned an HTTP 403 error.
16521
16522 PT The proxy blocked the client's request and has tarpitted its
16523 connection before returning it a 500 server error. Nothing was sent
16524 to the server. The connection was maintained open for as long as
16525 reported by the "Tw" timer field.
16526
16527 RC A local resource has been exhausted (memory, sockets, source ports)
16528 preventing the connection to the server from establishing. The error
16529 logs will tell precisely what was missing. This is very rare and can
16530 only be solved by proper system tuning.
16531
Willy Tarreau996a92c2010-10-13 19:30:47 +020016532The combination of the two last flags gives a lot of information about how
16533persistence was handled by the client, the server and by haproxy. This is very
16534important to troubleshoot disconnections, when users complain they have to
16535re-authenticate. The commonly encountered flags are :
16536
16537 -- Persistence cookie is not enabled.
16538
16539 NN No cookie was provided by the client, none was inserted in the
16540 response. For instance, this can be in insert mode with "postonly"
16541 set on a GET request.
16542
16543 II A cookie designating an invalid server was provided by the client,
16544 a valid one was inserted in the response. This typically happens when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040016545 a "server" entry is removed from the configuration, since its cookie
Willy Tarreau996a92c2010-10-13 19:30:47 +020016546 value can be presented by a client when no other server knows it.
16547
16548 NI No cookie was provided by the client, one was inserted in the
16549 response. This typically happens for first requests from every user
16550 in "insert" mode, which makes it an easy way to count real users.
16551
16552 VN A cookie was provided by the client, none was inserted in the
16553 response. This happens for most responses for which the client has
16554 already got a cookie.
16555
16556 VU A cookie was provided by the client, with a last visit date which is
16557 not completely up-to-date, so an updated cookie was provided in
16558 response. This can also happen if there was no date at all, or if
16559 there was a date but the "maxidle" parameter was not set, so that the
16560 cookie can be switched to unlimited time.
16561
16562 EI A cookie was provided by the client, with a last visit date which is
16563 too old for the "maxidle" parameter, so the cookie was ignored and a
16564 new cookie was inserted in the response.
16565
16566 OI A cookie was provided by the client, with a first visit date which is
16567 too old for the "maxlife" parameter, so the cookie was ignored and a
16568 new cookie was inserted in the response.
16569
16570 DI The server designated by the cookie was down, a new server was
16571 selected and a new cookie was emitted in the response.
16572
16573 VI The server designated by the cookie was not marked dead but could not
16574 be reached. A redispatch happened and selected another one, which was
16575 then advertised in the response.
16576
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016577
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200165788.6. Non-printable characters
16579-----------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016580
16581In order not to cause trouble to log analysis tools or terminals during log
16582consulting, non-printable characters are not sent as-is into log files, but are
16583converted to the two-digits hexadecimal representation of their ASCII code,
16584prefixed by the character '#'. The only characters that can be logged without
16585being escaped are comprised between 32 and 126 (inclusive). Obviously, the
16586escape character '#' itself is also encoded to avoid any ambiguity ("#23"). It
16587is the same for the character '"' which becomes "#22", as well as '{', '|' and
16588'}' when logging headers.
16589
16590Note that the space character (' ') is not encoded in headers, which can cause
16591issues for tools relying on space count to locate fields. A typical header
16592containing spaces is "User-Agent".
16593
16594Last, it has been observed that some syslog daemons such as syslog-ng escape
16595the quote ('"') with a backslash ('\'). The reverse operation can safely be
16596performed since no quote may appear anywhere else in the logs.
16597
16598
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200165998.7. Capturing HTTP cookies
16600---------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016601
16602Cookie capture simplifies the tracking a complete user session. This can be
16603achieved using the "capture cookie" statement in the frontend. Please refer to
Willy Tarreauc57f0e22009-05-10 13:12:33 +020016604section 4.2 for more details. Only one cookie can be captured, and the same
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016605cookie will simultaneously be checked in the request ("Cookie:" header) and in
16606the response ("Set-Cookie:" header). The respective values will be reported in
16607the HTTP logs at the "captured_request_cookie" and "captured_response_cookie"
Willy Tarreauc57f0e22009-05-10 13:12:33 +020016608locations (see section 8.2.3 about HTTP log format). When either cookie is
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016609not seen, a dash ('-') replaces the value. This way, it's easy to detect when a
16610user switches to a new session for example, because the server will reassign it
16611a new cookie. It is also possible to detect if a server unexpectedly sets a
16612wrong cookie to a client, leading to session crossing.
16613
16614 Examples :
16615 # capture the first cookie whose name starts with "ASPSESSION"
16616 capture cookie ASPSESSION len 32
16617
16618 # capture the first cookie whose name is exactly "vgnvisitor"
16619 capture cookie vgnvisitor= len 32
16620
16621
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200166228.8. Capturing HTTP headers
16623---------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016624
16625Header captures are useful to track unique request identifiers set by an upper
16626proxy, virtual host names, user-agents, POST content-length, referrers, etc. In
16627the response, one can search for information about the response length, how the
16628server asked the cache to behave, or an object location during a redirection.
16629
16630Header captures are performed using the "capture request header" and "capture
16631response header" statements in the frontend. Please consult their definition in
Willy Tarreauc57f0e22009-05-10 13:12:33 +020016632section 4.2 for more details.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016633
16634It is possible to include both request headers and response headers at the same
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010016635time. Non-existent headers are logged as empty strings, and if one header
16636appears more than once, only its last occurrence will be logged. Request headers
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016637are grouped within braces '{' and '}' in the same order as they were declared,
16638and delimited with a vertical bar '|' without any space. Response headers
16639follow the same representation, but are displayed after a space following the
16640request headers block. These blocks are displayed just before the HTTP request
16641in the logs.
16642
Willy Tarreaud9ed3d22014-06-13 12:23:06 +020016643As a special case, it is possible to specify an HTTP header capture in a TCP
16644frontend. The purpose is to enable logging of headers which will be parsed in
16645an HTTP backend if the request is then switched to this HTTP backend.
16646
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016647 Example :
16648 # This instance chains to the outgoing proxy
16649 listen proxy-out
16650 mode http
16651 option httplog
16652 option logasap
16653 log global
16654 server cache1 192.168.1.1:3128
16655
16656 # log the name of the virtual server
16657 capture request header Host len 20
16658
16659 # log the amount of data uploaded during a POST
16660 capture request header Content-Length len 10
16661
16662 # log the beginning of the referrer
16663 capture request header Referer len 20
16664
16665 # server name (useful for outgoing proxies only)
16666 capture response header Server len 20
16667
16668 # logging the content-length is useful with "option logasap"
16669 capture response header Content-Length len 10
16670
16671 # log the expected cache behaviour on the response
16672 capture response header Cache-Control len 8
16673
16674 # the Via header will report the next proxy's name
16675 capture response header Via len 20
16676
16677 # log the URL location during a redirection
16678 capture response header Location len 20
16679
16680 >>> Aug 9 20:26:09 localhost \
16681 haproxy[2022]: 127.0.0.1:34014 [09/Aug/2004:20:26:09] proxy-out \
16682 proxy-out/cache1 0/0/0/162/+162 200 +350 - - ---- 0/0/0/0/0 0/0 \
16683 {fr.adserver.yahoo.co||http://fr.f416.mail.} {|864|private||} \
16684 "GET http://fr.adserver.yahoo.com/"
16685
16686 >>> Aug 9 20:30:46 localhost \
16687 haproxy[2022]: 127.0.0.1:34020 [09/Aug/2004:20:30:46] proxy-out \
16688 proxy-out/cache1 0/0/0/182/+182 200 +279 - - ---- 0/0/0/0/0 0/0 \
16689 {w.ods.org||} {Formilux/0.1.8|3495|||} \
Willy Tarreaud72758d2010-01-12 10:42:19 +010016690 "GET http://trafic.1wt.eu/ HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016691
16692 >>> Aug 9 20:30:46 localhost \
16693 haproxy[2022]: 127.0.0.1:34028 [09/Aug/2004:20:30:46] proxy-out \
16694 proxy-out/cache1 0/0/2/126/+128 301 +223 - - ---- 0/0/0/0/0 0/0 \
16695 {www.sytadin.equipement.gouv.fr||http://trafic.1wt.eu/} \
16696 {Apache|230|||http://www.sytadin.} \
Willy Tarreaud72758d2010-01-12 10:42:19 +010016697 "GET http://www.sytadin.equipement.gouv.fr/ HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016698
16699
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200167008.9. Examples of logs
16701---------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016702
16703These are real-world examples of logs accompanied with an explanation. Some of
16704them have been made up by hand. The syslog part has been removed for better
16705reading. Their sole purpose is to explain how to decipher them.
16706
16707 >>> haproxy[674]: 127.0.0.1:33318 [15/Oct/2003:08:31:57.130] px-http \
16708 px-http/srv1 6559/0/7/147/6723 200 243 - - ---- 5/3/3/1/0 0/0 \
16709 "HEAD / HTTP/1.0"
16710
16711 => long request (6.5s) entered by hand through 'telnet'. The server replied
16712 in 147 ms, and the session ended normally ('----')
16713
16714 >>> haproxy[674]: 127.0.0.1:33319 [15/Oct/2003:08:31:57.149] px-http \
16715 px-http/srv1 6559/1230/7/147/6870 200 243 - - ---- 324/239/239/99/0 \
16716 0/9 "HEAD / HTTP/1.0"
16717
16718 => Idem, but the request was queued in the global queue behind 9 other
16719 requests, and waited there for 1230 ms.
16720
16721 >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.654] px-http \
16722 px-http/srv1 9/0/7/14/+30 200 +243 - - ---- 3/3/3/1/0 0/0 \
16723 "GET /image.iso HTTP/1.0"
16724
16725 => request for a long data transfer. The "logasap" option was specified, so
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010016726 the log was produced just before transferring data. The server replied in
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016727 14 ms, 243 bytes of headers were sent to the client, and total time from
16728 accept to first data byte is 30 ms.
16729
16730 >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.925] px-http \
16731 px-http/srv1 9/0/7/14/30 502 243 - - PH-- 3/2/2/0/0 0/0 \
16732 "GET /cgi-bin/bug.cgi? HTTP/1.0"
16733
16734 => the proxy blocked a server response either because of an "rspdeny" or
16735 "rspideny" filter, or because the response was improperly formatted and
Willy Tarreau3c92c5f2011-08-28 09:45:47 +020016736 not HTTP-compliant, or because it blocked sensitive information which
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016737 risked being cached. In this case, the response is replaced with a "502
16738 bad gateway". The flags ("PH--") tell us that it was haproxy who decided
16739 to return the 502 and not the server.
16740
16741 >>> haproxy[18113]: 127.0.0.1:34548 [15/Oct/2003:15:18:55.798] px-http \
Willy Tarreaud72758d2010-01-12 10:42:19 +010016742 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 +010016743
16744 => the client never completed its request and aborted itself ("C---") after
16745 8.5s, while the proxy was waiting for the request headers ("-R--").
16746 Nothing was sent to any server.
16747
16748 >>> haproxy[18113]: 127.0.0.1:34549 [15/Oct/2003:15:19:06.103] px-http \
16749 px-http/<NOSRV> -1/-1/-1/-1/50001 408 0 - - cR-- 2/2/2/0/0 0/0 ""
16750
16751 => The client never completed its request, which was aborted by the
16752 time-out ("c---") after 50s, while the proxy was waiting for the request
16753 headers ("-R--"). Nothing was sent to any server, but the proxy could
16754 send a 408 return code to the client.
16755
16756 >>> haproxy[18989]: 127.0.0.1:34550 [15/Oct/2003:15:24:28.312] px-tcp \
16757 px-tcp/srv1 0/0/5007 0 cD 0/0/0/0/0 0/0
16758
16759 => This log was produced with "option tcplog". The client timed out after
16760 5 seconds ("c----").
16761
16762 >>> haproxy[18989]: 10.0.0.1:34552 [15/Oct/2003:15:26:31.462] px-http \
16763 px-http/srv1 3183/-1/-1/-1/11215 503 0 - - SC-- 205/202/202/115/3 \
Willy Tarreaud72758d2010-01-12 10:42:19 +010016764 0/0 "HEAD / HTTP/1.0"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016765
16766 => The request took 3s to complete (probably a network problem), and the
Willy Tarreauc57f0e22009-05-10 13:12:33 +020016767 connection to the server failed ('SC--') after 4 attempts of 2 seconds
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016768 (config says 'retries 3'), and no redispatch (otherwise we would have
16769 seen "/+3"). Status code 503 was returned to the client. There were 115
16770 connections on this server, 202 connections on this proxy, and 205 on
16771 the global process. It is possible that the server refused the
16772 connection because of too many already established.
Willy Tarreau844e3c52008-01-11 16:28:18 +010016773
Willy Tarreau52b2d222011-09-07 23:48:48 +020016774
Christopher Fauletc3fe5332016-04-07 15:30:10 +0200167759. Supported filters
16776--------------------
16777
16778Here are listed officially supported filters with the list of parameters they
16779accept. Depending on compile options, some of these filters might be
16780unavailable. The list of available filters is reported in haproxy -vv.
16781
16782See also : "filter"
16783
167849.1. Trace
16785----------
16786
Christopher Faulet31bfe1f2016-12-09 17:42:38 +010016787filter trace [name <name>] [random-parsing] [random-forwarding] [hexdump]
Christopher Fauletc3fe5332016-04-07 15:30:10 +020016788
16789 Arguments:
16790 <name> is an arbitrary name that will be reported in
16791 messages. If no name is provided, "TRACE" is used.
16792
16793 <random-parsing> enables the random parsing of data exchanged between
16794 the client and the server. By default, this filter
16795 parses all available data. With this parameter, it
16796 only parses a random amount of the available data.
16797
16798 <random-forwarding> enables the random forwading of parsed data. By
16799 default, this filter forwards all previously parsed
16800 data. With this parameter, it only forwards a random
16801 amount of the parsed data.
16802
Christopher Faulet31bfe1f2016-12-09 17:42:38 +010016803 <hexump> dumps all forwarded data to the server and the client.
16804
Christopher Fauletc3fe5332016-04-07 15:30:10 +020016805This filter can be used as a base to develop new filters. It defines all
16806callbacks and print a message on the standard error stream (stderr) with useful
16807information for all of them. It may be useful to debug the activity of other
16808filters or, quite simply, HAProxy's activity.
16809
16810Using <random-parsing> and/or <random-forwarding> parameters is a good way to
16811tests the behavior of a filter that parses data exchanged between a client and
16812a server by adding some latencies in the processing.
16813
16814
168159.2. HTTP compression
16816---------------------
16817
16818filter compression
16819
16820The HTTP compression has been moved in a filter in HAProxy 1.7. "compression"
16821keyword must still be used to enable and configure the HTTP compression. And
16822when no other filter is used, it is enough. But it is mandatory to explicitly
16823use a filter line to enable the HTTP compression when two or more filters are
16824used for the same listener/frontend/backend. This is important to know the
16825filters evaluation order.
16826
16827See also : "compression"
16828
16829
Christopher Fauletf7e4e7e2016-10-27 22:29:49 +0200168309.3. Stream Processing Offload Engine (SPOE)
16831--------------------------------------------
16832
16833filter spoe [engine <name>] config <file>
16834
16835 Arguments :
16836
16837 <name> is the engine name that will be used to find the right scope in
16838 the configuration file. If not provided, all the file will be
16839 parsed.
16840
16841 <file> is the path of the engine configuration file. This file can
16842 contain configuration of several engines. In this case, each
16843 part must be placed in its own scope.
16844
16845The Stream Processing Offload Engine (SPOE) is a filter communicating with
16846external components. It allows the offload of some specifics processing on the
16847streams in tierce applications. These external components and information
16848exchanged with them are configured in dedicated files, for the main part. It
16849also requires dedicated backends, defined in HAProxy configuration.
16850
16851SPOE communicates with external components using an in-house binary protocol,
16852the Stream Processing Offload Protocol (SPOP).
16853
Tim Düsterhus4896c442016-11-29 02:15:19 +010016854For all information about the SPOE configuration and the SPOP specification, see
Christopher Fauletf7e4e7e2016-10-27 22:29:49 +020016855"doc/SPOE.txt".
16856
16857Important note:
16858 The SPOE filter is highly experimental for now and was not heavily
16859 tested. It is really not production ready. So use it carefully.
16860
Willy Tarreau0ba27502007-12-24 16:55:16 +010016861/*
16862 * Local variables:
16863 * fill-column: 79
16864 * End:
16865 */