blob: 8d0624839481f7c5e0a90974c7b2a403b7155128 [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 Tarreauf08137c2017-10-22 10:13:45 +02007 2017/10/22
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
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200545 - node
Willy Tarreau6a06a402007-07-15 20:15:28 +0200546 - pidfile
Willy Tarreau1d549722016-02-16 12:41:57 +0100547 - presetenv
548 - resetenv
Willy Tarreau6a06a402007-07-15 20:15:28 +0200549 - uid
550 - ulimit-n
551 - user
Willy Tarreau1d549722016-02-16 12:41:57 +0100552 - setenv
Willy Tarreaufbee7132007-10-18 13:53:22 +0200553 - stats
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200554 - ssl-default-bind-ciphers
555 - ssl-default-bind-options
556 - ssl-default-server-ciphers
557 - ssl-default-server-options
558 - ssl-dh-param-file
Emeric Brun850efd52014-01-29 12:24:34 +0100559 - ssl-server-verify
Willy Tarreauceb24bc2010-11-09 12:46:41 +0100560 - unix-bind
Willy Tarreau1d549722016-02-16 12:41:57 +0100561 - unsetenv
Thomas Holmesdb04f192015-05-18 13:21:39 +0100562 - 51degrees-data-file
563 - 51degrees-property-name-list
Dragan Dosen93b38d92015-06-29 16:43:25 +0200564 - 51degrees-property-separator
Dragan Dosenae6d39a2015-06-29 16:43:27 +0200565 - 51degrees-cache-size
scientiamobiled0027ed2016-11-04 10:55:08 +0100566 - wurfl-data-file
567 - wurfl-information-list
568 - wurfl-information-list-separator
569 - wurfl-engine-mode
570 - wurfl-cache-size
571 - wurfl-useragent-priority
Willy Tarreaud72758d2010-01-12 10:42:19 +0100572
Willy Tarreau6a06a402007-07-15 20:15:28 +0200573 * Performance tuning
Willy Tarreau1746eec2014-04-25 10:46:47 +0200574 - max-spread-checks
Willy Tarreau6a06a402007-07-15 20:15:28 +0200575 - maxconn
Willy Tarreau81c25d02011-09-07 15:17:21 +0200576 - maxconnrate
William Lallemandd85f9172012-11-09 17:05:39 +0100577 - maxcomprate
William Lallemand072a2bf2012-11-20 17:01:01 +0100578 - maxcompcpuusage
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100579 - maxpipes
Willy Tarreau93e7c002013-10-07 18:51:07 +0200580 - maxsessrate
Willy Tarreau403edff2012-09-06 11:58:37 +0200581 - maxsslconn
Willy Tarreaue43d5322013-10-07 20:01:52 +0200582 - maxsslrate
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200583 - maxzlibmem
Willy Tarreau6a06a402007-07-15 20:15:28 +0200584 - noepoll
585 - nokqueue
586 - nopoll
Willy Tarreauff4f82d2009-02-06 11:28:13 +0100587 - nosplice
Jarno Huuskonen0e82b922014-04-12 18:22:19 +0300588 - nogetaddrinfo
Lukas Tribusa0bcbdc2016-09-12 21:42:20 +0000589 - noreuseport
Willy Tarreaufe255b72007-10-14 23:09:26 +0200590 - spread-checks
Baptiste Assmann5626f482015-08-23 10:00:10 +0200591 - server-state-base
Baptiste Assmannef1f0fc2015-08-23 10:06:39 +0200592 - server-state-file
Grant Zhang872f9c22017-01-21 01:10:18 +0000593 - ssl-engine
Grant Zhangfa6c7ee2017-01-14 01:42:15 +0000594 - ssl-mode-async
Baptiste Assmann3493d0f2015-10-12 20:21:23 +0200595 - tune.buffers.limit
596 - tune.buffers.reserve
Willy Tarreau27a674e2009-08-17 07:23:33 +0200597 - tune.bufsize
Willy Tarreau43961d52010-10-04 20:39:20 +0200598 - tune.chksize
William Lallemandf3747832012-11-09 12:33:10 +0100599 - tune.comp.maxlevel
Willy Tarreau193b8c62012-11-22 00:17:38 +0100600 - tune.http.cookielen
Stéphane Cottin23e9e932017-05-18 08:58:41 +0200601 - tune.http.logurilen
Willy Tarreauac1932d2011-10-24 19:14:41 +0200602 - tune.http.maxhdr
Willy Tarreau7e312732014-02-12 16:35:14 +0100603 - tune.idletimer
Thierry FOURNIER90da1912015-03-05 11:17:06 +0100604 - tune.lua.forced-yield
Willy Tarreau32f61e22015-03-18 17:54:59 +0100605 - tune.lua.maxmem
Thierry FOURNIER90da1912015-03-05 11:17:06 +0100606 - tune.lua.session-timeout
607 - tune.lua.task-timeout
Thierry FOURNIER7dd784b2015-10-01 14:49:33 +0200608 - tune.lua.service-timeout
Willy Tarreaua0250ba2008-01-06 11:22:57 +0100609 - tune.maxaccept
610 - tune.maxpollevents
Willy Tarreau27a674e2009-08-17 07:23:33 +0200611 - tune.maxrewrite
Willy Tarreauf3045d22015-04-29 16:24:50 +0200612 - tune.pattern.cache-size
Willy Tarreaubd9a0a72011-10-23 21:14:29 +0200613 - tune.pipesize
Willy Tarreaue803de22010-01-21 17:43:04 +0100614 - tune.rcvbuf.client
615 - tune.rcvbuf.server
Willy Tarreaub22fc302015-12-14 12:04:35 +0100616 - tune.recv_enough
Willy Tarreaue803de22010-01-21 17:43:04 +0100617 - tune.sndbuf.client
618 - tune.sndbuf.server
Willy Tarreau6ec58db2012-11-16 16:32:15 +0100619 - tune.ssl.cachesize
Willy Tarreaubfd59462013-02-21 07:46:09 +0100620 - tune.ssl.lifetime
Emeric Brun8dc60392014-05-09 13:52:00 +0200621 - tune.ssl.force-private-cache
Willy Tarreaubfd59462013-02-21 07:46:09 +0100622 - tune.ssl.maxrecord
Remi Gacognef46cd6e2014-06-12 14:58:40 +0200623 - tune.ssl.default-dh-param
Christopher Faulet31af49d2015-06-09 17:29:50 +0200624 - tune.ssl.ssl-ctx-cache-size
Thierry FOURNIER5bf77322017-02-25 12:45:22 +0100625 - tune.ssl.capture-cipherlist-size
Thierry FOURNIER4834bc72015-06-06 19:29:07 +0200626 - tune.vars.global-max-size
Christopher Fauletff2613e2016-11-09 11:36:17 +0100627 - tune.vars.proc-max-size
Thierry FOURNIER4834bc72015-06-06 19:29:07 +0200628 - tune.vars.reqres-max-size
629 - tune.vars.sess-max-size
630 - tune.vars.txn-max-size
William Lallemanda509e4c2012-11-07 16:54:34 +0100631 - tune.zlib.memlevel
632 - tune.zlib.windowsize
Willy Tarreaud72758d2010-01-12 10:42:19 +0100633
Willy Tarreau6a06a402007-07-15 20:15:28 +0200634 * Debugging
635 - debug
636 - quiet
Willy Tarreau6a06a402007-07-15 20:15:28 +0200637
638
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006393.1. Process management and security
Willy Tarreau6a06a402007-07-15 20:15:28 +0200640------------------------------------
641
Emeric Brunc8e8d122012-10-02 18:42:10 +0200642ca-base <dir>
643 Assigns a default directory to fetch SSL CA certificates and CRLs from when a
Emeric Brunfd33a262012-10-11 16:28:27 +0200644 relative path is used with "ca-file" or "crl-file" directives. Absolute
645 locations specified in "ca-file" and "crl-file" prevail and ignore "ca-base".
Emeric Brunc8e8d122012-10-02 18:42:10 +0200646
Willy Tarreau6a06a402007-07-15 20:15:28 +0200647chroot <jail dir>
648 Changes current directory to <jail dir> and performs a chroot() there before
649 dropping privileges. This increases the security level in case an unknown
650 vulnerability would be exploited, since it would make it very hard for the
651 attacker to exploit the system. This only works when the process is started
652 with superuser privileges. It is important to ensure that <jail_dir> is both
653 empty and unwritable to anyone.
Willy Tarreaud72758d2010-01-12 10:42:19 +0100654
Willy Tarreaufc6c0322012-11-16 16:12:27 +0100655cpu-map <"all"|"odd"|"even"|process_num> <cpu-set>...
656 On Linux 2.6 and above, it is possible to bind a process to a specific CPU
657 set. This means that the process will never run on other CPUs. The "cpu-map"
658 directive specifies CPU sets for process sets. The first argument is the
Willy Tarreaua9db57e2013-01-18 11:29:29 +0100659 process number to bind. This process must have a number between 1 and 32 or
660 64, depending on the machine's word size, and any process IDs above nbproc
661 are ignored. It is possible to specify all processes at once using "all",
662 only odd numbers using "odd" or even numbers using "even", just like with the
663 "bind-process" directive. The second and forthcoming arguments are CPU sets.
664 Each CPU set is either a unique number between 0 and 31 or 63 or a range with
665 two such numbers delimited by a dash ('-'). Multiple CPU numbers or ranges
666 may be specified, and the processes will be allowed to bind to all of them.
667 Obviously, multiple "cpu-map" directives may be specified. Each "cpu-map"
668 directive will replace the previous ones when they overlap.
Willy Tarreaufc6c0322012-11-16 16:12:27 +0100669
Emeric Brunc8e8d122012-10-02 18:42:10 +0200670crt-base <dir>
671 Assigns a default directory to fetch SSL certificates from when a relative
672 path is used with "crtfile" directives. Absolute locations specified after
673 "crtfile" prevail and ignore "crt-base".
674
Willy Tarreau6a06a402007-07-15 20:15:28 +0200675daemon
676 Makes the process fork into background. This is the recommended mode of
677 operation. It is equivalent to the command line "-D" argument. It can be
678 disabled by the command line "-db" argument.
679
David Carlier8167f302015-06-01 13:50:06 +0200680deviceatlas-json-file <path>
681 Sets the path of the DeviceAtlas JSON data file to be loaded by the API.
682 The path must be a valid JSON data file and accessible by Haproxy process.
683
684deviceatlas-log-level <value>
685 Sets the level of informations returned by the API. This directive is
686 optional and set to 0 by default if not set.
687
688deviceatlas-separator <char>
689 Sets the character separator for the API properties results. This directive
690 is optional and set to | by default if not set.
691
Cyril Bonté0306c4a2015-10-26 22:37:38 +0100692deviceatlas-properties-cookie <name>
Cyril Bonté307ee1e2015-09-28 23:16:06 +0200693 Sets the client cookie's name used for the detection if the DeviceAtlas
694 Client-side component was used during the request. This directive is optional
695 and set to DAPROPS by default if not set.
David Carlier29b3ca32015-09-25 14:09:21 +0100696
Simon Horman98637e52014-06-20 12:30:16 +0900697external-check
698 Allows the use of an external agent to perform health checks.
699 This is disabled by default as a security precaution.
700 See "option external-check".
701
Willy Tarreau6a06a402007-07-15 20:15:28 +0200702gid <number>
703 Changes the process' group ID to <number>. It is recommended that the group
704 ID is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
705 be started with a user belonging to this group, or with superuser privileges.
Michael Schererab012dd2013-01-12 18:35:19 +0100706 Note that if haproxy is started from a user having supplementary groups, it
707 will only be able to drop these groups if started with superuser privileges.
Willy Tarreau6a06a402007-07-15 20:15:28 +0200708 See also "group" and "uid".
Willy Tarreaud72758d2010-01-12 10:42:19 +0100709
Cyril Bonté203ec5a2017-03-23 22:44:13 +0100710hard-stop-after <time>
711 Defines the maximum time allowed to perform a clean soft-stop.
712
713 Arguments :
714 <time> is the maximum time (by default in milliseconds) for which the
715 instance will remain alive when a soft-stop is received via the
716 SIGUSR1 signal.
717
718 This may be used to ensure that the instance will quit even if connections
719 remain opened during a soft-stop (for example with long timeouts for a proxy
720 in tcp mode). It applies both in TCP and HTTP mode.
721
722 Example:
723 global
724 hard-stop-after 30s
725
Willy Tarreau6a06a402007-07-15 20:15:28 +0200726group <group name>
727 Similar to "gid" but uses the GID of group name <group name> from /etc/group.
728 See also "gid" and "user".
Willy Tarreaud72758d2010-01-12 10:42:19 +0100729
Dragan Dosen7ad31542015-09-28 17:16:47 +0200730log <address> [len <length>] [format <format>] <facility> [max level [min level]]
Willy Tarreau6a06a402007-07-15 20:15:28 +0200731 Adds a global syslog server. Up to two global servers can be defined. They
732 will receive logs for startups and exits, as well as all logs from proxies
Robert Tsai81ae1952007-12-05 10:47:29 +0100733 configured with "log global".
734
735 <address> can be one of:
736
Willy Tarreau2769aa02007-12-27 18:26:09 +0100737 - An IPv4 address optionally followed by a colon and a UDP port. If
Robert Tsai81ae1952007-12-05 10:47:29 +0100738 no port is specified, 514 is used by default (the standard syslog
739 port).
740
David du Colombier24bb5f52011-03-17 10:40:23 +0100741 - An IPv6 address followed by a colon and optionally a UDP port. If
742 no port is specified, 514 is used by default (the standard syslog
743 port).
744
Robert Tsai81ae1952007-12-05 10:47:29 +0100745 - A filesystem path to a UNIX domain socket, keeping in mind
746 considerations for chroot (be sure the path is accessible inside
747 the chroot) and uid/gid (be sure the path is appropriately
748 writeable).
749
William Lallemandb2f07452015-05-12 14:27:13 +0200750 You may want to reference some environment variables in the address
751 parameter, see section 2.3 about environment variables.
Willy Tarreaudad36a32013-03-11 01:20:04 +0100752
Willy Tarreau18324f52014-06-27 18:10:07 +0200753 <length> is an optional maximum line length. Log lines larger than this value
754 will be truncated before being sent. The reason is that syslog
755 servers act differently on log line length. All servers support the
756 default value of 1024, but some servers simply drop larger lines
757 while others do log them. If a server supports long lines, it may
758 make sense to set this value here in order to avoid truncating long
759 lines. Similarly, if a server drops long lines, it is preferable to
760 truncate them before sending them. Accepted values are 80 to 65535
761 inclusive. The default value of 1024 is generally fine for all
762 standard usages. Some specific cases of long captures or
Stéphane Cottin23e9e932017-05-18 08:58:41 +0200763 JSON-formated logs may require larger values. You may also need to
764 increase "tune.http.logurilen" if your request uris are truncated.
Willy Tarreau18324f52014-06-27 18:10:07 +0200765
Dragan Dosen7ad31542015-09-28 17:16:47 +0200766 <format> is the log format used when generating syslog messages. It may be
767 one of the following :
768
769 rfc3164 The RFC3164 syslog message format. This is the default.
770 (https://tools.ietf.org/html/rfc3164)
771
772 rfc5424 The RFC5424 syslog message format.
773 (https://tools.ietf.org/html/rfc5424)
774
Robert Tsai81ae1952007-12-05 10:47:29 +0100775 <facility> must be one of the 24 standard syslog facilities :
Willy Tarreau6a06a402007-07-15 20:15:28 +0200776
777 kern user mail daemon auth syslog lpr news
778 uucp cron auth2 ftp ntp audit alert cron2
779 local0 local1 local2 local3 local4 local5 local6 local7
780
781 An optional level can be specified to filter outgoing messages. By default,
Willy Tarreauf7edefa2009-05-10 17:20:05 +0200782 all messages are sent. If a maximum level is specified, only messages with a
783 severity at least as important as this level will be sent. An optional minimum
784 level can be specified. If it is set, logs emitted with a more severe level
785 than this one will be capped to this level. This is used to avoid sending
786 "emerg" messages on all terminals on some default syslog configurations.
787 Eight levels are known :
Willy Tarreau6a06a402007-07-15 20:15:28 +0200788
Cyril Bontédc4d9032012-04-08 21:57:39 +0200789 emerg alert crit err warning notice info debug
Willy Tarreau6a06a402007-07-15 20:15:28 +0200790
Joe Williamsdf5b38f2010-12-29 17:05:48 +0100791log-send-hostname [<string>]
792 Sets the hostname field in the syslog header. If optional "string" parameter
793 is set the header is set to the string contents, otherwise uses the hostname
794 of the system. Generally used if one is not relaying logs through an
795 intermediate syslog server or for simply customizing the hostname printed in
796 the logs.
797
Kevinm48936af2010-12-22 16:08:21 +0000798log-tag <string>
799 Sets the tag field in the syslog header to this string. It defaults to the
800 program name as launched from the command line, which usually is "haproxy".
801 Sometimes it can be useful to differentiate between multiple processes
Willy Tarreau094af4e2015-01-07 15:03:42 +0100802 running on the same host. See also the per-proxy "log-tag" directive.
Kevinm48936af2010-12-22 16:08:21 +0000803
Thierry FOURNIER90da1912015-03-05 11:17:06 +0100804lua-load <file>
805 This global directive loads and executes a Lua file. This directive can be
806 used multiple times.
807
William Lallemande202b1e2017-06-01 17:38:56 +0200808master-worker [exit-on-failure]
809 Master-worker mode. It is equivalent to the command line "-W" argument.
810 This mode will launch a "master" which will monitor the "workers". Using
811 this mode, you can reload HAProxy directly by sending a SIGUSR2 signal to
812 the master. The master-worker mode is compatible either with the foreground
813 or daemon mode. It is recommended to use this mode with multiprocess and
814 systemd.
815 The "exit-on-failure" option allows the master to kill every workers and
816 exit when one of the current workers died. It is convenient to combine this
817 option with Restart=on-failure in a systemd unit file in order to relaunch
818 the whole process.
819
820 See alors "-W" in the management guide.
821
Willy Tarreau6a06a402007-07-15 20:15:28 +0200822nbproc <number>
823 Creates <number> processes when going daemon. This requires the "daemon"
824 mode. By default, only one process is created, which is the recommended mode
825 of operation. For systems limited to small sets of file descriptors per
826 process, it may be needed to fork multiple daemons. USING MULTIPLE PROCESSES
827 IS HARDER TO DEBUG AND IS REALLY DISCOURAGED. See also "daemon".
828
829pidfile <pidfile>
830 Writes pids of all daemons into file <pidfile>. This option is equivalent to
831 the "-p" command line argument. The file must be accessible to the user
832 starting the process. See also "daemon".
833
Willy Tarreau1d549722016-02-16 12:41:57 +0100834presetenv <name> <value>
835 Sets environment variable <name> to value <value>. If the variable exists, it
836 is NOT overwritten. The changes immediately take effect so that the next line
837 in the configuration file sees the new value. See also "setenv", "resetenv",
838 and "unsetenv".
839
840resetenv [<name> ...]
841 Removes all environment variables except the ones specified in argument. It
842 allows to use a clean controlled environment before setting new values with
843 setenv or unsetenv. Please note that some internal functions may make use of
844 some environment variables, such as time manipulation functions, but also
845 OpenSSL or even external checks. This must be used with extreme care and only
846 after complete validation. The changes immediately take effect so that the
847 next line in the configuration file sees the new environment. See also
848 "setenv", "presetenv", and "unsetenv".
849
Olivier Houchard9679ac92017-10-27 14:58:08 +0200850ssl-allow-0rtt
851 Allow using 0RTT on every listener. 0RTT is prone to various attacks, so be
852 sure to know the security implications before activating it.
853
Willy Tarreaua9db57e2013-01-18 11:29:29 +0100854stats bind-process [ all | odd | even | <number 1-64>[-<number 1-64>] ] ...
Willy Tarreau35b7b162012-10-22 23:17:18 +0200855 Limits the stats socket to a certain set of processes numbers. By default the
856 stats socket is bound to all processes, causing a warning to be emitted when
857 nbproc is greater than 1 because there is no way to select the target process
858 when connecting. However, by using this setting, it becomes possible to pin
859 the stats socket to a specific set of processes, typically the first one. The
860 warning will automatically be disabled when this setting is used, whatever
Willy Tarreaua9db57e2013-01-18 11:29:29 +0100861 the number of processes used. The maximum process ID depends on the machine's
Willy Tarreauae302532014-05-07 19:22:24 +0200862 word size (32 or 64). A better option consists in using the "process" setting
863 of the "stats socket" line to force the process on each line.
Willy Tarreau35b7b162012-10-22 23:17:18 +0200864
Baptiste Assmann5626f482015-08-23 10:00:10 +0200865server-state-base <directory>
866 Specifies the directory prefix to be prepended in front of all servers state
Baptiste Assmann01c6cc32015-08-23 11:45:29 +0200867 file names which do not start with a '/'. See also "server-state-file",
868 "load-server-state-from-file" and "server-state-file-name".
Baptiste Assmannef1f0fc2015-08-23 10:06:39 +0200869
870server-state-file <file>
871 Specifies the path to the file containing state of servers. If the path starts
872 with a slash ('/'), it is considered absolute, otherwise it is considered
873 relative to the directory specified using "server-state-base" (if set) or to
874 the current directory. Before reloading HAProxy, it is possible to save the
875 servers' current state using the stats command "show servers state". The
876 output of this command must be written in the file pointed by <file>. When
877 starting up, before handling traffic, HAProxy will read, load and apply state
878 for each server found in the file and available in its current running
Baptiste Assmann01c6cc32015-08-23 11:45:29 +0200879 configuration. See also "server-state-base" and "show servers state",
880 "load-server-state-from-file" and "server-state-file-name"
Baptiste Assmann5626f482015-08-23 10:00:10 +0200881
Willy Tarreau1d549722016-02-16 12:41:57 +0100882setenv <name> <value>
883 Sets environment variable <name> to value <value>. If the variable exists, it
884 is overwritten. The changes immediately take effect so that the next line in
885 the configuration file sees the new value. See also "presetenv", "resetenv",
886 and "unsetenv".
887
Willy Tarreau610f04b2014-02-13 11:36:41 +0100888ssl-default-bind-ciphers <ciphers>
889 This setting is only available when support for OpenSSL was built in. It sets
890 the default string describing the list of cipher algorithms ("cipher suite")
Jarno Huuskonen0e82b922014-04-12 18:22:19 +0300891 that are negotiated during the SSL/TLS handshake for all "bind" lines which
Willy Tarreau610f04b2014-02-13 11:36:41 +0100892 do not explicitly define theirs. The format of the string is defined in
893 "man 1 ciphers" from OpenSSL man pages, and can be for instance a string such
894 as "AES:ALL:!aNULL:!eNULL:+RC4:@STRENGTH" (without quotes). Please check the
895 "bind" keyword for more information.
896
Emeric Brun2c86cbf2014-10-30 15:56:50 +0100897ssl-default-bind-options [<option>]...
898 This setting is only available when support for OpenSSL was built in. It sets
899 default ssl-options to force on all "bind" lines. Please check the "bind"
900 keyword to see available options.
901
902 Example:
903 global
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +0200904 ssl-default-bind-options ssl-min-ver TLSv1.0 no-tls-tickets
Emeric Brun2c86cbf2014-10-30 15:56:50 +0100905
Willy Tarreau610f04b2014-02-13 11:36:41 +0100906ssl-default-server-ciphers <ciphers>
907 This setting is only available when support for OpenSSL was built in. It
908 sets the default string describing the list of cipher algorithms that are
Jarno Huuskonen0e82b922014-04-12 18:22:19 +0300909 negotiated during the SSL/TLS handshake with the server, for all "server"
Willy Tarreau610f04b2014-02-13 11:36:41 +0100910 lines which do not explicitly define theirs. The format of the string is
911 defined in "man 1 ciphers". Please check the "server" keyword for more
912 information.
913
Emeric Brun2c86cbf2014-10-30 15:56:50 +0100914ssl-default-server-options [<option>]...
915 This setting is only available when support for OpenSSL was built in. It sets
916 default ssl-options to force on all "server" lines. Please check the "server"
917 keyword to see available options.
918
Remi Gacogne47783ef2015-05-29 15:53:22 +0200919ssl-dh-param-file <file>
920 This setting is only available when support for OpenSSL was built in. It sets
921 the default DH parameters that are used during the SSL/TLS handshake when
922 ephemeral Diffie-Hellman (DHE) key exchange is used, for all "bind" lines
923 which do not explicitely define theirs. It will be overridden by custom DH
924 parameters found in a bind certificate file if any. If custom DH parameters
Cyril Bonté307ee1e2015-09-28 23:16:06 +0200925 are not specified either by using ssl-dh-param-file or by setting them
926 directly in the certificate file, pre-generated DH parameters of the size
927 specified by tune.ssl.default-dh-param will be used. Custom parameters are
928 known to be more secure and therefore their use is recommended.
Remi Gacogne47783ef2015-05-29 15:53:22 +0200929 Custom DH parameters may be generated by using the OpenSSL command
930 "openssl dhparam <size>", where size should be at least 2048, as 1024-bit DH
931 parameters should not be considered secure anymore.
932
Emeric Brun850efd52014-01-29 12:24:34 +0100933ssl-server-verify [none|required]
934 The default behavior for SSL verify on servers side. If specified to 'none',
935 servers certificates are not verified. The default is 'required' except if
936 forced using cmdline option '-dV'.
937
Willy Tarreauabb175f2012-09-24 12:43:26 +0200938stats socket [<address:port>|<path>] [param*]
939 Binds a UNIX socket to <path> or a TCPv4/v6 address to <address:port>.
940 Connections to this socket will return various statistics outputs and even
941 allow some commands to be issued to change some runtime settings. Please
Willy Tarreau1af20c72017-06-23 16:01:14 +0200942 consult section 9.3 "Unix Socket commands" of Management Guide for more
Kevin Decherf949c7202015-10-13 23:26:44 +0200943 details.
Willy Tarreau6162db22009-10-10 17:13:00 +0200944
Willy Tarreauabb175f2012-09-24 12:43:26 +0200945 All parameters supported by "bind" lines are supported, for instance to
946 restrict access to some users or their access rights. Please consult
947 section 5.1 for more information.
Willy Tarreaufbee7132007-10-18 13:53:22 +0200948
949stats timeout <timeout, in milliseconds>
950 The default timeout on the stats socket is set to 10 seconds. It is possible
951 to change this value with "stats timeout". The value must be passed in
Willy Tarreaubefdff12007-12-02 22:27:38 +0100952 milliseconds, or be suffixed by a time unit among { us, ms, s, m, h, d }.
Willy Tarreaufbee7132007-10-18 13:53:22 +0200953
954stats maxconn <connections>
955 By default, the stats socket is limited to 10 concurrent connections. It is
956 possible to change this value with "stats maxconn".
957
Willy Tarreau6a06a402007-07-15 20:15:28 +0200958uid <number>
959 Changes the process' user ID to <number>. It is recommended that the user ID
960 is dedicated to HAProxy or to a small set of similar daemons. HAProxy must
961 be started with superuser privileges in order to be able to switch to another
962 one. See also "gid" and "user".
963
964ulimit-n <number>
965 Sets the maximum number of per-process file-descriptors to <number>. By
966 default, it is automatically computed, so it is recommended not to use this
967 option.
968
Willy Tarreauceb24bc2010-11-09 12:46:41 +0100969unix-bind [ prefix <prefix> ] [ mode <mode> ] [ user <user> ] [ uid <uid> ]
970 [ group <group> ] [ gid <gid> ]
971
972 Fixes common settings to UNIX listening sockets declared in "bind" statements.
973 This is mainly used to simplify declaration of those UNIX sockets and reduce
974 the risk of errors, since those settings are most commonly required but are
975 also process-specific. The <prefix> setting can be used to force all socket
976 path to be relative to that directory. This might be needed to access another
977 component's chroot. Note that those paths are resolved before haproxy chroots
978 itself, so they are absolute. The <mode>, <user>, <uid>, <group> and <gid>
979 all have the same meaning as their homonyms used by the "bind" statement. If
980 both are specified, the "bind" statement has priority, meaning that the
981 "unix-bind" settings may be seen as process-wide default settings.
982
Willy Tarreau1d549722016-02-16 12:41:57 +0100983unsetenv [<name> ...]
984 Removes environment variables specified in arguments. This can be useful to
985 hide some sensitive information that are occasionally inherited from the
986 user's environment during some operations. Variables which did not exist are
987 silently ignored so that after the operation, it is certain that none of
988 these variables remain. The changes immediately take effect so that the next
989 line in the configuration file will not see these variables. See also
990 "setenv", "presetenv", and "resetenv".
991
Willy Tarreau6a06a402007-07-15 20:15:28 +0200992user <user name>
993 Similar to "uid" but uses the UID of user name <user name> from /etc/passwd.
994 See also "uid" and "group".
995
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +0200996node <name>
997 Only letters, digits, hyphen and underscore are allowed, like in DNS names.
998
999 This statement is useful in HA configurations where two or more processes or
1000 servers share the same IP address. By setting a different node-name on all
1001 nodes, it becomes easy to immediately spot what server is handling the
1002 traffic.
1003
1004description <text>
1005 Add a text that describes the instance.
1006
1007 Please note that it is required to escape certain characters (# for example)
1008 and this text is inserted into a html page so you should avoid using
1009 "<" and ">" characters.
1010
Thomas Holmesdb04f192015-05-18 13:21:39 +0100101151degrees-data-file <file path>
1012 The path of the 51Degrees data file to provide device detection services. The
1013 file should be unzipped and accessible by HAProxy with relevavnt permissions.
1014
Dragan Dosenae6d39a2015-06-29 16:43:27 +02001015 Please note that this option is only available when haproxy has been
Thomas Holmesdb04f192015-05-18 13:21:39 +01001016 compiled with USE_51DEGREES.
1017
Ben Shillitof25e8e52016-12-02 14:25:37 +0000101851degrees-property-name-list [<string> ...]
Thomas Holmesdb04f192015-05-18 13:21:39 +01001019 A list of 51Degrees property names to be load from the dataset. A full list
1020 of names is available on the 51Degrees website:
1021 https://51degrees.com/resources/property-dictionary
1022
Dragan Dosenae6d39a2015-06-29 16:43:27 +02001023 Please note that this option is only available when haproxy has been
Thomas Holmesdb04f192015-05-18 13:21:39 +01001024 compiled with USE_51DEGREES.
1025
Dragan Dosen93b38d92015-06-29 16:43:25 +0200102651degrees-property-separator <char>
Thomas Holmesdb04f192015-05-18 13:21:39 +01001027 A char that will be appended to every property value in a response header
1028 containing 51Degrees results. If not set that will be set as ','.
1029
Dragan Dosenae6d39a2015-06-29 16:43:27 +02001030 Please note that this option is only available when haproxy has been
1031 compiled with USE_51DEGREES.
1032
103351degrees-cache-size <number>
1034 Sets the size of the 51Degrees converter cache to <number> entries. This
1035 is an LRU cache which reminds previous device detections and their results.
1036 By default, this cache is disabled.
1037
1038 Please note that this option is only available when haproxy has been
Thomas Holmesdb04f192015-05-18 13:21:39 +01001039 compiled with USE_51DEGREES.
1040
scientiamobiled0027ed2016-11-04 10:55:08 +01001041wurfl-data-file <file path>
1042 The path of the WURFL data file to provide device detection services. The
1043 file should be accessible by HAProxy with relevant permissions.
1044
1045 Please note that this option is only available when haproxy has been compiled
1046 with USE_WURFL=1.
1047
1048wurfl-information-list [<capability>]*
1049 A space-delimited list of WURFL capabilities, virtual capabilities, property
1050 names we plan to use in injected headers. A full list of capability and
1051 virtual capability names is available on the Scientiamobile website :
1052
1053 https://www.scientiamobile.com/wurflCapability
1054
1055 Valid WURFL properties are:
1056 - wurfl_id Contains the device ID of the matched device.
1057
1058 - wurfl_root_id Contains the device root ID of the matched
1059 device.
1060
1061 - wurfl_isdevroot Tells if the matched device is a root device.
1062 Possible values are "TRUE" or "FALSE".
1063
1064 - wurfl_useragent The original useragent coming with this
1065 particular web request.
1066
1067 - wurfl_api_version Contains a string representing the currently
1068 used Libwurfl API version.
1069
1070 - wurfl_engine_target Contains a string representing the currently
1071 set WURFL Engine Target. Possible values are
1072 "HIGH_ACCURACY", "HIGH_PERFORMANCE", "INVALID".
1073
1074 - wurfl_info A string containing information on the parsed
1075 wurfl.xml and its full path.
1076
1077 - wurfl_last_load_time Contains the UNIX timestamp of the last time
1078 WURFL has been loaded successfully.
1079
1080 - wurfl_normalized_useragent The normalized useragent.
1081
1082 - wurfl_useragent_priority The user agent priority used by WURFL.
1083
1084 Please note that this option is only available when haproxy has been compiled
1085 with USE_WURFL=1.
1086
1087wurfl-information-list-separator <char>
1088 A char that will be used to separate values in a response header containing
1089 WURFL results. If not set that a comma (',') will be used by default.
1090
1091 Please note that this option is only available when haproxy has been compiled
1092 with USE_WURFL=1.
1093
1094wurfl-patch-file [<file path>]
1095 A list of WURFL patch file paths. Note that patches are loaded during startup
1096 thus before the chroot.
1097
1098 Please note that this option is only available when haproxy has been compiled
1099 with USE_WURFL=1.
1100
1101wurfl-engine-mode { accuracy | performance }
1102 Sets the WURFL engine target. You can choose between 'accuracy' or
1103 'performance' targets. In performance mode, desktop web browser detection is
1104 done programmatically without referencing the WURFL data. As a result, most
1105 desktop web browsers are returned as generic_web_browser WURFL ID for
1106 performance. If either performance or accuracy are not defined, performance
1107 mode is enabled by default.
1108
1109 Please note that this option is only available when haproxy has been compiled
1110 with USE_WURFL=1.
1111
1112wurfl-cache-size <U>[,<D>]
1113 Sets the WURFL caching strategy. Here <U> is the Useragent cache size, and
1114 <D> is the internal device cache size. There are three possibilities here :
1115 - "0" : no cache is used.
1116 - <U> : the Single LRU cache is used, the size is expressed in elements.
1117 - <U>,<D> : the Double LRU cache is used, both sizes are in elements. This is
1118 the highest performing option.
1119
1120 Please note that this option is only available when haproxy has been compiled
1121 with USE_WURFL=1.
1122
1123wurfl-useragent-priority { plain | sideloaded_browser }
1124 Tells WURFL if it should prioritize use of the plain user agent ('plain')
1125 over the default sideloaded browser user agent ('sideloaded_browser').
1126
1127 Please note that this option is only available when haproxy has been compiled
1128 with USE_WURFL=1.
1129
Willy Tarreau6a06a402007-07-15 20:15:28 +02001130
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011313.2. Performance tuning
Willy Tarreau6a06a402007-07-15 20:15:28 +02001132-----------------------
1133
Willy Tarreau1746eec2014-04-25 10:46:47 +02001134max-spread-checks <delay in milliseconds>
1135 By default, haproxy tries to spread the start of health checks across the
1136 smallest health check interval of all the servers in a farm. The principle is
1137 to avoid hammering services running on the same server. But when using large
1138 check intervals (10 seconds or more), the last servers in the farm take some
1139 time before starting to be tested, which can be a problem. This parameter is
1140 used to enforce an upper bound on delay between the first and the last check,
1141 even if the servers' check intervals are larger. When servers run with
1142 shorter intervals, their intervals will be respected though.
1143
Willy Tarreau6a06a402007-07-15 20:15:28 +02001144maxconn <number>
1145 Sets the maximum per-process number of concurrent connections to <number>. It
1146 is equivalent to the command-line argument "-n". Proxies will stop accepting
1147 connections when this limit is reached. The "ulimit-n" parameter is
Willy Tarreau8274e102014-06-19 15:31:25 +02001148 automatically adjusted according to this value. See also "ulimit-n". Note:
1149 the "select" poller cannot reliably use more than 1024 file descriptors on
1150 some platforms. If your platform only supports select and reports "select
1151 FAILED" on startup, you need to reduce maxconn until it works (slightly
Willy Tarreaud0256482015-01-15 21:45:22 +01001152 below 500 in general). If this value is not set, it will default to the value
1153 set in DEFAULT_MAXCONN at build time (reported in haproxy -vv) if no memory
1154 limit is enforced, or will be computed based on the memory limit, the buffer
1155 size, memory allocated to compression, SSL cache size, and use or not of SSL
1156 and the associated maxsslconn (which can also be automatic).
Willy Tarreau6a06a402007-07-15 20:15:28 +02001157
Willy Tarreau81c25d02011-09-07 15:17:21 +02001158maxconnrate <number>
1159 Sets the maximum per-process number of connections per second to <number>.
1160 Proxies will stop accepting connections when this limit is reached. It can be
1161 used to limit the global capacity regardless of each frontend capacity. It is
1162 important to note that this can only be used as a service protection measure,
1163 as there will not necessarily be a fair share between frontends when the
1164 limit is reached, so it's a good idea to also limit each frontend to some
1165 value close to its expected share. Also, lowering tune.maxaccept can improve
1166 fairness.
1167
William Lallemandd85f9172012-11-09 17:05:39 +01001168maxcomprate <number>
1169 Sets the maximum per-process input compression rate to <number> kilobytes
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001170 per second. For each session, if the maximum is reached, the compression
William Lallemandd85f9172012-11-09 17:05:39 +01001171 level will be decreased during the session. If the maximum is reached at the
1172 beginning of a session, the session will not compress at all. If the maximum
1173 is not reached, the compression level will be increased up to
1174 tune.comp.maxlevel. A value of zero means there is no limit, this is the
1175 default value.
1176
William Lallemand072a2bf2012-11-20 17:01:01 +01001177maxcompcpuusage <number>
1178 Sets the maximum CPU usage HAProxy can reach before stopping the compression
1179 for new requests or decreasing the compression level of current requests.
1180 It works like 'maxcomprate' but measures CPU usage instead of incoming data
1181 bandwidth. The value is expressed in percent of the CPU used by haproxy. In
1182 case of multiple processes (nbproc > 1), each process manages its individual
1183 usage. A value of 100 disable the limit. The default value is 100. Setting
1184 a lower value will prevent the compression work from slowing the whole
1185 process down and from introducing high latencies.
1186
Willy Tarreauff4f82d2009-02-06 11:28:13 +01001187maxpipes <number>
1188 Sets the maximum per-process number of pipes to <number>. Currently, pipes
1189 are only used by kernel-based tcp splicing. Since a pipe contains two file
1190 descriptors, the "ulimit-n" value will be increased accordingly. The default
1191 value is maxconn/4, which seems to be more than enough for most heavy usages.
1192 The splice code dynamically allocates and releases pipes, and can fall back
1193 to standard copy, so setting this value too low may only impact performance.
1194
Willy Tarreau93e7c002013-10-07 18:51:07 +02001195maxsessrate <number>
1196 Sets the maximum per-process number of sessions per second to <number>.
1197 Proxies will stop accepting connections when this limit is reached. It can be
1198 used to limit the global capacity regardless of each frontend capacity. It is
1199 important to note that this can only be used as a service protection measure,
1200 as there will not necessarily be a fair share between frontends when the
1201 limit is reached, so it's a good idea to also limit each frontend to some
1202 value close to its expected share. Also, lowering tune.maxaccept can improve
1203 fairness.
1204
Willy Tarreau403edff2012-09-06 11:58:37 +02001205maxsslconn <number>
1206 Sets the maximum per-process number of concurrent SSL connections to
1207 <number>. By default there is no SSL-specific limit, which means that the
1208 global maxconn setting will apply to all connections. Setting this limit
1209 avoids having openssl use too much memory and crash when malloc returns NULL
1210 (since it unfortunately does not reliably check for such conditions). Note
1211 that the limit applies both to incoming and outgoing connections, so one
1212 connection which is deciphered then ciphered accounts for 2 SSL connections.
Willy Tarreaud0256482015-01-15 21:45:22 +01001213 If this value is not set, but a memory limit is enforced, this value will be
1214 automatically computed based on the memory limit, maxconn, the buffer size,
1215 memory allocated to compression, SSL cache size, and use of SSL in either
1216 frontends, backends or both. If neither maxconn nor maxsslconn are specified
1217 when there is a memory limit, haproxy will automatically adjust these values
1218 so that 100% of the connections can be made over SSL with no risk, and will
1219 consider the sides where it is enabled (frontend, backend, both).
Willy Tarreau403edff2012-09-06 11:58:37 +02001220
Willy Tarreaue43d5322013-10-07 20:01:52 +02001221maxsslrate <number>
1222 Sets the maximum per-process number of SSL sessions per second to <number>.
1223 SSL listeners will stop accepting connections when this limit is reached. It
1224 can be used to limit the global SSL CPU usage regardless of each frontend
1225 capacity. It is important to note that this can only be used as a service
1226 protection measure, as there will not necessarily be a fair share between
1227 frontends when the limit is reached, so it's a good idea to also limit each
1228 frontend to some value close to its expected share. It is also important to
1229 note that the sessions are accounted before they enter the SSL stack and not
1230 after, which also protects the stack against bad handshakes. Also, lowering
1231 tune.maxaccept can improve fairness.
1232
William Lallemand9d5f5482012-11-07 16:12:57 +01001233maxzlibmem <number>
1234 Sets the maximum amount of RAM in megabytes per process usable by the zlib.
1235 When the maximum amount is reached, future sessions will not compress as long
1236 as RAM is unavailable. When sets to 0, there is no limit.
William Lallemande3a7d992012-11-20 11:25:20 +01001237 The default value is 0. The value is available in bytes on the UNIX socket
1238 with "show info" on the line "MaxZlibMemUsage", the memory used by zlib is
1239 "ZlibMemUsage" in bytes.
1240
Willy Tarreau6a06a402007-07-15 20:15:28 +02001241noepoll
1242 Disables the use of the "epoll" event polling system on Linux. It is
1243 equivalent to the command-line argument "-de". The next polling system
Willy Tarreaue9f49e72012-11-11 17:42:00 +01001244 used will generally be "poll". See also "nopoll".
Willy Tarreau6a06a402007-07-15 20:15:28 +02001245
1246nokqueue
1247 Disables the use of the "kqueue" event polling system on BSD. It is
1248 equivalent to the command-line argument "-dk". The next polling system
1249 used will generally be "poll". See also "nopoll".
1250
1251nopoll
1252 Disables the use of the "poll" event polling system. It is equivalent to the
1253 command-line argument "-dp". The next polling system used will be "select".
Willy Tarreau0ba27502007-12-24 16:55:16 +01001254 It should never be needed to disable "poll" since it's available on all
Willy Tarreaue9f49e72012-11-11 17:42:00 +01001255 platforms supported by HAProxy. See also "nokqueue" and "noepoll".
Willy Tarreau6a06a402007-07-15 20:15:28 +02001256
Willy Tarreauff4f82d2009-02-06 11:28:13 +01001257nosplice
1258 Disables the use of kernel tcp splicing between sockets on Linux. It is
1259 equivalent to the command line argument "-dS". Data will then be copied
1260 using conventional and more portable recv/send calls. Kernel tcp splicing is
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001261 limited to some very recent instances of kernel 2.6. Most versions between
Willy Tarreauff4f82d2009-02-06 11:28:13 +01001262 2.6.25 and 2.6.28 are buggy and will forward corrupted data, so they must not
1263 be used. This option makes it easier to globally disable kernel splicing in
1264 case of doubt. See also "option splice-auto", "option splice-request" and
1265 "option splice-response".
1266
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001267nogetaddrinfo
1268 Disables the use of getaddrinfo(3) for name resolving. It is equivalent to
1269 the command line argument "-dG". Deprecated gethostbyname(3) will be used.
1270
Lukas Tribusa0bcbdc2016-09-12 21:42:20 +00001271noreuseport
1272 Disables the use of SO_REUSEPORT - see socket(7). It is equivalent to the
1273 command line argument "-dR".
1274
Willy Tarreaufe255b72007-10-14 23:09:26 +02001275spread-checks <0..50, in percent>
Simon Hormand60d6912013-11-25 10:46:36 +09001276 Sometimes it is desirable to avoid sending agent and health checks to
1277 servers at exact intervals, for instance when many logical servers are
1278 located on the same physical server. With the help of this parameter, it
1279 becomes possible to add some randomness in the check interval between 0
1280 and +/- 50%. A value between 2 and 5 seems to show good results. The
1281 default value remains at 0.
Willy Tarreaufe255b72007-10-14 23:09:26 +02001282
Grant Zhang872f9c22017-01-21 01:10:18 +00001283ssl-engine <name> [algo <comma-seperated list of algorithms>]
1284 Sets the OpenSSL engine to <name>. List of valid values for <name> may be
1285 obtained using the command "openssl engine". This statement may be used
1286 multiple times, it will simply enable multiple crypto engines. Referencing an
1287 unsupported engine will prevent haproxy from starting. Note that many engines
1288 will lead to lower HTTPS performance than pure software with recent
1289 processors. The optional command "algo" sets the default algorithms an ENGINE
1290 will supply using the OPENSSL function ENGINE_set_default_string(). A value
1291 of "ALL" uses the engine for all cryptographic operations. If no list of
1292 algo is specified then the value of "ALL" is used. A comma-seperated list
1293 of different algorithms may be specified, including: RSA, DSA, DH, EC, RAND,
1294 CIPHERS, DIGESTS, PKEY, PKEY_CRYPTO, PKEY_ASN1. This is the same format that
1295 openssl configuration file uses:
1296 https://www.openssl.org/docs/man1.0.2/apps/config.html
1297
Grant Zhangfa6c7ee2017-01-14 01:42:15 +00001298ssl-mode-async
1299 Adds SSL_MODE_ASYNC mode to the SSL context. This enables asynchronous TLS
Emeric Brun3854e012017-05-17 20:42:48 +02001300 I/O operations if asynchronous capable SSL engines are used. The current
Emeric Brunb5e42a82017-06-06 12:35:14 +00001301 implementation supports a maximum of 32 engines. The Openssl ASYNC API
1302 doesn't support moving read/write buffers and is not compliant with
1303 haproxy's buffer management. So the asynchronous mode is disabled on
1304 read/write operations (it is only enabled during initial and reneg
1305 handshakes).
Grant Zhangfa6c7ee2017-01-14 01:42:15 +00001306
Willy Tarreau33cb0652014-12-23 22:52:37 +01001307tune.buffers.limit <number>
1308 Sets a hard limit on the number of buffers which may be allocated per process.
1309 The default value is zero which means unlimited. The minimum non-zero value
1310 will always be greater than "tune.buffers.reserve" and should ideally always
1311 be about twice as large. Forcing this value can be particularly useful to
1312 limit the amount of memory a process may take, while retaining a sane
1313 behaviour. When this limit is reached, sessions which need a buffer wait for
1314 another one to be released by another session. Since buffers are dynamically
1315 allocated and released, the waiting time is very short and not perceptible
1316 provided that limits remain reasonable. In fact sometimes reducing the limit
1317 may even increase performance by increasing the CPU cache's efficiency. Tests
1318 have shown good results on average HTTP traffic with a limit to 1/10 of the
1319 expected global maxconn setting, which also significantly reduces memory
1320 usage. The memory savings come from the fact that a number of connections
1321 will not allocate 2*tune.bufsize. It is best not to touch this value unless
1322 advised to do so by an haproxy core developer.
1323
Willy Tarreau1058ae72014-12-23 22:40:40 +01001324tune.buffers.reserve <number>
1325 Sets the number of buffers which are pre-allocated and reserved for use only
1326 during memory shortage conditions resulting in failed memory allocations. The
1327 minimum value is 2 and is also the default. There is no reason a user would
1328 want to change this value, it's mostly aimed at haproxy core developers.
1329
Willy Tarreau27a674e2009-08-17 07:23:33 +02001330tune.bufsize <number>
1331 Sets the buffer size to this size (in bytes). Lower values allow more
1332 sessions to coexist in the same amount of RAM, and higher values allow some
1333 applications with very large cookies to work. The default value is 16384 and
1334 can be changed at build time. It is strongly recommended not to change this
1335 from the default value, as very low values will break some services such as
1336 statistics, and values larger than default size will increase memory usage,
1337 possibly causing the system to run out of memory. At least the global maxconn
1338 parameter should be decreased by the same factor as this one is increased.
Dmitry Sivachenkof6f4f7b2012-10-21 18:10:25 +04001339 If HTTP request is larger than (tune.bufsize - tune.maxrewrite), haproxy will
1340 return HTTP 400 (Bad Request) error. Similarly if an HTTP response is larger
1341 than this size, haproxy will return HTTP 502 (Bad Gateway).
Willy Tarreau27a674e2009-08-17 07:23:33 +02001342
Willy Tarreau43961d52010-10-04 20:39:20 +02001343tune.chksize <number>
1344 Sets the check buffer size to this size (in bytes). Higher values may help
1345 find string or regex patterns in very large pages, though doing so may imply
1346 more memory and CPU usage. The default value is 16384 and can be changed at
1347 build time. It is not recommended to change this value, but to use better
1348 checks whenever possible.
1349
William Lallemandf3747832012-11-09 12:33:10 +01001350tune.comp.maxlevel <number>
1351 Sets the maximum compression level. The compression level affects CPU
1352 usage during compression. This value affects CPU usage during compression.
1353 Each session using compression initializes the compression algorithm with
1354 this value. The default value is 1.
1355
Willy Tarreau193b8c62012-11-22 00:17:38 +01001356tune.http.cookielen <number>
1357 Sets the maximum length of captured cookies. This is the maximum value that
1358 the "capture cookie xxx len yyy" will be allowed to take, and any upper value
1359 will automatically be truncated to this one. It is important not to set too
1360 high a value because all cookie captures still allocate this size whatever
1361 their configured value (they share a same pool). This value is per request
1362 per response, so the memory allocated is twice this value per connection.
1363 When not specified, the limit is set to 63 characters. It is recommended not
1364 to change this value.
1365
Stéphane Cottin23e9e932017-05-18 08:58:41 +02001366tune.http.logurilen <number>
1367 Sets the maximum length of request uri in logs. This prevent to truncate long
1368 requests uris with valuable query strings in log lines. This is not related
1369 to syslog limits. If you increase this limit, you may also increase the
1370 'log ... len yyyy' parameter. Your syslog deamon may also need specific
1371 configuration directives too.
1372 The default value is 1024.
1373
Willy Tarreauac1932d2011-10-24 19:14:41 +02001374tune.http.maxhdr <number>
1375 Sets the maximum number of headers in a request. When a request comes with a
1376 number of headers greater than this value (including the first line), it is
1377 rejected with a "400 Bad Request" status code. Similarly, too large responses
1378 are blocked with "502 Bad Gateway". The default value is 101, which is enough
1379 for all usages, considering that the widely deployed Apache server uses the
1380 same limit. It can be useful to push this limit further to temporarily allow
Christopher Faulet50174f32017-06-21 16:31:35 +02001381 a buggy application to work by the time it gets fixed. The accepted range is
1382 1..32767. Keep in mind that each new header consumes 32bits of memory for
1383 each session, so don't push this limit too high.
Willy Tarreauac1932d2011-10-24 19:14:41 +02001384
Willy Tarreau7e312732014-02-12 16:35:14 +01001385tune.idletimer <timeout>
1386 Sets the duration after which haproxy will consider that an empty buffer is
1387 probably associated with an idle stream. This is used to optimally adjust
1388 some packet sizes while forwarding large and small data alternatively. The
1389 decision to use splice() or to send large buffers in SSL is modulated by this
1390 parameter. The value is in milliseconds between 0 and 65535. A value of zero
1391 means that haproxy will not try to detect idle streams. The default is 1000,
1392 which seems to correctly detect end user pauses (eg: read a page before
1393 clicking). There should be not reason for changing this value. Please check
1394 tune.ssl.maxrecord below.
1395
Thierry FOURNIER90da1912015-03-05 11:17:06 +01001396tune.lua.forced-yield <number>
1397 This directive forces the Lua engine to execute a yield each <number> of
Tim Düsterhus4896c442016-11-29 02:15:19 +01001398 instructions executed. This permits interrupting a long script and allows the
Thierry FOURNIER90da1912015-03-05 11:17:06 +01001399 HAProxy scheduler to process other tasks like accepting connections or
1400 forwarding traffic. The default value is 10000 instructions. If HAProxy often
1401 executes some Lua code but more reactivity is required, this value can be
1402 lowered. If the Lua code is quite long and its result is absolutely required
1403 to process the data, the <number> can be increased.
1404
Willy Tarreau32f61e22015-03-18 17:54:59 +01001405tune.lua.maxmem
1406 Sets the maximum amount of RAM in megabytes per process usable by Lua. By
1407 default it is zero which means unlimited. It is important to set a limit to
1408 ensure that a bug in a script will not result in the system running out of
1409 memory.
1410
Thierry FOURNIER90da1912015-03-05 11:17:06 +01001411tune.lua.session-timeout <timeout>
1412 This is the execution timeout for the Lua sessions. This is useful for
Thierry FOURNIER7dd784b2015-10-01 14:49:33 +02001413 preventing infinite loops or spending too much time in Lua. This timeout
1414 counts only the pure Lua runtime. If the Lua does a sleep, the sleep is
1415 not taked in account. The default timeout is 4s.
Thierry FOURNIER90da1912015-03-05 11:17:06 +01001416
1417tune.lua.task-timeout <timeout>
1418 Purpose is the same as "tune.lua.session-timeout", but this timeout is
1419 dedicated to the tasks. By default, this timeout isn't set because a task may
1420 remain alive during of the lifetime of HAProxy. For example, a task used to
1421 check servers.
1422
Thierry FOURNIER7dd784b2015-10-01 14:49:33 +02001423tune.lua.service-timeout <timeout>
1424 This is the execution timeout for the Lua services. This is useful for
1425 preventing infinite loops or spending too much time in Lua. This timeout
1426 counts only the pure Lua runtime. If the Lua does a sleep, the sleep is
1427 not taked in account. The default timeout is 4s.
1428
Willy Tarreaua0250ba2008-01-06 11:22:57 +01001429tune.maxaccept <number>
Willy Tarreau16a21472012-11-19 12:39:59 +01001430 Sets the maximum number of consecutive connections a process may accept in a
1431 row before switching to other work. In single process mode, higher numbers
1432 give better performance at high connection rates. However in multi-process
1433 modes, keeping a bit of fairness between processes generally is better to
1434 increase performance. This value applies individually to each listener, so
1435 that the number of processes a listener is bound to is taken into account.
1436 This value defaults to 64. In multi-process mode, it is divided by twice
1437 the number of processes the listener is bound to. Setting this value to -1
1438 completely disables the limitation. It should normally not be needed to tweak
1439 this value.
Willy Tarreaua0250ba2008-01-06 11:22:57 +01001440
1441tune.maxpollevents <number>
1442 Sets the maximum amount of events that can be processed at once in a call to
1443 the polling system. The default value is adapted to the operating system. It
1444 has been noticed that reducing it below 200 tends to slightly decrease
1445 latency at the expense of network bandwidth, and increasing it above 200
1446 tends to trade latency for slightly increased bandwidth.
1447
Willy Tarreau27a674e2009-08-17 07:23:33 +02001448tune.maxrewrite <number>
1449 Sets the reserved buffer space to this size in bytes. The reserved space is
1450 used for header rewriting or appending. The first reads on sockets will never
1451 fill more than bufsize-maxrewrite. Historically it has defaulted to half of
1452 bufsize, though that does not make much sense since there are rarely large
1453 numbers of headers to add. Setting it too high prevents processing of large
1454 requests or responses. Setting it too low prevents addition of new headers
1455 to already large requests or to POST requests. It is generally wise to set it
1456 to about 1024. It is automatically readjusted to half of bufsize if it is
1457 larger than that. This means you don't have to worry about it when changing
1458 bufsize.
1459
Willy Tarreauf3045d22015-04-29 16:24:50 +02001460tune.pattern.cache-size <number>
1461 Sets the size of the pattern lookup cache to <number> entries. This is an LRU
1462 cache which reminds previous lookups and their results. It is used by ACLs
1463 and maps on slow pattern lookups, namely the ones using the "sub", "reg",
1464 "dir", "dom", "end", "bin" match methods as well as the case-insensitive
1465 strings. It applies to pattern expressions which means that it will be able
1466 to memorize the result of a lookup among all the patterns specified on a
1467 configuration line (including all those loaded from files). It automatically
1468 invalidates entries which are updated using HTTP actions or on the CLI. The
1469 default cache size is set to 10000 entries, which limits its footprint to
1470 about 5 MB on 32-bit systems and 8 MB on 64-bit systems. There is a very low
1471 risk of collision in this cache, which is in the order of the size of the
1472 cache divided by 2^64. Typically, at 10000 requests per second with the
1473 default cache size of 10000 entries, there's 1% chance that a brute force
1474 attack could cause a single collision after 60 years, or 0.1% after 6 years.
1475 This is considered much lower than the risk of a memory corruption caused by
1476 aging components. If this is not acceptable, the cache can be disabled by
1477 setting this parameter to 0.
1478
Willy Tarreaubd9a0a72011-10-23 21:14:29 +02001479tune.pipesize <number>
1480 Sets the kernel pipe buffer size to this size (in bytes). By default, pipes
1481 are the default size for the system. But sometimes when using TCP splicing,
1482 it can improve performance to increase pipe sizes, especially if it is
1483 suspected that pipes are not filled and that many calls to splice() are
1484 performed. This has an impact on the kernel's memory footprint, so this must
1485 not be changed if impacts are not understood.
1486
Willy Tarreaue803de22010-01-21 17:43:04 +01001487tune.rcvbuf.client <number>
1488tune.rcvbuf.server <number>
1489 Forces the kernel socket receive buffer size on the client or the server side
1490 to the specified value in bytes. This value applies to all TCP/HTTP frontends
1491 and backends. It should normally never be set, and the default size (0) lets
1492 the kernel autotune this value depending on the amount of available memory.
1493 However it can sometimes help to set it to very low values (eg: 4096) in
1494 order to save kernel memory by preventing it from buffering too large amounts
1495 of received data. Lower values will significantly increase CPU usage though.
1496
Willy Tarreaub22fc302015-12-14 12:04:35 +01001497tune.recv_enough <number>
1498 Haproxy uses some hints to detect that a short read indicates the end of the
1499 socket buffers. One of them is that a read returns more than <recv_enough>
1500 bytes, which defaults to 10136 (7 segments of 1448 each). This default value
1501 may be changed by this setting to better deal with workloads involving lots
1502 of short messages such as telnet or SSH sessions.
1503
Willy Tarreaue803de22010-01-21 17:43:04 +01001504tune.sndbuf.client <number>
1505tune.sndbuf.server <number>
1506 Forces the kernel socket send buffer size on the client or the server side to
1507 the specified value in bytes. This value applies to all TCP/HTTP frontends
1508 and backends. It should normally never be set, and the default size (0) lets
1509 the kernel autotune this value depending on the amount of available memory.
1510 However it can sometimes help to set it to very low values (eg: 4096) in
1511 order to save kernel memory by preventing it from buffering too large amounts
1512 of received data. Lower values will significantly increase CPU usage though.
1513 Another use case is to prevent write timeouts with extremely slow clients due
1514 to the kernel waiting for a large part of the buffer to be read before
1515 notifying haproxy again.
1516
Willy Tarreau6ec58db2012-11-16 16:32:15 +01001517tune.ssl.cachesize <number>
Emeric Brunaf9619d2012-11-28 18:47:52 +01001518 Sets the size of the global SSL session cache, in a number of blocks. A block
1519 is large enough to contain an encoded session without peer certificate.
1520 An encoded session with peer certificate is stored in multiple blocks
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001521 depending on the size of the peer certificate. A block uses approximately
Emeric Brunaf9619d2012-11-28 18:47:52 +01001522 200 bytes of memory. The default value may be forced at build time, otherwise
1523 defaults to 20000. When the cache is full, the most idle entries are purged
1524 and reassigned. Higher values reduce the occurrence of such a purge, hence
1525 the number of CPU-intensive SSL handshakes by ensuring that all users keep
1526 their session as long as possible. All entries are pre-allocated upon startup
Emeric Brun22890a12012-12-28 14:41:32 +01001527 and are shared between all processes if "nbproc" is greater than 1. Setting
1528 this value to 0 disables the SSL session cache.
Willy Tarreau6ec58db2012-11-16 16:32:15 +01001529
Emeric Brun8dc60392014-05-09 13:52:00 +02001530tune.ssl.force-private-cache
1531 This boolean disables SSL session cache sharing between all processes. It
1532 should normally not be used since it will force many renegotiations due to
1533 clients hitting a random process. But it may be required on some operating
1534 systems where none of the SSL cache synchronization method may be used. In
1535 this case, adding a first layer of hash-based load balancing before the SSL
1536 layer might limit the impact of the lack of session sharing.
1537
Emeric Brun4f65bff2012-11-16 15:11:00 +01001538tune.ssl.lifetime <timeout>
1539 Sets how long a cached SSL session may remain valid. This time is expressed
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001540 in seconds and defaults to 300 (5 min). It is important to understand that it
Emeric Brun4f65bff2012-11-16 15:11:00 +01001541 does not guarantee that sessions will last that long, because if the cache is
1542 full, the longest idle sessions will be purged despite their configured
1543 lifetime. The real usefulness of this setting is to prevent sessions from
1544 being used for too long.
1545
Willy Tarreaubfd59462013-02-21 07:46:09 +01001546tune.ssl.maxrecord <number>
1547 Sets the maximum amount of bytes passed to SSL_write() at a time. Default
1548 value 0 means there is no limit. Over SSL/TLS, the client can decipher the
1549 data only once it has received a full record. With large records, it means
1550 that clients might have to download up to 16kB of data before starting to
1551 process them. Limiting the value can improve page load times on browsers
1552 located over high latency or low bandwidth networks. It is suggested to find
1553 optimal values which fit into 1 or 2 TCP segments (generally 1448 bytes over
1554 Ethernet with TCP timestamps enabled, or 1460 when timestamps are disabled),
1555 keeping in mind that SSL/TLS add some overhead. Typical values of 1419 and
1556 2859 gave good results during tests. Use "strace -e trace=write" to find the
Willy Tarreau7e312732014-02-12 16:35:14 +01001557 best value. Haproxy will automatically switch to this setting after an idle
1558 stream has been detected (see tune.idletimer above).
Willy Tarreaubfd59462013-02-21 07:46:09 +01001559
Remi Gacognef46cd6e2014-06-12 14:58:40 +02001560tune.ssl.default-dh-param <number>
1561 Sets the maximum size of the Diffie-Hellman parameters used for generating
1562 the ephemeral/temporary Diffie-Hellman key in case of DHE key exchange. The
1563 final size will try to match the size of the server's RSA (or DSA) key (e.g,
1564 a 2048 bits temporary DH key for a 2048 bits RSA key), but will not exceed
1565 this maximum value. Default value if 1024. Only 1024 or higher values are
1566 allowed. Higher values will increase the CPU load, and values greater than
1567 1024 bits are not supported by Java 7 and earlier clients. This value is not
Remi Gacogne47783ef2015-05-29 15:53:22 +02001568 used if static Diffie-Hellman parameters are supplied either directly
1569 in the certificate file or by using the ssl-dh-param-file parameter.
Remi Gacognef46cd6e2014-06-12 14:58:40 +02001570
Christopher Faulet31af49d2015-06-09 17:29:50 +02001571tune.ssl.ssl-ctx-cache-size <number>
1572 Sets the size of the cache used to store generated certificates to <number>
1573 entries. This is a LRU cache. Because generating a SSL certificate
1574 dynamically is expensive, they are cached. The default cache size is set to
1575 1000 entries.
1576
Thierry FOURNIER5bf77322017-02-25 12:45:22 +01001577tune.ssl.capture-cipherlist-size <number>
1578 Sets the maximum size of the buffer used for capturing client-hello cipher
1579 list. If the value is 0 (default value) the capture is disabled, otherwise
1580 a buffer is allocated for each SSL/TLS connection.
1581
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02001582tune.vars.global-max-size <size>
Christopher Fauletff2613e2016-11-09 11:36:17 +01001583tune.vars.proc-max-size <size>
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02001584tune.vars.reqres-max-size <size>
1585tune.vars.sess-max-size <size>
1586tune.vars.txn-max-size <size>
Christopher Fauletff2613e2016-11-09 11:36:17 +01001587 These five tunes help to manage the maximum amount of memory used by the
1588 variables system. "global" limits the overall amount of memory available for
1589 all scopes. "proc" limits the memory for the process scope, "sess" limits the
1590 memory for the session scope, "txn" for the transaction scope, and "reqres"
1591 limits the memory for each request or response processing.
1592 Memory accounting is hierarchical, meaning more coarse grained limits include
1593 the finer grained ones: "proc" includes "sess", "sess" includes "txn", and
1594 "txn" includes "reqres".
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02001595
Daniel Schneller0b547052016-03-21 20:46:57 +01001596 For example, when "tune.vars.sess-max-size" is limited to 100,
1597 "tune.vars.txn-max-size" and "tune.vars.reqres-max-size" cannot exceed
1598 100 either. If we create a variable "txn.var" that contains 100 bytes,
1599 all available space is consumed.
1600 Notice that exceeding the limits at runtime will not result in an error
1601 message, but values might be cut off or corrupted. So make sure to accurately
1602 plan for the amount of space needed to store all your variables.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02001603
William Lallemanda509e4c2012-11-07 16:54:34 +01001604tune.zlib.memlevel <number>
1605 Sets the memLevel parameter in zlib initialization for each session. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001606 defines how much memory should be allocated for the internal compression
William Lallemanda509e4c2012-11-07 16:54:34 +01001607 state. A value of 1 uses minimum memory but is slow and reduces compression
1608 ratio, a value of 9 uses maximum memory for optimal speed. Can be a value
1609 between 1 and 9. The default value is 8.
1610
1611tune.zlib.windowsize <number>
1612 Sets the window size (the size of the history buffer) as a parameter of the
1613 zlib initialization for each session. Larger values of this parameter result
1614 in better compression at the expense of memory usage. Can be a value between
1615 8 and 15. The default value is 15.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001616
Willy Tarreauc57f0e22009-05-10 13:12:33 +020016173.3. Debugging
1618--------------
Willy Tarreau6a06a402007-07-15 20:15:28 +02001619
1620debug
1621 Enables debug mode which dumps to stdout all exchanges, and disables forking
1622 into background. It is the equivalent of the command-line argument "-d". It
1623 should never be used in a production configuration since it may prevent full
1624 system startup.
1625
1626quiet
1627 Do not display any message during startup. It is equivalent to the command-
1628 line argument "-q".
1629
Emeric Brunf099e792010-09-27 12:05:28 +02001630
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +010016313.4. Userlists
1632--------------
1633It is possible to control access to frontend/backend/listen sections or to
1634http stats by allowing only authenticated and authorized users. To do this,
1635it is required to create at least one userlist and to define users.
1636
1637userlist <listname>
Cyril Bonté78caf842010-03-10 22:41:43 +01001638 Creates new userlist with name <listname>. Many independent userlists can be
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001639 used to store authentication & authorization data for independent customers.
1640
1641group <groupname> [users <user>,<user>,(...)]
Cyril Bonté78caf842010-03-10 22:41:43 +01001642 Adds group <groupname> to the current userlist. It is also possible to
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001643 attach users to this group by using a comma separated list of names
1644 proceeded by "users" keyword.
1645
Cyril Bontéf0c60612010-02-06 14:44:47 +01001646user <username> [password|insecure-password <password>]
1647 [groups <group>,<group>,(...)]
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001648 Adds user <username> to the current userlist. Both secure (encrypted) and
1649 insecure (unencrypted) passwords can be used. Encrypted passwords are
Cyril Bonté78caf842010-03-10 22:41:43 +01001650 evaluated using the crypt(3) function so depending of the system's
1651 capabilities, different algorithms are supported. For example modern Glibc
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001652 based Linux system supports MD5, SHA-256, SHA-512 and of course classic,
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03001653 DES-based method of encrypting passwords.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001654
1655
1656 Example:
Cyril Bontéf0c60612010-02-06 14:44:47 +01001657 userlist L1
1658 group G1 users tiger,scott
1659 group G2 users xdb,scott
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001660
Cyril Bontéf0c60612010-02-06 14:44:47 +01001661 user tiger password $6$k6y3o.eP$JlKBx9za9667qe4(...)xHSwRv6J.C0/D7cV91
1662 user scott insecure-password elgato
1663 user xdb insecure-password hello
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001664
Cyril Bontéf0c60612010-02-06 14:44:47 +01001665 userlist L2
1666 group G1
1667 group G2
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001668
Cyril Bontéf0c60612010-02-06 14:44:47 +01001669 user tiger password $6$k6y3o.eP$JlKBx(...)xHSwRv6J.C0/D7cV91 groups G1
1670 user scott insecure-password elgato groups G1,G2
1671 user xdb insecure-password hello groups G2
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01001672
1673 Please note that both lists are functionally identical.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001674
Emeric Brunf099e792010-09-27 12:05:28 +02001675
16763.5. Peers
Cyril Bontédc4d9032012-04-08 21:57:39 +02001677----------
Emeric Brun94900952015-06-11 18:25:54 +02001678It is possible to propagate entries of any data-types in stick-tables between
1679several haproxy instances over TCP connections in a multi-master fashion. Each
1680instance pushes its local updates and insertions to remote peers. The pushed
1681values overwrite remote ones without aggregation. Interrupted exchanges are
1682automatically detected and recovered from the last known point.
1683In addition, during a soft restart, the old process connects to the new one
1684using such a TCP connection to push all its entries before the new process
1685tries to connect to other peers. That ensures very fast replication during a
1686reload, it typically takes a fraction of a second even for large tables.
1687Note that Server IDs are used to identify servers remotely, so it is important
1688that configurations look similar or at least that the same IDs are forced on
1689each server on all participants.
Emeric Brunf099e792010-09-27 12:05:28 +02001690
1691peers <peersect>
Jamie Gloudon801a0a32012-08-25 00:18:33 -04001692 Creates a new peer list with name <peersect>. It is an independent section,
Emeric Brunf099e792010-09-27 12:05:28 +02001693 which is referenced by one or more stick-tables.
1694
Willy Tarreau77e4bd12015-05-01 20:02:17 +02001695disabled
1696 Disables a peers section. It disables both listening and any synchronization
1697 related to this section. This is provided to disable synchronization of stick
1698 tables without having to comment out all "peers" references.
1699
1700enable
1701 This re-enables a disabled peers section which was previously disabled.
1702
Emeric Brunf099e792010-09-27 12:05:28 +02001703peer <peername> <ip>:<port>
1704 Defines a peer inside a peers section.
1705 If <peername> is set to the local peer name (by default hostname, or forced
1706 using "-L" command line option), haproxy will listen for incoming remote peer
1707 connection on <ip>:<port>. Otherwise, <ip>:<port> defines where to connect to
1708 to join the remote peer, and <peername> is used at the protocol level to
1709 identify and validate the remote peer on the server side.
1710
1711 During a soft restart, local peer <ip>:<port> is used by the old instance to
1712 connect the new one and initiate a complete replication (teaching process).
1713
1714 It is strongly recommended to have the exact same peers declaration on all
1715 peers and to only rely on the "-L" command line argument to change the local
1716 peer name. This makes it easier to maintain coherent configuration files
1717 across all peers.
1718
William Lallemandb2f07452015-05-12 14:27:13 +02001719 You may want to reference some environment variables in the address
1720 parameter, see section 2.3 about environment variables.
Willy Tarreaudad36a32013-03-11 01:20:04 +01001721
Cyril Bontédc4d9032012-04-08 21:57:39 +02001722 Example:
Emeric Brunf099e792010-09-27 12:05:28 +02001723 peers mypeers
Willy Tarreauf7b30a92010-12-06 22:59:17 +01001724 peer haproxy1 192.168.0.1:1024
1725 peer haproxy2 192.168.0.2:1024
1726 peer haproxy3 10.2.0.1:1024
Emeric Brunf099e792010-09-27 12:05:28 +02001727
1728 backend mybackend
1729 mode tcp
1730 balance roundrobin
1731 stick-table type ip size 20k peers mypeers
1732 stick on src
1733
Willy Tarreauf7b30a92010-12-06 22:59:17 +01001734 server srv1 192.168.0.30:80
1735 server srv2 192.168.0.31:80
Emeric Brunf099e792010-09-27 12:05:28 +02001736
1737
Simon Horman51a1cf62015-02-03 13:00:44 +090017383.6. Mailers
1739------------
1740It is possible to send email alerts when the state of servers changes.
1741If configured email alerts are sent to each mailer that is configured
1742in a mailers section. Email is sent to mailers using SMTP.
1743
Pieter Baauw386a1272015-08-16 15:26:24 +02001744mailers <mailersect>
Simon Horman51a1cf62015-02-03 13:00:44 +09001745 Creates a new mailer list with the name <mailersect>. It is an
1746 independent section which is referenced by one or more proxies.
1747
1748mailer <mailername> <ip>:<port>
1749 Defines a mailer inside a mailers section.
1750
1751 Example:
1752 mailers mymailers
1753 mailer smtp1 192.168.0.1:587
1754 mailer smtp2 192.168.0.2:587
1755
1756 backend mybackend
1757 mode tcp
1758 balance roundrobin
1759
1760 email-alert mailers mymailers
1761 email-alert from test1@horms.org
1762 email-alert to test2@horms.org
1763
1764 server srv1 192.168.0.30:80
1765 server srv2 192.168.0.31:80
1766
Pieter Baauw235fcfc2016-02-13 15:33:40 +01001767timeout mail <time>
1768 Defines the time available for a mail/connection to be made and send to
1769 the mail-server. If not defined the default value is 10 seconds. To allow
1770 for at least two SYN-ACK packets to be send during initial TCP handshake it
1771 is advised to keep this value above 4 seconds.
1772
1773 Example:
1774 mailers mymailers
1775 timeout mail 20s
1776 mailer smtp1 192.168.0.1:587
Simon Horman51a1cf62015-02-03 13:00:44 +09001777
Willy Tarreauc57f0e22009-05-10 13:12:33 +020017784. Proxies
Willy Tarreau6a06a402007-07-15 20:15:28 +02001779----------
Willy Tarreau0ba27502007-12-24 16:55:16 +01001780
Willy Tarreau6a06a402007-07-15 20:15:28 +02001781Proxy configuration can be located in a set of sections :
William Lallemand6e62fb62015-04-28 16:55:23 +02001782 - defaults [<name>]
Willy Tarreau6a06a402007-07-15 20:15:28 +02001783 - frontend <name>
1784 - backend <name>
1785 - listen <name>
1786
1787A "defaults" section sets default parameters for all other sections following
1788its declaration. Those default parameters are reset by the next "defaults"
1789section. See below for the list of parameters which can be set in a "defaults"
Willy Tarreau0ba27502007-12-24 16:55:16 +01001790section. The name is optional but its use is encouraged for better readability.
Willy Tarreau6a06a402007-07-15 20:15:28 +02001791
1792A "frontend" section describes a set of listening sockets accepting client
1793connections.
1794
1795A "backend" section describes a set of servers to which the proxy will connect
1796to forward incoming connections.
1797
1798A "listen" section defines a complete proxy with its frontend and backend
1799parts combined in one section. It is generally useful for TCP-only traffic.
1800
Willy Tarreau0ba27502007-12-24 16:55:16 +01001801All proxy names must be formed from upper and lower case letters, digits,
1802'-' (dash), '_' (underscore) , '.' (dot) and ':' (colon). ACL names are
1803case-sensitive, which means that "www" and "WWW" are two different proxies.
1804
1805Historically, all proxy names could overlap, it just caused troubles in the
1806logs. Since the introduction of content switching, it is mandatory that two
1807proxies with overlapping capabilities (frontend/backend) have different names.
1808However, it is still permitted that a frontend and a backend share the same
1809name, as this configuration seems to be commonly encountered.
1810
1811Right now, two major proxy modes are supported : "tcp", also known as layer 4,
1812and "http", also known as layer 7. In layer 4 mode, HAProxy simply forwards
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01001813bidirectional traffic between two sides. In layer 7 mode, HAProxy analyzes the
Willy Tarreau0ba27502007-12-24 16:55:16 +01001814protocol, and can interact with it by allowing, blocking, switching, adding,
1815modifying, or removing arbitrary contents in requests or responses, based on
1816arbitrary criteria.
1817
Willy Tarreau70dffda2014-01-30 03:07:23 +01001818In HTTP mode, the processing applied to requests and responses flowing over
1819a connection depends in the combination of the frontend's HTTP options and
1820the backend's. HAProxy supports 5 connection modes :
1821
1822 - KAL : keep alive ("option http-keep-alive") which is the default mode : all
1823 requests and responses are processed, and connections remain open but idle
1824 between responses and new requests.
1825
1826 - TUN: tunnel ("option http-tunnel") : this was the default mode for versions
1827 1.0 to 1.5-dev21 : only the first request and response are processed, and
1828 everything else is forwarded with no analysis at all. This mode should not
1829 be used as it creates lots of trouble with logging and HTTP processing.
1830
1831 - PCL: passive close ("option httpclose") : exactly the same as tunnel mode,
1832 but with "Connection: close" appended in both directions to try to make
1833 both ends close after the first request/response exchange.
1834
1835 - SCL: server close ("option http-server-close") : the server-facing
1836 connection is closed after the end of the response is received, but the
1837 client-facing connection remains open.
1838
1839 - FCL: forced close ("option forceclose") : the connection is actively closed
1840 after the end of the response.
1841
1842The effective mode that will be applied to a connection passing through a
1843frontend and a backend can be determined by both proxy modes according to the
1844following matrix, but in short, the modes are symmetric, keep-alive is the
1845weakest option and force close is the strongest.
1846
1847 Backend mode
1848
1849 | KAL | TUN | PCL | SCL | FCL
1850 ----+-----+-----+-----+-----+----
1851 KAL | KAL | TUN | PCL | SCL | FCL
1852 ----+-----+-----+-----+-----+----
1853 TUN | TUN | TUN | PCL | SCL | FCL
1854 Frontend ----+-----+-----+-----+-----+----
1855 mode PCL | PCL | PCL | PCL | FCL | FCL
1856 ----+-----+-----+-----+-----+----
1857 SCL | SCL | SCL | FCL | SCL | FCL
1858 ----+-----+-----+-----+-----+----
1859 FCL | FCL | FCL | FCL | FCL | FCL
1860
Willy Tarreau0ba27502007-12-24 16:55:16 +01001861
Willy Tarreau70dffda2014-01-30 03:07:23 +01001862
Willy Tarreauc57f0e22009-05-10 13:12:33 +020018634.1. Proxy keywords matrix
1864--------------------------
Willy Tarreau0ba27502007-12-24 16:55:16 +01001865
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001866The following list of keywords is supported. Most of them may only be used in a
1867limited set of section types. Some of them are marked as "deprecated" because
1868they are inherited from an old syntax which may be confusing or functionally
1869limited, and there are new recommended keywords to replace them. Keywords
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001870marked with "(*)" can be optionally inverted using the "no" prefix, eg. "no
Willy Tarreauc57f0e22009-05-10 13:12:33 +02001871option contstats". This makes sense when the option has been enabled by default
Willy Tarreau3842f002009-06-14 11:39:52 +02001872and must be disabled for a specific instance. Such options may also be prefixed
1873with "default" in order to restore default settings regardless of what has been
1874specified in a previous "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01001875
Willy Tarreau6a06a402007-07-15 20:15:28 +02001876
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001877 keyword defaults frontend listen backend
1878------------------------------------+----------+----------+---------+---------
1879acl - X X X
Willy Tarreau294d0f02015-08-10 19:40:12 +02001880appsession - - - -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001881backlog X X X -
1882balance X - X X
1883bind - X X -
1884bind-process X X X X
Jarno Huuskonen8c8c3492016-12-28 18:50:29 +02001885block (deprecated) - X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001886capture cookie - X X -
1887capture request header - X X -
1888capture response header - X X -
1889clitimeout (deprecated) X X X -
William Lallemand82fe75c2012-10-23 10:25:10 +02001890compression X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001891contimeout (deprecated) X - X X
1892cookie X - X X
Thierry FOURNIERa0a1b752015-05-26 17:44:32 +02001893declare capture - X X -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001894default-server X - X X
1895default_backend X X X -
1896description - X X X
1897disabled X X X X
1898dispatch - - X X
Simon Horman51a1cf62015-02-03 13:00:44 +09001899email-alert from X X X X
Simon Horman64e34162015-02-06 11:11:57 +09001900email-alert level X X X X
Simon Horman51a1cf62015-02-03 13:00:44 +09001901email-alert mailers X X X X
1902email-alert myhostname X X X X
1903email-alert to X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001904enabled X X X X
1905errorfile X X X X
1906errorloc X X X X
1907errorloc302 X X X X
1908-- keyword -------------------------- defaults - frontend - listen -- backend -
1909errorloc303 X X X X
Cyril Bonté0d4bf012010-04-25 23:21:46 +02001910force-persist - X X X
Christopher Fauletc3fe5332016-04-07 15:30:10 +02001911filter - X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001912fullconn X - X X
1913grace X X X X
1914hash-type X - X X
1915http-check disable-on-404 X - X X
Willy Tarreaubd741542010-03-16 18:46:54 +01001916http-check expect - - X X
Willy Tarreau7ab6aff2010-10-12 06:30:16 +02001917http-check send-state X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001918http-request - X X X
Willy Tarreaue365c0b2013-06-11 16:06:12 +02001919http-response - X X X
Willy Tarreau30631952015-08-06 15:05:24 +02001920http-reuse X - X X
Baptiste Assmann2c42ef52013-10-09 21:57:02 +02001921http-send-name-header - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001922id - X X X
Cyril Bonté0d4bf012010-04-25 23:21:46 +02001923ignore-persist - X X X
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02001924load-server-state-from-file X - X X
William Lallemand0f99e342011-10-12 17:50:54 +02001925log (*) X X X X
Willy Tarreaufb4e7ea2015-01-07 14:55:17 +01001926log-format X X X -
Dragan Dosen7ad31542015-09-28 17:16:47 +02001927log-format-sd X X X -
Willy Tarreau094af4e2015-01-07 15:03:42 +01001928log-tag X X X X
Willy Tarreauc35362a2014-04-25 13:58:37 +02001929max-keep-alive-queue X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001930maxconn X X X -
1931mode X X X X
1932monitor fail - X X -
1933monitor-net X X X -
1934monitor-uri X X X -
1935option abortonclose (*) X - X X
1936option accept-invalid-http-request (*) X X X -
1937option accept-invalid-http-response (*) X - X X
1938option allbackups (*) X - X X
1939option checkcache (*) X - X X
1940option clitcpka (*) X X X -
1941option contstats (*) X X X -
1942option dontlog-normal (*) X X X -
1943option dontlognull (*) X X X -
1944option forceclose (*) X X X X
1945-- keyword -------------------------- defaults - frontend - listen -- backend -
1946option forwardfor X X X X
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02001947option http-buffer-request (*) X X X X
Willy Tarreau82649f92015-05-01 22:40:51 +02001948option http-ignore-probes (*) X X X -
Willy Tarreau16bfb022010-01-16 19:48:41 +01001949option http-keep-alive (*) X X X X
Willy Tarreau96e31212011-05-30 18:10:30 +02001950option http-no-delay (*) X X X X
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02001951option http-pretend-keepalive (*) X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001952option http-server-close (*) X X X X
Willy Tarreau02bce8b2014-01-30 00:15:28 +01001953option http-tunnel (*) X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001954option http-use-proxy-header (*) X X X -
1955option httpchk X - X X
1956option httpclose (*) X X X X
1957option httplog X X X X
1958option http_proxy (*) X X X X
Jamie Gloudon801a0a32012-08-25 00:18:33 -04001959option independent-streams (*) X X X X
Gabor Lekenyb4c81e42010-09-29 18:17:05 +02001960option ldap-check X - X X
Simon Horman98637e52014-06-20 12:30:16 +09001961option external-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001962option log-health-checks (*) X - X X
1963option log-separate-errors (*) X X X -
1964option logasap (*) X X X -
1965option mysql-check X - X X
1966option nolinger (*) X X X X
1967option originalto X X X X
1968option persist (*) X - X X
Baptiste Assmann809e22a2015-10-12 20:22:55 +02001969option pgsql-check X - X X
1970option prefer-last-server (*) X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001971option redispatch (*) X - X X
Hervé COMMOWICKec032d62011-08-05 16:23:48 +02001972option redis-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001973option smtpchk X - X X
1974option socket-stats (*) X X X -
1975option splice-auto (*) X X X X
1976option splice-request (*) X X X X
1977option splice-response (*) X X X X
Christopher Fauletba7bc162016-11-07 21:07:38 +01001978option spop-check - - - X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001979option srvtcpka (*) X - X X
1980option ssl-hello-chk X - X X
1981-- keyword -------------------------- defaults - frontend - listen -- backend -
Willy Tarreaued179852013-12-16 01:07:00 +01001982option tcp-check X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001983option tcp-smart-accept (*) X X X -
1984option tcp-smart-connect (*) X - X X
1985option tcpka X X X X
1986option tcplog X X X X
1987option transparent (*) X - X X
Simon Horman98637e52014-06-20 12:30:16 +09001988external-check command X - X X
1989external-check path X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01001990persist rdp-cookie X - X X
1991rate-limit sessions X X X -
1992redirect - X X X
1993redisp (deprecated) X - X X
1994redispatch (deprecated) X - X X
1995reqadd - X X X
1996reqallow - X X X
1997reqdel - X X X
1998reqdeny - X X X
1999reqiallow - X X X
2000reqidel - X X X
2001reqideny - X X X
2002reqipass - X X X
2003reqirep - X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002004reqitarpit - X X X
2005reqpass - X X X
2006reqrep - X X X
2007-- keyword -------------------------- defaults - frontend - listen -- backend -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002008reqtarpit - X X X
2009retries X - X X
2010rspadd - X X X
2011rspdel - X X X
2012rspdeny - X X X
2013rspidel - X X X
2014rspideny - X X X
2015rspirep - X X X
2016rsprep - X X X
2017server - - X X
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02002018server-state-file-name X - X X
Frédéric Lécaillecb4502e2017-04-20 13:36:25 +02002019server-template - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002020source X - X X
2021srvtimeout (deprecated) X - X X
Baptiste Assmann5a549212015-10-12 20:30:24 +02002022stats admin - X X X
2023stats auth X X X X
2024stats enable X X X X
2025stats hide-version X X X X
2026stats http-request - X X X
2027stats realm X X X X
2028stats refresh X X X X
2029stats scope X X X X
2030stats show-desc X X X X
2031stats show-legends X X X X
2032stats show-node X X X X
2033stats uri X X X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002034-- keyword -------------------------- defaults - frontend - listen -- backend -
2035stick match - - X X
2036stick on - - X X
2037stick store-request - - X X
Willy Tarreaud8dc99f2011-07-01 11:33:25 +02002038stick store-response - - X X
Adam Spiers68af3c12017-04-06 16:31:39 +01002039stick-table - X X X
Willy Tarreau938c7fe2014-04-25 14:21:39 +02002040tcp-check connect - - X X
2041tcp-check expect - - X X
2042tcp-check send - - X X
2043tcp-check send-binary - - X X
Willy Tarreaue9656522010-08-17 15:40:09 +02002044tcp-request connection - X X -
2045tcp-request content - X X X
Willy Tarreaua56235c2010-09-14 11:31:36 +02002046tcp-request inspect-delay - X X X
Willy Tarreau4f614292016-10-21 17:49:36 +02002047tcp-request session - X X -
Emeric Brun0a3b67f2010-09-24 15:34:53 +02002048tcp-response content - - X X
2049tcp-response inspect-delay - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002050timeout check X - X X
2051timeout client X X X -
Willy Tarreau05cdd962014-05-10 14:30:07 +02002052timeout client-fin X X X -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002053timeout clitimeout (deprecated) X X X -
2054timeout connect X - X X
2055timeout contimeout (deprecated) X - X X
2056timeout http-keep-alive X X X X
2057timeout http-request X X X X
2058timeout queue X - X X
2059timeout server X - X X
Willy Tarreau05cdd962014-05-10 14:30:07 +02002060timeout server-fin X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002061timeout srvtimeout (deprecated) X - X X
2062timeout tarpit X X X X
Willy Tarreauce887fd2012-05-12 12:50:00 +02002063timeout tunnel X - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002064transparent (deprecated) X - X X
William Lallemanda73203e2012-03-12 12:48:57 +01002065unique-id-format X X X -
2066unique-id-header X X X -
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002067use_backend - X X -
Willy Tarreau4a5cade2012-04-05 21:09:48 +02002068use-server - - X X
Willy Tarreau5c6f7b32010-02-26 13:34:29 +01002069------------------------------------+----------+----------+---------+---------
2070 keyword defaults frontend listen backend
Willy Tarreau6a06a402007-07-15 20:15:28 +02002071
Willy Tarreau0ba27502007-12-24 16:55:16 +01002072
Willy Tarreauc57f0e22009-05-10 13:12:33 +020020734.2. Alphabetically sorted keywords reference
2074---------------------------------------------
Willy Tarreau0ba27502007-12-24 16:55:16 +01002075
2076This section provides a description of each keyword and its usage.
2077
2078
2079acl <aclname> <criterion> [flags] [operator] <value> ...
2080 Declare or complete an access list.
2081 May be used in sections : defaults | frontend | listen | backend
2082 no | yes | yes | yes
2083 Example:
2084 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
2085 acl invalid_src src_port 0:1023
2086 acl local_dst hdr(host) -i localhost
2087
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002088 See section 7 about ACL usage.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002089
2090
Cyril Bontéb21570a2009-11-29 20:04:48 +01002091appsession <cookie> len <length> timeout <holdtime>
2092 [request-learn] [prefix] [mode <path-parameters|query-string>]
Willy Tarreau0ba27502007-12-24 16:55:16 +01002093 Define session stickiness on an existing application cookie.
2094 May be used in sections : defaults | frontend | listen | backend
2095 no | no | yes | yes
2096 Arguments :
2097 <cookie> this is the name of the cookie used by the application and which
2098 HAProxy will have to learn for each new session.
2099
Cyril Bontéb21570a2009-11-29 20:04:48 +01002100 <length> this is the max number of characters that will be memorized and
Willy Tarreau0ba27502007-12-24 16:55:16 +01002101 checked in each cookie value.
2102
2103 <holdtime> this is the time after which the cookie will be removed from
2104 memory if unused. If no unit is specified, this time is in
2105 milliseconds.
2106
Cyril Bontébf47aeb2009-10-15 00:15:40 +02002107 request-learn
2108 If this option is specified, then haproxy will be able to learn
2109 the cookie found in the request in case the server does not
2110 specify any in response. This is typically what happens with
2111 PHPSESSID cookies, or when haproxy's session expires before
2112 the application's session and the correct server is selected.
2113 It is recommended to specify this option to improve reliability.
2114
Cyril Bontéb21570a2009-11-29 20:04:48 +01002115 prefix When this option is specified, haproxy will match on the cookie
2116 prefix (or URL parameter prefix). The appsession value is the
2117 data following this prefix.
2118
2119 Example :
2120 appsession ASPSESSIONID len 64 timeout 3h prefix
2121
2122 This will match the cookie ASPSESSIONIDXXXX=XXXXX,
2123 the appsession value will be XXXX=XXXXX.
2124
2125 mode This option allows to change the URL parser mode.
2126 2 modes are currently supported :
2127 - path-parameters :
2128 The parser looks for the appsession in the path parameters
2129 part (each parameter is separated by a semi-colon), which is
2130 convenient for JSESSIONID for example.
2131 This is the default mode if the option is not set.
2132 - query-string :
2133 In this mode, the parser will look for the appsession in the
2134 query string.
2135
Willy Tarreau294d0f02015-08-10 19:40:12 +02002136 As of version 1.6, appsessions was removed. It is more flexible and more
2137 convenient to use stick-tables instead, and stick-tables support multi-master
2138 replication and data conservation across reloads, which appsessions did not.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002139
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01002140 See also : "cookie", "capture cookie", "balance", "stick", "stick-table",
2141 "ignore-persist", "nbproc" and "bind-process".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002142
2143
Willy Tarreauc73ce2b2008-01-06 10:55:10 +01002144backlog <conns>
2145 Give hints to the system about the approximate listen backlog desired size
2146 May be used in sections : defaults | frontend | listen | backend
2147 yes | yes | yes | no
2148 Arguments :
2149 <conns> is the number of pending connections. Depending on the operating
2150 system, it may represent the number of already acknowledged
Cyril Bontédc4d9032012-04-08 21:57:39 +02002151 connections, of non-acknowledged ones, or both.
Willy Tarreauc73ce2b2008-01-06 10:55:10 +01002152
2153 In order to protect against SYN flood attacks, one solution is to increase
2154 the system's SYN backlog size. Depending on the system, sometimes it is just
2155 tunable via a system parameter, sometimes it is not adjustable at all, and
2156 sometimes the system relies on hints given by the application at the time of
2157 the listen() syscall. By default, HAProxy passes the frontend's maxconn value
2158 to the listen() syscall. On systems which can make use of this value, it can
2159 sometimes be useful to be able to specify a different value, hence this
2160 backlog parameter.
2161
2162 On Linux 2.4, the parameter is ignored by the system. On Linux 2.6, it is
2163 used as a hint and the system accepts up to the smallest greater power of
2164 two, and never more than some limits (usually 32768).
2165
2166 See also : "maxconn" and the target operating system's tuning guide.
2167
2168
Willy Tarreau0ba27502007-12-24 16:55:16 +01002169balance <algorithm> [ <arguments> ]
Willy Tarreau226071e2014-04-10 11:55:45 +02002170balance url_param <param> [check_post]
Willy Tarreau0ba27502007-12-24 16:55:16 +01002171 Define the load balancing algorithm to be used in a backend.
2172 May be used in sections : defaults | frontend | listen | backend
2173 yes | no | yes | yes
2174 Arguments :
2175 <algorithm> is the algorithm used to select a server when doing load
2176 balancing. This only applies when no persistence information
2177 is available, or when a connection is redispatched to another
2178 server. <algorithm> may be one of the following :
2179
2180 roundrobin Each server is used in turns, according to their weights.
2181 This is the smoothest and fairest algorithm when the server's
2182 processing time remains equally distributed. This algorithm
2183 is dynamic, which means that server weights may be adjusted
Willy Tarreau9757a382009-10-03 12:56:50 +02002184 on the fly for slow starts for instance. It is limited by
Godbacha34bdc02013-07-22 07:44:53 +08002185 design to 4095 active servers per backend. Note that in some
Willy Tarreau9757a382009-10-03 12:56:50 +02002186 large farms, when a server becomes up after having been down
2187 for a very short time, it may sometimes take a few hundreds
2188 requests for it to be re-integrated into the farm and start
2189 receiving traffic. This is normal, though very rare. It is
2190 indicated here in case you would have the chance to observe
2191 it, so that you don't worry.
2192
2193 static-rr Each server is used in turns, according to their weights.
2194 This algorithm is as similar to roundrobin except that it is
2195 static, which means that changing a server's weight on the
2196 fly will have no effect. On the other hand, it has no design
2197 limitation on the number of servers, and when a server goes
2198 up, it is always immediately reintroduced into the farm, once
2199 the full map is recomputed. It also uses slightly less CPU to
2200 run (around -1%).
Willy Tarreau0ba27502007-12-24 16:55:16 +01002201
Willy Tarreau2d2a7f82008-03-17 12:07:56 +01002202 leastconn The server with the lowest number of connections receives the
2203 connection. Round-robin is performed within groups of servers
2204 of the same load to ensure that all servers will be used. Use
2205 of this algorithm is recommended where very long sessions are
2206 expected, such as LDAP, SQL, TSE, etc... but is not very well
2207 suited for protocols using short sessions such as HTTP. This
2208 algorithm is dynamic, which means that server weights may be
2209 adjusted on the fly for slow starts for instance.
2210
Willy Tarreauf09c6602012-02-13 17:12:08 +01002211 first The first server with available connection slots receives the
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03002212 connection. The servers are chosen from the lowest numeric
Willy Tarreauf09c6602012-02-13 17:12:08 +01002213 identifier to the highest (see server parameter "id"), which
2214 defaults to the server's position in the farm. Once a server
Willy Tarreau64559c52012-04-07 09:08:45 +02002215 reaches its maxconn value, the next server is used. It does
Willy Tarreauf09c6602012-02-13 17:12:08 +01002216 not make sense to use this algorithm without setting maxconn.
2217 The purpose of this algorithm is to always use the smallest
2218 number of servers so that extra servers can be powered off
2219 during non-intensive hours. This algorithm ignores the server
2220 weight, and brings more benefit to long session such as RDP
Willy Tarreau64559c52012-04-07 09:08:45 +02002221 or IMAP than HTTP, though it can be useful there too. In
2222 order to use this algorithm efficiently, it is recommended
2223 that a cloud controller regularly checks server usage to turn
2224 them off when unused, and regularly checks backend queue to
2225 turn new servers on when the queue inflates. Alternatively,
2226 using "http-check send-state" may inform servers on the load.
Willy Tarreauf09c6602012-02-13 17:12:08 +01002227
Willy Tarreau0ba27502007-12-24 16:55:16 +01002228 source The source IP address is hashed and divided by the total
2229 weight of the running servers to designate which server will
2230 receive the request. This ensures that the same client IP
2231 address will always reach the same server as long as no
2232 server goes down or up. If the hash result changes due to the
2233 number of running servers changing, many clients will be
2234 directed to a different server. This algorithm is generally
2235 used in TCP mode where no cookie may be inserted. It may also
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002236 be used on the Internet to provide a best-effort stickiness
Willy Tarreau0ba27502007-12-24 16:55:16 +01002237 to clients which refuse session cookies. This algorithm is
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002238 static by default, which means that changing a server's
2239 weight on the fly will have no effect, but this can be
2240 changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002241
Oskar Stolc8dc41842012-05-19 10:19:54 +01002242 uri This algorithm hashes either the left part of the URI (before
2243 the question mark) or the whole URI (if the "whole" parameter
2244 is present) and divides the hash value by the total weight of
2245 the running servers. The result designates which server will
2246 receive the request. This ensures that the same URI will
2247 always be directed to the same server as long as no server
2248 goes up or down. This is used with proxy caches and
2249 anti-virus proxies in order to maximize the cache hit rate.
2250 Note that this algorithm may only be used in an HTTP backend.
2251 This algorithm is static by default, which means that
2252 changing a server's weight on the fly will have no effect,
2253 but this can be changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002254
Oskar Stolc8dc41842012-05-19 10:19:54 +01002255 This algorithm supports two optional parameters "len" and
Marek Majkowski9c30fc12008-04-27 23:25:55 +02002256 "depth", both followed by a positive integer number. These
2257 options may be helpful when it is needed to balance servers
2258 based on the beginning of the URI only. The "len" parameter
2259 indicates that the algorithm should only consider that many
2260 characters at the beginning of the URI to compute the hash.
2261 Note that having "len" set to 1 rarely makes sense since most
2262 URIs start with a leading "/".
2263
2264 The "depth" parameter indicates the maximum directory depth
2265 to be used to compute the hash. One level is counted for each
2266 slash in the request. If both parameters are specified, the
2267 evaluation stops when either is reached.
2268
Willy Tarreau0ba27502007-12-24 16:55:16 +01002269 url_param The URL parameter specified in argument will be looked up in
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002270 the query string of each HTTP GET request.
2271
2272 If the modifier "check_post" is used, then an HTTP POST
Cyril Bontédc4d9032012-04-08 21:57:39 +02002273 request entity will be searched for the parameter argument,
2274 when it is not found in a query string after a question mark
Willy Tarreau226071e2014-04-10 11:55:45 +02002275 ('?') in the URL. The message body will only start to be
2276 analyzed once either the advertised amount of data has been
2277 received or the request buffer is full. In the unlikely event
2278 that chunked encoding is used, only the first chunk is
Cyril Bontédc4d9032012-04-08 21:57:39 +02002279 scanned. Parameter values separated by a chunk boundary, may
Willy Tarreau226071e2014-04-10 11:55:45 +02002280 be randomly balanced if at all. This keyword used to support
2281 an optional <max_wait> parameter which is now ignored.
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002282
2283 If the parameter is found followed by an equal sign ('=') and
2284 a value, then the value is hashed and divided by the total
2285 weight of the running servers. The result designates which
2286 server will receive the request.
2287
2288 This is used to track user identifiers in requests and ensure
2289 that a same user ID will always be sent to the same server as
2290 long as no server goes up or down. If no value is found or if
2291 the parameter is not found, then a round robin algorithm is
2292 applied. Note that this algorithm may only be used in an HTTP
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002293 backend. This algorithm is static by default, which means
2294 that changing a server's weight on the fly will have no
2295 effect, but this can be changed using "hash-type".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002296
Cyril Bontédc4d9032012-04-08 21:57:39 +02002297 hdr(<name>) The HTTP header <name> will be looked up in each HTTP
2298 request. Just as with the equivalent ACL 'hdr()' function,
2299 the header name in parenthesis is not case sensitive. If the
2300 header is absent or if it does not contain any value, the
2301 roundrobin algorithm is applied instead.
Benoitaffb4812009-03-25 13:02:10 +01002302
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002303 An optional 'use_domain_only' parameter is available, for
Benoitaffb4812009-03-25 13:02:10 +01002304 reducing the hash algorithm to the main domain part with some
2305 specific headers such as 'Host'. For instance, in the Host
2306 value "haproxy.1wt.eu", only "1wt" will be considered.
2307
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002308 This algorithm is static by default, which means that
2309 changing a server's weight on the fly will have no effect,
2310 but this can be changed using "hash-type".
2311
Emeric Brun736aa232009-06-30 17:56:00 +02002312 rdp-cookie
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02002313 rdp-cookie(<name>)
Emeric Brun736aa232009-06-30 17:56:00 +02002314 The RDP cookie <name> (or "mstshash" if omitted) will be
2315 looked up and hashed for each incoming TCP request. Just as
2316 with the equivalent ACL 'req_rdp_cookie()' function, the name
2317 is not case-sensitive. This mechanism is useful as a degraded
2318 persistence mode, as it makes it possible to always send the
2319 same user (or the same session ID) to the same server. If the
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002320 cookie is not found, the normal roundrobin algorithm is
Emeric Brun736aa232009-06-30 17:56:00 +02002321 used instead.
2322
2323 Note that for this to work, the frontend must ensure that an
2324 RDP cookie is already present in the request buffer. For this
2325 you must use 'tcp-request content accept' rule combined with
2326 a 'req_rdp_cookie_cnt' ACL.
2327
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02002328 This algorithm is static by default, which means that
2329 changing a server's weight on the fly will have no effect,
2330 but this can be changed using "hash-type".
2331
Cyril Bontédc4d9032012-04-08 21:57:39 +02002332 See also the rdp_cookie pattern fetch function.
Simon Hormanab814e02011-06-24 14:50:20 +09002333
Willy Tarreau0ba27502007-12-24 16:55:16 +01002334 <arguments> is an optional list of arguments which may be needed by some
Marek Majkowski9c30fc12008-04-27 23:25:55 +02002335 algorithms. Right now, only "url_param" and "uri" support an
2336 optional argument.
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002337
Willy Tarreau3cd9af22009-03-15 14:06:41 +01002338 The load balancing algorithm of a backend is set to roundrobin when no other
2339 algorithm, mode nor option have been set. The algorithm may only be set once
2340 for each backend.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002341
2342 Examples :
2343 balance roundrobin
2344 balance url_param userid
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002345 balance url_param session_id check_post 64
Benoitaffb4812009-03-25 13:02:10 +01002346 balance hdr(User-Agent)
2347 balance hdr(host)
2348 balance hdr(Host) use_domain_only
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002349
2350 Note: the following caveats and limitations on using the "check_post"
2351 extension with "url_param" must be considered :
2352
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002353 - all POST requests are eligible for consideration, because there is no way
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002354 to determine if the parameters will be found in the body or entity which
2355 may contain binary data. Therefore another method may be required to
2356 restrict consideration of POST requests that have no URL parameters in
2357 the body. (see acl reqideny http_end)
2358
2359 - using a <max_wait> value larger than the request buffer size does not
2360 make sense and is useless. The buffer size is set at build time, and
2361 defaults to 16 kB.
2362
2363 - Content-Encoding is not supported, the parameter search will probably
2364 fail; and load balancing will fall back to Round Robin.
2365
2366 - Expect: 100-continue is not supported, load balancing will fall back to
2367 Round Robin.
2368
Lukas Tribus23953682017-04-28 13:24:30 +00002369 - Transfer-Encoding (RFC7230 3.3.1) is only supported in the first chunk.
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002370 If the entire parameter value is not present in the first chunk, the
2371 selection of server is undefined (actually, defined by how little
2372 actually appeared in the first chunk).
2373
2374 - This feature does not support generation of a 100, 411 or 501 response.
2375
2376 - In some cases, requesting "check_post" MAY attempt to scan the entire
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002377 contents of a message body. Scanning normally terminates when linear
matt.farnsworth@nokia.com1c2ab962008-04-14 20:47:37 +02002378 white space or control characters are found, indicating the end of what
2379 might be a URL parameter list. This is probably not a concern with SGML
2380 type message bodies.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002381
Willy Tarreau294d0f02015-08-10 19:40:12 +02002382 See also : "dispatch", "cookie", "transparent", "hash-type" and "http_proxy".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002383
2384
Willy Tarreaub6205fd2012-09-24 12:27:33 +02002385bind [<address>]:<port_range> [, ...] [param*]
2386bind /<path> [, ...] [param*]
Willy Tarreau0ba27502007-12-24 16:55:16 +01002387 Define one or several listening addresses and/or ports in a frontend.
2388 May be used in sections : defaults | frontend | listen | backend
2389 no | yes | yes | no
2390 Arguments :
Willy Tarreaub1e52e82008-01-13 14:49:51 +01002391 <address> is optional and can be a host name, an IPv4 address, an IPv6
2392 address, or '*'. It designates the address the frontend will
2393 listen on. If unset, all IPv4 addresses of the system will be
2394 listened on. The same will apply for '*' or the system's
David du Colombier9c938da2011-03-17 10:40:27 +01002395 special address "0.0.0.0". The IPv6 equivalent is '::'.
Willy Tarreau24709282013-03-10 21:32:12 +01002396 Optionally, an address family prefix may be used before the
2397 address to force the family regardless of the address format,
2398 which can be useful to specify a path to a unix socket with
2399 no slash ('/'). Currently supported prefixes are :
2400 - 'ipv4@' -> address is always IPv4
2401 - 'ipv6@' -> address is always IPv6
2402 - 'unix@' -> address is a path to a local unix socket
Willy Tarreau70f72e02014-07-08 00:37:50 +02002403 - 'abns@' -> address is in abstract namespace (Linux only).
2404 Note: since abstract sockets are not "rebindable", they
2405 do not cope well with multi-process mode during
2406 soft-restart, so it is better to avoid them if
2407 nbproc is greater than 1. The effect is that if the
2408 new process fails to start, only one of the old ones
2409 will be able to rebind to the socket.
Willy Tarreau40aa0702013-03-10 23:51:38 +01002410 - 'fd@<n>' -> use file descriptor <n> inherited from the
2411 parent. The fd must be bound and may or may not already
2412 be listening.
William Lallemandb2f07452015-05-12 14:27:13 +02002413 You may want to reference some environment variables in the
2414 address parameter, see section 2.3 about environment
2415 variables.
Willy Tarreaub1e52e82008-01-13 14:49:51 +01002416
Willy Tarreauc5011ca2010-03-22 11:53:56 +01002417 <port_range> is either a unique TCP port, or a port range for which the
2418 proxy will accept connections for the IP address specified
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002419 above. The port is mandatory for TCP listeners. Note that in
2420 the case of an IPv6 address, the port is always the number
2421 after the last colon (':'). A range can either be :
Willy Tarreauc5011ca2010-03-22 11:53:56 +01002422 - a numerical port (ex: '80')
2423 - a dash-delimited ports range explicitly stating the lower
2424 and upper bounds (ex: '2000-2100') which are included in
2425 the range.
2426
2427 Particular care must be taken against port ranges, because
2428 every <address:port> couple consumes one socket (= a file
2429 descriptor), so it's easy to consume lots of descriptors
2430 with a simple range, and to run out of sockets. Also, each
2431 <address:port> couple must be used only once among all
2432 instances running on a same system. Please note that binding
2433 to ports lower than 1024 generally require particular
Jamie Gloudon801a0a32012-08-25 00:18:33 -04002434 privileges to start the program, which are independent of
Willy Tarreauc5011ca2010-03-22 11:53:56 +01002435 the 'uid' parameter.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002436
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002437 <path> is a UNIX socket path beginning with a slash ('/'). This is
2438 alternative to the TCP listening port. Haproxy will then
2439 receive UNIX connections on the socket located at this place.
2440 The path must begin with a slash and by default is absolute.
2441 It can be relative to the prefix defined by "unix-bind" in
2442 the global section. Note that the total length of the prefix
2443 followed by the socket path cannot exceed some system limits
2444 for UNIX sockets, which commonly are set to 107 characters.
2445
Willy Tarreaub6205fd2012-09-24 12:27:33 +02002446 <param*> is a list of parameters common to all sockets declared on the
2447 same line. These numerous parameters depend on OS and build
2448 options and have a complete section dedicated to them. Please
2449 refer to section 5 to for more details.
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02002450
Willy Tarreau0ba27502007-12-24 16:55:16 +01002451 It is possible to specify a list of address:port combinations delimited by
2452 commas. The frontend will then listen on all of these addresses. There is no
2453 fixed limit to the number of addresses and ports which can be listened on in
2454 a frontend, as well as there is no limit to the number of "bind" statements
2455 in a frontend.
2456
2457 Example :
2458 listen http_proxy
2459 bind :80,:443
2460 bind 10.0.0.1:10080,10.0.0.1:10443
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002461 bind /var/run/ssl-frontend.sock user root mode 600 accept-proxy
Willy Tarreau0ba27502007-12-24 16:55:16 +01002462
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02002463 listen http_https_proxy
2464 bind :80
Cyril Bonté0d44fc62012-10-09 22:45:33 +02002465 bind :443 ssl crt /etc/haproxy/site.pem
Willy Tarreaua0ee1d02012-09-10 09:01:23 +02002466
Willy Tarreau24709282013-03-10 21:32:12 +01002467 listen http_https_proxy_explicit
2468 bind ipv6@:80
2469 bind ipv4@public_ssl:443 ssl crt /etc/haproxy/site.pem
2470 bind unix@ssl-frontend.sock user root mode 600 accept-proxy
2471
Willy Tarreaudad36a32013-03-11 01:20:04 +01002472 listen external_bind_app1
William Lallemandb2f07452015-05-12 14:27:13 +02002473 bind "fd@${FD_APP1}"
Willy Tarreaudad36a32013-03-11 01:20:04 +01002474
Willy Tarreau55dcaf62015-09-27 15:03:15 +02002475 Note: regarding Linux's abstract namespace sockets, HAProxy uses the whole
2476 sun_path length is used for the address length. Some other programs
2477 such as socat use the string length only by default. Pass the option
2478 ",unix-tightsocklen=0" to any abstract socket definition in socat to
2479 make it compatible with HAProxy's.
2480
Willy Tarreauceb24bc2010-11-09 12:46:41 +01002481 See also : "source", "option forwardfor", "unix-bind" and the PROXY protocol
Willy Tarreaub6205fd2012-09-24 12:27:33 +02002482 documentation, and section 5 about bind options.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002483
2484
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002485bind-process [ all | odd | even | <number 1-64>[-<number 1-64>] ] ...
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002486 Limit visibility of an instance to a certain set of processes numbers.
2487 May be used in sections : defaults | frontend | listen | backend
2488 yes | yes | yes | yes
2489 Arguments :
2490 all All process will see this instance. This is the default. It
2491 may be used to override a default value.
2492
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002493 odd This instance will be enabled on processes 1,3,5,...63. This
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002494 option may be combined with other numbers.
2495
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002496 even This instance will be enabled on processes 2,4,6,...64. This
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002497 option may be combined with other numbers. Do not use it
2498 with less than 2 processes otherwise some instances might be
2499 missing from all processes.
2500
Willy Tarreau110ecc12012-11-15 17:50:01 +01002501 number The instance will be enabled on this process number or range,
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002502 whose values must all be between 1 and 32 or 64 depending on
Willy Tarreau102df612014-05-07 23:56:38 +02002503 the machine's word size. If a proxy is bound to process
2504 numbers greater than the configured global.nbproc, it will
2505 either be forced to process #1 if a single process was
2506 specified, or to all processes otherwise.
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002507
2508 This keyword limits binding of certain instances to certain processes. This
2509 is useful in order not to have too many processes listening to the same
2510 ports. For instance, on a dual-core machine, it might make sense to set
2511 'nbproc 2' in the global section, then distributes the listeners among 'odd'
2512 and 'even' instances.
2513
Willy Tarreaua9db57e2013-01-18 11:29:29 +01002514 At the moment, it is not possible to reference more than 32 or 64 processes
2515 using this keyword, but this should be more than enough for most setups.
2516 Please note that 'all' really means all processes regardless of the machine's
2517 word size, and is not limited to the first 32 or 64.
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002518
Willy Tarreau6ae1ba62014-05-07 19:01:58 +02002519 Each "bind" line may further be limited to a subset of the proxy's processes,
2520 please consult the "process" bind keyword in section 5.1.
2521
Willy Tarreaub369a042014-09-16 13:21:03 +02002522 When a frontend has no explicit "bind-process" line, it tries to bind to all
2523 the processes referenced by its "bind" lines. That means that frontends can
2524 easily adapt to their listeners' processes.
2525
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002526 If some backends are referenced by frontends bound to other processes, the
2527 backend automatically inherits the frontend's processes.
2528
2529 Example :
2530 listen app_ip1
2531 bind 10.0.0.1:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02002532 bind-process odd
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002533
2534 listen app_ip2
2535 bind 10.0.0.2:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02002536 bind-process even
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002537
2538 listen management
2539 bind 10.0.0.3:80
Willy Tarreaubfcd3112010-10-23 11:22:08 +02002540 bind-process 1 2 3 4
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002541
Willy Tarreau110ecc12012-11-15 17:50:01 +01002542 listen management
2543 bind 10.0.0.4:80
2544 bind-process 1-4
2545
Willy Tarreau6ae1ba62014-05-07 19:01:58 +02002546 See also : "nbproc" in global section, and "process" in section 5.1.
Willy Tarreau0b9c02c2009-02-04 22:05:05 +01002547
2548
Jarno Huuskonen8c8c3492016-12-28 18:50:29 +02002549block { if | unless } <condition> (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +01002550 Block a layer 7 request if/unless a condition is matched
2551 May be used in sections : defaults | frontend | listen | backend
2552 no | yes | yes | yes
2553
2554 The HTTP request will be blocked very early in the layer 7 processing
2555 if/unless <condition> is matched. A 403 error will be returned if the request
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002556 is blocked. The condition has to reference ACLs (see section 7). This is
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02002557 typically used to deny access to certain sensitive resources if some
Willy Tarreau0ba27502007-12-24 16:55:16 +01002558 conditions are met or not met. There is no fixed limit to the number of
Jarno Huuskonen95b012b2017-04-06 13:59:14 +03002559 "block" statements per instance. To block connections at layer 4 (without
2560 sending a 403 error) see "tcp-request connection reject" and
2561 "tcp-request content reject" rules.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002562
Jarno Huuskonen8c8c3492016-12-28 18:50:29 +02002563 This form is deprecated, do not use it in any new configuration, use the new
2564 "http-request deny" instead.
2565
Willy Tarreau0ba27502007-12-24 16:55:16 +01002566 Example:
2567 acl invalid_src src 0.0.0.0/7 224.0.0.0/3
2568 acl invalid_src src_port 0:1023
2569 acl local_dst hdr(host) -i localhost
Jarno Huuskonen84c51ec2017-04-03 14:20:34 +03002570 # block is deprecated. Use http-request deny instead:
2571 #block if invalid_src || local_dst
2572 http-request deny if invalid_src || local_dst
Willy Tarreau0ba27502007-12-24 16:55:16 +01002573
Jarno Huuskonen95b012b2017-04-06 13:59:14 +03002574 See also : section 7 about ACL usage, "http-request deny",
2575 "http-response deny", "tcp-request connection reject" and
2576 "tcp-request content reject".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002577
2578capture cookie <name> len <length>
2579 Capture and log a cookie in the request and in the response.
2580 May be used in sections : defaults | frontend | listen | backend
2581 no | yes | yes | no
2582 Arguments :
2583 <name> is the beginning of the name of the cookie to capture. In order
2584 to match the exact name, simply suffix the name with an equal
2585 sign ('='). The full name will appear in the logs, which is
2586 useful with application servers which adjust both the cookie name
2587 and value (eg: ASPSESSIONXXXXX).
2588
2589 <length> is the maximum number of characters to report in the logs, which
2590 include the cookie name, the equal sign and the value, all in the
2591 standard "name=value" form. The string will be truncated on the
2592 right if it exceeds <length>.
2593
2594 Only the first cookie is captured. Both the "cookie" request headers and the
2595 "set-cookie" response headers are monitored. This is particularly useful to
2596 check for application bugs causing session crossing or stealing between
2597 users, because generally the user's cookies can only change on a login page.
2598
2599 When the cookie was not presented by the client, the associated log column
2600 will report "-". When a request does not cause a cookie to be assigned by the
2601 server, a "-" is reported in the response column.
2602
2603 The capture is performed in the frontend only because it is necessary that
2604 the log format does not change for a given frontend depending on the
2605 backends. This may change in the future. Note that there can be only one
Willy Tarreau193b8c62012-11-22 00:17:38 +01002606 "capture cookie" statement in a frontend. The maximum capture length is set
2607 by the global "tune.http.cookielen" setting and defaults to 63 characters. It
2608 is not possible to specify a capture in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002609
2610 Example:
2611 capture cookie ASPSESSION len 32
2612
2613 See also : "capture request header", "capture response header" as well as
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002614 section 8 about logging.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002615
2616
2617capture request header <name> len <length>
Willy Tarreau4460d032012-11-21 23:37:37 +01002618 Capture and log the last occurrence of the specified request header.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002619 May be used in sections : defaults | frontend | listen | backend
2620 no | yes | yes | no
2621 Arguments :
2622 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002623 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +01002624 appear in the requests, with the first letter of each word in
2625 upper case. The header name will not appear in the logs, only the
2626 value is reported, but the position in the logs is respected.
2627
2628 <length> is the maximum number of characters to extract from the value and
2629 report in the logs. The string will be truncated on the right if
2630 it exceeds <length>.
2631
Willy Tarreau4460d032012-11-21 23:37:37 +01002632 The complete value of the last occurrence of the header is captured. The
Willy Tarreau0ba27502007-12-24 16:55:16 +01002633 value will be added to the logs between braces ('{}'). If multiple headers
2634 are captured, they will be delimited by a vertical bar ('|') and will appear
Willy Tarreaucc6c8912009-02-22 10:53:55 +01002635 in the same order they were declared in the configuration. Non-existent
2636 headers will be logged just as an empty string. Common uses for request
2637 header captures include the "Host" field in virtual hosting environments, the
2638 "Content-length" when uploads are supported, "User-agent" to quickly
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002639 differentiate between real users and robots, and "X-Forwarded-For" in proxied
Willy Tarreaucc6c8912009-02-22 10:53:55 +01002640 environments to find where the request came from.
2641
2642 Note that when capturing headers such as "User-agent", some spaces may be
2643 logged, making the log analysis more difficult. Thus be careful about what
2644 you log if you know your log parser is not smart enough to rely on the
2645 braces.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002646
Willy Tarreau0900abb2012-11-22 00:21:46 +01002647 There is no limit to the number of captured request headers nor to their
2648 length, though it is wise to keep them low to limit memory usage per session.
2649 In order to keep log format consistent for a same frontend, header captures
2650 can only be declared in a frontend. It is not possible to specify a capture
2651 in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002652
2653 Example:
2654 capture request header Host len 15
2655 capture request header X-Forwarded-For len 15
Cyril Bontéd1b0f7c2015-10-26 22:37:39 +01002656 capture request header Referer len 15
Willy Tarreau0ba27502007-12-24 16:55:16 +01002657
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002658 See also : "capture cookie", "capture response header" as well as section 8
Willy Tarreau0ba27502007-12-24 16:55:16 +01002659 about logging.
2660
2661
2662capture response header <name> len <length>
Willy Tarreau4460d032012-11-21 23:37:37 +01002663 Capture and log the last occurrence of the specified response header.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002664 May be used in sections : defaults | frontend | listen | backend
2665 no | yes | yes | no
2666 Arguments :
2667 <name> is the name of the header to capture. The header names are not
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002668 case-sensitive, but it is a common practice to write them as they
Willy Tarreau0ba27502007-12-24 16:55:16 +01002669 appear in the response, with the first letter of each word in
2670 upper case. The header name will not appear in the logs, only the
2671 value is reported, but the position in the logs is respected.
2672
2673 <length> is the maximum number of characters to extract from the value and
2674 report in the logs. The string will be truncated on the right if
2675 it exceeds <length>.
2676
Willy Tarreau4460d032012-11-21 23:37:37 +01002677 The complete value of the last occurrence of the header is captured. The
Willy Tarreau0ba27502007-12-24 16:55:16 +01002678 result will be added to the logs between braces ('{}') after the captured
2679 request headers. If multiple headers are captured, they will be delimited by
2680 a vertical bar ('|') and will appear in the same order they were declared in
Willy Tarreaucc6c8912009-02-22 10:53:55 +01002681 the configuration. Non-existent headers will be logged just as an empty
2682 string. Common uses for response header captures include the "Content-length"
2683 header which indicates how many bytes are expected to be returned, the
2684 "Location" header to track redirections.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002685
Willy Tarreau0900abb2012-11-22 00:21:46 +01002686 There is no limit to the number of captured response headers nor to their
2687 length, though it is wise to keep them low to limit memory usage per session.
2688 In order to keep log format consistent for a same frontend, header captures
2689 can only be declared in a frontend. It is not possible to specify a capture
2690 in a "defaults" section.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002691
2692 Example:
2693 capture response header Content-length len 9
2694 capture response header Location len 15
2695
Willy Tarreauc57f0e22009-05-10 13:12:33 +02002696 See also : "capture cookie", "capture request header" as well as section 8
Willy Tarreau0ba27502007-12-24 16:55:16 +01002697 about logging.
2698
2699
Cyril Bontéf0c60612010-02-06 14:44:47 +01002700clitimeout <timeout> (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +01002701 Set the maximum inactivity time on the client side.
2702 May be used in sections : defaults | frontend | listen | backend
2703 yes | yes | yes | no
2704 Arguments :
2705 <timeout> is the timeout value is specified in milliseconds by default, but
2706 can be in any other unit if the number is suffixed by the unit,
2707 as explained at the top of this document.
2708
2709 The inactivity timeout applies when the client is expected to acknowledge or
2710 send data. In HTTP mode, this timeout is particularly important to consider
2711 during the first phase, when the client sends the request, and during the
2712 response while it is reading data sent by the server. The value is specified
2713 in milliseconds by default, but can be in any other unit if the number is
2714 suffixed by the unit, as specified at the top of this document. In TCP mode
2715 (and to a lesser extent, in HTTP mode), it is highly recommended that the
2716 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002717 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01002718 losses by specifying timeouts that are slightly above multiples of 3 seconds
2719 (eg: 4 or 5 seconds).
2720
2721 This parameter is specific to frontends, but can be specified once for all in
2722 "defaults" sections. This is in fact one of the easiest solutions not to
2723 forget about it. An unspecified timeout results in an infinite timeout, which
2724 is not recommended. Such a usage is accepted and works but reports a warning
2725 during startup because it may results in accumulation of expired sessions in
2726 the system if the system's timeouts are not configured either.
2727
2728 This parameter is provided for compatibility but is currently deprecated.
2729 Please use "timeout client" instead.
2730
Willy Tarreau036fae02008-01-06 13:24:40 +01002731 See also : "timeout client", "timeout http-request", "timeout server", and
2732 "srvtimeout".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002733
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002734compression algo <algorithm> ...
2735compression type <mime type> ...
Willy Tarreau70737d12012-10-27 00:34:28 +02002736compression offload
William Lallemand82fe75c2012-10-23 10:25:10 +02002737 Enable HTTP compression.
2738 May be used in sections : defaults | frontend | listen | backend
2739 yes | yes | yes | yes
2740 Arguments :
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002741 algo is followed by the list of supported compression algorithms.
2742 type is followed by the list of MIME types that will be compressed.
2743 offload makes haproxy work as a compression offloader only (see notes).
2744
2745 The currently supported algorithms are :
Willy Tarreauc91840a2015-03-28 17:00:39 +01002746 identity this is mostly for debugging, and it was useful for developing
2747 the compression feature. Identity does not apply any change on
2748 data.
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002749
Willy Tarreauc91840a2015-03-28 17:00:39 +01002750 gzip applies gzip compression. This setting is only available when
Baptiste Assmannf085d632015-12-21 17:57:32 +01002751 support for zlib or libslz was built in.
Willy Tarreauc91840a2015-03-28 17:00:39 +01002752
2753 deflate same as "gzip", but with deflate algorithm and zlib format.
2754 Note that this algorithm has ambiguous support on many
2755 browsers and no support at all from recent ones. It is
2756 strongly recommended not to use it for anything else than
2757 experimentation. This setting is only available when support
Baptiste Assmannf085d632015-12-21 17:57:32 +01002758 for zlib or libslz was built in.
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002759
Willy Tarreauc91840a2015-03-28 17:00:39 +01002760 raw-deflate same as "deflate" without the zlib wrapper, and used as an
2761 alternative when the browser wants "deflate". All major
2762 browsers understand it and despite violating the standards,
2763 it is known to work better than "deflate", at least on MSIE
2764 and some versions of Safari. Do not use it in conjunction
2765 with "deflate", use either one or the other since both react
2766 to the same Accept-Encoding token. This setting is only
Baptiste Assmannf085d632015-12-21 17:57:32 +01002767 available when support for zlib or libslz was built in.
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002768
Dmitry Sivachenko87c208b2012-11-22 20:03:26 +04002769 Compression will be activated depending on the Accept-Encoding request
Cyril Bonté316a8cf2012-11-11 13:38:27 +01002770 header. With identity, it does not take care of that header.
Dmitry Sivachenkoc9f3b452012-11-28 17:47:11 +04002771 If backend servers support HTTP compression, these directives
2772 will be no-op: haproxy will see the compressed response and will not
2773 compress again. If backend servers do not support HTTP compression and
2774 there is Accept-Encoding header in request, haproxy will compress the
2775 matching response.
Willy Tarreau70737d12012-10-27 00:34:28 +02002776
2777 The "offload" setting makes haproxy remove the Accept-Encoding header to
2778 prevent backend servers from compressing responses. It is strongly
2779 recommended not to do this because this means that all the compression work
2780 will be done on the single point where haproxy is located. However in some
2781 deployment scenarios, haproxy may be installed in front of a buggy gateway
Dmitry Sivachenkoc9f3b452012-11-28 17:47:11 +04002782 with broken HTTP compression implementation which can't be turned off.
2783 In that case haproxy can be used to prevent that gateway from emitting
2784 invalid payloads. In this case, simply removing the header in the
2785 configuration does not work because it applies before the header is parsed,
2786 so that prevents haproxy from compressing. The "offload" setting should
Willy Tarreauffea9fd2014-07-12 16:37:02 +02002787 then be used for such scenarios. Note: for now, the "offload" setting is
2788 ignored when set in a defaults section.
William Lallemand82fe75c2012-10-23 10:25:10 +02002789
William Lallemand05097442012-11-20 12:14:28 +01002790 Compression is disabled when:
Baptiste Assmann650d53d2013-01-05 15:44:44 +01002791 * the request does not advertise a supported compression algorithm in the
2792 "Accept-Encoding" header
2793 * the response message is not HTTP/1.1
William Lallemandd3002612012-11-26 14:34:47 +01002794 * HTTP status code is not 200
William Lallemand8bb4e342013-12-10 17:28:48 +01002795 * response header "Transfer-Encoding" contains "chunked" (Temporary
2796 Workaround)
Baptiste Assmann650d53d2013-01-05 15:44:44 +01002797 * response contain neither a "Content-Length" header nor a
2798 "Transfer-Encoding" whose last value is "chunked"
2799 * response contains a "Content-Type" header whose first value starts with
2800 "multipart"
2801 * the response contains the "no-transform" value in the "Cache-control"
2802 header
2803 * User-Agent matches "Mozilla/4" unless it is MSIE 6 with XP SP2, or MSIE 7
2804 and later
2805 * The response contains a "Content-Encoding" header, indicating that the
2806 response is already compressed (see compression offload)
William Lallemand05097442012-11-20 12:14:28 +01002807
Baptiste Assmann650d53d2013-01-05 15:44:44 +01002808 Note: The compression does not rewrite Etag headers, and does not emit the
2809 Warning header.
William Lallemand05097442012-11-20 12:14:28 +01002810
William Lallemand82fe75c2012-10-23 10:25:10 +02002811 Examples :
2812 compression algo gzip
2813 compression type text/html text/plain
Willy Tarreau0ba27502007-12-24 16:55:16 +01002814
Christopher Fauletc3fe5332016-04-07 15:30:10 +02002815
Cyril Bontéf0c60612010-02-06 14:44:47 +01002816contimeout <timeout> (deprecated)
Willy Tarreau0ba27502007-12-24 16:55:16 +01002817 Set the maximum time to wait for a connection attempt to a server to succeed.
2818 May be used in sections : defaults | frontend | listen | backend
2819 yes | no | yes | yes
2820 Arguments :
2821 <timeout> is the timeout value is specified in milliseconds by default, but
2822 can be in any other unit if the number is suffixed by the unit,
2823 as explained at the top of this document.
2824
2825 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01002826 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreaud72758d2010-01-12 10:42:19 +01002827 cover one or several TCP packet losses by specifying timeouts that are
Willy Tarreau0ba27502007-12-24 16:55:16 +01002828 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
2829 connect timeout also presets the queue timeout to the same value if this one
2830 has not been specified. Historically, the contimeout was also used to set the
2831 tarpit timeout in a listen section, which is not possible in a pure frontend.
2832
2833 This parameter is specific to backends, but can be specified once for all in
2834 "defaults" sections. This is in fact one of the easiest solutions not to
2835 forget about it. An unspecified timeout results in an infinite timeout, which
2836 is not recommended. Such a usage is accepted and works but reports a warning
2837 during startup because it may results in accumulation of failed sessions in
2838 the system if the system's timeouts are not configured either.
2839
2840 This parameter is provided for backwards compatibility but is currently
2841 deprecated. Please use "timeout connect", "timeout queue" or "timeout tarpit"
2842 instead.
2843
2844 See also : "timeout connect", "timeout queue", "timeout tarpit",
2845 "timeout server", "contimeout".
2846
2847
Willy Tarreau55165fe2009-05-10 12:02:55 +02002848cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ]
Willy Tarreau4992dd22012-05-31 21:02:17 +02002849 [ postonly ] [ preserve ] [ httponly ] [ secure ]
2850 [ domain <domain> ]* [ maxidle <idle> ] [ maxlife <life> ]
Olivier Houchard4e694042017-03-14 20:01:29 +01002851 [ dynamic ]
Willy Tarreau0ba27502007-12-24 16:55:16 +01002852 Enable cookie-based persistence in a backend.
2853 May be used in sections : defaults | frontend | listen | backend
2854 yes | no | yes | yes
2855 Arguments :
2856 <name> is the name of the cookie which will be monitored, modified or
2857 inserted in order to bring persistence. This cookie is sent to
2858 the client via a "Set-Cookie" header in the response, and is
2859 brought back by the client in a "Cookie" header in all requests.
2860 Special care should be taken to choose a name which does not
2861 conflict with any likely application cookie. Also, if the same
2862 backends are subject to be used by the same clients (eg:
2863 HTTP/HTTPS), care should be taken to use different cookie names
2864 between all backends if persistence between them is not desired.
2865
2866 rewrite This keyword indicates that the cookie will be provided by the
2867 server and that haproxy will have to modify its value to set the
2868 server's identifier in it. This mode is handy when the management
2869 of complex combinations of "Set-cookie" and "Cache-control"
2870 headers is left to the application. The application can then
2871 decide whether or not it is appropriate to emit a persistence
Lukas Tribusf01a9cd2016-02-03 18:09:37 +01002872 cookie. Since all responses should be monitored, this mode
2873 doesn't work in HTTP tunnel mode. Unless the application
2874 behaviour is very complex and/or broken, it is advised not to
2875 start with this mode for new deployments. This keyword is
2876 incompatible with "insert" and "prefix".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002877
2878 insert This keyword indicates that the persistence cookie will have to
Willy Tarreaua79094d2010-08-31 22:54:15 +02002879 be inserted by haproxy in server responses if the client did not
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002880
Willy Tarreaua79094d2010-08-31 22:54:15 +02002881 already have a cookie that would have permitted it to access this
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002882 server. When used without the "preserve" option, if the server
2883 emits a cookie with the same name, it will be remove before
2884 processing. For this reason, this mode can be used to upgrade
2885 existing configurations running in the "rewrite" mode. The cookie
2886 will only be a session cookie and will not be stored on the
2887 client's disk. By default, unless the "indirect" option is added,
2888 the server will see the cookies emitted by the client. Due to
2889 caching effects, it is generally wise to add the "nocache" or
2890 "postonly" keywords (see below). The "insert" keyword is not
2891 compatible with "rewrite" and "prefix".
Willy Tarreau0ba27502007-12-24 16:55:16 +01002892
2893 prefix This keyword indicates that instead of relying on a dedicated
2894 cookie for the persistence, an existing one will be completed.
2895 This may be needed in some specific environments where the client
2896 does not support more than one single cookie and the application
2897 already needs it. In this case, whenever the server sets a cookie
2898 named <name>, it will be prefixed with the server's identifier
2899 and a delimiter. The prefix will be removed from all client
2900 requests so that the server still finds the cookie it emitted.
2901 Since all requests and responses are subject to being modified,
Lukas Tribusf01a9cd2016-02-03 18:09:37 +01002902 this mode doesn't work with tunnel mode. The "prefix" keyword is
Willy Tarreau37229df2011-10-17 12:24:55 +02002903 not compatible with "rewrite" and "insert". Note: it is highly
2904 recommended not to use "indirect" with "prefix", otherwise server
2905 cookie updates would not be sent to clients.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002906
Willy Tarreaua79094d2010-08-31 22:54:15 +02002907 indirect When this option is specified, no cookie will be emitted to a
2908 client which already has a valid one for the server which has
2909 processed the request. If the server sets such a cookie itself,
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002910 it will be removed, unless the "preserve" option is also set. In
2911 "insert" mode, this will additionally remove cookies from the
2912 requests transmitted to the server, making the persistence
2913 mechanism totally transparent from an application point of view.
Willy Tarreau37229df2011-10-17 12:24:55 +02002914 Note: it is highly recommended not to use "indirect" with
2915 "prefix", otherwise server cookie updates would not be sent to
2916 clients.
Willy Tarreau0ba27502007-12-24 16:55:16 +01002917
2918 nocache This option is recommended in conjunction with the insert mode
2919 when there is a cache between the client and HAProxy, as it
2920 ensures that a cacheable response will be tagged non-cacheable if
2921 a cookie needs to be inserted. This is important because if all
2922 persistence cookies are added on a cacheable home page for
2923 instance, then all customers will then fetch the page from an
2924 outer cache and will all share the same persistence cookie,
2925 leading to one server receiving much more traffic than others.
2926 See also the "insert" and "postonly" options.
2927
2928 postonly This option ensures that cookie insertion will only be performed
2929 on responses to POST requests. It is an alternative to the
2930 "nocache" option, because POST responses are not cacheable, so
2931 this ensures that the persistence cookie will never get cached.
2932 Since most sites do not need any sort of persistence before the
2933 first POST which generally is a login request, this is a very
2934 efficient method to optimize caching without risking to find a
2935 persistence cookie in the cache.
2936 See also the "insert" and "nocache" options.
2937
Willy Tarreauba4c5be2010-10-23 12:46:42 +02002938 preserve This option may only be used with "insert" and/or "indirect". It
2939 allows the server to emit the persistence cookie itself. In this
2940 case, if a cookie is found in the response, haproxy will leave it
2941 untouched. This is useful in order to end persistence after a
2942 logout request for instance. For this, the server just has to
2943 emit a cookie with an invalid value (eg: empty) or with a date in
2944 the past. By combining this mechanism with the "disable-on-404"
2945 check option, it is possible to perform a completely graceful
2946 shutdown because users will definitely leave the server after
2947 they logout.
2948
Willy Tarreau4992dd22012-05-31 21:02:17 +02002949 httponly This option tells haproxy to add an "HttpOnly" cookie attribute
2950 when a cookie is inserted. This attribute is used so that a
2951 user agent doesn't share the cookie with non-HTTP components.
2952 Please check RFC6265 for more information on this attribute.
2953
2954 secure This option tells haproxy to add a "Secure" cookie attribute when
2955 a cookie is inserted. This attribute is used so that a user agent
2956 never emits this cookie over non-secure channels, which means
2957 that a cookie learned with this flag will be presented only over
2958 SSL/TLS connections. Please check RFC6265 for more information on
2959 this attribute.
2960
Krzysztof Piotr Oledzkiefe3b6f2008-05-23 23:49:32 +02002961 domain This option allows to specify the domain at which a cookie is
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01002962 inserted. It requires exactly one parameter: a valid domain
Willy Tarreau68a897b2009-12-03 23:28:34 +01002963 name. If the domain begins with a dot, the browser is allowed to
2964 use it for any host ending with that name. It is also possible to
2965 specify several domain names by invoking this option multiple
2966 times. Some browsers might have small limits on the number of
2967 domains, so be careful when doing that. For the record, sending
2968 10 domains to MSIE 6 or Firefox 2 works as expected.
Krzysztof Piotr Oledzkiefe3b6f2008-05-23 23:49:32 +02002969
Willy Tarreau996a92c2010-10-13 19:30:47 +02002970 maxidle This option allows inserted cookies to be ignored after some idle
2971 time. It only works with insert-mode cookies. When a cookie is
2972 sent to the client, the date this cookie was emitted is sent too.
2973 Upon further presentations of this cookie, if the date is older
2974 than the delay indicated by the parameter (in seconds), it will
2975 be ignored. Otherwise, it will be refreshed if needed when the
2976 response is sent to the client. This is particularly useful to
2977 prevent users who never close their browsers from remaining for
2978 too long on the same server (eg: after a farm size change). When
2979 this option is set and a cookie has no date, it is always
2980 accepted, but gets refreshed in the response. This maintains the
2981 ability for admins to access their sites. Cookies that have a
2982 date in the future further than 24 hours are ignored. Doing so
2983 lets admins fix timezone issues without risking kicking users off
2984 the site.
2985
2986 maxlife This option allows inserted cookies to be ignored after some life
2987 time, whether they're in use or not. It only works with insert
2988 mode cookies. When a cookie is first sent to the client, the date
2989 this cookie was emitted is sent too. Upon further presentations
2990 of this cookie, if the date is older than the delay indicated by
2991 the parameter (in seconds), it will be ignored. If the cookie in
2992 the request has no date, it is accepted and a date will be set.
2993 Cookies that have a date in the future further than 24 hours are
2994 ignored. Doing so lets admins fix timezone issues without risking
2995 kicking users off the site. Contrary to maxidle, this value is
2996 not refreshed, only the first visit date counts. Both maxidle and
2997 maxlife may be used at the time. This is particularly useful to
2998 prevent users who never close their browsers from remaining for
2999 too long on the same server (eg: after a farm size change). This
3000 is stronger than the maxidle method in that it forces a
3001 redispatch after some absolute delay.
3002
Olivier Houchard4e694042017-03-14 20:01:29 +01003003 dynamic Activate dynamic cookies. When used, a session cookie is
3004 dynamically created for each server, based on the IP and port
3005 of the server, and a secret key, specified in the
3006 "dynamic-cookie-key" backend directive.
3007 The cookie will be regenerated each time the IP address change,
3008 and is only generated for IPv4/IPv6.
3009
Willy Tarreau0ba27502007-12-24 16:55:16 +01003010 There can be only one persistence cookie per HTTP backend, and it can be
3011 declared in a defaults section. The value of the cookie will be the value
3012 indicated after the "cookie" keyword in a "server" statement. If no cookie
3013 is declared for a given server, the cookie is not set.
Willy Tarreau6a06a402007-07-15 20:15:28 +02003014
Willy Tarreau0ba27502007-12-24 16:55:16 +01003015 Examples :
3016 cookie JSESSIONID prefix
3017 cookie SRV insert indirect nocache
3018 cookie SRV insert postonly indirect
Willy Tarreau996a92c2010-10-13 19:30:47 +02003019 cookie SRV insert indirect nocache maxidle 30m maxlife 8h
Willy Tarreau0ba27502007-12-24 16:55:16 +01003020
Willy Tarreau294d0f02015-08-10 19:40:12 +02003021 See also : "balance source", "capture cookie", "server" and "ignore-persist".
Willy Tarreau0ba27502007-12-24 16:55:16 +01003022
Willy Tarreau983e01e2010-01-11 18:42:06 +01003023
Thierry FOURNIERa0a1b752015-05-26 17:44:32 +02003024declare capture [ request | response ] len <length>
3025 Declares a capture slot.
3026 May be used in sections : defaults | frontend | listen | backend
3027 no | yes | yes | no
3028 Arguments:
3029 <length> is the length allowed for the capture.
3030
3031 This declaration is only available in the frontend or listen section, but the
3032 reserved slot can be used in the backends. The "request" keyword allocates a
3033 capture slot for use in the request, and "response" allocates a capture slot
3034 for use in the response.
3035
3036 See also: "capture-req", "capture-res" (sample converters),
Baptiste Assmann5ac425c2015-10-21 23:13:46 +02003037 "capture.req.hdr", "capture.res.hdr" (sample fetches),
Thierry FOURNIERa0a1b752015-05-26 17:44:32 +02003038 "http-request capture" and "http-response capture".
3039
3040
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01003041default-server [param*]
3042 Change default options for a server in a backend
3043 May be used in sections : defaults | frontend | listen | backend
3044 yes | no | yes | yes
3045 Arguments:
Willy Tarreau983e01e2010-01-11 18:42:06 +01003046 <param*> is a list of parameters for this server. The "default-server"
3047 keyword accepts an important number of options and has a complete
3048 section dedicated to it. Please refer to section 5 for more
3049 details.
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01003050
Willy Tarreau983e01e2010-01-11 18:42:06 +01003051 Example :
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +01003052 default-server inter 1000 weight 13
3053
3054 See also: "server" and section 5 about server options
Willy Tarreau0ba27502007-12-24 16:55:16 +01003055
Willy Tarreau983e01e2010-01-11 18:42:06 +01003056
Willy Tarreau0ba27502007-12-24 16:55:16 +01003057default_backend <backend>
3058 Specify the backend to use when no "use_backend" rule has been matched.
3059 May be used in sections : defaults | frontend | listen | backend
3060 yes | yes | yes | no
3061 Arguments :
3062 <backend> is the name of the backend to use.
3063
3064 When doing content-switching between frontend and backends using the
3065 "use_backend" keyword, it is often useful to indicate which backend will be
3066 used when no rule has matched. It generally is the dynamic backend which
3067 will catch all undetermined requests.
3068
Willy Tarreau0ba27502007-12-24 16:55:16 +01003069 Example :
3070
3071 use_backend dynamic if url_dyn
3072 use_backend static if url_css url_img extension_img
3073 default_backend dynamic
3074
Willy Tarreau98d04852015-05-26 12:18:29 +02003075 See also : "use_backend"
Willy Tarreau2769aa02007-12-27 18:26:09 +01003076
Willy Tarreau0ba27502007-12-24 16:55:16 +01003077
Baptiste Assmann27f51342013-10-09 06:51:49 +02003078description <string>
3079 Describe a listen, frontend or backend.
3080 May be used in sections : defaults | frontend | listen | backend
3081 no | yes | yes | yes
3082 Arguments : string
3083
3084 Allows to add a sentence to describe the related object in the HAProxy HTML
3085 stats page. The description will be printed on the right of the object name
3086 it describes.
3087 No need to backslash spaces in the <string> arguments.
3088
3089
Willy Tarreau0ba27502007-12-24 16:55:16 +01003090disabled
3091 Disable a proxy, frontend or backend.
3092 May be used in sections : defaults | frontend | listen | backend
3093 yes | yes | yes | yes
3094 Arguments : none
3095
3096 The "disabled" keyword is used to disable an instance, mainly in order to
3097 liberate a listening port or to temporarily disable a service. The instance
3098 will still be created and its configuration will be checked, but it will be
3099 created in the "stopped" state and will appear as such in the statistics. It
3100 will not receive any traffic nor will it send any health-checks or logs. It
3101 is possible to disable many instances at once by adding the "disabled"
3102 keyword in a "defaults" section.
3103
3104 See also : "enabled"
3105
3106
Willy Tarreau5ce94572010-06-07 14:35:41 +02003107dispatch <address>:<port>
3108 Set a default server address
3109 May be used in sections : defaults | frontend | listen | backend
3110 no | no | yes | yes
Cyril Bonté108cf6e2012-04-21 23:30:29 +02003111 Arguments :
Willy Tarreau5ce94572010-06-07 14:35:41 +02003112
3113 <address> is the IPv4 address of the default server. Alternatively, a
3114 resolvable hostname is supported, but this name will be resolved
3115 during start-up.
3116
3117 <ports> is a mandatory port specification. All connections will be sent
3118 to this port, and it is not permitted to use port offsets as is
3119 possible with normal servers.
3120
Willy Tarreau787aed52011-04-15 06:45:37 +02003121 The "dispatch" keyword designates a default server for use when no other
Willy Tarreau5ce94572010-06-07 14:35:41 +02003122 server can take the connection. In the past it was used to forward non
3123 persistent connections to an auxiliary load balancer. Due to its simple
3124 syntax, it has also been used for simple TCP relays. It is recommended not to
3125 use it for more clarity, and to use the "server" directive instead.
3126
3127 See also : "server"
3128
Olivier Houchard4e694042017-03-14 20:01:29 +01003129
3130dynamic-cookie-key <string>
3131 Set the dynamic cookie secret key for a backend.
3132 May be used in sections : defaults | frontend | listen | backend
3133 yes | no | yes | yes
3134 Arguments : The secret key to be used.
3135
3136 When dynamic cookies are enabled (see the "dynamic" directive for cookie),
3137 a dynamic cookie is created for each server (unless one is explicitely
3138 specified on the "server" line), using a hash of the IP address of the
3139 server, the TCP port, and the secret key.
3140 That way, we can ensure session persistence accross multiple load-balancers,
3141 even if servers are dynamically added or removed.
Willy Tarreau5ce94572010-06-07 14:35:41 +02003142
Willy Tarreau0ba27502007-12-24 16:55:16 +01003143enabled
3144 Enable a proxy, frontend or backend.
3145 May be used in sections : defaults | frontend | listen | backend
3146 yes | yes | yes | yes
3147 Arguments : none
3148
3149 The "enabled" keyword is used to explicitly enable an instance, when the
3150 defaults has been set to "disabled". This is very rarely used.
3151
3152 See also : "disabled"
3153
3154
3155errorfile <code> <file>
3156 Return a file contents instead of errors generated by HAProxy
3157 May be used in sections : defaults | frontend | listen | backend
3158 yes | yes | yes | yes
3159 Arguments :
3160 <code> is the HTTP status code. Currently, HAProxy is capable of
Olivier Houchard51a76d82017-10-02 16:12:07 +02003161 generating codes 200, 400, 403, 405, 408, 425, 429, 500, 502,
3162 503, and 504.
Willy Tarreau0ba27502007-12-24 16:55:16 +01003163
3164 <file> designates a file containing the full HTTP response. It is
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003165 recommended to follow the common practice of appending ".http" to
Willy Tarreau0ba27502007-12-24 16:55:16 +01003166 the filename so that people do not confuse the response with HTML
Willy Tarreau59140a22009-02-22 12:02:30 +01003167 error pages, and to use absolute paths, since files are read
3168 before any chroot is performed.
Willy Tarreau0ba27502007-12-24 16:55:16 +01003169
3170 It is important to understand that this keyword is not meant to rewrite
3171 errors returned by the server, but errors detected and returned by HAProxy.
3172 This is why the list of supported errors is limited to a small set.
3173
Willy Tarreauae94d4d2011-05-11 16:28:49 +02003174 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
3175
Willy Tarreau0ba27502007-12-24 16:55:16 +01003176 The files are returned verbatim on the TCP socket. This allows any trick such
3177 as redirections to another URL or site, as well as tricks to clean cookies,
3178 force enable or disable caching, etc... The package provides default error
3179 files returning the same contents as default errors.
3180
Willy Tarreau59140a22009-02-22 12:02:30 +01003181 The files should not exceed the configured buffer size (BUFSIZE), which
3182 generally is 8 or 16 kB, otherwise they will be truncated. It is also wise
3183 not to put any reference to local contents (eg: images) in order to avoid
3184 loops between the client and HAProxy when all servers are down, causing an
3185 error to be returned instead of an image. For better HTTP compliance, it is
3186 recommended that all header lines end with CR-LF and not LF alone.
3187
Willy Tarreau0ba27502007-12-24 16:55:16 +01003188 The files are read at the same time as the configuration and kept in memory.
3189 For this reason, the errors continue to be returned even when the process is
3190 chrooted, and no file change is considered while the process is running. A
Willy Tarreauc27debf2008-01-06 08:57:02 +01003191 simple method for developing those files consists in associating them to the
Willy Tarreau0ba27502007-12-24 16:55:16 +01003192 403 status code and interrogating a blocked URL.
3193
3194 See also : "errorloc", "errorloc302", "errorloc303"
3195
Willy Tarreau59140a22009-02-22 12:02:30 +01003196 Example :
3197 errorfile 400 /etc/haproxy/errorfiles/400badreq.http
Willy Tarreau989222a2016-01-15 10:26:26 +01003198 errorfile 408 /dev/null # work around Chrome pre-connect bug
Willy Tarreau59140a22009-02-22 12:02:30 +01003199 errorfile 403 /etc/haproxy/errorfiles/403forbid.http
3200 errorfile 503 /etc/haproxy/errorfiles/503sorry.http
3201
Willy Tarreau2769aa02007-12-27 18:26:09 +01003202
3203errorloc <code> <url>
3204errorloc302 <code> <url>
3205 Return an HTTP redirection to a URL instead of errors generated by HAProxy
3206 May be used in sections : defaults | frontend | listen | backend
3207 yes | yes | yes | yes
3208 Arguments :
3209 <code> is the HTTP status code. Currently, HAProxy is capable of
Olivier Houchard51a76d82017-10-02 16:12:07 +02003210 generating codes 200, 400, 403, 405, 408, 425, 429, 500, 502,
3211 503, and 504.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003212
3213 <url> it is the exact contents of the "Location" header. It may contain
3214 either a relative URI to an error page hosted on the same site,
3215 or an absolute URI designating an error page on another site.
3216 Special care should be given to relative URIs to avoid redirect
3217 loops if the URI itself may generate the same error (eg: 500).
3218
3219 It is important to understand that this keyword is not meant to rewrite
3220 errors returned by the server, but errors detected and returned by HAProxy.
3221 This is why the list of supported errors is limited to a small set.
3222
Willy Tarreauae94d4d2011-05-11 16:28:49 +02003223 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
3224
Willy Tarreau2769aa02007-12-27 18:26:09 +01003225 Note that both keyword return the HTTP 302 status code, which tells the
3226 client to fetch the designated URL using the same HTTP method. This can be
3227 quite problematic in case of non-GET methods such as POST, because the URL
3228 sent to the client might not be allowed for something other than GET. To
Willy Tarreau989222a2016-01-15 10:26:26 +01003229 work around this problem, please use "errorloc303" which send the HTTP 303
Willy Tarreau2769aa02007-12-27 18:26:09 +01003230 status code, indicating to the client that the URL must be fetched with a GET
3231 request.
3232
3233 See also : "errorfile", "errorloc303"
3234
3235
3236errorloc303 <code> <url>
3237 Return an HTTP redirection to a URL instead of errors generated by HAProxy
3238 May be used in sections : defaults | frontend | listen | backend
3239 yes | yes | yes | yes
3240 Arguments :
3241 <code> is the HTTP status code. Currently, HAProxy is capable of
Olivier Houchard51a76d82017-10-02 16:12:07 +02003242 generating codes 200, 400, 403, 405, 408, 425, 429, 500, 502,
3243 503, and 504.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003244
3245 <url> it is the exact contents of the "Location" header. It may contain
3246 either a relative URI to an error page hosted on the same site,
3247 or an absolute URI designating an error page on another site.
3248 Special care should be given to relative URIs to avoid redirect
3249 loops if the URI itself may generate the same error (eg: 500).
3250
3251 It is important to understand that this keyword is not meant to rewrite
3252 errors returned by the server, but errors detected and returned by HAProxy.
3253 This is why the list of supported errors is limited to a small set.
3254
Willy Tarreauae94d4d2011-05-11 16:28:49 +02003255 Code 200 is emitted in response to requests matching a "monitor-uri" rule.
3256
Willy Tarreau2769aa02007-12-27 18:26:09 +01003257 Note that both keyword return the HTTP 303 status code, which tells the
3258 client to fetch the designated URL using the same HTTP GET method. This
3259 solves the usual problems associated with "errorloc" and the 302 code. It is
3260 possible that some very old browsers designed before HTTP/1.1 do not support
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01003261 it, but no such problem has been reported till now.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003262
3263 See also : "errorfile", "errorloc", "errorloc302"
3264
3265
Simon Horman51a1cf62015-02-03 13:00:44 +09003266email-alert from <emailaddr>
3267 Declare the from email address to be used in both the envelope and header
3268 of email alerts. This is the address that email alerts are sent from.
3269 May be used in sections: defaults | frontend | listen | backend
3270 yes | yes | yes | yes
3271
3272 Arguments :
3273
3274 <emailaddr> is the from email address to use when sending email alerts
3275
3276 Also requires "email-alert mailers" and "email-alert to" to be set
3277 and if so sending email alerts is enabled for the proxy.
3278
Simon Horman64e34162015-02-06 11:11:57 +09003279 See also : "email-alert level", "email-alert mailers",
Cyril Bonté307ee1e2015-09-28 23:16:06 +02003280 "email-alert myhostname", "email-alert to", section 3.6 about
3281 mailers.
Simon Horman64e34162015-02-06 11:11:57 +09003282
3283
3284email-alert level <level>
3285 Declare the maximum log level of messages for which email alerts will be
3286 sent. This acts as a filter on the sending of email alerts.
3287 May be used in sections: defaults | frontend | listen | backend
3288 yes | yes | yes | yes
3289
3290 Arguments :
3291
3292 <level> One of the 8 syslog levels:
3293 emerg alert crit err warning notice info debug
3294 The above syslog levels are ordered from lowest to highest.
3295
3296 By default level is alert
3297
3298 Also requires "email-alert from", "email-alert mailers" and
3299 "email-alert to" to be set and if so sending email alerts is enabled
3300 for the proxy.
3301
Simon Horman1421e212015-04-30 13:10:35 +09003302 Alerts are sent when :
3303
3304 * An un-paused server is marked as down and <level> is alert or lower
3305 * A paused server is marked as down and <level> is notice or lower
3306 * A server is marked as up or enters the drain state and <level>
3307 is notice or lower
3308 * "option log-health-checks" is enabled, <level> is info or lower,
3309 and a health check status update occurs
3310
Simon Horman64e34162015-02-06 11:11:57 +09003311 See also : "email-alert from", "email-alert mailers",
3312 "email-alert myhostname", "email-alert to",
Simon Horman51a1cf62015-02-03 13:00:44 +09003313 section 3.6 about mailers.
3314
3315
3316email-alert mailers <mailersect>
3317 Declare the mailers to be used when sending email alerts
3318 May be used in sections: defaults | frontend | listen | backend
3319 yes | yes | yes | yes
3320
3321 Arguments :
3322
3323 <mailersect> is the name of the mailers section to send email alerts.
3324
3325 Also requires "email-alert from" and "email-alert to" to be set
3326 and if so sending email alerts is enabled for the proxy.
3327
Simon Horman64e34162015-02-06 11:11:57 +09003328 See also : "email-alert from", "email-alert level", "email-alert myhostname",
3329 "email-alert to", section 3.6 about mailers.
Simon Horman51a1cf62015-02-03 13:00:44 +09003330
3331
3332email-alert myhostname <hostname>
3333 Declare the to hostname address to be used when communicating with
3334 mailers.
3335 May be used in sections: defaults | frontend | listen | backend
3336 yes | yes | yes | yes
3337
3338 Arguments :
3339
Baptiste Assmann738bad92015-12-21 15:27:53 +01003340 <hostname> is the hostname to use when communicating with mailers
Simon Horman51a1cf62015-02-03 13:00:44 +09003341
3342 By default the systems hostname is used.
3343
3344 Also requires "email-alert from", "email-alert mailers" and
3345 "email-alert to" to be set and if so sending email alerts is enabled
3346 for the proxy.
3347
Simon Horman64e34162015-02-06 11:11:57 +09003348 See also : "email-alert from", "email-alert level", "email-alert mailers",
3349 "email-alert to", section 3.6 about mailers.
Simon Horman51a1cf62015-02-03 13:00:44 +09003350
3351
3352email-alert to <emailaddr>
3353 Declare both the recipent address in the envelope and to address in the
3354 header of email alerts. This is the address that email alerts are sent to.
3355 May be used in sections: defaults | frontend | listen | backend
3356 yes | yes | yes | yes
3357
3358 Arguments :
3359
3360 <emailaddr> is the to email address to use when sending email alerts
3361
3362 Also requires "email-alert mailers" and "email-alert to" to be set
3363 and if so sending email alerts is enabled for the proxy.
3364
Simon Horman64e34162015-02-06 11:11:57 +09003365 See also : "email-alert from", "email-alert level", "email-alert mailers",
Simon Horman51a1cf62015-02-03 13:00:44 +09003366 "email-alert myhostname", section 3.6 about mailers.
3367
3368
Willy Tarreau4de91492010-01-22 19:10:05 +01003369force-persist { if | unless } <condition>
3370 Declare a condition to force persistence on down servers
3371 May be used in sections: defaults | frontend | listen | backend
3372 no | yes | yes | yes
3373
3374 By default, requests are not dispatched to down servers. It is possible to
3375 force this using "option persist", but it is unconditional and redispatches
3376 to a valid server if "option redispatch" is set. That leaves with very little
3377 possibilities to force some requests to reach a server which is artificially
3378 marked down for maintenance operations.
3379
3380 The "force-persist" statement allows one to declare various ACL-based
3381 conditions which, when met, will cause a request to ignore the down status of
3382 a server and still try to connect to it. That makes it possible to start a
3383 server, still replying an error to the health checks, and run a specially
3384 configured browser to test the service. Among the handy methods, one could
3385 use a specific source IP address, or a specific cookie. The cookie also has
3386 the advantage that it can easily be added/removed on the browser from a test
3387 page. Once the service is validated, it is then possible to open the service
3388 to the world by returning a valid response to health checks.
3389
3390 The forced persistence is enabled when an "if" condition is met, or unless an
3391 "unless" condition is met. The final redispatch is always disabled when this
3392 is used.
3393
Cyril Bonté0d4bf012010-04-25 23:21:46 +02003394 See also : "option redispatch", "ignore-persist", "persist",
Cyril Bontéa8e7bbc2010-04-25 22:29:29 +02003395 and section 7 about ACL usage.
Willy Tarreau4de91492010-01-22 19:10:05 +01003396
Christopher Fauletc3fe5332016-04-07 15:30:10 +02003397
3398filter <name> [param*]
3399 Add the filter <name> in the filter list attached to the proxy.
3400 May be used in sections : defaults | frontend | listen | backend
3401 no | yes | yes | yes
3402 Arguments :
3403 <name> is the name of the filter. Officially supported filters are
3404 referenced in section 9.
3405
Tim Düsterhus4896c442016-11-29 02:15:19 +01003406 <param*> is a list of parameters accepted by the filter <name>. The
Christopher Fauletc3fe5332016-04-07 15:30:10 +02003407 parsing of these parameters are the responsibility of the
Tim Düsterhus4896c442016-11-29 02:15:19 +01003408 filter. Please refer to the documentation of the corresponding
3409 filter (section 9) for all details on the supported parameters.
Christopher Fauletc3fe5332016-04-07 15:30:10 +02003410
3411 Multiple occurrences of the filter line can be used for the same proxy. The
3412 same filter can be referenced many times if needed.
3413
3414 Example:
3415 listen
3416 bind *:80
3417
3418 filter trace name BEFORE-HTTP-COMP
3419 filter compression
3420 filter trace name AFTER-HTTP-COMP
3421
3422 compression algo gzip
3423 compression offload
3424
3425 server srv1 192.168.0.1:80
3426
3427 See also : section 9.
3428
Willy Tarreau4de91492010-01-22 19:10:05 +01003429
Willy Tarreau2769aa02007-12-27 18:26:09 +01003430fullconn <conns>
3431 Specify at what backend load the servers will reach their maxconn
3432 May be used in sections : defaults | frontend | listen | backend
3433 yes | no | yes | yes
3434 Arguments :
3435 <conns> is the number of connections on the backend which will make the
3436 servers use the maximal number of connections.
3437
Willy Tarreau198a7442008-01-17 12:05:32 +01003438 When a server has a "maxconn" parameter specified, it means that its number
Willy Tarreau2769aa02007-12-27 18:26:09 +01003439 of concurrent connections will never go higher. Additionally, if it has a
Willy Tarreau198a7442008-01-17 12:05:32 +01003440 "minconn" parameter, it indicates a dynamic limit following the backend's
Willy Tarreau2769aa02007-12-27 18:26:09 +01003441 load. The server will then always accept at least <minconn> connections,
3442 never more than <maxconn>, and the limit will be on the ramp between both
3443 values when the backend has less than <conns> concurrent connections. This
3444 makes it possible to limit the load on the servers during normal loads, but
3445 push it further for important loads without overloading the servers during
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003446 exceptional loads.
Willy Tarreau2769aa02007-12-27 18:26:09 +01003447
Willy Tarreaufbb78422011-06-05 15:38:35 +02003448 Since it's hard to get this value right, haproxy automatically sets it to
3449 10% of the sum of the maxconns of all frontends that may branch to this
Bertrand Jacquin702d44f2013-11-19 11:43:06 +01003450 backend (based on "use_backend" and "default_backend" rules). That way it's
3451 safe to leave it unset. However, "use_backend" involving dynamic names are
3452 not counted since there is no way to know if they could match or not.
Willy Tarreaufbb78422011-06-05 15:38:35 +02003453
Willy Tarreau2769aa02007-12-27 18:26:09 +01003454 Example :
3455 # The servers will accept between 100 and 1000 concurrent connections each
3456 # and the maximum of 1000 will be reached when the backend reaches 10000
3457 # connections.
3458 backend dynamic
3459 fullconn 10000
3460 server srv1 dyn1:80 minconn 100 maxconn 1000
3461 server srv2 dyn2:80 minconn 100 maxconn 1000
3462
3463 See also : "maxconn", "server"
3464
3465
3466grace <time>
3467 Maintain a proxy operational for some time after a soft stop
3468 May be used in sections : defaults | frontend | listen | backend
Cyril Bonté99ed3272010-01-24 23:29:44 +01003469 yes | yes | yes | yes
Willy Tarreau2769aa02007-12-27 18:26:09 +01003470 Arguments :
3471 <time> is the time (by default in milliseconds) for which the instance
3472 will remain operational with the frontend sockets still listening
3473 when a soft-stop is received via the SIGUSR1 signal.
3474
3475 This may be used to ensure that the services disappear in a certain order.
3476 This was designed so that frontends which are dedicated to monitoring by an
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01003477 external equipment fail immediately while other ones remain up for the time
Willy Tarreau2769aa02007-12-27 18:26:09 +01003478 needed by the equipment to detect the failure.
3479
3480 Note that currently, there is very little benefit in using this parameter,
3481 and it may in fact complicate the soft-reconfiguration process more than
3482 simplify it.
3483
Willy Tarreau0ba27502007-12-24 16:55:16 +01003484
Andrew Rodland17be45e2016-10-25 17:04:12 -04003485hash-balance-factor <factor>
3486 Specify the balancing factor for bounded-load consistent hashing
3487 May be used in sections : defaults | frontend | listen | backend
3488 yes | no | no | yes
3489 Arguments :
3490 <factor> is the control for the maximum number of concurrent requests to
3491 send to a server, expressed as a percentage of the average number
3492 of concurrent requests across all of the active servers.
3493
3494 Specifying a "hash-balance-factor" for a server with "hash-type consistent"
3495 enables an algorithm that prevents any one server from getting too many
3496 requests at once, even if some hash buckets receive many more requests than
3497 others. Setting <factor> to 0 (the default) disables the feature. Otherwise,
3498 <factor> is a percentage greater than 100. For example, if <factor> is 150,
3499 then no server will be allowed to have a load more than 1.5 times the average.
3500 If server weights are used, they will be respected.
3501
3502 If the first-choice server is disqualified, the algorithm will choose another
3503 server based on the request hash, until a server with additional capacity is
3504 found. A higher <factor> allows more imbalance between the servers, while a
3505 lower <factor> means that more servers will be checked on average, affecting
3506 performance. Reasonable values are from 125 to 200.
3507
3508 See also : "balance" and "hash-type".
3509
3510
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003511hash-type <method> <function> <modifier>
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003512 Specify a method to use for mapping hashes to servers
3513 May be used in sections : defaults | frontend | listen | backend
3514 yes | no | yes | yes
3515 Arguments :
Bhaskar98634f02013-10-29 23:30:51 -04003516 <method> is the method used to select a server from the hash computed by
3517 the <function> :
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003518
Bhaskar98634f02013-10-29 23:30:51 -04003519 map-based the hash table is a static array containing all alive servers.
3520 The hashes will be very smooth, will consider weights, but
3521 will be static in that weight changes while a server is up
3522 will be ignored. This means that there will be no slow start.
3523 Also, since a server is selected by its position in the array,
3524 most mappings are changed when the server count changes. This
3525 means that when a server goes up or down, or when a server is
3526 added to a farm, most connections will be redistributed to
3527 different servers. This can be inconvenient with caches for
3528 instance.
Willy Tarreau798a39c2010-11-24 15:04:29 +01003529
Bhaskar98634f02013-10-29 23:30:51 -04003530 consistent the hash table is a tree filled with many occurrences of each
3531 server. The hash key is looked up in the tree and the closest
3532 server is chosen. This hash is dynamic, it supports changing
3533 weights while the servers are up, so it is compatible with the
3534 slow start feature. It has the advantage that when a server
3535 goes up or down, only its associations are moved. When a
3536 server is added to the farm, only a few part of the mappings
3537 are redistributed, making it an ideal method for caches.
3538 However, due to its principle, the distribution will never be
3539 very smooth and it may sometimes be necessary to adjust a
3540 server's weight or its ID to get a more balanced distribution.
3541 In order to get the same distribution on multiple load
3542 balancers, it is important that all servers have the exact
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003543 same IDs. Note: consistent hash uses sdbm and avalanche if no
3544 hash function is specified.
Bhaskar98634f02013-10-29 23:30:51 -04003545
3546 <function> is the hash function to be used :
3547
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03003548 sdbm this function was created initially for sdbm (a public-domain
Bhaskar98634f02013-10-29 23:30:51 -04003549 reimplementation of ndbm) database library. It was found to do
3550 well in scrambling bits, causing better distribution of the keys
3551 and fewer splits. It also happens to be a good general hashing
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003552 function with good distribution, unless the total server weight
3553 is a multiple of 64, in which case applying the avalanche
3554 modifier may help.
Bhaskar98634f02013-10-29 23:30:51 -04003555
3556 djb2 this function was first proposed by Dan Bernstein many years ago
3557 on comp.lang.c. Studies have shown that for certain workload this
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003558 function provides a better distribution than sdbm. It generally
3559 works well with text-based inputs though it can perform extremely
3560 poorly with numeric-only input or when the total server weight is
3561 a multiple of 33, unless the avalanche modifier is also used.
3562
Willy Tarreaua0f42712013-11-14 14:30:35 +01003563 wt6 this function was designed for haproxy while testing other
3564 functions in the past. It is not as smooth as the other ones, but
3565 is much less sensible to the input data set or to the number of
3566 servers. It can make sense as an alternative to sdbm+avalanche or
3567 djb2+avalanche for consistent hashing or when hashing on numeric
3568 data such as a source IP address or a visitor identifier in a URL
3569 parameter.
3570
Willy Tarreau324f07f2015-01-20 19:44:50 +01003571 crc32 this is the most common CRC32 implementation as used in Ethernet,
3572 gzip, PNG, etc. It is slower than the other ones but may provide
3573 a better distribution or less predictable results especially when
3574 used on strings.
3575
Bhaskar Maddalab6c0ac92013-11-05 11:54:02 -05003576 <modifier> indicates an optional method applied after hashing the key :
3577
3578 avalanche This directive indicates that the result from the hash
3579 function above should not be used in its raw form but that
3580 a 4-byte full avalanche hash must be applied first. The
3581 purpose of this step is to mix the resulting bits from the
3582 previous hash in order to avoid any undesired effect when
3583 the input contains some limited values or when the number of
3584 servers is a multiple of one of the hash's components (64
3585 for SDBM, 33 for DJB2). Enabling avalanche tends to make the
3586 result less predictable, but it's also not as smooth as when
3587 using the original function. Some testing might be needed
3588 with some workloads. This hash is one of the many proposed
3589 by Bob Jenkins.
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003590
Bhaskar98634f02013-10-29 23:30:51 -04003591 The default hash type is "map-based" and is recommended for most usages. The
3592 default function is "sdbm", the selection of a function should be based on
3593 the range of the values being hashed.
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003594
Andrew Rodland17be45e2016-10-25 17:04:12 -04003595 See also : "balance", "hash-balance-factor", "server"
Willy Tarreau6b2e11b2009-10-01 07:52:15 +02003596
3597
Willy Tarreau0ba27502007-12-24 16:55:16 +01003598http-check disable-on-404
3599 Enable a maintenance mode upon HTTP/404 response to health-checks
3600 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau2769aa02007-12-27 18:26:09 +01003601 yes | no | yes | yes
Willy Tarreau0ba27502007-12-24 16:55:16 +01003602 Arguments : none
3603
3604 When this option is set, a server which returns an HTTP code 404 will be
3605 excluded from further load-balancing, but will still receive persistent
3606 connections. This provides a very convenient method for Web administrators
3607 to perform a graceful shutdown of their servers. It is also important to note
3608 that a server which is detected as failed while it was in this mode will not
3609 generate an alert, just a notice. If the server responds 2xx or 3xx again, it
3610 will immediately be reinserted into the farm. The status on the stats page
3611 reports "NOLB" for a server in this mode. It is important to note that this
Willy Tarreaubd741542010-03-16 18:46:54 +01003612 option only works in conjunction with the "httpchk" option. If this option
3613 is used with "http-check expect", then it has precedence over it so that 404
3614 responses will still be considered as soft-stop.
3615
3616 See also : "option httpchk", "http-check expect"
3617
3618
3619http-check expect [!] <match> <pattern>
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003620 Make HTTP health checks consider response contents or specific status codes
Willy Tarreaubd741542010-03-16 18:46:54 +01003621 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau1ee51a62011-08-19 20:04:17 +02003622 yes | no | yes | yes
Willy Tarreaubd741542010-03-16 18:46:54 +01003623 Arguments :
3624 <match> is a keyword indicating how to look for a specific pattern in the
3625 response. The keyword may be one of "status", "rstatus",
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003626 "string", or "rstring". The keyword may be preceded by an
Willy Tarreaubd741542010-03-16 18:46:54 +01003627 exclamation mark ("!") to negate the match. Spaces are allowed
3628 between the exclamation mark and the keyword. See below for more
3629 details on the supported keywords.
3630
3631 <pattern> is the pattern to look for. It may be a string or a regular
3632 expression. If the pattern contains spaces, they must be escaped
3633 with the usual backslash ('\').
3634
3635 By default, "option httpchk" considers that response statuses 2xx and 3xx
3636 are valid, and that others are invalid. When "http-check expect" is used,
3637 it defines what is considered valid or invalid. Only one "http-check"
3638 statement is supported in a backend. If a server fails to respond or times
3639 out, the check obviously fails. The available matches are :
3640
3641 status <string> : test the exact string match for the HTTP status code.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003642 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003643 response's status code is exactly this string. If the
3644 "status" keyword is prefixed with "!", then the response
3645 will be considered invalid if the status code matches.
3646
3647 rstatus <regex> : test a regular expression for the HTTP status code.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003648 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003649 response's status code matches the expression. If the
3650 "rstatus" keyword is prefixed with "!", then the response
3651 will be considered invalid if the status code matches.
3652 This is mostly used to check for multiple codes.
3653
3654 string <string> : test the exact string match in the HTTP response body.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003655 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003656 response's body contains this exact string. If the
3657 "string" keyword is prefixed with "!", then the response
3658 will be considered invalid if the body contains this
3659 string. This can be used to look for a mandatory word at
3660 the end of a dynamic page, or to detect a failure when a
3661 specific error appears on the check page (eg: a stack
3662 trace).
3663
3664 rstring <regex> : test a regular expression on the HTTP response body.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04003665 A health check response will be considered valid if the
Willy Tarreaubd741542010-03-16 18:46:54 +01003666 response's body matches this expression. If the "rstring"
3667 keyword is prefixed with "!", then the response will be
3668 considered invalid if the body matches the expression.
3669 This can be used to look for a mandatory word at the end
3670 of a dynamic page, or to detect a failure when a specific
3671 error appears on the check page (eg: a stack trace).
3672
3673 It is important to note that the responses will be limited to a certain size
3674 defined by the global "tune.chksize" option, which defaults to 16384 bytes.
3675 Thus, too large responses may not contain the mandatory pattern when using
3676 "string" or "rstring". If a large response is absolutely required, it is
3677 possible to change the default max size by setting the global variable.
3678 However, it is worth keeping in mind that parsing very large responses can
3679 waste some CPU cycles, especially when regular expressions are used, and that
3680 it is always better to focus the checks on smaller resources.
3681
Cyril Bonté32602d22015-01-30 00:07:07 +01003682 Also "http-check expect" doesn't support HTTP keep-alive. Keep in mind that it
3683 will automatically append a "Connection: close" header, meaning that this
3684 header should not be present in the request provided by "option httpchk".
3685
Willy Tarreaubd741542010-03-16 18:46:54 +01003686 Last, if "http-check expect" is combined with "http-check disable-on-404",
3687 then this last one has precedence when the server responds with 404.
3688
3689 Examples :
3690 # only accept status 200 as valid
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01003691 http-check expect status 200
Willy Tarreaubd741542010-03-16 18:46:54 +01003692
3693 # consider SQL errors as errors
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01003694 http-check expect ! string SQL\ Error
Willy Tarreaubd741542010-03-16 18:46:54 +01003695
3696 # consider status 5xx only as errors
Willy Tarreau8f2a1e72011-01-06 16:36:10 +01003697 http-check expect ! rstatus ^5
Willy Tarreaubd741542010-03-16 18:46:54 +01003698
3699 # check that we have a correct hexadecimal tag before /html
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03003700 http-check expect rstring <!--tag:[0-9a-f]*--></html>
Willy Tarreau0ba27502007-12-24 16:55:16 +01003701
Willy Tarreaubd741542010-03-16 18:46:54 +01003702 See also : "option httpchk", "http-check disable-on-404"
Willy Tarreau2769aa02007-12-27 18:26:09 +01003703
3704
Willy Tarreauef781042010-01-27 11:53:01 +01003705http-check send-state
3706 Enable emission of a state header with HTTP health checks
3707 May be used in sections : defaults | frontend | listen | backend
3708 yes | no | yes | yes
3709 Arguments : none
3710
3711 When this option is set, haproxy will systematically send a special header
3712 "X-Haproxy-Server-State" with a list of parameters indicating to each server
3713 how they are seen by haproxy. This can be used for instance when a server is
3714 manipulated without access to haproxy and the operator needs to know whether
3715 haproxy still sees it up or not, or if the server is the last one in a farm.
3716
3717 The header is composed of fields delimited by semi-colons, the first of which
3718 is a word ("UP", "DOWN", "NOLB"), possibly followed by a number of valid
3719 checks on the total number before transition, just as appears in the stats
3720 interface. Next headers are in the form "<variable>=<value>", indicating in
3721 no specific order some values available in the stats interface :
Joseph Lynch514061c2015-01-15 17:52:59 -08003722 - a variable "address", containing the address of the backend server.
3723 This corresponds to the <address> field in the server declaration. For
3724 unix domain sockets, it will read "unix".
3725
3726 - a variable "port", containing the port of the backend server. This
3727 corresponds to the <port> field in the server declaration. For unix
3728 domain sockets, it will read "unix".
3729
Willy Tarreauef781042010-01-27 11:53:01 +01003730 - a variable "name", containing the name of the backend followed by a slash
3731 ("/") then the name of the server. This can be used when a server is
3732 checked in multiple backends.
3733
3734 - a variable "node" containing the name of the haproxy node, as set in the
3735 global "node" variable, otherwise the system's hostname if unspecified.
3736
3737 - a variable "weight" indicating the weight of the server, a slash ("/")
3738 and the total weight of the farm (just counting usable servers). This
3739 helps to know if other servers are available to handle the load when this
3740 one fails.
3741
3742 - a variable "scur" indicating the current number of concurrent connections
3743 on the server, followed by a slash ("/") then the total number of
3744 connections on all servers of the same backend.
3745
3746 - a variable "qcur" indicating the current number of requests in the
3747 server's queue.
3748
3749 Example of a header received by the application server :
3750 >>> X-Haproxy-Server-State: UP 2/3; name=bck/srv2; node=lb1; weight=1/2; \
3751 scur=13/22; qcur=0
3752
3753 See also : "option httpchk", "http-check disable-on-404"
3754
Jarno Huuskonen800d1762017-03-06 14:56:36 +02003755http-request { allow | auth [realm <realm>] | redirect <rule> |
3756 tarpit [deny_status <status>] | deny [deny_status <status>] |
Willy Tarreauf4c43c12013-06-11 17:01:13 +02003757 add-header <name> <fmt> | set-header <name> <fmt> |
Thierry FOURNIER82bf70d2015-05-26 17:58:29 +02003758 capture <sample> [ len <length> | id <id> ] |
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02003759 del-header <name> | set-nice <nice> | set-log-level <level> |
Sasha Pachev218f0642014-06-16 12:05:59 -06003760 replace-header <name> <match-regex> <replace-fmt> |
3761 replace-value <name> <match-regex> <replace-fmt> |
Willy Tarreaua0dc23f2015-01-22 20:46:11 +01003762 set-method <fmt> | set-path <fmt> | set-query <fmt> |
3763 set-uri <fmt> | set-tos <tos> | set-mark <mark> |
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02003764 add-acl(<file name>) <key fmt> |
3765 del-acl(<file name>) <key fmt> |
3766 del-map(<file name>) <key fmt> |
Baptiste Assmannbb7e86a2014-09-03 18:29:47 +02003767 set-map(<file name>) <key fmt> <value fmt> |
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02003768 set-var(<var name>) <expr> |
Christopher Faulet85d79c92016-11-09 16:54:56 +01003769 unset-var(<var name>) |
Thierry FOURNIER90da1912015-03-05 11:17:06 +01003770 { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] |
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02003771 sc-inc-gpc0(<sc-id>) |
Thierry FOURNIER236657b2015-08-19 08:25:14 +02003772 sc-set-gpt0(<sc-id>) <int> |
Willy Tarreau2d392c22015-08-24 01:43:45 +02003773 silent-drop |
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02003774 }
Cyril Bontéf0c60612010-02-06 14:44:47 +01003775 [ { if | unless } <condition> ]
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01003776 Access control for Layer 7 requests
3777
3778 May be used in sections: defaults | frontend | listen | backend
3779 no | yes | yes | yes
3780
Willy Tarreau20b0de52012-12-24 15:45:22 +01003781 The http-request statement defines a set of rules which apply to layer 7
3782 processing. The rules are evaluated in their declaration order when they are
3783 met in a frontend, listen or backend section. Any rule may optionally be
3784 followed by an ACL-based condition, in which case it will only be evaluated
3785 if the condition is true.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01003786
Willy Tarreau20b0de52012-12-24 15:45:22 +01003787 The first keyword is the rule's action. Currently supported actions include :
3788 - "allow" : this stops the evaluation of the rules and lets the request
3789 pass the check. No further "http-request" rules are evaluated.
3790
3791 - "deny" : this stops the evaluation of the rules and immediately rejects
Willy Tarreaube1d34d2016-06-26 19:37:59 +02003792 the request and emits an HTTP 403 error, or optionally the status code
3793 specified as an argument to "deny_status". The list of permitted status
3794 codes is limited to those that can be overridden by the "errorfile"
3795 directive. No further "http-request" rules are evaluated.
Willy Tarreau20b0de52012-12-24 15:45:22 +01003796
Willy Tarreauccbcc372012-12-27 12:37:57 +01003797 - "tarpit" : this stops the evaluation of the rules and immediately blocks
3798 the request without responding for a delay specified by "timeout tarpit"
3799 or "timeout connect" if the former is not set. After that delay, if the
Jarno Huuskonen800d1762017-03-06 14:56:36 +02003800 client is still connected, an HTTP error 500 (or optionally the status
3801 code specified as an argument to "deny_status") is returned so that the
Willy Tarreauccbcc372012-12-27 12:37:57 +01003802 client does not suspect it has been tarpitted. Logs will report the flags
3803 "PT". The goal of the tarpit rule is to slow down robots during an attack
3804 when they're limited on the number of concurrent requests. It can be very
3805 efficient against very dumb robots, and will significantly reduce the
3806 load on firewalls compared to a "deny" rule. But when facing "correctly"
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03003807 developed robots, it can make things worse by forcing haproxy and the
Willy Tarreau2d392c22015-08-24 01:43:45 +02003808 front firewall to support insane number of concurrent connections. See
3809 also the "silent-drop" action below.
Willy Tarreauccbcc372012-12-27 12:37:57 +01003810
Willy Tarreau20b0de52012-12-24 15:45:22 +01003811 - "auth" : this stops the evaluation of the rules and immediately responds
3812 with an HTTP 401 or 407 error code to invite the user to present a valid
3813 user name and password. No further "http-request" rules are evaluated. An
3814 optional "realm" parameter is supported, it sets the authentication realm
3815 that is returned with the response (typically the application's name).
3816
Willy Tarreau81499eb2012-12-27 12:19:02 +01003817 - "redirect" : this performs an HTTP redirection based on a redirect rule.
3818 This is exactly the same as the "redirect" statement except that it
3819 inserts a redirect rule which can be processed in the middle of other
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01003820 "http-request" rules and that these rules use the "log-format" strings.
3821 See the "redirect" keyword for the rule's syntax.
Willy Tarreau81499eb2012-12-27 12:19:02 +01003822
Willy Tarreau20b0de52012-12-24 15:45:22 +01003823 - "add-header" appends an HTTP header field whose name is specified in
3824 <name> and whose value is defined by <fmt> which follows the log-format
3825 rules (see Custom Log Format in section 8.2.4). This is particularly
3826 useful to pass connection-specific information to the server (eg: the
3827 client's SSL certificate), or to combine several headers into one. This
3828 rule is not final, so it is possible to add other similar rules. Note
3829 that header addition is performed immediately, so one rule might reuse
3830 the resulting header from a previous rule.
3831
3832 - "set-header" does the same as "add-header" except that the header name
3833 is first removed if it existed. This is useful when passing security
3834 information to the server, where the header must not be manipulated by
Willy Tarreau85603282015-01-21 20:39:27 +01003835 external users. Note that the new value is computed before the removal so
3836 it is possible to concatenate a value to an existing header.
Willy Tarreau20b0de52012-12-24 15:45:22 +01003837
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02003838 - "del-header" removes all HTTP header fields whose name is specified in
3839 <name>.
3840
Sasha Pachev218f0642014-06-16 12:05:59 -06003841 - "replace-header" matches the regular expression in all occurrences of
3842 header field <name> according to <match-regex>, and replaces them with
3843 the <replace-fmt> argument. Format characters are allowed in replace-fmt
3844 and work like in <fmt> arguments in "add-header". The match is only
3845 case-sensitive. It is important to understand that this action only
3846 considers whole header lines, regardless of the number of values they
3847 may contain. This usage is suited to headers naturally containing commas
3848 in their value, such as If-Modified-Since and so on.
3849
3850 Example:
3851
3852 http-request replace-header Cookie foo=([^;]*);(.*) foo=\1;ip=%bi;\2
3853
3854 applied to:
3855
3856 Cookie: foo=foobar; expires=Tue, 14-Jun-2016 01:40:45 GMT;
3857
3858 outputs:
3859
3860 Cookie: foo=foobar;ip=192.168.1.20; expires=Tue, 14-Jun-2016 01:40:45 GMT;
3861
3862 assuming the backend IP is 192.168.1.20
3863
3864 - "replace-value" works like "replace-header" except that it matches the
3865 regex against every comma-delimited value of the header field <name>
3866 instead of the entire header. This is suited for all headers which are
3867 allowed to carry more than one value. An example could be the Accept
3868 header.
3869
3870 Example:
3871
3872 http-request replace-value X-Forwarded-For ^192\.168\.(.*)$ 172.16.\1
3873
3874 applied to:
3875
3876 X-Forwarded-For: 192.168.10.1, 192.168.13.24, 10.0.0.37
3877
3878 outputs:
3879
3880 X-Forwarded-For: 172.16.10.1, 172.16.13.24, 10.0.0.37
3881
Willy Tarreaua0dc23f2015-01-22 20:46:11 +01003882 - "set-method" rewrites the request method with the result of the
3883 evaluation of format string <fmt>. There should be very few valid reasons
3884 for having to do so as this is more likely to break something than to fix
3885 it.
3886
3887 - "set-path" rewrites the request path with the result of the evaluation of
3888 format string <fmt>. The query string, if any, is left intact. If a
3889 scheme and authority is found before the path, they are left intact as
3890 well. If the request doesn't have a path ("*"), this one is replaced with
3891 the format. This can be used to prepend a directory component in front of
3892 a path for example. See also "set-query" and "set-uri".
3893
3894 Example :
3895 # prepend the host name before the path
3896 http-request set-path /%[hdr(host)]%[path]
3897
3898 - "set-query" rewrites the request's query string which appears after the
3899 first question mark ("?") with the result of the evaluation of format
3900 string <fmt>. The part prior to the question mark is left intact. If the
3901 request doesn't contain a question mark and the new value is not empty,
3902 then one is added at the end of the URI, followed by the new value. If
3903 a question mark was present, it will never be removed even if the value
3904 is empty. This can be used to add or remove parameters from the query
3905 string. See also "set-query" and "set-uri".
3906
3907 Example :
3908 # replace "%3D" with "=" in the query string
3909 http-request set-query %[query,regsub(%3D,=,g)]
3910
3911 - "set-uri" rewrites the request URI with the result of the evaluation of
3912 format string <fmt>. The scheme, authority, path and query string are all
3913 replaced at once. This can be used to rewrite hosts in front of proxies,
3914 or to perform complex modifications to the URI such as moving parts
3915 between the path and the query string. See also "set-path" and
3916 "set-query".
3917
Willy Tarreauf4c43c12013-06-11 17:01:13 +02003918 - "set-nice" sets the "nice" factor of the current request being processed.
3919 It only has effect against the other requests being processed at the same
3920 time. The default value is 0, unless altered by the "nice" setting on the
3921 "bind" line. The accepted range is -1024..1024. The higher the value, the
3922 nicest the request will be. Lower values will make the request more
3923 important than other ones. This can be useful to improve the speed of
3924 some requests, or lower the priority of non-important requests. Using
3925 this setting without prior experimentation can cause some major slowdown.
3926
Willy Tarreau9a355ec2013-06-11 17:45:46 +02003927 - "set-log-level" is used to change the log level of the current request
3928 when a certain condition is met. Valid levels are the 8 syslog levels
3929 (see the "log" keyword) plus the special level "silent" which disables
3930 logging for this request. This rule is not final so the last matching
3931 rule wins. This rule can be useful to disable health checks coming from
3932 another equipment.
3933
Willy Tarreau42cf39e2013-06-11 18:51:32 +02003934 - "set-tos" is used to set the TOS or DSCP field value of packets sent to
3935 the client to the value passed in <tos> on platforms which support this.
3936 This value represents the whole 8 bits of the IP TOS field, and can be
3937 expressed both in decimal or hexadecimal format (prefixed by "0x"). Note
3938 that only the 6 higher bits are used in DSCP or TOS, and the two lower
3939 bits are always 0. This can be used to adjust some routing behaviour on
3940 border routers based on some information from the request. See RFC 2474,
3941 2597, 3260 and 4594 for more information.
3942
Willy Tarreau51347ed2013-06-11 19:34:13 +02003943 - "set-mark" is used to set the Netfilter MARK on all packets sent to the
3944 client to the value passed in <mark> on platforms which support it. This
3945 value is an unsigned 32 bit value which can be matched by netfilter and
3946 by the routing table. It can be expressed both in decimal or hexadecimal
3947 format (prefixed by "0x"). This can be useful to force certain packets to
3948 take a different route (for example a cheaper network path for bulk
3949 downloads). This works on Linux kernels 2.6.32 and above and requires
3950 admin privileges.
3951
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02003952 - "add-acl" is used to add a new entry into an ACL. The ACL must be loaded
3953 from a file (even a dummy empty file). The file name of the ACL to be
3954 updated is passed between parentheses. It takes one argument: <key fmt>,
3955 which follows log-format rules, to collect content of the new entry. It
3956 performs a lookup in the ACL before insertion, to avoid duplicated (or
3957 more) values. This lookup is done by a linear search and can be expensive
3958 with large lists! It is the equivalent of the "add acl" command from the
3959 stats socket, but can be triggered by an HTTP request.
3960
3961 - "del-acl" is used to delete an entry from an ACL. The ACL must be loaded
3962 from a file (even a dummy empty file). The file name of the ACL to be
3963 updated is passed between parentheses. It takes one argument: <key fmt>,
3964 which follows log-format rules, to collect content of the entry to delete.
3965 It is the equivalent of the "del acl" command from the stats socket, but
3966 can be triggered by an HTTP request.
3967
3968 - "del-map" is used to delete an entry from a MAP. The MAP must be loaded
3969 from a file (even a dummy empty file). The file name of the MAP to be
3970 updated is passed between parentheses. It takes one argument: <key fmt>,
3971 which follows log-format rules, to collect content of the entry to delete.
3972 It takes one argument: "file name" It is the equivalent of the "del map"
3973 command from the stats socket, but can be triggered by an HTTP request.
3974
3975 - "set-map" is used to add a new entry into a MAP. The MAP must be loaded
3976 from a file (even a dummy empty file). The file name of the MAP to be
3977 updated is passed between parentheses. It takes 2 arguments: <key fmt>,
3978 which follows log-format rules, used to collect MAP key, and <value fmt>,
3979 which follows log-format rules, used to collect content for the new entry.
3980 It performs a lookup in the MAP before insertion, to avoid duplicated (or
3981 more) values. This lookup is done by a linear search and can be expensive
3982 with large lists! It is the equivalent of the "set map" command from the
3983 stats socket, but can be triggered by an HTTP request.
3984
Thierry FOURNIER82bf70d2015-05-26 17:58:29 +02003985 - capture <sample> [ len <length> | id <id> ] :
Willy Tarreaua9083d02015-05-08 15:27:59 +02003986 captures sample expression <sample> from the request buffer, and converts
3987 it to a string of at most <len> characters. The resulting string is
3988 stored into the next request "capture" slot, so it will possibly appear
3989 next to some captured HTTP headers. It will then automatically appear in
3990 the logs, and it will be possible to extract it using sample fetch rules
3991 to feed it into headers or anything. The length should be limited given
3992 that this size will be allocated for each capture during the whole
3993 session life. Please check section 7.3 (Fetching samples) and "capture
3994 request header" for more information.
3995
Thierry FOURNIER82bf70d2015-05-26 17:58:29 +02003996 If the keyword "id" is used instead of "len", the action tries to store
3997 the captured string in a previously declared capture slot. This is useful
3998 to run captures in backends. The slot id can be declared by a previous
3999 directive "http-request capture" or with the "declare capture" keyword.
Baptiste Assmanne9544932015-11-03 23:31:35 +01004000 If the slot <id> doesn't exist, then HAProxy fails parsing the
4001 configuration to prevent unexpected behavior at run time.
Thierry FOURNIER82bf70d2015-05-26 17:58:29 +02004002
Willy Tarreau09448f72014-06-25 18:12:15 +02004003 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] :
4004 enables tracking of sticky counters from current request. These rules
4005 do not stop evaluation and do not change default action. Three sets of
4006 counters may be simultaneously tracked by the same connection. The first
4007 "track-sc0" rule executed enables tracking of the counters of the
4008 specified table as the first set. The first "track-sc1" rule executed
4009 enables tracking of the counters of the specified table as the second
4010 set. The first "track-sc2" rule executed enables tracking of the
4011 counters of the specified table as the third set. It is a recommended
4012 practice to use the first set of counters for the per-frontend counters
4013 and the second set for the per-backend ones. But this is just a
4014 guideline, all may be used everywhere.
4015
4016 These actions take one or two arguments :
4017 <key> is mandatory, and is a sample expression rule as described
4018 in section 7.3. It describes what elements of the incoming
4019 request or connection will be analysed, extracted, combined,
4020 and used to select which table entry to update the counters.
4021
4022 <table> is an optional table to be used instead of the default one,
4023 which is the stick-table declared in the current proxy. All
4024 the counters for the matches and updates for the key will
4025 then be performed in that table until the session ends.
4026
4027 Once a "track-sc*" rule is executed, the key is looked up in the table
4028 and if it is not found, an entry is allocated for it. Then a pointer to
4029 that entry is kept during all the session's life, and this entry's
4030 counters are updated as often as possible, every time the session's
4031 counters are updated, and also systematically when the session ends.
4032 Counters are only updated for events that happen after the tracking has
4033 been started. As an exception, connection counters and request counters
4034 are systematically updated so that they reflect useful information.
4035
4036 If the entry tracks concurrent connection counters, one connection is
4037 counted for as long as the entry is tracked, and the entry will not
4038 expire during that time. Tracking counters also provides a performance
4039 advantage over just checking the keys, because only one table lookup is
4040 performed for all ACL checks that make use of it.
4041
Thierry FOURNIER236657b2015-08-19 08:25:14 +02004042 - sc-set-gpt0(<sc-id>) <int> :
4043 This action sets the GPT0 tag according to the sticky counter designated
4044 by <sc-id> and the value of <int>. The expected result is a boolean. If
4045 an error occurs, this action silently fails and the actions evaluation
4046 continues.
4047
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02004048 - sc-inc-gpc0(<sc-id>):
4049 This action increments the GPC0 counter according with the sticky counter
4050 designated by <sc-id>. If an error occurs, this action silently fails and
4051 the actions evaluation continues.
4052
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004053 - set-var(<var-name>) <expr> :
4054 Is used to set the contents of a variable. The variable is declared
4055 inline.
4056
Daniel Schneller0b547052016-03-21 20:46:57 +01004057 <var-name> The name of the variable starts with an indication about
4058 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +01004059 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +01004060 "sess" : the variable is shared with the whole session
4061 "txn" : the variable is shared with the transaction
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004062 (request and response)
Daniel Schneller0b547052016-03-21 20:46:57 +01004063 "req" : the variable is shared only during request
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004064 processing
Daniel Schneller0b547052016-03-21 20:46:57 +01004065 "res" : the variable is shared only during response
4066 processing
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004067 This prefix is followed by a name. The separator is a '.'.
Daniel Schneller0b547052016-03-21 20:46:57 +01004068 The name may only contain characters 'a-z', 'A-Z', '0-9'
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004069 and '_'.
4070
4071 <expr> Is a standard HAProxy expression formed by a sample-fetch
4072 followed by some converters.
4073
4074 Example:
4075
4076 http-request set-var(req.my_var) req.fhdr(user-agent),lower
4077
Christopher Faulet85d79c92016-11-09 16:54:56 +01004078 - unset-var(<var-name>) :
4079 Is used to unset a variable. See above for details about <var-name>.
4080
4081 Example:
4082
4083 http-request unset-var(req.my_var)
4084
Adis Nezirovic2fbcafc2015-07-06 15:44:30 +02004085 - set-src <expr> :
4086 Is used to set the source IP address to the value of specified
4087 expression. Useful when a proxy in front of HAProxy rewrites source IP,
4088 but provides the correct IP in a HTTP header; or you want to mask
4089 source IP for privacy.
4090
4091 <expr> Is a standard HAProxy expression formed by a sample-fetch
4092 followed by some converters.
4093
4094 Example:
4095
4096 http-request set-src hdr(x-forwarded-for)
4097 http-request set-src src,ipmask(24)
4098
Willy Tarreau00005ce2016-10-21 15:07:45 +02004099 When possible, set-src preserves the original source port as long as the
4100 address family allows it, otherwise the source port is set to 0.
Adis Nezirovic2fbcafc2015-07-06 15:44:30 +02004101
William Lallemand44be6402016-05-25 01:51:35 +02004102 - set-src-port <expr> :
4103 Is used to set the source port address to the value of specified
4104 expression.
4105
4106 <expr> Is a standard HAProxy expression formed by a sample-fetch
4107 followed by some converters.
4108
4109 Example:
4110
4111 http-request set-src-port hdr(x-port)
4112 http-request set-src-port int(4000)
4113
Willy Tarreau00005ce2016-10-21 15:07:45 +02004114 When possible, set-src-port preserves the original source address as long
4115 as the address family supports a port, otherwise it forces the source
4116 address to IPv4 "0.0.0.0" before rewriting the port.
William Lallemand44be6402016-05-25 01:51:35 +02004117
William Lallemand13e9b0c2016-05-25 02:34:07 +02004118 - set-dst <expr> :
4119 Is used to set the destination IP address to the value of specified
4120 expression. Useful when a proxy in front of HAProxy rewrites destination
4121 IP, but provides the correct IP in a HTTP header; or you want to mask
4122 the IP for privacy. If you want to connect to the new address/port, use
4123 '0.0.0.0:0' as a server address in the backend.
4124
4125 <expr> Is a standard HAProxy expression formed by a sample-fetch
4126 followed by some converters.
4127
4128 Example:
4129
4130 http-request set-dst hdr(x-dst)
4131 http-request set-dst dst,ipmask(24)
4132
Willy Tarreau00005ce2016-10-21 15:07:45 +02004133 When possible, set-dst preserves the original destination port as long as
4134 the address family allows it, otherwise the destination port is set to 0.
4135
William Lallemand13e9b0c2016-05-25 02:34:07 +02004136 - set-dst-port <expr> :
4137 Is used to set the destination port address to the value of specified
4138 expression. If you want to connect to the new address/port, use
4139 '0.0.0.0:0' as a server address in the backend.
4140
4141 <expr> Is a standard HAProxy expression formed by a sample-fetch
4142 followed by some converters.
4143
4144 Example:
4145
4146 http-request set-dst-port hdr(x-port)
4147 http-request set-dst-port int(4000)
4148
Willy Tarreau00005ce2016-10-21 15:07:45 +02004149 When possible, set-dst-port preserves the original destination address as
4150 long as the address family supports a port, otherwise it forces the
4151 destination address to IPv4 "0.0.0.0" before rewriting the port.
4152
Willy Tarreau2d392c22015-08-24 01:43:45 +02004153 - "silent-drop" : this stops the evaluation of the rules and makes the
4154 client-facing connection suddenly disappear using a system-dependant way
4155 that tries to prevent the client from being notified. The effect it then
4156 that the client still sees an established connection while there's none
4157 on HAProxy. The purpose is to achieve a comparable effect to "tarpit"
4158 except that it doesn't use any local resource at all on the machine
4159 running HAProxy. It can resist much higher loads than "tarpit", and slow
4160 down stronger attackers. It is important to undestand the impact of using
4161 this mechanism. All stateful equipments placed between the client and
4162 HAProxy (firewalls, proxies, load balancers) will also keep the
4163 established connection for a long time and may suffer from this action.
4164 On modern Linux systems running with enough privileges, the TCP_REPAIR
4165 socket option is used to block the emission of a TCP reset. On other
4166 systems, the socket's TTL is reduced to 1 so that the TCP reset doesn't
4167 pass the first router, though it's still delivered to local networks. Do
4168 not use it unless you fully understand how it works.
4169
Olivier Houchardccaa7de2017-10-02 11:51:03 +02004170 - "wait-for-handshake" : this will delay the processing of the request
4171 until the SSL handshake happened. This is mostly useful to delay
4172 processing early data until we're sure they are valid.
4173
Willy Tarreau20b0de52012-12-24 15:45:22 +01004174 There is no limit to the number of http-request statements per instance.
4175
4176 It is important to know that http-request rules are processed very early in
4177 the HTTP processing, just after "block" rules and before "reqdel" or "reqrep"
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08004178 or "reqadd" rules. That way, headers added by "add-header"/"set-header" are
4179 visible by almost all further ACL rules.
4180
4181 Using "reqadd"/"reqdel"/"reqrep" to manipulate request headers is discouraged
4182 in newer versions (>= 1.5). But if you need to use regular expression to
4183 delete headers, you can still use "reqdel". Also please use
4184 "http-request deny/allow/tarpit" instead of "reqdeny"/"reqpass"/"reqtarpit".
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01004185
4186 Example:
Cyril Bonté78caf842010-03-10 22:41:43 +01004187 acl nagios src 192.168.129.3
4188 acl local_net src 192.168.0.0/16
4189 acl auth_ok http_auth(L1)
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01004190
Cyril Bonté78caf842010-03-10 22:41:43 +01004191 http-request allow if nagios
4192 http-request allow if local_net auth_ok
4193 http-request auth realm Gimme if local_net auth_ok
4194 http-request deny
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01004195
Cyril Bonté78caf842010-03-10 22:41:43 +01004196 Example:
4197 acl auth_ok http_auth_group(L1) G1
Cyril Bonté78caf842010-03-10 22:41:43 +01004198 http-request auth unless auth_ok
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +01004199
Willy Tarreau20b0de52012-12-24 15:45:22 +01004200 Example:
4201 http-request set-header X-Haproxy-Current-Date %T
4202 http-request set-header X-SSL %[ssl_fc]
Willy Tarreaufca42612015-08-27 17:15:05 +02004203 http-request set-header X-SSL-Session_ID %[ssl_fc_session_id,hex]
Willy Tarreau20b0de52012-12-24 15:45:22 +01004204 http-request set-header X-SSL-Client-Verify %[ssl_c_verify]
4205 http-request set-header X-SSL-Client-DN %{+Q}[ssl_c_s_dn]
4206 http-request set-header X-SSL-Client-CN %{+Q}[ssl_c_s_dn(cn)]
4207 http-request set-header X-SSL-Issuer %{+Q}[ssl_c_i_dn]
4208 http-request set-header X-SSL-Client-NotBefore %{+Q}[ssl_c_notbefore]
4209 http-request set-header X-SSL-Client-NotAfter %{+Q}[ssl_c_notafter]
4210
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004211 Example:
4212 acl key req.hdr(X-Add-Acl-Key) -m found
4213 acl add path /addacl
4214 acl del path /delacl
4215
4216 acl myhost hdr(Host) -f myhost.lst
4217
4218 http-request add-acl(myhost.lst) %[req.hdr(X-Add-Acl-Key)] if key add
4219 http-request del-acl(myhost.lst) %[req.hdr(X-Add-Acl-Key)] if key del
4220
4221 Example:
4222 acl value req.hdr(X-Value) -m found
4223 acl setmap path /setmap
4224 acl delmap path /delmap
4225
4226 use_backend bk_appli if { hdr(Host),map_str(map.lst) -m found }
4227
4228 http-request set-map(map.lst) %[src] %[req.hdr(X-Value)] if setmap value
4229 http-request del-map(map.lst) %[src] if delmap
4230
Cyril Bonté2be1b3f2010-09-30 23:46:30 +02004231 See also : "stats http-request", section 3.4 about userlists and section 7
4232 about ACL usage.
Willy Tarreauef781042010-01-27 11:53:01 +01004233
Willy Tarreauf4c43c12013-06-11 17:01:13 +02004234http-response { allow | deny | add-header <name> <fmt> | set-nice <nice> |
Willy Tarreau51d861a2015-05-22 17:30:48 +02004235 capture <sample> id <id> | redirect <rule> |
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02004236 set-header <name> <fmt> | del-header <name> |
Sasha Pachev218f0642014-06-16 12:05:59 -06004237 replace-header <name> <regex-match> <replace-fmt> |
4238 replace-value <name> <regex-match> <replace-fmt> |
Robin H. Johnson52f5db22017-01-01 13:10:52 -08004239 set-status <status> [reason <str>] |
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004240 set-log-level <level> | set-mark <mark> | set-tos <tos> |
4241 add-acl(<file name>) <key fmt> |
4242 del-acl(<file name>) <key fmt> |
4243 del-map(<file name>) <key fmt> |
Thierry FOURNIER90da1912015-03-05 11:17:06 +01004244 set-map(<file name>) <key fmt> <value fmt> |
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004245 set-var(<var-name>) <expr> |
Christopher Faulet85d79c92016-11-09 16:54:56 +01004246 unset-var(<var-name>) |
Ruoshan Huange4edc6b2016-07-14 15:07:45 +08004247 { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] |
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02004248 sc-inc-gpc0(<sc-id>) |
Thierry FOURNIER236657b2015-08-19 08:25:14 +02004249 sc-set-gpt0(<sc-id>) <int> |
Willy Tarreau2d392c22015-08-24 01:43:45 +02004250 silent-drop |
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004251 }
Lukas Tribus2dd1d1a2013-06-19 23:34:41 +02004252 [ { if | unless } <condition> ]
Willy Tarreaue365c0b2013-06-11 16:06:12 +02004253 Access control for Layer 7 responses
4254
4255 May be used in sections: defaults | frontend | listen | backend
4256 no | yes | yes | yes
4257
4258 The http-response statement defines a set of rules which apply to layer 7
4259 processing. The rules are evaluated in their declaration order when they are
4260 met in a frontend, listen or backend section. Any rule may optionally be
4261 followed by an ACL-based condition, in which case it will only be evaluated
4262 if the condition is true. Since these rules apply on responses, the backend
4263 rules are applied first, followed by the frontend's rules.
4264
4265 The first keyword is the rule's action. Currently supported actions include :
4266 - "allow" : this stops the evaluation of the rules and lets the response
4267 pass the check. No further "http-response" rules are evaluated for the
4268 current section.
4269
4270 - "deny" : this stops the evaluation of the rules and immediately rejects
4271 the response and emits an HTTP 502 error. No further "http-response"
4272 rules are evaluated.
4273
4274 - "add-header" appends an HTTP header field whose name is specified in
4275 <name> and whose value is defined by <fmt> which follows the log-format
4276 rules (see Custom Log Format in section 8.2.4). This may be used to send
4277 a cookie to a client for example, or to pass some internal information.
4278 This rule is not final, so it is possible to add other similar rules.
4279 Note that header addition is performed immediately, so one rule might
4280 reuse the resulting header from a previous rule.
4281
4282 - "set-header" does the same as "add-header" except that the header name
4283 is first removed if it existed. This is useful when passing security
4284 information to the server, where the header must not be manipulated by
4285 external users.
4286
Thierry FOURNIERdad3d1d2014-04-22 18:07:25 +02004287 - "del-header" removes all HTTP header fields whose name is specified in
4288 <name>.
4289
Sasha Pachev218f0642014-06-16 12:05:59 -06004290 - "replace-header" matches the regular expression in all occurrences of
4291 header field <name> according to <match-regex>, and replaces them with
4292 the <replace-fmt> argument. Format characters are allowed in replace-fmt
4293 and work like in <fmt> arguments in "add-header". The match is only
4294 case-sensitive. It is important to understand that this action only
4295 considers whole header lines, regardless of the number of values they
4296 may contain. This usage is suited to headers naturally containing commas
4297 in their value, such as Set-Cookie, Expires and so on.
4298
4299 Example:
4300
4301 http-response replace-header Set-Cookie (C=[^;]*);(.*) \1;ip=%bi;\2
4302
4303 applied to:
4304
4305 Set-Cookie: C=1; expires=Tue, 14-Jun-2016 01:40:45 GMT
4306
4307 outputs:
4308
4309 Set-Cookie: C=1;ip=192.168.1.20; expires=Tue, 14-Jun-2016 01:40:45 GMT
4310
4311 assuming the backend IP is 192.168.1.20.
4312
4313 - "replace-value" works like "replace-header" except that it matches the
4314 regex against every comma-delimited value of the header field <name>
4315 instead of the entire header. This is suited for all headers which are
4316 allowed to carry more than one value. An example could be the Accept
4317 header.
4318
4319 Example:
4320
4321 http-response replace-value Cache-control ^public$ private
4322
4323 applied to:
4324
4325 Cache-Control: max-age=3600, public
4326
4327 outputs:
4328
4329 Cache-Control: max-age=3600, private
4330
Thierry FOURNIER35d70ef2015-08-26 16:21:56 +02004331 - "set-status" replaces the response status code with <status> which must
Robin H. Johnson52f5db22017-01-01 13:10:52 -08004332 be an integer between 100 and 999. Optionally, a custom reason text can be
4333 provided defined by <str>, or the default reason for the specified code
4334 will be used as a fallback.
Thierry FOURNIER35d70ef2015-08-26 16:21:56 +02004335
4336 Example:
4337
4338 # return "431 Request Header Fields Too Large"
4339 http-response set-status 431
Robin H. Johnson52f5db22017-01-01 13:10:52 -08004340 # return "503 Slow Down", custom reason
4341 http-response set-status 503 reason "Slow Down".
Thierry FOURNIER35d70ef2015-08-26 16:21:56 +02004342
Willy Tarreauf4c43c12013-06-11 17:01:13 +02004343 - "set-nice" sets the "nice" factor of the current request being processed.
4344 It only has effect against the other requests being processed at the same
4345 time. The default value is 0, unless altered by the "nice" setting on the
4346 "bind" line. The accepted range is -1024..1024. The higher the value, the
4347 nicest the request will be. Lower values will make the request more
4348 important than other ones. This can be useful to improve the speed of
4349 some requests, or lower the priority of non-important requests. Using
4350 this setting without prior experimentation can cause some major slowdown.
4351
Willy Tarreau9a355ec2013-06-11 17:45:46 +02004352 - "set-log-level" is used to change the log level of the current request
4353 when a certain condition is met. Valid levels are the 8 syslog levels
4354 (see the "log" keyword) plus the special level "silent" which disables
4355 logging for this request. This rule is not final so the last matching
4356 rule wins. This rule can be useful to disable health checks coming from
4357 another equipment.
4358
Willy Tarreau42cf39e2013-06-11 18:51:32 +02004359 - "set-tos" is used to set the TOS or DSCP field value of packets sent to
4360 the client to the value passed in <tos> on platforms which support this.
4361 This value represents the whole 8 bits of the IP TOS field, and can be
4362 expressed both in decimal or hexadecimal format (prefixed by "0x"). Note
4363 that only the 6 higher bits are used in DSCP or TOS, and the two lower
4364 bits are always 0. This can be used to adjust some routing behaviour on
4365 border routers based on some information from the request. See RFC 2474,
4366 2597, 3260 and 4594 for more information.
4367
Willy Tarreau51347ed2013-06-11 19:34:13 +02004368 - "set-mark" is used to set the Netfilter MARK on all packets sent to the
4369 client to the value passed in <mark> on platforms which support it. This
4370 value is an unsigned 32 bit value which can be matched by netfilter and
4371 by the routing table. It can be expressed both in decimal or hexadecimal
4372 format (prefixed by "0x"). This can be useful to force certain packets to
4373 take a different route (for example a cheaper network path for bulk
4374 downloads). This works on Linux kernels 2.6.32 and above and requires
4375 admin privileges.
4376
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004377 - "add-acl" is used to add a new entry into an ACL. The ACL must be loaded
4378 from a file (even a dummy empty file). The file name of the ACL to be
4379 updated is passed between parentheses. It takes one argument: <key fmt>,
4380 which follows log-format rules, to collect content of the new entry. It
4381 performs a lookup in the ACL before insertion, to avoid duplicated (or
4382 more) values. This lookup is done by a linear search and can be expensive
4383 with large lists! It is the equivalent of the "add acl" command from the
4384 stats socket, but can be triggered by an HTTP response.
4385
4386 - "del-acl" is used to delete an entry from an ACL. The ACL must be loaded
4387 from a file (even a dummy empty file). The file name of the ACL to be
4388 updated is passed between parentheses. It takes one argument: <key fmt>,
4389 which follows log-format rules, to collect content of the entry to delete.
4390 It is the equivalent of the "del acl" command from the stats socket, but
4391 can be triggered by an HTTP response.
4392
4393 - "del-map" is used to delete an entry from a MAP. The MAP must be loaded
4394 from a file (even a dummy empty file). The file name of the MAP to be
4395 updated is passed between parentheses. It takes one argument: <key fmt>,
4396 which follows log-format rules, to collect content of the entry to delete.
4397 It takes one argument: "file name" It is the equivalent of the "del map"
4398 command from the stats socket, but can be triggered by an HTTP response.
4399
4400 - "set-map" is used to add a new entry into a MAP. The MAP must be loaded
4401 from a file (even a dummy empty file). The file name of the MAP to be
4402 updated is passed between parentheses. It takes 2 arguments: <key fmt>,
4403 which follows log-format rules, used to collect MAP key, and <value fmt>,
4404 which follows log-format rules, used to collect content for the new entry.
4405 It performs a lookup in the MAP before insertion, to avoid duplicated (or
4406 more) values. This lookup is done by a linear search and can be expensive
4407 with large lists! It is the equivalent of the "set map" command from the
4408 stats socket, but can be triggered by an HTTP response.
4409
Thierry FOURNIERe80fada2015-05-26 18:06:31 +02004410 - capture <sample> id <id> :
4411 captures sample expression <sample> from the response buffer, and converts
4412 it to a string. The resulting string is stored into the next request
4413 "capture" slot, so it will possibly appear next to some captured HTTP
4414 headers. It will then automatically appear in the logs, and it will be
4415 possible to extract it using sample fetch rules to feed it into headers or
4416 anything. Please check section 7.3 (Fetching samples) and "capture
4417 response header" for more information.
4418
4419 The keyword "id" is the id of the capture slot which is used for storing
4420 the string. The capture slot must be defined in an associated frontend.
4421 This is useful to run captures in backends. The slot id can be declared by
4422 a previous directive "http-response capture" or with the "declare capture"
4423 keyword.
Baptiste Assmanne9544932015-11-03 23:31:35 +01004424 If the slot <id> doesn't exist, then HAProxy fails parsing the
4425 configuration to prevent unexpected behavior at run time.
Thierry FOURNIERe80fada2015-05-26 18:06:31 +02004426
Willy Tarreau51d861a2015-05-22 17:30:48 +02004427 - "redirect" : this performs an HTTP redirection based on a redirect rule.
4428 This supports a format string similarly to "http-request redirect" rules,
4429 with the exception that only the "location" type of redirect is possible
4430 on the response. See the "redirect" keyword for the rule's syntax. When
4431 a redirect rule is applied during a response, connections to the server
4432 are closed so that no data can be forwarded from the server to the client.
4433
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004434 - set-var(<var-name>) expr:
4435 Is used to set the contents of a variable. The variable is declared
4436 inline.
4437
Daniel Schneller0b547052016-03-21 20:46:57 +01004438 <var-name> The name of the variable starts with an indication about
4439 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +01004440 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +01004441 "sess" : the variable is shared with the whole session
4442 "txn" : the variable is shared with the transaction
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004443 (request and response)
Daniel Schneller0b547052016-03-21 20:46:57 +01004444 "req" : the variable is shared only during request
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004445 processing
Daniel Schneller0b547052016-03-21 20:46:57 +01004446 "res" : the variable is shared only during response
4447 processing
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004448 This prefix is followed by a name. The separator is a '.'.
Christopher Fauletb71557a2016-10-31 10:49:03 +01004449 The name may only contain characters 'a-z', 'A-Z', '0-9',
4450 '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02004451
4452 <expr> Is a standard HAProxy expression formed by a sample-fetch
4453 followed by some converters.
4454
4455 Example:
4456
4457 http-response set-var(sess.last_redir) res.hdr(location)
4458
Christopher Faulet85d79c92016-11-09 16:54:56 +01004459 - unset-var(<var-name>) :
4460 Is used to unset a variable. See above for details about <var-name>.
4461
4462 Example:
4463
4464 http-response unset-var(sess.last_redir)
4465
Ruoshan Huange4edc6b2016-07-14 15:07:45 +08004466 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] :
4467 enables tracking of sticky counters from current response. Please refer to
4468 "http-request track-sc" for a complete description. The only difference
4469 from "http-request track-sc" is the <key> sample expression can only make
4470 use of samples in response (eg. res.*, status etc.) and samples below
4471 Layer 6 (eg. ssl related samples, see section 7.3.4). If the sample is
4472 not supported, haproxy will fail and warn while parsing the config.
4473
Thierry FOURNIER236657b2015-08-19 08:25:14 +02004474 - sc-set-gpt0(<sc-id>) <int> :
4475 This action sets the GPT0 tag according to the sticky counter designated
4476 by <sc-id> and the value of <int>. The expected result is a boolean. If
4477 an error occurs, this action silently fails and the actions evaluation
4478 continues.
4479
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02004480 - sc-inc-gpc0(<sc-id>):
4481 This action increments the GPC0 counter according with the sticky counter
4482 designated by <sc-id>. If an error occurs, this action silently fails and
4483 the actions evaluation continues.
4484
Willy Tarreau2d392c22015-08-24 01:43:45 +02004485 - "silent-drop" : this stops the evaluation of the rules and makes the
4486 client-facing connection suddenly disappear using a system-dependant way
4487 that tries to prevent the client from being notified. The effect it then
4488 that the client still sees an established connection while there's none
4489 on HAProxy. The purpose is to achieve a comparable effect to "tarpit"
4490 except that it doesn't use any local resource at all on the machine
4491 running HAProxy. It can resist much higher loads than "tarpit", and slow
4492 down stronger attackers. It is important to undestand the impact of using
4493 this mechanism. All stateful equipments placed between the client and
4494 HAProxy (firewalls, proxies, load balancers) will also keep the
4495 established connection for a long time and may suffer from this action.
4496 On modern Linux systems running with enough privileges, the TCP_REPAIR
4497 socket option is used to block the emission of a TCP reset. On other
4498 systems, the socket's TTL is reduced to 1 so that the TCP reset doesn't
4499 pass the first router, though it's still delivered to local networks. Do
4500 not use it unless you fully understand how it works.
4501
Willy Tarreaue365c0b2013-06-11 16:06:12 +02004502 There is no limit to the number of http-response statements per instance.
4503
Godbach09250262013-07-02 01:19:15 +08004504 It is important to know that http-response rules are processed very early in
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08004505 the HTTP processing, before "rspdel" or "rsprep" or "rspadd" rules. That way,
4506 headers added by "add-header"/"set-header" are visible by almost all further ACL
Willy Tarreaue365c0b2013-06-11 16:06:12 +02004507 rules.
4508
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08004509 Using "rspadd"/"rspdel"/"rsprep" to manipulate request headers is discouraged
4510 in newer versions (>= 1.5). But if you need to use regular expression to
4511 delete headers, you can still use "rspdel". Also please use
4512 "http-response deny" instead of "rspdeny".
4513
Baptiste Assmannfabcbe02014-04-24 22:16:59 +02004514 Example:
4515 acl key_acl res.hdr(X-Acl-Key) -m found
4516
4517 acl myhost hdr(Host) -f myhost.lst
4518
4519 http-response add-acl(myhost.lst) %[res.hdr(X-Acl-Key)] if key_acl
4520 http-response del-acl(myhost.lst) %[res.hdr(X-Acl-Key)] if key_acl
4521
4522 Example:
4523 acl value res.hdr(X-Value) -m found
4524
4525 use_backend bk_appli if { hdr(Host),map_str(map.lst) -m found }
4526
4527 http-response set-map(map.lst) %[src] %[res.hdr(X-Value)] if value
4528 http-response del-map(map.lst) %[src] if ! value
4529
Willy Tarreaue365c0b2013-06-11 16:06:12 +02004530 See also : "http-request", section 3.4 about userlists and section 7 about
4531 ACL usage.
4532
Baptiste Assmann5ecb77f2013-10-06 23:24:13 +02004533
Willy Tarreau30631952015-08-06 15:05:24 +02004534http-reuse { never | safe | aggressive | always }
4535 Declare how idle HTTP connections may be shared between requests
4536
4537 May be used in sections: defaults | frontend | listen | backend
4538 yes | no | yes | yes
4539
4540 By default, a connection established between haproxy and the backend server
4541 belongs to the session that initiated it. The downside is that between the
4542 response and the next request, the connection remains idle and is not used.
4543 In many cases for performance reasons it is desirable to make it possible to
4544 reuse these idle connections to serve other requests from different sessions.
4545 This directive allows to tune this behaviour.
4546
4547 The argument indicates the desired connection reuse strategy :
4548
4549 - "never" : idle connections are never shared between sessions. This is
4550 the default choice. It may be enforced to cancel a different
4551 strategy inherited from a defaults section or for
4552 troubleshooting. For example, if an old bogus application
4553 considers that multiple requests over the same connection come
4554 from the same client and it is not possible to fix the
4555 application, it may be desirable to disable connection sharing
4556 in a single backend. An example of such an application could
4557 be an old haproxy using cookie insertion in tunnel mode and
4558 not checking any request past the first one.
4559
4560 - "safe" : this is the recommended strategy. The first request of a
4561 session is always sent over its own connection, and only
4562 subsequent requests may be dispatched over other existing
4563 connections. This ensures that in case the server closes the
4564 connection when the request is being sent, the browser can
4565 decide to silently retry it. Since it is exactly equivalent to
4566 regular keep-alive, there should be no side effects.
4567
4568 - "aggressive" : this mode may be useful in webservices environments where
4569 all servers are not necessarily known and where it would be
4570 appreciable to deliver most first requests over existing
4571 connections. In this case, first requests are only delivered
4572 over existing connections that have been reused at least once,
4573 proving that the server correctly supports connection reuse.
4574 It should only be used when it's sure that the client can
4575 retry a failed request once in a while and where the benefit
4576 of aggressive connection reuse significantly outweights the
4577 downsides of rare connection failures.
4578
4579 - "always" : this mode is only recommended when the path to the server is
4580 known for never breaking existing connections quickly after
4581 releasing them. It allows the first request of a session to be
4582 sent to an existing connection. This can provide a significant
4583 performance increase over the "safe" strategy when the backend
4584 is a cache farm, since such components tend to show a
4585 consistent behaviour and will benefit from the connection
4586 sharing. It is recommended that the "http-keep-alive" timeout
4587 remains low in this mode so that no dead connections remain
4588 usable. In most cases, this will lead to the same performance
4589 gains as "aggressive" but with more risks. It should only be
4590 used when it improves the situation over "aggressive".
4591
4592 When http connection sharing is enabled, a great care is taken to respect the
4593 connection properties and compatiblities. Specifically :
4594 - connections made with "usesrc" followed by a client-dependant value
4595 ("client", "clientip", "hdr_ip") are marked private and never shared ;
4596
4597 - connections sent to a server with a TLS SNI extension are marked private
4598 and are never shared ;
4599
4600 - connections receiving a status code 401 or 407 expect some authentication
4601 to be sent in return. Due to certain bogus authentication schemes (such
4602 as NTLM) relying on the connection, these connections are marked private
4603 and are never shared ;
4604
4605 No connection pool is involved, once a session dies, the last idle connection
4606 it was attached to is deleted at the same time. This ensures that connections
4607 may not last after all sessions are closed.
4608
4609 Note: connection reuse improves the accuracy of the "server maxconn" setting,
4610 because almost no new connection will be established while idle connections
4611 remain available. This is particularly true with the "always" strategy.
4612
4613 See also : "option http-keep-alive", "server maxconn"
4614
4615
Mark Lamourinec2247f02012-01-04 13:02:01 -05004616http-send-name-header [<header>]
4617 Add the server name to a request. Use the header string given by <header>
4618
4619 May be used in sections: defaults | frontend | listen | backend
4620 yes | no | yes | yes
4621
4622 Arguments :
4623
4624 <header> The header string to use to send the server name
4625
4626 The "http-send-name-header" statement causes the name of the target
4627 server to be added to the headers of an HTTP request. The name
4628 is added with the header string proved.
4629
4630 See also : "server"
4631
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01004632id <value>
Willy Tarreau53fb4ae2009-10-04 23:04:08 +02004633 Set a persistent ID to a proxy.
4634 May be used in sections : defaults | frontend | listen | backend
4635 no | yes | yes | yes
4636 Arguments : none
4637
4638 Set a persistent ID for the proxy. This ID must be unique and positive.
4639 An unused ID will automatically be assigned if unset. The first assigned
4640 value will be 1. This ID is currently only returned in statistics.
Krzysztof Piotr Oledzkif58a9622008-02-23 01:19:10 +01004641
4642
Cyril Bonté0d4bf012010-04-25 23:21:46 +02004643ignore-persist { if | unless } <condition>
4644 Declare a condition to ignore persistence
4645 May be used in sections: defaults | frontend | listen | backend
4646 no | yes | yes | yes
4647
4648 By default, when cookie persistence is enabled, every requests containing
4649 the cookie are unconditionally persistent (assuming the target server is up
4650 and running).
4651
4652 The "ignore-persist" statement allows one to declare various ACL-based
4653 conditions which, when met, will cause a request to ignore persistence.
4654 This is sometimes useful to load balance requests for static files, which
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03004655 often don't require persistence. This can also be used to fully disable
Cyril Bonté0d4bf012010-04-25 23:21:46 +02004656 persistence for a specific User-Agent (for example, some web crawler bots).
4657
Cyril Bonté0d4bf012010-04-25 23:21:46 +02004658 The persistence is ignored when an "if" condition is met, or unless an
4659 "unless" condition is met.
4660
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03004661 Example:
4662 acl url_static path_beg /static /images /img /css
4663 acl url_static path_end .gif .png .jpg .css .js
4664 ignore-persist if url_static
4665
Cyril Bonté0d4bf012010-04-25 23:21:46 +02004666 See also : "force-persist", "cookie", and section 7 about ACL usage.
4667
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004668load-server-state-from-file { global | local | none }
4669 Allow seamless reload of HAProxy
4670 May be used in sections: defaults | frontend | listen | backend
4671 yes | no | yes | yes
4672
4673 This directive points HAProxy to a file where server state from previous
4674 running process has been saved. That way, when starting up, before handling
4675 traffic, the new process can apply old states to servers exactly has if no
4676 reload occured. The purpose of the "load-server-state-from-file" directive is
4677 to tell haproxy which file to use. For now, only 2 arguments to either prevent
4678 loading state or load states from a file containing all backends and servers.
4679 The state file can be generated by running the command "show servers state"
4680 over the stats socket and redirect output.
4681
4682 The format of the file is versionned and is very specific. To understand it,
4683 please read the documentation of the "show servers state" command (chapter
Willy Tarreau1af20c72017-06-23 16:01:14 +02004684 9.3 of Management Guide).
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004685
4686 Arguments:
4687 global load the content of the file pointed by the global directive
4688 named "server-state-file".
4689
4690 local load the content of the file pointed by the directive
4691 "server-state-file-name" if set. If not set, then the backend
4692 name is used as a file name.
4693
4694 none don't load any stat for this backend
4695
4696 Notes:
Willy Tarreaue5a60682016-11-09 14:54:53 +01004697 - server's IP address is preserved across reloads by default, but the
4698 order can be changed thanks to the server's "init-addr" setting. This
4699 means that an IP address change performed on the CLI at run time will
4700 be preserved, and that any change to the local resolver (eg: /etc/hosts)
4701 will possibly not have any effect if the state file is in use.
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004702
4703 - server's weight is applied from previous running process unless it has
4704 has changed between previous and new configuration files.
4705
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004706 Example: Minimal configuration
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004707
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004708 global
4709 stats socket /tmp/socket
4710 server-state-file /tmp/server_state
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004711
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004712 defaults
4713 load-server-state-from-file global
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004714
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004715 backend bk
4716 server s1 127.0.0.1:22 check weight 11
4717 server s2 127.0.0.1:22 check weight 12
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004718
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004719
4720 Then one can run :
4721
4722 socat /tmp/socket - <<< "show servers state" > /tmp/server_state
4723
4724 Content of the file /tmp/server_state would be like this:
4725
4726 1
4727 # <field names skipped for the doc example>
4728 1 bk 1 s1 127.0.0.1 2 0 11 11 4 6 3 4 6 0 0
4729 1 bk 2 s2 127.0.0.1 2 0 12 12 4 6 3 4 6 0 0
4730
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004731 Example: Minimal configuration
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004732
4733 global
4734 stats socket /tmp/socket
4735 server-state-base /etc/haproxy/states
4736
4737 defaults
4738 load-server-state-from-file local
4739
4740 backend bk
4741 server s1 127.0.0.1:22 check weight 11
4742 server s2 127.0.0.1:22 check weight 12
4743
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02004744
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02004745 Then one can run :
4746
4747 socat /tmp/socket - <<< "show servers state bk" > /etc/haproxy/states/bk
4748
4749 Content of the file /etc/haproxy/states/bk would be like this:
4750
4751 1
4752 # <field names skipped for the doc example>
4753 1 bk 1 s1 127.0.0.1 2 0 11 11 4 6 3 4 6 0 0
4754 1 bk 2 s2 127.0.0.1 2 0 12 12 4 6 3 4 6 0 0
4755
4756 See also: "server-state-file", "server-state-file-name", and
4757 "show servers state"
4758
Cyril Bonté0d4bf012010-04-25 23:21:46 +02004759
Willy Tarreau2769aa02007-12-27 18:26:09 +01004760log global
Willy Tarreau18324f52014-06-27 18:10:07 +02004761log <address> [len <length>] <facility> [<level> [<minlevel>]]
William Lallemand0f99e342011-10-12 17:50:54 +02004762no log
Willy Tarreau2769aa02007-12-27 18:26:09 +01004763 Enable per-instance logging of events and traffic.
4764 May be used in sections : defaults | frontend | listen | backend
4765 yes | yes | yes | yes
William Lallemand0f99e342011-10-12 17:50:54 +02004766
4767 Prefix :
4768 no should be used when the logger list must be flushed. For example,
4769 if you don't want to inherit from the default logger list. This
4770 prefix does not allow arguments.
4771
Willy Tarreau2769aa02007-12-27 18:26:09 +01004772 Arguments :
4773 global should be used when the instance's logging parameters are the
4774 same as the global ones. This is the most common usage. "global"
4775 replaces <address>, <facility> and <level> with those of the log
4776 entries found in the "global" section. Only one "log global"
4777 statement may be used per instance, and this form takes no other
4778 parameter.
4779
4780 <address> indicates where to send the logs. It takes the same format as
4781 for the "global" section's logs, and can be one of :
4782
4783 - An IPv4 address optionally followed by a colon (':') and a UDP
4784 port. If no port is specified, 514 is used by default (the
4785 standard syslog port).
4786
David du Colombier24bb5f52011-03-17 10:40:23 +01004787 - An IPv6 address followed by a colon (':') and optionally a UDP
4788 port. If no port is specified, 514 is used by default (the
4789 standard syslog port).
4790
Willy Tarreau2769aa02007-12-27 18:26:09 +01004791 - A filesystem path to a UNIX domain socket, keeping in mind
4792 considerations for chroot (be sure the path is accessible
4793 inside the chroot) and uid/gid (be sure the path is
4794 appropriately writeable).
4795
William Lallemandb2f07452015-05-12 14:27:13 +02004796 You may want to reference some environment variables in the
4797 address parameter, see section 2.3 about environment variables.
Willy Tarreaudad36a32013-03-11 01:20:04 +01004798
Willy Tarreau18324f52014-06-27 18:10:07 +02004799 <length> is an optional maximum line length. Log lines larger than this
4800 value will be truncated before being sent. The reason is that
4801 syslog servers act differently on log line length. All servers
4802 support the default value of 1024, but some servers simply drop
4803 larger lines while others do log them. If a server supports long
4804 lines, it may make sense to set this value here in order to avoid
4805 truncating long lines. Similarly, if a server drops long lines,
4806 it is preferable to truncate them before sending them. Accepted
4807 values are 80 to 65535 inclusive. The default value of 1024 is
4808 generally fine for all standard usages. Some specific cases of
4809 long captures or JSON-formated logs may require larger values.
4810
Willy Tarreau2769aa02007-12-27 18:26:09 +01004811 <facility> must be one of the 24 standard syslog facilities :
4812
4813 kern user mail daemon auth syslog lpr news
4814 uucp cron auth2 ftp ntp audit alert cron2
4815 local0 local1 local2 local3 local4 local5 local6 local7
4816
4817 <level> is optional and can be specified to filter outgoing messages. By
4818 default, all messages are sent. If a level is specified, only
4819 messages with a severity at least as important as this level
Willy Tarreauf7edefa2009-05-10 17:20:05 +02004820 will be sent. An optional minimum level can be specified. If it
4821 is set, logs emitted with a more severe level than this one will
4822 be capped to this level. This is used to avoid sending "emerg"
4823 messages on all terminals on some default syslog configurations.
4824 Eight levels are known :
Willy Tarreau2769aa02007-12-27 18:26:09 +01004825
4826 emerg alert crit err warning notice info debug
4827
William Lallemand0f99e342011-10-12 17:50:54 +02004828 It is important to keep in mind that it is the frontend which decides what to
4829 log from a connection, and that in case of content switching, the log entries
4830 from the backend will be ignored. Connections are logged at level "info".
Willy Tarreaucc6c8912009-02-22 10:53:55 +01004831
4832 However, backend log declaration define how and where servers status changes
4833 will be logged. Level "notice" will be used to indicate a server going up,
4834 "warning" will be used for termination signals and definitive service
4835 termination, and "alert" will be used for when a server goes down.
4836
4837 Note : According to RFC3164, messages are truncated to 1024 bytes before
4838 being emitted.
Willy Tarreau2769aa02007-12-27 18:26:09 +01004839
4840 Example :
4841 log global
Willy Tarreauf7edefa2009-05-10 17:20:05 +02004842 log 127.0.0.1:514 local0 notice # only send important events
4843 log 127.0.0.1:514 local0 notice notice # same but limit output level
William Lallemandb2f07452015-05-12 14:27:13 +02004844 log "${LOCAL_SYSLOG}:514" local0 notice # send to local server
Willy Tarreaudad36a32013-03-11 01:20:04 +01004845
Willy Tarreau2769aa02007-12-27 18:26:09 +01004846
William Lallemand48940402012-01-30 16:47:22 +01004847log-format <string>
Willy Tarreaufb4e7ea2015-01-07 14:55:17 +01004848 Specifies the log format string to use for traffic logs
4849 May be used in sections: defaults | frontend | listen | backend
4850 yes | yes | yes | no
William Lallemand48940402012-01-30 16:47:22 +01004851
Willy Tarreaufb4e7ea2015-01-07 14:55:17 +01004852 This directive specifies the log format string that will be used for all logs
4853 resulting from traffic passing through the frontend using this line. If the
4854 directive is used in a defaults section, all subsequent frontends will use
4855 the same log format. Please see section 8.2.4 which covers the log format
4856 string in depth.
William Lallemand48940402012-01-30 16:47:22 +01004857
Guillaume de Lafond29f45602017-03-31 19:52:15 +02004858 "log-format" directive overrides previous "option tcplog", "log-format" and
4859 "option httplog" directives.
4860
Dragan Dosen7ad31542015-09-28 17:16:47 +02004861log-format-sd <string>
4862 Specifies the RFC5424 structured-data log format string
4863 May be used in sections: defaults | frontend | listen | backend
4864 yes | yes | yes | no
4865
4866 This directive specifies the RFC5424 structured-data log format string that
4867 will be used for all logs resulting from traffic passing through the frontend
4868 using this line. If the directive is used in a defaults section, all
4869 subsequent frontends will use the same log format. Please see section 8.2.4
4870 which covers the log format string in depth.
4871
4872 See https://tools.ietf.org/html/rfc5424#section-6.3 for more information
4873 about the RFC5424 structured-data part.
4874
4875 Note : This log format string will be used only for loggers that have set
4876 log format to "rfc5424".
4877
4878 Example :
4879 log-format-sd [exampleSDID@1234\ bytes=\"%B\"\ status=\"%ST\"]
4880
4881
Willy Tarreau094af4e2015-01-07 15:03:42 +01004882log-tag <string>
4883 Specifies the log tag to use for all outgoing logs
4884 May be used in sections: defaults | frontend | listen | backend
4885 yes | yes | yes | yes
4886
4887 Sets the tag field in the syslog header to this string. It defaults to the
4888 log-tag set in the global section, otherwise the program name as launched
4889 from the command line, which usually is "haproxy". Sometimes it can be useful
4890 to differentiate between multiple processes running on the same host, or to
4891 differentiate customer instances running in the same process. In the backend,
4892 logs about servers up/down will use this tag. As a hint, it can be convenient
4893 to set a log-tag related to a hosted customer in a defaults section then put
4894 all the frontends and backends for that customer, then start another customer
4895 in a new defaults section. See also the global "log-tag" directive.
Willy Tarreau2769aa02007-12-27 18:26:09 +01004896
Willy Tarreauc35362a2014-04-25 13:58:37 +02004897max-keep-alive-queue <value>
4898 Set the maximum server queue size for maintaining keep-alive connections
4899 May be used in sections: defaults | frontend | listen | backend
4900 yes | no | yes | yes
4901
4902 HTTP keep-alive tries to reuse the same server connection whenever possible,
4903 but sometimes it can be counter-productive, for example if a server has a lot
4904 of connections while other ones are idle. This is especially true for static
4905 servers.
4906
4907 The purpose of this setting is to set a threshold on the number of queued
4908 connections at which haproxy stops trying to reuse the same server and prefers
4909 to find another one. The default value, -1, means there is no limit. A value
4910 of zero means that keep-alive requests will never be queued. For very close
4911 servers which can be reached with a low latency and which are not sensible to
4912 breaking keep-alive, a low value is recommended (eg: local static server can
4913 use a value of 10 or less). For remote servers suffering from a high latency,
4914 higher values might be needed to cover for the latency and/or the cost of
4915 picking a different server.
4916
4917 Note that this has no impact on responses which are maintained to the same
4918 server consecutively to a 401 response. They will still go to the same server
4919 even if they have to be queued.
4920
4921 See also : "option http-server-close", "option prefer-last-server", server
4922 "maxconn" and cookie persistence.
4923
4924
Willy Tarreau2769aa02007-12-27 18:26:09 +01004925maxconn <conns>
4926 Fix the maximum number of concurrent connections on a frontend
4927 May be used in sections : defaults | frontend | listen | backend
4928 yes | yes | yes | no
4929 Arguments :
4930 <conns> is the maximum number of concurrent connections the frontend will
4931 accept to serve. Excess connections will be queued by the system
4932 in the socket's listen queue and will be served once a connection
4933 closes.
4934
4935 If the system supports it, it can be useful on big sites to raise this limit
4936 very high so that haproxy manages connection queues, instead of leaving the
4937 clients with unanswered connection attempts. This value should not exceed the
4938 global maxconn. Also, keep in mind that a connection contains two buffers
Baptiste Assmann79fb45d2016-03-06 23:34:31 +01004939 of tune.bufsize (16kB by default) each, as well as some other data resulting
4940 in about 33 kB of RAM being consumed per established connection. That means
4941 that a medium system equipped with 1GB of RAM can withstand around
4942 20000-25000 concurrent connections if properly tuned.
Willy Tarreau2769aa02007-12-27 18:26:09 +01004943
4944 Also, when <conns> is set to large values, it is possible that the servers
4945 are not sized to accept such loads, and for this reason it is generally wise
4946 to assign them some reasonable connection limits.
4947
Vincent Bernat6341be52012-06-27 17:18:30 +02004948 By default, this value is set to 2000.
4949
Willy Tarreau2769aa02007-12-27 18:26:09 +01004950 See also : "server", global section's "maxconn", "fullconn"
4951
4952
4953mode { tcp|http|health }
4954 Set the running mode or protocol of the instance
4955 May be used in sections : defaults | frontend | listen | backend
4956 yes | yes | yes | yes
4957 Arguments :
4958 tcp The instance will work in pure TCP mode. A full-duplex connection
4959 will be established between clients and servers, and no layer 7
4960 examination will be performed. This is the default mode. It
4961 should be used for SSL, SSH, SMTP, ...
4962
4963 http The instance will work in HTTP mode. The client request will be
4964 analyzed in depth before connecting to any server. Any request
4965 which is not RFC-compliant will be rejected. Layer 7 filtering,
4966 processing and switching will be possible. This is the mode which
4967 brings HAProxy most of its value.
4968
4969 health The instance will work in "health" mode. It will just reply "OK"
Willy Tarreau82569f92012-09-27 23:48:56 +02004970 to incoming connections and close the connection. Alternatively,
4971 If the "httpchk" option is set, "HTTP/1.0 200 OK" will be sent
4972 instead. Nothing will be logged in either case. This mode is used
4973 to reply to external components health checks. This mode is
4974 deprecated and should not be used anymore as it is possible to do
4975 the same and even better by combining TCP or HTTP modes with the
4976 "monitor" keyword.
Willy Tarreau2769aa02007-12-27 18:26:09 +01004977
Cyril Bonté108cf6e2012-04-21 23:30:29 +02004978 When doing content switching, it is mandatory that the frontend and the
4979 backend are in the same mode (generally HTTP), otherwise the configuration
4980 will be refused.
Willy Tarreau2769aa02007-12-27 18:26:09 +01004981
Cyril Bonté108cf6e2012-04-21 23:30:29 +02004982 Example :
Willy Tarreau2769aa02007-12-27 18:26:09 +01004983 defaults http_instances
4984 mode http
4985
Cyril Bonté108cf6e2012-04-21 23:30:29 +02004986 See also : "monitor", "monitor-net"
Willy Tarreau2769aa02007-12-27 18:26:09 +01004987
Willy Tarreau0ba27502007-12-24 16:55:16 +01004988
Cyril Bontéf0c60612010-02-06 14:44:47 +01004989monitor fail { if | unless } <condition>
Willy Tarreau2769aa02007-12-27 18:26:09 +01004990 Add a condition to report a failure to a monitor HTTP request.
Willy Tarreau0ba27502007-12-24 16:55:16 +01004991 May be used in sections : defaults | frontend | listen | backend
4992 no | yes | yes | no
Willy Tarreau0ba27502007-12-24 16:55:16 +01004993 Arguments :
4994 if <cond> the monitor request will fail if the condition is satisfied,
4995 and will succeed otherwise. The condition should describe a
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01004996 combined test which must induce a failure if all conditions
Willy Tarreau0ba27502007-12-24 16:55:16 +01004997 are met, for instance a low number of servers both in a
4998 backend and its backup.
4999
5000 unless <cond> the monitor request will succeed only if the condition is
5001 satisfied, and will fail otherwise. Such a condition may be
5002 based on a test on the presence of a minimum number of active
5003 servers in a list of backends.
5004
5005 This statement adds a condition which can force the response to a monitor
5006 request to report a failure. By default, when an external component queries
5007 the URI dedicated to monitoring, a 200 response is returned. When one of the
5008 conditions above is met, haproxy will return 503 instead of 200. This is
5009 very useful to report a site failure to an external component which may base
5010 routing advertisements between multiple sites on the availability reported by
5011 haproxy. In this case, one would rely on an ACL involving the "nbsrv"
Willy Tarreauae94d4d2011-05-11 16:28:49 +02005012 criterion. Note that "monitor fail" only works in HTTP mode. Both status
5013 messages may be tweaked using "errorfile" or "errorloc" if needed.
Willy Tarreau0ba27502007-12-24 16:55:16 +01005014
5015 Example:
5016 frontend www
Willy Tarreau2769aa02007-12-27 18:26:09 +01005017 mode http
Willy Tarreau0ba27502007-12-24 16:55:16 +01005018 acl site_dead nbsrv(dynamic) lt 2
5019 acl site_dead nbsrv(static) lt 2
5020 monitor-uri /site_alive
5021 monitor fail if site_dead
5022
Willy Tarreauae94d4d2011-05-11 16:28:49 +02005023 See also : "monitor-net", "monitor-uri", "errorfile", "errorloc"
Willy Tarreau2769aa02007-12-27 18:26:09 +01005024
5025
5026monitor-net <source>
5027 Declare a source network which is limited to monitor requests
5028 May be used in sections : defaults | frontend | listen | backend
5029 yes | yes | yes | no
5030 Arguments :
5031 <source> is the source IPv4 address or network which will only be able to
5032 get monitor responses to any request. It can be either an IPv4
5033 address, a host name, or an address followed by a slash ('/')
5034 followed by a mask.
5035
5036 In TCP mode, any connection coming from a source matching <source> will cause
5037 the connection to be immediately closed without any log. This allows another
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005038 equipment to probe the port and verify that it is still listening, without
Willy Tarreau2769aa02007-12-27 18:26:09 +01005039 forwarding the connection to a remote server.
5040
5041 In HTTP mode, a connection coming from a source matching <source> will be
5042 accepted, the following response will be sent without waiting for a request,
5043 then the connection will be closed : "HTTP/1.0 200 OK". This is normally
5044 enough for any front-end HTTP probe to detect that the service is UP and
Willy Tarreau82569f92012-09-27 23:48:56 +02005045 running without forwarding the request to a backend server. Note that this
5046 response is sent in raw format, without any transformation. This is important
5047 as it means that it will not be SSL-encrypted on SSL listeners.
Willy Tarreau2769aa02007-12-27 18:26:09 +01005048
Willy Tarreau82569f92012-09-27 23:48:56 +02005049 Monitor requests are processed very early, just after tcp-request connection
5050 ACLs which are the only ones able to block them. These connections are short
5051 lived and never wait for any data from the client. They cannot be logged, and
5052 it is the intended purpose. They are only used to report HAProxy's health to
5053 an upper component, nothing more. Please note that "monitor fail" rules do
5054 not apply to connections intercepted by "monitor-net".
Willy Tarreau2769aa02007-12-27 18:26:09 +01005055
Willy Tarreau95cd2832010-03-04 23:36:33 +01005056 Last, please note that only one "monitor-net" statement can be specified in
5057 a frontend. If more than one is found, only the last one will be considered.
Cyril Bonté108cf6e2012-04-21 23:30:29 +02005058
Willy Tarreau2769aa02007-12-27 18:26:09 +01005059 Example :
5060 # addresses .252 and .253 are just probing us.
5061 frontend www
5062 monitor-net 192.168.0.252/31
5063
5064 See also : "monitor fail", "monitor-uri"
5065
5066
5067monitor-uri <uri>
5068 Intercept a URI used by external components' monitor requests
5069 May be used in sections : defaults | frontend | listen | backend
5070 yes | yes | yes | no
5071 Arguments :
5072 <uri> is the exact URI which we want to intercept to return HAProxy's
5073 health status instead of forwarding the request.
5074
5075 When an HTTP request referencing <uri> will be received on a frontend,
5076 HAProxy will not forward it nor log it, but instead will return either
5077 "HTTP/1.0 200 OK" or "HTTP/1.0 503 Service unavailable", depending on failure
5078 conditions defined with "monitor fail". This is normally enough for any
5079 front-end HTTP probe to detect that the service is UP and running without
5080 forwarding the request to a backend server. Note that the HTTP method, the
5081 version and all headers are ignored, but the request must at least be valid
5082 at the HTTP level. This keyword may only be used with an HTTP-mode frontend.
5083
5084 Monitor requests are processed very early. It is not possible to block nor
5085 divert them using ACLs. They cannot be logged either, and it is the intended
5086 purpose. They are only used to report HAProxy's health to an upper component,
5087 nothing more. However, it is possible to add any number of conditions using
5088 "monitor fail" and ACLs so that the result can be adjusted to whatever check
5089 can be imagined (most often the number of available servers in a backend).
5090
5091 Example :
5092 # Use /haproxy_test to report haproxy's status
5093 frontend www
5094 mode http
5095 monitor-uri /haproxy_test
5096
5097 See also : "monitor fail", "monitor-net"
5098
Willy Tarreau0ba27502007-12-24 16:55:16 +01005099
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005100option abortonclose
5101no option abortonclose
5102 Enable or disable early dropping of aborted requests pending in queues.
5103 May be used in sections : defaults | frontend | listen | backend
5104 yes | no | yes | yes
5105 Arguments : none
5106
5107 In presence of very high loads, the servers will take some time to respond.
5108 The per-instance connection queue will inflate, and the response time will
5109 increase respective to the size of the queue times the average per-session
5110 response time. When clients will wait for more than a few seconds, they will
Willy Tarreau198a7442008-01-17 12:05:32 +01005111 often hit the "STOP" button on their browser, leaving a useless request in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005112 the queue, and slowing down other users, and the servers as well, because the
5113 request will eventually be served, then aborted at the first error
5114 encountered while delivering the response.
5115
5116 As there is no way to distinguish between a full STOP and a simple output
5117 close on the client side, HTTP agents should be conservative and consider
5118 that the client might only have closed its output channel while waiting for
5119 the response. However, this introduces risks of congestion when lots of users
5120 do the same, and is completely useless nowadays because probably no client at
5121 all will close the session while waiting for the response. Some HTTP agents
Willy Tarreaud72758d2010-01-12 10:42:19 +01005122 support this behaviour (Squid, Apache, HAProxy), and others do not (TUX, most
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005123 hardware-based load balancers). So the probability for a closed input channel
Willy Tarreau198a7442008-01-17 12:05:32 +01005124 to represent a user hitting the "STOP" button is close to 100%, and the risk
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005125 of being the single component to break rare but valid traffic is extremely
5126 low, which adds to the temptation to be able to abort a session early while
5127 still not served and not pollute the servers.
5128
5129 In HAProxy, the user can choose the desired behaviour using the option
5130 "abortonclose". By default (without the option) the behaviour is HTTP
5131 compliant and aborted requests will be served. But when the option is
5132 specified, a session with an incoming channel closed will be aborted while
5133 it is still possible, either pending in the queue for a connection slot, or
5134 during the connection establishment if the server has not yet acknowledged
5135 the connection request. This considerably reduces the queue size and the load
5136 on saturated servers when users are tempted to click on STOP, which in turn
Willy Tarreaud72758d2010-01-12 10:42:19 +01005137 reduces the response time for other users.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005138
5139 If this option has been enabled in a "defaults" section, it can be disabled
5140 in a specific instance by prepending the "no" keyword before it.
5141
5142 See also : "timeout queue" and server's "maxconn" and "maxqueue" parameters
5143
5144
Willy Tarreau4076a152009-04-02 15:18:36 +02005145option accept-invalid-http-request
5146no option accept-invalid-http-request
5147 Enable or disable relaxing of HTTP request parsing
5148 May be used in sections : defaults | frontend | listen | backend
5149 yes | yes | yes | no
5150 Arguments : none
5151
Willy Tarreau91852eb2015-05-01 13:26:00 +02005152 By default, HAProxy complies with RFC7230 in terms of message parsing. This
Willy Tarreau4076a152009-04-02 15:18:36 +02005153 means that invalid characters in header names are not permitted and cause an
5154 error to be returned to the client. This is the desired behaviour as such
5155 forbidden characters are essentially used to build attacks exploiting server
5156 weaknesses, and bypass security filtering. Sometimes, a buggy browser or
5157 server will emit invalid header names for whatever reason (configuration,
5158 implementation) and the issue will not be immediately fixed. In such a case,
5159 it is possible to relax HAProxy's header name parser to accept any character
Willy Tarreau422246e2012-01-07 23:54:13 +01005160 even if that does not make sense, by specifying this option. Similarly, the
5161 list of characters allowed to appear in a URI is well defined by RFC3986, and
5162 chars 0-31, 32 (space), 34 ('"'), 60 ('<'), 62 ('>'), 92 ('\'), 94 ('^'), 96
5163 ('`'), 123 ('{'), 124 ('|'), 125 ('}'), 127 (delete) and anything above are
5164 not allowed at all. Haproxy always blocks a number of them (0..32, 127). The
Willy Tarreau91852eb2015-05-01 13:26:00 +02005165 remaining ones are blocked by default unless this option is enabled. This
Willy Tarreau13317662015-05-01 13:47:08 +02005166 option also relaxes the test on the HTTP version, it allows HTTP/0.9 requests
5167 to pass through (no version specified) and multiple digits for both the major
5168 and the minor version.
Willy Tarreau4076a152009-04-02 15:18:36 +02005169
5170 This option should never be enabled by default as it hides application bugs
5171 and open security breaches. It should only be deployed after a problem has
5172 been confirmed.
5173
5174 When this option is enabled, erroneous header names will still be accepted in
5175 requests, but the complete request will be captured in order to permit later
Willy Tarreau422246e2012-01-07 23:54:13 +01005176 analysis using the "show errors" request on the UNIX stats socket. Similarly,
5177 requests containing invalid chars in the URI part will be logged. Doing this
Willy Tarreau4076a152009-04-02 15:18:36 +02005178 also helps confirming that the issue has been solved.
5179
5180 If this option has been enabled in a "defaults" section, it can be disabled
5181 in a specific instance by prepending the "no" keyword before it.
5182
5183 See also : "option accept-invalid-http-response" and "show errors" on the
5184 stats socket.
5185
5186
5187option accept-invalid-http-response
5188no option accept-invalid-http-response
5189 Enable or disable relaxing of HTTP response parsing
5190 May be used in sections : defaults | frontend | listen | backend
5191 yes | no | yes | yes
5192 Arguments : none
5193
Willy Tarreau91852eb2015-05-01 13:26:00 +02005194 By default, HAProxy complies with RFC7230 in terms of message parsing. This
Willy Tarreau4076a152009-04-02 15:18:36 +02005195 means that invalid characters in header names are not permitted and cause an
5196 error to be returned to the client. This is the desired behaviour as such
5197 forbidden characters are essentially used to build attacks exploiting server
5198 weaknesses, and bypass security filtering. Sometimes, a buggy browser or
5199 server will emit invalid header names for whatever reason (configuration,
5200 implementation) and the issue will not be immediately fixed. In such a case,
5201 it is possible to relax HAProxy's header name parser to accept any character
Willy Tarreau91852eb2015-05-01 13:26:00 +02005202 even if that does not make sense, by specifying this option. This option also
5203 relaxes the test on the HTTP version format, it allows multiple digits for
5204 both the major and the minor version.
Willy Tarreau4076a152009-04-02 15:18:36 +02005205
5206 This option should never be enabled by default as it hides application bugs
5207 and open security breaches. It should only be deployed after a problem has
5208 been confirmed.
5209
5210 When this option is enabled, erroneous header names will still be accepted in
5211 responses, but the complete response will be captured in order to permit
5212 later analysis using the "show errors" request on the UNIX stats socket.
5213 Doing this also helps confirming that the issue has been solved.
5214
5215 If this option has been enabled in a "defaults" section, it can be disabled
5216 in a specific instance by prepending the "no" keyword before it.
5217
5218 See also : "option accept-invalid-http-request" and "show errors" on the
5219 stats socket.
5220
5221
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005222option allbackups
5223no option allbackups
5224 Use either all backup servers at a time or only the first one
5225 May be used in sections : defaults | frontend | listen | backend
5226 yes | no | yes | yes
5227 Arguments : none
5228
5229 By default, the first operational backup server gets all traffic when normal
5230 servers are all down. Sometimes, it may be preferred to use multiple backups
5231 at once, because one will not be enough. When "option allbackups" is enabled,
5232 the load balancing will be performed among all backup servers when all normal
5233 ones are unavailable. The same load balancing algorithm will be used and the
5234 servers' weights will be respected. Thus, there will not be any priority
5235 order between the backup servers anymore.
5236
5237 This option is mostly used with static server farms dedicated to return a
5238 "sorry" page when an application is completely offline.
5239
5240 If this option has been enabled in a "defaults" section, it can be disabled
5241 in a specific instance by prepending the "no" keyword before it.
5242
5243
5244option checkcache
5245no option checkcache
Godbach7056a352013-12-11 20:01:07 +08005246 Analyze all server responses and block responses with cacheable cookies
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005247 May be used in sections : defaults | frontend | listen | backend
5248 yes | no | yes | yes
5249 Arguments : none
5250
5251 Some high-level frameworks set application cookies everywhere and do not
5252 always let enough control to the developer to manage how the responses should
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005253 be cached. When a session cookie is returned on a cacheable object, there is a
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005254 high risk of session crossing or stealing between users traversing the same
5255 caches. In some situations, it is better to block the response than to let
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02005256 some sensitive session information go in the wild.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005257
5258 The option "checkcache" enables deep inspection of all server responses for
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005259 strict compliance with HTTP specification in terms of cacheability. It
Willy Tarreau198a7442008-01-17 12:05:32 +01005260 carefully checks "Cache-control", "Pragma" and "Set-cookie" headers in server
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005261 response to check if there's a risk of caching a cookie on a client-side
5262 proxy. When this option is enabled, the only responses which can be delivered
Willy Tarreau198a7442008-01-17 12:05:32 +01005263 to the client are :
5264 - all those without "Set-Cookie" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005265 - all those with a return code other than 200, 203, 206, 300, 301, 410,
Willy Tarreau198a7442008-01-17 12:05:32 +01005266 provided that the server has not set a "Cache-control: public" header ;
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005267 - all those that come from a POST request, provided that the server has not
5268 set a 'Cache-Control: public' header ;
5269 - those with a 'Pragma: no-cache' header
5270 - those with a 'Cache-control: private' header
5271 - those with a 'Cache-control: no-store' header
5272 - those with a 'Cache-control: max-age=0' header
5273 - those with a 'Cache-control: s-maxage=0' header
5274 - those with a 'Cache-control: no-cache' header
5275 - those with a 'Cache-control: no-cache="set-cookie"' header
5276 - those with a 'Cache-control: no-cache="set-cookie,' header
5277 (allowing other fields after set-cookie)
5278
5279 If a response doesn't respect these requirements, then it will be blocked
Willy Tarreau198a7442008-01-17 12:05:32 +01005280 just as if it was from an "rspdeny" filter, with an "HTTP 502 bad gateway".
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005281 The session state shows "PH--" meaning that the proxy blocked the response
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01005282 during headers processing. Additionally, an alert will be sent in the logs so
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005283 that admins are informed that there's something to be fixed.
5284
5285 Due to the high impact on the application, the application should be tested
5286 in depth with the option enabled before going to production. It is also a
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01005287 good practice to always activate it during tests, even if it is not used in
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005288 production, as it will report potentially dangerous application behaviours.
5289
5290 If this option has been enabled in a "defaults" section, it can be disabled
5291 in a specific instance by prepending the "no" keyword before it.
5292
5293
5294option clitcpka
5295no option clitcpka
5296 Enable or disable the sending of TCP keepalive packets on the client side
5297 May be used in sections : defaults | frontend | listen | backend
5298 yes | yes | yes | no
5299 Arguments : none
5300
5301 When there is a firewall or any session-aware component between a client and
5302 a server, and when the protocol involves very long sessions with long idle
5303 periods (eg: remote desktops), there is a risk that one of the intermediate
5304 components decides to expire a session which has remained idle for too long.
5305
5306 Enabling socket-level TCP keep-alives makes the system regularly send packets
5307 to the other end of the connection, leaving it active. The delay between
5308 keep-alive probes is controlled by the system only and depends both on the
5309 operating system and its tuning parameters.
5310
5311 It is important to understand that keep-alive packets are neither emitted nor
5312 received at the application level. It is only the network stacks which sees
5313 them. For this reason, even if one side of the proxy already uses keep-alives
5314 to maintain its connection alive, those keep-alive packets will not be
5315 forwarded to the other side of the proxy.
5316
5317 Please note that this has nothing to do with HTTP keep-alive.
5318
5319 Using option "clitcpka" enables the emission of TCP keep-alive probes on the
5320 client side of a connection, which should help when session expirations are
5321 noticed between HAProxy and a client.
5322
5323 If this option has been enabled in a "defaults" section, it can be disabled
5324 in a specific instance by prepending the "no" keyword before it.
5325
5326 See also : "option srvtcpka", "option tcpka"
5327
5328
Willy Tarreau0ba27502007-12-24 16:55:16 +01005329option contstats
5330 Enable continuous traffic statistics updates
5331 May be used in sections : defaults | frontend | listen | backend
5332 yes | yes | yes | no
5333 Arguments : none
5334
5335 By default, counters used for statistics calculation are incremented
5336 only when a session finishes. It works quite well when serving small
5337 objects, but with big ones (for example large images or archives) or
5338 with A/V streaming, a graph generated from haproxy counters looks like
Willy Tarreaudef0d222016-11-08 22:03:00 +01005339 a hedgehog. With this option enabled counters get incremented frequently
5340 along the session, typically every 5 seconds, which is often enough to
5341 produce clean graphs. Recounting touches a hotpath directly so it is not
5342 not enabled by default, as it can cause a lot of wakeups for very large
5343 session counts and cause a small performance drop.
Willy Tarreau0ba27502007-12-24 16:55:16 +01005344
5345
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02005346option dontlog-normal
5347no option dontlog-normal
5348 Enable or disable logging of normal, successful connections
5349 May be used in sections : defaults | frontend | listen | backend
5350 yes | yes | yes | no
5351 Arguments : none
5352
5353 There are large sites dealing with several thousand connections per second
5354 and for which logging is a major pain. Some of them are even forced to turn
5355 logs off and cannot debug production issues. Setting this option ensures that
5356 normal connections, those which experience no error, no timeout, no retry nor
5357 redispatch, will not be logged. This leaves disk space for anomalies. In HTTP
5358 mode, the response status code is checked and return codes 5xx will still be
5359 logged.
5360
5361 It is strongly discouraged to use this option as most of the time, the key to
5362 complex issues is in the normal logs which will not be logged here. If you
5363 need to separate logs, see the "log-separate-errors" option instead.
5364
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005365 See also : "log", "dontlognull", "log-separate-errors" and section 8 about
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02005366 logging.
5367
5368
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005369option dontlognull
5370no option dontlognull
5371 Enable or disable logging of null connections
5372 May be used in sections : defaults | frontend | listen | backend
5373 yes | yes | yes | no
5374 Arguments : none
5375
5376 In certain environments, there are components which will regularly connect to
5377 various systems to ensure that they are still alive. It can be the case from
5378 another load balancer as well as from monitoring systems. By default, even a
5379 simple port probe or scan will produce a log. If those connections pollute
5380 the logs too much, it is possible to enable option "dontlognull" to indicate
5381 that a connection on which no data has been transferred will not be logged,
Willy Tarreau0f228a02015-05-01 15:37:53 +02005382 which typically corresponds to those probes. Note that errors will still be
5383 returned to the client and accounted for in the stats. If this is not what is
5384 desired, option http-ignore-probes can be used instead.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005385
5386 It is generally recommended not to use this option in uncontrolled
5387 environments (eg: internet), otherwise scans and other malicious activities
5388 would not be logged.
5389
5390 If this option has been enabled in a "defaults" section, it can be disabled
5391 in a specific instance by prepending the "no" keyword before it.
5392
Willy Tarreau0f228a02015-05-01 15:37:53 +02005393 See also : "log", "http-ignore-probes", "monitor-net", "monitor-uri", and
5394 section 8 about logging.
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005395
5396
5397option forceclose
5398no option forceclose
5399 Enable or disable active connection closing after response is transferred.
5400 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaua31e5df2009-12-30 01:10:35 +01005401 yes | yes | yes | yes
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005402 Arguments : none
5403
5404 Some HTTP servers do not necessarily close the connections when they receive
5405 the "Connection: close" set by "option httpclose", and if the client does not
5406 close either, then the connection remains open till the timeout expires. This
5407 causes high number of simultaneous connections on the servers and shows high
5408 global session times in the logs.
5409
5410 When this happens, it is possible to use "option forceclose". It will
Willy Tarreau82eeaf22009-12-29 12:09:05 +01005411 actively close the outgoing server channel as soon as the server has finished
Cyril Bonté653dcd62014-02-20 00:13:15 +01005412 to respond and release some resources earlier than with "option httpclose".
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005413
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005414 This option may also be combined with "option http-pretend-keepalive", which
5415 will disable sending of the "Connection: close" header, but will still cause
5416 the connection to be closed once the whole response is received.
5417
Cyril Bonté653dcd62014-02-20 00:13:15 +01005418 This option disables and replaces any previous "option httpclose", "option
5419 http-server-close", "option http-keep-alive", or "option http-tunnel".
Willy Tarreau02bce8b2014-01-30 00:15:28 +01005420
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005421 If this option has been enabled in a "defaults" section, it can be disabled
5422 in a specific instance by prepending the "no" keyword before it.
5423
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005424 See also : "option httpclose" and "option http-pretend-keepalive"
Willy Tarreaubf1f8162007-12-28 17:42:56 +01005425
5426
Willy Tarreau87cf5142011-08-19 22:57:24 +02005427option forwardfor [ except <network> ] [ header <name> ] [ if-none ]
Willy Tarreauc27debf2008-01-06 08:57:02 +01005428 Enable insertion of the X-Forwarded-For header to requests sent to servers
5429 May be used in sections : defaults | frontend | listen | backend
5430 yes | yes | yes | yes
5431 Arguments :
5432 <network> is an optional argument used to disable this option for sources
5433 matching <network>
Ross Westaf72a1d2008-08-03 10:51:45 +02005434 <name> an optional argument to specify a different "X-Forwarded-For"
Willy Tarreaud72758d2010-01-12 10:42:19 +01005435 header name.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005436
5437 Since HAProxy works in reverse-proxy mode, the servers see its IP address as
5438 their client address. This is sometimes annoying when the client's IP address
5439 is expected in server logs. To solve this problem, the well-known HTTP header
5440 "X-Forwarded-For" may be added by HAProxy to all requests sent to the server.
5441 This header contains a value representing the client's IP address. Since this
5442 header is always appended at the end of the existing header list, the server
5443 must be configured to always use the last occurrence of this header only. See
Ross Westaf72a1d2008-08-03 10:51:45 +02005444 the server's manual to find how to enable use of this standard header. Note
5445 that only the last occurrence of the header must be used, since it is really
5446 possible that the client has already brought one.
5447
Willy Tarreaud72758d2010-01-12 10:42:19 +01005448 The keyword "header" may be used to supply a different header name to replace
Ross Westaf72a1d2008-08-03 10:51:45 +02005449 the default "X-Forwarded-For". This can be useful where you might already
Willy Tarreaud72758d2010-01-12 10:42:19 +01005450 have a "X-Forwarded-For" header from a different application (eg: stunnel),
5451 and you need preserve it. Also if your backend server doesn't use the
Ross Westaf72a1d2008-08-03 10:51:45 +02005452 "X-Forwarded-For" header and requires different one (eg: Zeus Web Servers
5453 require "X-Cluster-Client-IP").
Willy Tarreauc27debf2008-01-06 08:57:02 +01005454
5455 Sometimes, a same HAProxy instance may be shared between a direct client
5456 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
5457 used to decrypt HTTPS traffic). It is possible to disable the addition of the
5458 header for a known source address or network by adding the "except" keyword
5459 followed by the network address. In this case, any source IP matching the
5460 network will not cause an addition of this header. Most common uses are with
5461 private networks or 127.0.0.1.
5462
Willy Tarreau87cf5142011-08-19 22:57:24 +02005463 Alternatively, the keyword "if-none" states that the header will only be
5464 added if it is not present. This should only be used in perfectly trusted
5465 environment, as this might cause a security issue if headers reaching haproxy
5466 are under the control of the end-user.
5467
Willy Tarreauc27debf2008-01-06 08:57:02 +01005468 This option may be specified either in the frontend or in the backend. If at
Ross Westaf72a1d2008-08-03 10:51:45 +02005469 least one of them uses it, the header will be added. Note that the backend's
5470 setting of the header subargument takes precedence over the frontend's if
Willy Tarreau87cf5142011-08-19 22:57:24 +02005471 both are defined. In the case of the "if-none" argument, if at least one of
5472 the frontend or the backend does not specify it, it wants the addition to be
5473 mandatory, so it wins.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005474
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +02005475 Example :
Willy Tarreauc27debf2008-01-06 08:57:02 +01005476 # Public HTTP address also used by stunnel on the same machine
5477 frontend www
5478 mode http
5479 option forwardfor except 127.0.0.1 # stunnel already adds the header
5480
Ross Westaf72a1d2008-08-03 10:51:45 +02005481 # Those servers want the IP Address in X-Client
5482 backend www
5483 mode http
5484 option forwardfor header X-Client
5485
Willy Tarreau87cf5142011-08-19 22:57:24 +02005486 See also : "option httpclose", "option http-server-close",
Willy Tarreau70dffda2014-01-30 03:07:23 +01005487 "option forceclose", "option http-keep-alive"
Willy Tarreauc27debf2008-01-06 08:57:02 +01005488
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005489
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02005490option http-buffer-request
5491no option http-buffer-request
5492 Enable or disable waiting for whole HTTP request body before proceeding
5493 May be used in sections : defaults | frontend | listen | backend
5494 yes | yes | yes | yes
5495 Arguments : none
5496
5497 It is sometimes desirable to wait for the body of an HTTP request before
5498 taking a decision. This is what is being done by "balance url_param" for
5499 example. The first use case is to buffer requests from slow clients before
5500 connecting to the server. Another use case consists in taking the routing
5501 decision based on the request body's contents. This option placed in a
5502 frontend or backend forces the HTTP processing to wait until either the whole
5503 body is received, or the request buffer is full, or the first chunk is
5504 complete in case of chunked encoding. It can have undesired side effects with
Tim Düsterhus4896c442016-11-29 02:15:19 +01005505 some applications abusing HTTP by expecting unbuffered transmissions between
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02005506 the frontend and the backend, so this should definitely not be used by
5507 default.
5508
Baptiste Assmanneccdf432015-10-28 13:49:01 +01005509 See also : "option http-no-delay", "timeout http-request"
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02005510
5511
Willy Tarreau0f228a02015-05-01 15:37:53 +02005512option http-ignore-probes
5513no option http-ignore-probes
5514 Enable or disable logging of null connections and request timeouts
5515 May be used in sections : defaults | frontend | listen | backend
5516 yes | yes | yes | no
5517 Arguments : none
5518
5519 Recently some browsers started to implement a "pre-connect" feature
5520 consisting in speculatively connecting to some recently visited web sites
5521 just in case the user would like to visit them. This results in many
5522 connections being established to web sites, which end up in 408 Request
5523 Timeout if the timeout strikes first, or 400 Bad Request when the browser
5524 decides to close them first. These ones pollute the log and feed the error
5525 counters. There was already "option dontlognull" but it's insufficient in
5526 this case. Instead, this option does the following things :
5527 - prevent any 400/408 message from being sent to the client if nothing
5528 was received over a connection before it was closed ;
5529 - prevent any log from being emitted in this situation ;
5530 - prevent any error counter from being incremented
5531
5532 That way the empty connection is silently ignored. Note that it is better
5533 not to use this unless it is clear that it is needed, because it will hide
5534 real problems. The most common reason for not receiving a request and seeing
5535 a 408 is due to an MTU inconsistency between the client and an intermediary
5536 element such as a VPN, which blocks too large packets. These issues are
5537 generally seen with POST requests as well as GET with large cookies. The logs
5538 are often the only way to detect them.
5539
5540 If this option has been enabled in a "defaults" section, it can be disabled
5541 in a specific instance by prepending the "no" keyword before it.
5542
5543 See also : "log", "dontlognull", "errorfile", and section 8 about logging.
5544
5545
Willy Tarreau16bfb022010-01-16 19:48:41 +01005546option http-keep-alive
5547no option http-keep-alive
5548 Enable or disable HTTP keep-alive from client to server
5549 May be used in sections : defaults | frontend | listen | backend
5550 yes | yes | yes | yes
5551 Arguments : none
5552
Willy Tarreau70dffda2014-01-30 03:07:23 +01005553 By default HAProxy operates in keep-alive mode with regards to persistent
5554 connections: for each connection it processes each request and response, and
5555 leaves the connection idle on both sides between the end of a response and the
5556 start of a new request. This mode may be changed by several options such as
5557 "option http-server-close", "option forceclose", "option httpclose" or
5558 "option http-tunnel". This option allows to set back the keep-alive mode,
5559 which can be useful when another mode was used in a defaults section.
5560
5561 Setting "option http-keep-alive" enables HTTP keep-alive mode on the client-
5562 and server- sides. This provides the lowest latency on the client side (slow
Willy Tarreau16bfb022010-01-16 19:48:41 +01005563 network) and the fastest session reuse on the server side at the expense
5564 of maintaining idle connections to the servers. In general, it is possible
5565 with this option to achieve approximately twice the request rate that the
5566 "http-server-close" option achieves on small objects. There are mainly two
5567 situations where this option may be useful :
5568
5569 - when the server is non-HTTP compliant and authenticates the connection
5570 instead of requests (eg: NTLM authentication)
5571
5572 - when the cost of establishing the connection to the server is significant
5573 compared to the cost of retrieving the associated object from the server.
5574
5575 This last case can happen when the server is a fast static server of cache.
5576 In this case, the server will need to be properly tuned to support high enough
5577 connection counts because connections will last until the client sends another
5578 request.
5579
5580 If the client request has to go to another backend or another server due to
5581 content switching or the load balancing algorithm, the idle connection will
Willy Tarreau9420b122013-12-15 18:58:25 +01005582 immediately be closed and a new one re-opened. Option "prefer-last-server" is
5583 available to try optimize server selection so that if the server currently
5584 attached to an idle connection is usable, it will be used.
Willy Tarreau16bfb022010-01-16 19:48:41 +01005585
5586 In general it is preferred to use "option http-server-close" with application
5587 servers, and some static servers might benefit from "option http-keep-alive".
5588
5589 At the moment, logs will not indicate whether requests came from the same
5590 session or not. The accept date reported in the logs corresponds to the end
5591 of the previous request, and the request time corresponds to the time spent
5592 waiting for a new request. The keep-alive request time is still bound to the
5593 timeout defined by "timeout http-keep-alive" or "timeout http-request" if
5594 not set.
5595
Cyril Bonté653dcd62014-02-20 00:13:15 +01005596 This option disables and replaces any previous "option httpclose", "option
5597 http-server-close", "option forceclose" or "option http-tunnel". When backend
Willy Tarreau70dffda2014-01-30 03:07:23 +01005598 and frontend options differ, all of these 4 options have precedence over
Cyril Bonté653dcd62014-02-20 00:13:15 +01005599 "option http-keep-alive".
Willy Tarreau16bfb022010-01-16 19:48:41 +01005600
5601 See also : "option forceclose", "option http-server-close",
Willy Tarreau9420b122013-12-15 18:58:25 +01005602 "option prefer-last-server", "option http-pretend-keepalive",
5603 "option httpclose", and "1.1. The HTTP transaction model".
Willy Tarreau16bfb022010-01-16 19:48:41 +01005604
5605
Willy Tarreau96e31212011-05-30 18:10:30 +02005606option http-no-delay
5607no option http-no-delay
5608 Instruct the system to favor low interactive delays over performance in HTTP
5609 May be used in sections : defaults | frontend | listen | backend
5610 yes | yes | yes | yes
5611 Arguments : none
5612
5613 In HTTP, each payload is unidirectional and has no notion of interactivity.
5614 Any agent is expected to queue data somewhat for a reasonably low delay.
5615 There are some very rare server-to-server applications that abuse the HTTP
5616 protocol and expect the payload phase to be highly interactive, with many
5617 interleaved data chunks in both directions within a single request. This is
5618 absolutely not supported by the HTTP specification and will not work across
5619 most proxies or servers. When such applications attempt to do this through
5620 haproxy, it works but they will experience high delays due to the network
5621 optimizations which favor performance by instructing the system to wait for
5622 enough data to be available in order to only send full packets. Typical
5623 delays are around 200 ms per round trip. Note that this only happens with
5624 abnormal uses. Normal uses such as CONNECT requests nor WebSockets are not
5625 affected.
5626
5627 When "option http-no-delay" is present in either the frontend or the backend
5628 used by a connection, all such optimizations will be disabled in order to
5629 make the exchanges as fast as possible. Of course this offers no guarantee on
5630 the functionality, as it may break at any other place. But if it works via
5631 HAProxy, it will work as fast as possible. This option should never be used
5632 by default, and should never be used at all unless such a buggy application
5633 is discovered. The impact of using this option is an increase of bandwidth
5634 usage and CPU usage, which may significantly lower performance in high
5635 latency environments.
5636
Willy Tarreau9fbe18e2015-05-01 22:42:08 +02005637 See also : "option http-buffer-request"
5638
Willy Tarreau96e31212011-05-30 18:10:30 +02005639
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005640option http-pretend-keepalive
5641no option http-pretend-keepalive
5642 Define whether haproxy will announce keepalive to the server or not
5643 May be used in sections : defaults | frontend | listen | backend
5644 yes | yes | yes | yes
5645 Arguments : none
5646
5647 When running with "option http-server-close" or "option forceclose", haproxy
5648 adds a "Connection: close" header to the request forwarded to the server.
5649 Unfortunately, when some servers see this header, they automatically refrain
5650 from using the chunked encoding for responses of unknown length, while this
5651 is totally unrelated. The immediate effect is that this prevents haproxy from
5652 maintaining the client connection alive. A second effect is that a client or
5653 a cache could receive an incomplete response without being aware of it, and
5654 consider the response complete.
5655
5656 By setting "option http-pretend-keepalive", haproxy will make the server
5657 believe it will keep the connection alive. The server will then not fall back
5658 to the abnormal undesired above. When haproxy gets the whole response, it
5659 will close the connection with the server just as it would do with the
5660 "forceclose" option. That way the client gets a normal response and the
5661 connection is correctly closed on the server side.
5662
5663 It is recommended not to enable this option by default, because most servers
5664 will more efficiently close the connection themselves after the last packet,
5665 and release its buffers slightly earlier. Also, the added packet on the
5666 network could slightly reduce the overall peak performance. However it is
5667 worth noting that when this option is enabled, haproxy will have slightly
5668 less work to do. So if haproxy is the bottleneck on the whole architecture,
5669 enabling this option might save a few CPU cycles.
5670
5671 This option may be set both in a frontend and in a backend. It is enabled if
5672 at least one of the frontend or backend holding a connection has it enabled.
Jamie Gloudonaaa21002012-08-25 00:18:33 -04005673 This option may be combined with "option httpclose", which will cause
Willy Tarreau22a95342010-09-29 14:31:41 +02005674 keepalive to be announced to the server and close to be announced to the
5675 client. This practice is discouraged though.
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005676
5677 If this option has been enabled in a "defaults" section, it can be disabled
5678 in a specific instance by prepending the "no" keyword before it.
5679
Willy Tarreau16bfb022010-01-16 19:48:41 +01005680 See also : "option forceclose", "option http-server-close", and
5681 "option http-keep-alive"
Willy Tarreau8a8e1d92010-04-05 16:15:16 +02005682
Willy Tarreauc27debf2008-01-06 08:57:02 +01005683
Willy Tarreaub608feb2010-01-02 22:47:18 +01005684option http-server-close
5685no option http-server-close
5686 Enable or disable HTTP connection closing on the server side
5687 May be used in sections : defaults | frontend | listen | backend
5688 yes | yes | yes | yes
5689 Arguments : none
5690
Willy Tarreau70dffda2014-01-30 03:07:23 +01005691 By default HAProxy operates in keep-alive mode with regards to persistent
5692 connections: for each connection it processes each request and response, and
5693 leaves the connection idle on both sides between the end of a response and
5694 the start of a new request. This mode may be changed by several options such
5695 as "option http-server-close", "option forceclose", "option httpclose" or
5696 "option http-tunnel". Setting "option http-server-close" enables HTTP
5697 connection-close mode on the server side while keeping the ability to support
5698 HTTP keep-alive and pipelining on the client side. This provides the lowest
5699 latency on the client side (slow network) and the fastest session reuse on
5700 the server side to save server resources, similarly to "option forceclose".
5701 It also permits non-keepalive capable servers to be served in keep-alive mode
Lukas Tribus23953682017-04-28 13:24:30 +00005702 to the clients if they conform to the requirements of RFC7230. Please note
Willy Tarreau70dffda2014-01-30 03:07:23 +01005703 that some servers do not always conform to those requirements when they see
5704 "Connection: close" in the request. The effect will be that keep-alive will
5705 never be used. A workaround consists in enabling "option
5706 http-pretend-keepalive".
Willy Tarreaub608feb2010-01-02 22:47:18 +01005707
5708 At the moment, logs will not indicate whether requests came from the same
5709 session or not. The accept date reported in the logs corresponds to the end
5710 of the previous request, and the request time corresponds to the time spent
5711 waiting for a new request. The keep-alive request time is still bound to the
Willy Tarreaub16a5742010-01-10 14:46:16 +01005712 timeout defined by "timeout http-keep-alive" or "timeout http-request" if
5713 not set.
Willy Tarreaub608feb2010-01-02 22:47:18 +01005714
5715 This option may be set both in a frontend and in a backend. It is enabled if
5716 at least one of the frontend or backend holding a connection has it enabled.
Cyril Bonté653dcd62014-02-20 00:13:15 +01005717 It disables and replaces any previous "option httpclose", "option forceclose",
5718 "option http-tunnel" or "option http-keep-alive". Please check section 4
Willy Tarreau70dffda2014-01-30 03:07:23 +01005719 ("Proxies") to see how this option combines with others when frontend and
5720 backend options differ.
Willy Tarreaub608feb2010-01-02 22:47:18 +01005721
5722 If this option has been enabled in a "defaults" section, it can be disabled
5723 in a specific instance by prepending the "no" keyword before it.
5724
Patrick Mezard9ec2ec42010-06-12 17:02:45 +02005725 See also : "option forceclose", "option http-pretend-keepalive",
Willy Tarreau16bfb022010-01-16 19:48:41 +01005726 "option httpclose", "option http-keep-alive", and
5727 "1.1. The HTTP transaction model".
Willy Tarreaub608feb2010-01-02 22:47:18 +01005728
5729
Willy Tarreau02bce8b2014-01-30 00:15:28 +01005730option http-tunnel
5731no option http-tunnel
5732 Disable or enable HTTP connection processing after first transaction
5733 May be used in sections : defaults | frontend | listen | backend
5734 yes | yes | yes | yes
5735 Arguments : none
5736
Willy Tarreau70dffda2014-01-30 03:07:23 +01005737 By default HAProxy operates in keep-alive mode with regards to persistent
5738 connections: for each connection it processes each request and response, and
5739 leaves the connection idle on both sides between the end of a response and
5740 the start of a new request. This mode may be changed by several options such
5741 as "option http-server-close", "option forceclose", "option httpclose" or
5742 "option http-tunnel".
5743
5744 Option "http-tunnel" disables any HTTP processing past the first request and
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03005745 the first response. This is the mode which was used by default in versions
Willy Tarreau70dffda2014-01-30 03:07:23 +01005746 1.0 to 1.5-dev21. It is the mode with the lowest processing overhead, which
5747 is normally not needed anymore unless in very specific cases such as when
5748 using an in-house protocol that looks like HTTP but is not compatible, or
5749 just to log one request per client in order to reduce log size. Note that
5750 everything which works at the HTTP level, including header parsing/addition,
5751 cookie processing or content switching will only work for the first request
5752 and will be ignored after the first response.
Willy Tarreau02bce8b2014-01-30 00:15:28 +01005753
5754 If this option has been enabled in a "defaults" section, it can be disabled
5755 in a specific instance by prepending the "no" keyword before it.
5756
5757 See also : "option forceclose", "option http-server-close",
5758 "option httpclose", "option http-keep-alive", and
5759 "1.1. The HTTP transaction model".
5760
5761
Willy Tarreau88d349d2010-01-25 12:15:43 +01005762option http-use-proxy-header
Cyril Bontéf0c60612010-02-06 14:44:47 +01005763no option http-use-proxy-header
Willy Tarreau88d349d2010-01-25 12:15:43 +01005764 Make use of non-standard Proxy-Connection header instead of Connection
5765 May be used in sections : defaults | frontend | listen | backend
5766 yes | yes | yes | no
5767 Arguments : none
5768
Lukas Tribus23953682017-04-28 13:24:30 +00005769 While RFC7230 explicitly states that HTTP/1.1 agents must use the
Willy Tarreau88d349d2010-01-25 12:15:43 +01005770 Connection header to indicate their wish of persistent or non-persistent
5771 connections, both browsers and proxies ignore this header for proxied
5772 connections and make use of the undocumented, non-standard Proxy-Connection
5773 header instead. The issue begins when trying to put a load balancer between
5774 browsers and such proxies, because there will be a difference between what
5775 haproxy understands and what the client and the proxy agree on.
5776
5777 By setting this option in a frontend, haproxy can automatically switch to use
5778 that non-standard header if it sees proxied requests. A proxied request is
Lukas Tribusf01a9cd2016-02-03 18:09:37 +01005779 defined here as one where the URI begins with neither a '/' nor a '*'. This
5780 is incompatible with the HTTP tunnel mode. Note that this option can only be
5781 specified in a frontend and will affect the request along its whole life.
Willy Tarreau88d349d2010-01-25 12:15:43 +01005782
Willy Tarreau844a7e72010-01-31 21:46:18 +01005783 Also, when this option is set, a request which requires authentication will
5784 automatically switch to use proxy authentication headers if it is itself a
5785 proxied request. That makes it possible to check or enforce authentication in
5786 front of an existing proxy.
5787
Willy Tarreau88d349d2010-01-25 12:15:43 +01005788 This option should normally never be used, except in front of a proxy.
5789
5790 See also : "option httpclose", "option forceclose" and "option
5791 http-server-close".
5792
5793
Willy Tarreaud63335a2010-02-26 12:56:52 +01005794option httpchk
5795option httpchk <uri>
5796option httpchk <method> <uri>
5797option httpchk <method> <uri> <version>
5798 Enable HTTP protocol to check on the servers health
5799 May be used in sections : defaults | frontend | listen | backend
5800 yes | no | yes | yes
5801 Arguments :
5802 <method> is the optional HTTP method used with the requests. When not set,
5803 the "OPTIONS" method is used, as it generally requires low server
5804 processing and is easy to filter out from the logs. Any method
5805 may be used, though it is not recommended to invent non-standard
5806 ones.
5807
5808 <uri> is the URI referenced in the HTTP requests. It defaults to " / "
5809 which is accessible by default on almost any server, but may be
5810 changed to any other URI. Query strings are permitted.
5811
5812 <version> is the optional HTTP version string. It defaults to "HTTP/1.0"
5813 but some servers might behave incorrectly in HTTP 1.0, so turning
5814 it to HTTP/1.1 may sometimes help. Note that the Host field is
5815 mandatory in HTTP/1.1, and as a trick, it is possible to pass it
5816 after "\r\n" following the version string.
5817
5818 By default, server health checks only consist in trying to establish a TCP
5819 connection. When "option httpchk" is specified, a complete HTTP request is
5820 sent once the TCP connection is established, and responses 2xx and 3xx are
5821 considered valid, while all other ones indicate a server failure, including
5822 the lack of any response.
5823
5824 The port and interval are specified in the server configuration.
5825
5826 This option does not necessarily require an HTTP backend, it also works with
5827 plain TCP backends. This is particularly useful to check simple scripts bound
5828 to some dedicated ports using the inetd daemon.
5829
5830 Examples :
5831 # Relay HTTPS traffic to Apache instance and check service availability
5832 # using HTTP request "OPTIONS * HTTP/1.1" on port 80.
5833 backend https_relay
5834 mode tcp
5835 option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
5836 server apache1 192.168.1.1:443 check port 80
5837
Simon Hormanafc47ee2013-11-25 10:46:35 +09005838 See also : "option ssl-hello-chk", "option smtpchk", "option mysql-check",
5839 "option pgsql-check", "http-check" and the "check", "port" and
5840 "inter" server options.
Willy Tarreaud63335a2010-02-26 12:56:52 +01005841
5842
Willy Tarreauc27debf2008-01-06 08:57:02 +01005843option httpclose
5844no option httpclose
5845 Enable or disable passive HTTP connection closing
5846 May be used in sections : defaults | frontend | listen | backend
5847 yes | yes | yes | yes
5848 Arguments : none
5849
Willy Tarreau70dffda2014-01-30 03:07:23 +01005850 By default HAProxy operates in keep-alive mode with regards to persistent
5851 connections: for each connection it processes each request and response, and
5852 leaves the connection idle on both sides between the end of a response and
5853 the start of a new request. This mode may be changed by several options such
Cyril Bonté653dcd62014-02-20 00:13:15 +01005854 as "option http-server-close", "option forceclose", "option httpclose" or
Willy Tarreau70dffda2014-01-30 03:07:23 +01005855 "option http-tunnel".
5856
5857 If "option httpclose" is set, HAProxy will work in HTTP tunnel mode and check
5858 if a "Connection: close" header is already set in each direction, and will
5859 add one if missing. Each end should react to this by actively closing the TCP
5860 connection after each transfer, thus resulting in a switch to the HTTP close
5861 mode. Any "Connection" header different from "close" will also be removed.
5862 Note that this option is deprecated since what it does is very cheap but not
5863 reliable. Using "option http-server-close" or "option forceclose" is strongly
5864 recommended instead.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005865
5866 It seldom happens that some servers incorrectly ignore this header and do not
Jamie Gloudonaaa21002012-08-25 00:18:33 -04005867 close the connection even though they reply "Connection: close". For this
Willy Tarreau0dfdf192010-01-05 11:33:11 +01005868 reason, they are not compatible with older HTTP 1.0 browsers. If this happens
5869 it is possible to use the "option forceclose" which actively closes the
5870 request connection once the server responds. Option "forceclose" also
5871 releases the server connection earlier because it does not have to wait for
5872 the client to acknowledge it.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005873
5874 This option may be set both in a frontend and in a backend. It is enabled if
5875 at least one of the frontend or backend holding a connection has it enabled.
Cyril Bonté653dcd62014-02-20 00:13:15 +01005876 It disables and replaces any previous "option http-server-close",
5877 "option forceclose", "option http-keep-alive" or "option http-tunnel". Please
Willy Tarreau70dffda2014-01-30 03:07:23 +01005878 check section 4 ("Proxies") to see how this option combines with others when
5879 frontend and backend options differ.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005880
5881 If this option has been enabled in a "defaults" section, it can be disabled
5882 in a specific instance by prepending the "no" keyword before it.
5883
Patrick Mezard9ec2ec42010-06-12 17:02:45 +02005884 See also : "option forceclose", "option http-server-close" and
5885 "1.1. The HTTP transaction model".
Willy Tarreauc27debf2008-01-06 08:57:02 +01005886
5887
Emeric Brun3a058f32009-06-30 18:26:00 +02005888option httplog [ clf ]
Willy Tarreauc27debf2008-01-06 08:57:02 +01005889 Enable logging of HTTP request, session state and timers
5890 May be used in sections : defaults | frontend | listen | backend
5891 yes | yes | yes | yes
Emeric Brun3a058f32009-06-30 18:26:00 +02005892 Arguments :
5893 clf if the "clf" argument is added, then the output format will be
5894 the CLF format instead of HAProxy's default HTTP format. You can
5895 use this when you need to feed HAProxy's logs through a specific
5896 log analyser which only support the CLF format and which is not
5897 extensible.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005898
5899 By default, the log output format is very poor, as it only contains the
5900 source and destination addresses, and the instance name. By specifying
5901 "option httplog", each log line turns into a much richer format including,
5902 but not limited to, the HTTP request, the connection timers, the session
5903 status, the connections numbers, the captured headers and cookies, the
5904 frontend, backend and server name, and of course the source address and
5905 ports.
5906
5907 This option may be set either in the frontend or the backend.
5908
PiBa-NLbd556bf2014-12-11 21:31:54 +01005909 Specifying only "option httplog" will automatically clear the 'clf' mode
5910 if it was set by default.
Emeric Brun3a058f32009-06-30 18:26:00 +02005911
Guillaume de Lafond29f45602017-03-31 19:52:15 +02005912 "option httplog" overrides any previous "log-format" directive.
5913
Willy Tarreauc57f0e22009-05-10 13:12:33 +02005914 See also : section 8 about logging.
Willy Tarreauc27debf2008-01-06 08:57:02 +01005915
Willy Tarreau55165fe2009-05-10 12:02:55 +02005916
5917option http_proxy
5918no option http_proxy
5919 Enable or disable plain HTTP proxy mode
5920 May be used in sections : defaults | frontend | listen | backend
5921 yes | yes | yes | yes
5922 Arguments : none
5923
5924 It sometimes happens that people need a pure HTTP proxy which understands
5925 basic proxy requests without caching nor any fancy feature. In this case,
5926 it may be worth setting up an HAProxy instance with the "option http_proxy"
5927 set. In this mode, no server is declared, and the connection is forwarded to
5928 the IP address and port found in the URL after the "http://" scheme.
5929
5930 No host address resolution is performed, so this only works when pure IP
5931 addresses are passed. Since this option's usage perimeter is rather limited,
Lukas Tribusf01a9cd2016-02-03 18:09:37 +01005932 it will probably be used only by experts who know they need exactly it. This
5933 is incompatible with the HTTP tunnel mode.
Willy Tarreau55165fe2009-05-10 12:02:55 +02005934
5935 If this option has been enabled in a "defaults" section, it can be disabled
5936 in a specific instance by prepending the "no" keyword before it.
5937
5938 Example :
5939 # this backend understands HTTP proxy requests and forwards them directly.
5940 backend direct_forward
5941 option httpclose
5942 option http_proxy
5943
5944 See also : "option httpclose"
5945
Willy Tarreau211ad242009-10-03 21:45:07 +02005946
Jamie Gloudon801a0a32012-08-25 00:18:33 -04005947option independent-streams
5948no option independent-streams
5949 Enable or disable independent timeout processing for both directions
Willy Tarreauf27b5ea2009-10-03 22:01:18 +02005950 May be used in sections : defaults | frontend | listen | backend
5951 yes | yes | yes | yes
5952 Arguments : none
5953
5954 By default, when data is sent over a socket, both the write timeout and the
5955 read timeout for that socket are refreshed, because we consider that there is
5956 activity on that socket, and we have no other means of guessing if we should
5957 receive data or not.
5958
5959 While this default behaviour is desirable for almost all applications, there
5960 exists a situation where it is desirable to disable it, and only refresh the
5961 read timeout if there are incoming data. This happens on sessions with large
5962 timeouts and low amounts of exchanged data such as telnet session. If the
5963 server suddenly disappears, the output data accumulates in the system's
5964 socket buffers, both timeouts are correctly refreshed, and there is no way
5965 to know the server does not receive them, so we don't timeout. However, when
5966 the underlying protocol always echoes sent data, it would be enough by itself
5967 to detect the issue using the read timeout. Note that this problem does not
5968 happen with more verbose protocols because data won't accumulate long in the
5969 socket buffers.
5970
5971 When this option is set on the frontend, it will disable read timeout updates
5972 on data sent to the client. There probably is little use of this case. When
5973 the option is set on the backend, it will disable read timeout updates on
5974 data sent to the server. Doing so will typically break large HTTP posts from
5975 slow lines, so use it with caution.
5976
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03005977 Note: older versions used to call this setting "option independent-streams"
Jamie Gloudon801a0a32012-08-25 00:18:33 -04005978 with a spelling mistake. This spelling is still supported but
5979 deprecated.
5980
Willy Tarreauce887fd2012-05-12 12:50:00 +02005981 See also : "timeout client", "timeout server" and "timeout tunnel"
Willy Tarreauf27b5ea2009-10-03 22:01:18 +02005982
5983
Gabor Lekenyb4c81e42010-09-29 18:17:05 +02005984option ldap-check
5985 Use LDAPv3 health checks for server testing
5986 May be used in sections : defaults | frontend | listen | backend
5987 yes | no | yes | yes
5988 Arguments : none
5989
5990 It is possible to test that the server correctly talks LDAPv3 instead of just
5991 testing that it accepts the TCP connection. When this option is set, an
5992 LDAPv3 anonymous simple bind message is sent to the server, and the response
5993 is analyzed to find an LDAPv3 bind response message.
5994
5995 The server is considered valid only when the LDAP response contains success
5996 resultCode (http://tools.ietf.org/html/rfc4511#section-4.1.9).
5997
5998 Logging of bind requests is server dependent see your documentation how to
5999 configure it.
6000
6001 Example :
6002 option ldap-check
6003
6004 See also : "option httpchk"
6005
6006
Simon Horman98637e52014-06-20 12:30:16 +09006007option external-check
6008 Use external processes for server health checks
6009 May be used in sections : defaults | frontend | listen | backend
6010 yes | no | yes | yes
6011
6012 It is possible to test the health of a server using an external command.
6013 This is achieved by running the executable set using "external-check
6014 command".
6015
6016 Requires the "external-check" global to be set.
6017
6018 See also : "external-check", "external-check command", "external-check path"
6019
6020
Willy Tarreau211ad242009-10-03 21:45:07 +02006021option log-health-checks
6022no option log-health-checks
Willy Tarreaubef1b322014-05-13 21:01:39 +02006023 Enable or disable logging of health checks status updates
Willy Tarreau211ad242009-10-03 21:45:07 +02006024 May be used in sections : defaults | frontend | listen | backend
6025 yes | no | yes | yes
6026 Arguments : none
6027
Willy Tarreaubef1b322014-05-13 21:01:39 +02006028 By default, failed health check are logged if server is UP and successful
6029 health checks are logged if server is DOWN, so the amount of additional
6030 information is limited.
Willy Tarreau211ad242009-10-03 21:45:07 +02006031
Willy Tarreaubef1b322014-05-13 21:01:39 +02006032 When this option is enabled, any change of the health check status or to
6033 the server's health will be logged, so that it becomes possible to know
6034 that a server was failing occasional checks before crashing, or exactly when
6035 it failed to respond a valid HTTP status, then when the port started to
6036 reject connections, then when the server stopped responding at all.
6037
6038 Note that status changes not caused by health checks (eg: enable/disable on
6039 the CLI) are intentionally not logged by this option.
Willy Tarreau211ad242009-10-03 21:45:07 +02006040
Willy Tarreaubef1b322014-05-13 21:01:39 +02006041 See also: "option httpchk", "option ldap-check", "option mysql-check",
6042 "option pgsql-check", "option redis-check", "option smtpchk",
6043 "option tcp-check", "log" and section 8 about logging.
Willy Tarreau211ad242009-10-03 21:45:07 +02006044
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02006045
6046option log-separate-errors
6047no option log-separate-errors
6048 Change log level for non-completely successful connections
6049 May be used in sections : defaults | frontend | listen | backend
6050 yes | yes | yes | no
6051 Arguments : none
6052
6053 Sometimes looking for errors in logs is not easy. This option makes haproxy
6054 raise the level of logs containing potentially interesting information such
6055 as errors, timeouts, retries, redispatches, or HTTP status codes 5xx. The
6056 level changes from "info" to "err". This makes it possible to log them
6057 separately to a different file with most syslog daemons. Be careful not to
6058 remove them from the original file, otherwise you would lose ordering which
6059 provides very important information.
6060
6061 Using this option, large sites dealing with several thousand connections per
6062 second may log normal traffic to a rotating buffer and only archive smaller
6063 error logs.
6064
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006065 See also : "log", "dontlognull", "dontlog-normal" and section 8 about
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +02006066 logging.
6067
Willy Tarreauc27debf2008-01-06 08:57:02 +01006068
6069option logasap
6070no option logasap
6071 Enable or disable early logging of HTTP requests
6072 May be used in sections : defaults | frontend | listen | backend
6073 yes | yes | yes | no
6074 Arguments : none
6075
6076 By default, HTTP requests are logged upon termination so that the total
6077 transfer time and the number of bytes appear in the logs. When large objects
6078 are being transferred, it may take a while before the request appears in the
6079 logs. Using "option logasap", the request gets logged as soon as the server
6080 sends the complete headers. The only missing information in the logs will be
6081 the total number of bytes which will indicate everything except the amount
6082 of data transferred, and the total time which will not take the transfer
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01006083 time into account. In such a situation, it's a good practice to capture the
Willy Tarreauc27debf2008-01-06 08:57:02 +01006084 "Content-Length" response header so that the logs at least indicate how many
6085 bytes are expected to be transferred.
6086
Willy Tarreaucc6c8912009-02-22 10:53:55 +01006087 Examples :
6088 listen http_proxy 0.0.0.0:80
6089 mode http
6090 option httplog
6091 option logasap
6092 log 192.168.2.200 local3
6093
6094 >>> Feb 6 12:14:14 localhost \
6095 haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
6096 static/srv1 9/10/7/14/+30 200 +243 - - ---- 3/1/1/1/0 1/0 \
6097 "GET /image.iso HTTP/1.0"
6098
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006099 See also : "option httplog", "capture response header", and section 8 about
Willy Tarreauc27debf2008-01-06 08:57:02 +01006100 logging.
6101
6102
Nenad Merdanovic6639a7c2014-05-30 14:26:32 +02006103option mysql-check [ user <username> [ post-41 ] ]
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02006104 Use MySQL health checks for server testing
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01006105 May be used in sections : defaults | frontend | listen | backend
6106 yes | no | yes | yes
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02006107 Arguments :
Cyril Bonté108cf6e2012-04-21 23:30:29 +02006108 <username> This is the username which will be used when connecting to MySQL
6109 server.
Nenad Merdanovic6639a7c2014-05-30 14:26:32 +02006110 post-41 Send post v4.1 client compatible checks
Hervé COMMOWICK8776f1b2010-10-18 15:58:36 +02006111
6112 If you specify a username, the check consists of sending two MySQL packet,
6113 one Client Authentication packet, and one QUIT packet, to correctly close
6114 MySQL session. We then parse the MySQL Handshake Initialisation packet and/or
6115 Error packet. It is a basic but useful test which does not produce error nor
6116 aborted connect on the server. However, it requires adding an authorization
6117 in the MySQL table, like this :
6118
6119 USE mysql;
6120 INSERT INTO user (Host,User) values ('<ip_of_haproxy>','<username>');
6121 FLUSH PRIVILEGES;
6122
6123 If you don't specify a username (it is deprecated and not recommended), the
6124 check only consists in parsing the Mysql Handshake Initialisation packet or
6125 Error packet, we don't send anything in this mode. It was reported that it
6126 can generate lockout if check is too frequent and/or if there is not enough
6127 traffic. In fact, you need in this case to check MySQL "max_connect_errors"
6128 value as if a connection is established successfully within fewer than MySQL
6129 "max_connect_errors" attempts after a previous connection was interrupted,
6130 the error count for the host is cleared to zero. If HAProxy's server get
6131 blocked, the "FLUSH HOSTS" statement is the only way to unblock it.
6132
6133 Remember that this does not check database presence nor database consistency.
6134 To do this, you can use an external check with xinetd for example.
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01006135
Hervé COMMOWICK212f7782011-06-10 14:05:59 +02006136 The check requires MySQL >=3.22, for older version, please use TCP check.
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01006137
6138 Most often, an incoming MySQL server needs to see the client's IP address for
6139 various purposes, including IP privilege matching and connection logging.
6140 When possible, it is often wise to masquerade the client's IP address when
6141 connecting to the server using the "usesrc" argument of the "source" keyword,
Willy Tarreau29fbe512015-08-20 19:35:14 +02006142 which requires the transparent proxy feature to be compiled in, and the MySQL
6143 server to route the client via the machine hosting haproxy.
Hervé COMMOWICK698ae002010-01-12 09:25:13 +01006144
6145 See also: "option httpchk"
6146
6147
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006148option nolinger
6149no option nolinger
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01006150 Enable or disable immediate session resource cleaning after close
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006151 May be used in sections: defaults | frontend | listen | backend
6152 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006153 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006154
6155 When clients or servers abort connections in a dirty way (eg: they are
6156 physically disconnected), the session timeouts triggers and the session is
6157 closed. But it will remain in FIN_WAIT1 state for some time in the system,
6158 using some resources and possibly limiting the ability to establish newer
6159 connections.
6160
6161 When this happens, it is possible to activate "option nolinger" which forces
6162 the system to immediately remove any socket's pending data on close. Thus,
6163 the session is instantly purged from the system's tables. This usually has
6164 side effects such as increased number of TCP resets due to old retransmits
6165 getting immediately rejected. Some firewalls may sometimes complain about
6166 this too.
6167
6168 For this reason, it is not recommended to use this option when not absolutely
6169 needed. You know that you need it when you have thousands of FIN_WAIT1
6170 sessions on your system (TIME_WAIT ones do not count).
6171
6172 This option may be used both on frontends and backends, depending on the side
6173 where it is required. Use it on the frontend for clients, and on the backend
6174 for servers.
6175
6176 If this option has been enabled in a "defaults" section, it can be disabled
6177 in a specific instance by prepending the "no" keyword before it.
6178
6179
Willy Tarreau55165fe2009-05-10 12:02:55 +02006180option originalto [ except <network> ] [ header <name> ]
6181 Enable insertion of the X-Original-To header to requests sent to servers
6182 May be used in sections : defaults | frontend | listen | backend
6183 yes | yes | yes | yes
6184 Arguments :
6185 <network> is an optional argument used to disable this option for sources
6186 matching <network>
6187 <name> an optional argument to specify a different "X-Original-To"
6188 header name.
6189
6190 Since HAProxy can work in transparent mode, every request from a client can
6191 be redirected to the proxy and HAProxy itself can proxy every request to a
6192 complex SQUID environment and the destination host from SO_ORIGINAL_DST will
6193 be lost. This is annoying when you want access rules based on destination ip
6194 addresses. To solve this problem, a new HTTP header "X-Original-To" may be
6195 added by HAProxy to all requests sent to the server. This header contains a
6196 value representing the original destination IP address. Since this must be
6197 configured to always use the last occurrence of this header only. Note that
6198 only the last occurrence of the header must be used, since it is really
6199 possible that the client has already brought one.
6200
6201 The keyword "header" may be used to supply a different header name to replace
6202 the default "X-Original-To". This can be useful where you might already
6203 have a "X-Original-To" header from a different application, and you need
6204 preserve it. Also if your backend server doesn't use the "X-Original-To"
6205 header and requires different one.
6206
6207 Sometimes, a same HAProxy instance may be shared between a direct client
6208 access and a reverse-proxy access (for instance when an SSL reverse-proxy is
6209 used to decrypt HTTPS traffic). It is possible to disable the addition of the
6210 header for a known source address or network by adding the "except" keyword
6211 followed by the network address. In this case, any source IP matching the
6212 network will not cause an addition of this header. Most common uses are with
6213 private networks or 127.0.0.1.
6214
6215 This option may be specified either in the frontend or in the backend. If at
6216 least one of them uses it, the header will be added. Note that the backend's
6217 setting of the header subargument takes precedence over the frontend's if
6218 both are defined.
6219
Willy Tarreau55165fe2009-05-10 12:02:55 +02006220 Examples :
6221 # Original Destination address
6222 frontend www
6223 mode http
6224 option originalto except 127.0.0.1
6225
6226 # Those servers want the IP Address in X-Client-Dst
6227 backend www
6228 mode http
6229 option originalto header X-Client-Dst
6230
Willy Tarreau87cf5142011-08-19 22:57:24 +02006231 See also : "option httpclose", "option http-server-close",
6232 "option forceclose"
Willy Tarreau55165fe2009-05-10 12:02:55 +02006233
6234
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006235option persist
6236no option persist
6237 Enable or disable forced persistence on down servers
6238 May be used in sections: defaults | frontend | listen | backend
6239 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006240 Arguments : none
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006241
6242 When an HTTP request reaches a backend with a cookie which references a dead
6243 server, by default it is redispatched to another server. It is possible to
6244 force the request to be sent to the dead server first using "option persist"
6245 if absolutely needed. A common use case is when servers are under extreme
6246 load and spend their time flapping. In this case, the users would still be
6247 directed to the server they opened the session on, in the hope they would be
6248 correctly served. It is recommended to use "option redispatch" in conjunction
6249 with this option so that in the event it would not be possible to connect to
6250 the server at all (server definitely dead), the client would finally be
6251 redirected to another valid server.
6252
6253 If this option has been enabled in a "defaults" section, it can be disabled
6254 in a specific instance by prepending the "no" keyword before it.
6255
Willy Tarreau4de91492010-01-22 19:10:05 +01006256 See also : "option redispatch", "retries", "force-persist"
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006257
6258
Willy Tarreau0c122822013-12-15 18:49:01 +01006259option pgsql-check [ user <username> ]
6260 Use PostgreSQL health checks for server testing
6261 May be used in sections : defaults | frontend | listen | backend
6262 yes | no | yes | yes
6263 Arguments :
6264 <username> This is the username which will be used when connecting to
6265 PostgreSQL server.
6266
6267 The check sends a PostgreSQL StartupMessage and waits for either
6268 Authentication request or ErrorResponse message. It is a basic but useful
6269 test which does not produce error nor aborted connect on the server.
6270 This check is identical with the "mysql-check".
6271
6272 See also: "option httpchk"
6273
6274
Willy Tarreau9420b122013-12-15 18:58:25 +01006275option prefer-last-server
6276no option prefer-last-server
6277 Allow multiple load balanced requests to remain on the same server
6278 May be used in sections: defaults | frontend | listen | backend
6279 yes | no | yes | yes
6280 Arguments : none
6281
6282 When the load balancing algorithm in use is not deterministic, and a previous
6283 request was sent to a server to which haproxy still holds a connection, it is
6284 sometimes desirable that subsequent requests on a same session go to the same
6285 server as much as possible. Note that this is different from persistence, as
6286 we only indicate a preference which haproxy tries to apply without any form
6287 of warranty. The real use is for keep-alive connections sent to servers. When
6288 this option is used, haproxy will try to reuse the same connection that is
6289 attached to the server instead of rebalancing to another server, causing a
6290 close of the connection. This can make sense for static file servers. It does
Willy Tarreau068621e2013-12-23 15:11:25 +01006291 not make much sense to use this in combination with hashing algorithms. Note,
6292 haproxy already automatically tries to stick to a server which sends a 401 or
6293 to a proxy which sends a 407 (authentication required). This is mandatory for
6294 use with the broken NTLM authentication challenge, and significantly helps in
6295 troubleshooting some faulty applications. Option prefer-last-server might be
6296 desirable in these environments as well, to avoid redistributing the traffic
6297 after every other response.
Willy Tarreau9420b122013-12-15 18:58:25 +01006298
6299 If this option has been enabled in a "defaults" section, it can be disabled
6300 in a specific instance by prepending the "no" keyword before it.
6301
6302 See also: "option http-keep-alive"
6303
6304
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006305option redispatch
Joseph Lynch726ab712015-05-11 23:25:34 -07006306option redispatch <interval>
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006307no option redispatch
6308 Enable or disable session redistribution in case of connection failure
6309 May be used in sections: defaults | frontend | listen | backend
6310 yes | no | yes | yes
Joseph Lynch726ab712015-05-11 23:25:34 -07006311 Arguments :
6312 <interval> The optional integer value that controls how often redispatches
6313 occur when retrying connections. Positive value P indicates a
6314 redispatch is desired on every Pth retry, and negative value
6315 N indicate a redispath is desired on the Nth retry prior to the
6316 last retry. For example, the default of -1 preserves the
6317 historical behaviour of redispatching on the last retry, a
6318 positive value of 1 would indicate a redispatch on every retry,
6319 and a positive value of 3 would indicate a redispatch on every
6320 third retry. You can disable redispatches with a value of 0.
6321
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006322
6323 In HTTP mode, if a server designated by a cookie is down, clients may
6324 definitely stick to it because they cannot flush the cookie, so they will not
6325 be able to access the service anymore.
6326
6327 Specifying "option redispatch" will allow the proxy to break their
6328 persistence and redistribute them to a working server.
6329
Joseph Lynch726ab712015-05-11 23:25:34 -07006330 It also allows to retry connections to another server in case of multiple
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006331 connection failures. Of course, it requires having "retries" set to a nonzero
6332 value.
Willy Tarreaud72758d2010-01-12 10:42:19 +01006333
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006334 This form is the preferred form, which replaces both the "redispatch" and
6335 "redisp" keywords.
6336
6337 If this option has been enabled in a "defaults" section, it can be disabled
6338 in a specific instance by prepending the "no" keyword before it.
6339
Willy Tarreau4de91492010-01-22 19:10:05 +01006340 See also : "redispatch", "retries", "force-persist"
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006341
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006342
Hervé COMMOWICKec032d62011-08-05 16:23:48 +02006343option redis-check
6344 Use redis health checks for server testing
6345 May be used in sections : defaults | frontend | listen | backend
6346 yes | no | yes | yes
6347 Arguments : none
6348
6349 It is possible to test that the server correctly talks REDIS protocol instead
6350 of just testing that it accepts the TCP connection. When this option is set,
6351 a PING redis command is sent to the server, and the response is analyzed to
6352 find the "+PONG" response message.
6353
6354 Example :
6355 option redis-check
6356
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03006357 See also : "option httpchk", "option tcp-check", "tcp-check expect"
Hervé COMMOWICKec032d62011-08-05 16:23:48 +02006358
6359
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006360option smtpchk
6361option smtpchk <hello> <domain>
6362 Use SMTP health checks for server testing
6363 May be used in sections : defaults | frontend | listen | backend
6364 yes | no | yes | yes
Willy Tarreaud72758d2010-01-12 10:42:19 +01006365 Arguments :
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006366 <hello> is an optional argument. It is the "hello" command to use. It can
6367 be either "HELO" (for SMTP) or "EHLO" (for ESTMP). All other
6368 values will be turned into the default command ("HELO").
6369
6370 <domain> is the domain name to present to the server. It may only be
6371 specified (and is mandatory) if the hello command has been
6372 specified. By default, "localhost" is used.
6373
6374 When "option smtpchk" is set, the health checks will consist in TCP
6375 connections followed by an SMTP command. By default, this command is
6376 "HELO localhost". The server's return code is analyzed and only return codes
6377 starting with a "2" will be considered as valid. All other responses,
6378 including a lack of response will constitute an error and will indicate a
6379 dead server.
6380
6381 This test is meant to be used with SMTP servers or relays. Depending on the
6382 request, it is possible that some servers do not log each connection attempt,
6383 so you may want to experiment to improve the behaviour. Using telnet on port
6384 25 is often easier than adjusting the configuration.
6385
6386 Most often, an incoming SMTP server needs to see the client's IP address for
6387 various purposes, including spam filtering, anti-spoofing and logging. When
6388 possible, it is often wise to masquerade the client's IP address when
6389 connecting to the server using the "usesrc" argument of the "source" keyword,
Willy Tarreau29fbe512015-08-20 19:35:14 +02006390 which requires the transparent proxy feature to be compiled in.
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006391
6392 Example :
6393 option smtpchk HELO mydomain.org
6394
6395 See also : "option httpchk", "source"
6396
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01006397
Krzysztof Piotr Oledzkiaeebf9b2009-10-04 15:43:17 +02006398option socket-stats
6399no option socket-stats
6400
6401 Enable or disable collecting & providing separate statistics for each socket.
6402 May be used in sections : defaults | frontend | listen | backend
6403 yes | yes | yes | no
6404
6405 Arguments : none
6406
6407
Willy Tarreauff4f82d2009-02-06 11:28:13 +01006408option splice-auto
6409no option splice-auto
6410 Enable or disable automatic kernel acceleration on sockets in both directions
6411 May be used in sections : defaults | frontend | listen | backend
6412 yes | yes | yes | yes
6413 Arguments : none
6414
6415 When this option is enabled either on a frontend or on a backend, haproxy
6416 will automatically evaluate the opportunity to use kernel tcp splicing to
6417 forward data between the client and the server, in either direction. Haproxy
6418 uses heuristics to estimate if kernel splicing might improve performance or
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01006419 not. Both directions are handled independently. Note that the heuristics used
Willy Tarreauff4f82d2009-02-06 11:28:13 +01006420 are not much aggressive in order to limit excessive use of splicing. This
6421 option requires splicing to be enabled at compile time, and may be globally
6422 disabled with the global option "nosplice". Since splice uses pipes, using it
6423 requires that there are enough spare pipes.
6424
6425 Important note: kernel-based TCP splicing is a Linux-specific feature which
6426 first appeared in kernel 2.6.25. It offers kernel-based acceleration to
6427 transfer data between sockets without copying these data to user-space, thus
6428 providing noticeable performance gains and CPU cycles savings. Since many
6429 early implementations are buggy, corrupt data and/or are inefficient, this
6430 feature is not enabled by default, and it should be used with extreme care.
6431 While it is not possible to detect the correctness of an implementation,
6432 2.6.29 is the first version offering a properly working implementation. In
6433 case of doubt, splicing may be globally disabled using the global "nosplice"
6434 keyword.
6435
6436 Example :
6437 option splice-auto
6438
6439 If this option has been enabled in a "defaults" section, it can be disabled
6440 in a specific instance by prepending the "no" keyword before it.
6441
6442 See also : "option splice-request", "option splice-response", and global
6443 options "nosplice" and "maxpipes"
6444
6445
6446option splice-request
6447no option splice-request
6448 Enable or disable automatic kernel acceleration on sockets for requests
6449 May be used in sections : defaults | frontend | listen | backend
6450 yes | yes | yes | yes
6451 Arguments : none
6452
6453 When this option is enabled either on a frontend or on a backend, haproxy
Jamie Gloudonaaa21002012-08-25 00:18:33 -04006454 will use kernel tcp splicing whenever possible to forward data going from
Willy Tarreauff4f82d2009-02-06 11:28:13 +01006455 the client to the server. It might still use the recv/send scheme if there
6456 are no spare pipes left. This option requires splicing to be enabled at
6457 compile time, and may be globally disabled with the global option "nosplice".
6458 Since splice uses pipes, using it requires that there are enough spare pipes.
6459
6460 Important note: see "option splice-auto" for usage limitations.
6461
6462 Example :
6463 option splice-request
6464
6465 If this option has been enabled in a "defaults" section, it can be disabled
6466 in a specific instance by prepending the "no" keyword before it.
6467
6468 See also : "option splice-auto", "option splice-response", and global options
6469 "nosplice" and "maxpipes"
6470
6471
6472option splice-response
6473no option splice-response
6474 Enable or disable automatic kernel acceleration on sockets for responses
6475 May be used in sections : defaults | frontend | listen | backend
6476 yes | yes | yes | yes
6477 Arguments : none
6478
6479 When this option is enabled either on a frontend or on a backend, haproxy
Jamie Gloudonaaa21002012-08-25 00:18:33 -04006480 will use kernel tcp splicing whenever possible to forward data going from
Willy Tarreauff4f82d2009-02-06 11:28:13 +01006481 the server to the client. It might still use the recv/send scheme if there
6482 are no spare pipes left. This option requires splicing to be enabled at
6483 compile time, and may be globally disabled with the global option "nosplice".
6484 Since splice uses pipes, using it requires that there are enough spare pipes.
6485
6486 Important note: see "option splice-auto" for usage limitations.
6487
6488 Example :
6489 option splice-response
6490
6491 If this option has been enabled in a "defaults" section, it can be disabled
6492 in a specific instance by prepending the "no" keyword before it.
6493
6494 See also : "option splice-auto", "option splice-request", and global options
6495 "nosplice" and "maxpipes"
6496
6497
Christopher Fauletba7bc162016-11-07 21:07:38 +01006498option spop-check
6499 Use SPOP health checks for server testing
6500 May be used in sections : defaults | frontend | listen | backend
6501 no | no | no | yes
6502 Arguments : none
6503
6504 It is possible to test that the server correctly talks SPOP protocol instead
6505 of just testing that it accepts the TCP connection. When this option is set,
6506 a HELLO handshake is performed between HAProxy and the server, and the
6507 response is analyzed to check no error is reported.
6508
6509 Example :
6510 option spop-check
6511
6512 See also : "option httpchk"
6513
6514
Willy Tarreaubf1f8162007-12-28 17:42:56 +01006515option srvtcpka
6516no option srvtcpka
6517 Enable or disable the sending of TCP keepalive packets on the server side
6518 May be used in sections : defaults | frontend | listen | backend
6519 yes | no | yes | yes
6520 Arguments : none
6521
6522 When there is a firewall or any session-aware component between a client and
6523 a server, and when the protocol involves very long sessions with long idle
6524 periods (eg: remote desktops), there is a risk that one of the intermediate
6525 components decides to expire a session which has remained idle for too long.
6526
6527 Enabling socket-level TCP keep-alives makes the system regularly send packets
6528 to the other end of the connection, leaving it active. The delay between
6529 keep-alive probes is controlled by the system only and depends both on the
6530 operating system and its tuning parameters.
6531
6532 It is important to understand that keep-alive packets are neither emitted nor
6533 received at the application level. It is only the network stacks which sees
6534 them. For this reason, even if one side of the proxy already uses keep-alives
6535 to maintain its connection alive, those keep-alive packets will not be
6536 forwarded to the other side of the proxy.
6537
6538 Please note that this has nothing to do with HTTP keep-alive.
6539
6540 Using option "srvtcpka" enables the emission of TCP keep-alive probes on the
6541 server side of a connection, which should help when session expirations are
6542 noticed between HAProxy and a server.
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 clitcpka", "option tcpka"
6548
6549
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006550option ssl-hello-chk
6551 Use SSLv3 client hello health checks for server testing
6552 May be used in sections : defaults | frontend | listen | backend
6553 yes | no | yes | yes
6554 Arguments : none
6555
6556 When some SSL-based protocols are relayed in TCP mode through HAProxy, it is
6557 possible to test that the server correctly talks SSL instead of just testing
6558 that it accepts the TCP connection. When "option ssl-hello-chk" is set, pure
6559 SSLv3 client hello messages are sent once the connection is established to
6560 the server, and the response is analyzed to find an SSL server hello message.
6561 The server is considered valid only when the response contains this server
6562 hello message.
6563
6564 All servers tested till there correctly reply to SSLv3 client hello messages,
6565 and most servers tested do not even log the requests containing only hello
6566 messages, which is appreciable.
6567
Willy Tarreau763a95b2012-10-04 23:15:39 +02006568 Note that this check works even when SSL support was not built into haproxy
6569 because it forges the SSL message. When SSL support is available, it is best
6570 to use native SSL health checks instead of this one.
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006571
Willy Tarreau763a95b2012-10-04 23:15:39 +02006572 See also: "option httpchk", "check-ssl"
6573
Willy Tarreaua453bdd2008-01-08 19:50:52 +01006574
Willy Tarreaued179852013-12-16 01:07:00 +01006575option tcp-check
6576 Perform health checks using tcp-check send/expect sequences
6577 May be used in sections: defaults | frontend | listen | backend
6578 yes | no | yes | yes
6579
6580 This health check method is intended to be combined with "tcp-check" command
6581 lists in order to support send/expect types of health check sequences.
6582
6583 TCP checks currently support 4 modes of operations :
6584 - no "tcp-check" directive : the health check only consists in a connection
6585 attempt, which remains the default mode.
6586
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006587 - "tcp-check send" or "tcp-check send-binary" only is mentioned : this is
Willy Tarreaued179852013-12-16 01:07:00 +01006588 used to send a string along with a connection opening. With some
6589 protocols, it helps sending a "QUIT" message for example that prevents
6590 the server from logging a connection error for each health check. The
6591 check result will still be based on the ability to open the connection
6592 only.
6593
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006594 - "tcp-check expect" only is mentioned : this is used to test a banner.
Willy Tarreaued179852013-12-16 01:07:00 +01006595 The connection is opened and haproxy waits for the server to present some
6596 contents which must validate some rules. The check result will be based
6597 on the matching between the contents and the rules. This is suited for
6598 POP, IMAP, SMTP, FTP, SSH, TELNET.
6599
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006600 - both "tcp-check send" and "tcp-check expect" are mentioned : this is
Willy Tarreaued179852013-12-16 01:07:00 +01006601 used to test a hello-type protocol. Haproxy sends a message, the server
6602 responds and its response is analysed. the check result will be based on
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006603 the matching between the response contents and the rules. This is often
Willy Tarreaued179852013-12-16 01:07:00 +01006604 suited for protocols which require a binding or a request/response model.
6605 LDAP, MySQL, Redis and SSL are example of such protocols, though they
6606 already all have their dedicated checks with a deeper understanding of
6607 the respective protocols.
6608 In this mode, many questions may be sent and many answers may be
6609 analysed.
6610
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006611 A fifth mode can be used to insert comments in different steps of the
6612 script.
6613
6614 For each tcp-check rule you create, you can add a "comment" directive,
6615 followed by a string. This string will be reported in the log and stderr
6616 in debug mode. It is useful to make user-friendly error reporting.
6617 The "comment" is of course optional.
6618
6619
Willy Tarreaued179852013-12-16 01:07:00 +01006620 Examples :
6621 # perform a POP check (analyse only server's banner)
6622 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006623 tcp-check expect string +OK\ POP3\ ready comment POP\ protocol
Willy Tarreaued179852013-12-16 01:07:00 +01006624
6625 # perform an IMAP check (analyse only server's banner)
6626 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006627 tcp-check expect string *\ OK\ IMAP4\ ready comment IMAP\ protocol
Willy Tarreaued179852013-12-16 01:07:00 +01006628
6629 # look for the redis master server after ensuring it speaks well
6630 # redis protocol, then it exits properly.
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006631 # (send a command then analyse the response 3 times)
Willy Tarreaued179852013-12-16 01:07:00 +01006632 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006633 tcp-check comment PING\ phase
Willy Tarreaued179852013-12-16 01:07:00 +01006634 tcp-check send PING\r\n
Baptiste Assmanna3322992015-08-04 10:12:18 +02006635 tcp-check expect string +PONG
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006636 tcp-check comment role\ check
Willy Tarreaued179852013-12-16 01:07:00 +01006637 tcp-check send info\ replication\r\n
6638 tcp-check expect string role:master
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006639 tcp-check comment QUIT\ phase
Willy Tarreaued179852013-12-16 01:07:00 +01006640 tcp-check send QUIT\r\n
6641 tcp-check expect string +OK
6642
6643 forge a HTTP request, then analyse the response
6644 (send many headers before analyzing)
6645 option tcp-check
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006646 tcp-check comment forge\ and\ send\ HTTP\ request
Willy Tarreaued179852013-12-16 01:07:00 +01006647 tcp-check send HEAD\ /\ HTTP/1.1\r\n
6648 tcp-check send Host:\ www.mydomain.com\r\n
6649 tcp-check send User-Agent:\ HAProxy\ tcpcheck\r\n
6650 tcp-check send \r\n
Baptiste Assmannd60a9e52015-04-25 16:27:23 +02006651 tcp-check expect rstring HTTP/1\..\ (2..|3..) comment check\ HTTP\ response
Willy Tarreaued179852013-12-16 01:07:00 +01006652
6653
6654 See also : "tcp-check expect", "tcp-check send"
6655
6656
Willy Tarreau9ea05a72009-06-14 12:07:01 +02006657option tcp-smart-accept
6658no option tcp-smart-accept
6659 Enable or disable the saving of one ACK packet during the accept sequence
6660 May be used in sections : defaults | frontend | listen | backend
6661 yes | yes | yes | no
6662 Arguments : none
6663
6664 When an HTTP connection request comes in, the system acknowledges it on
6665 behalf of HAProxy, then the client immediately sends its request, and the
6666 system acknowledges it too while it is notifying HAProxy about the new
6667 connection. HAProxy then reads the request and responds. This means that we
6668 have one TCP ACK sent by the system for nothing, because the request could
6669 very well be acknowledged by HAProxy when it sends its response.
6670
6671 For this reason, in HTTP mode, HAProxy automatically asks the system to avoid
6672 sending this useless ACK on platforms which support it (currently at least
6673 Linux). It must not cause any problem, because the system will send it anyway
6674 after 40 ms if the response takes more time than expected to come.
6675
6676 During complex network debugging sessions, it may be desirable to disable
6677 this optimization because delayed ACKs can make troubleshooting more complex
6678 when trying to identify where packets are delayed. It is then possible to
6679 fall back to normal behaviour by specifying "no option tcp-smart-accept".
6680
6681 It is also possible to force it for non-HTTP proxies by simply specifying
6682 "option tcp-smart-accept". For instance, it can make sense with some services
6683 such as SMTP where the server speaks first.
6684
6685 It is recommended to avoid forcing this option in a defaults section. In case
6686 of doubt, consider setting it back to automatic values by prepending the
6687 "default" keyword before it, or disabling it using the "no" keyword.
6688
Willy Tarreaud88edf22009-06-14 15:48:17 +02006689 See also : "option tcp-smart-connect"
6690
6691
6692option tcp-smart-connect
6693no option tcp-smart-connect
6694 Enable or disable the saving of one ACK packet during the connect sequence
6695 May be used in sections : defaults | frontend | listen | backend
6696 yes | no | yes | yes
6697 Arguments : none
6698
6699 On certain systems (at least Linux), HAProxy can ask the kernel not to
6700 immediately send an empty ACK upon a connection request, but to directly
6701 send the buffer request instead. This saves one packet on the network and
6702 thus boosts performance. It can also be useful for some servers, because they
6703 immediately get the request along with the incoming connection.
6704
6705 This feature is enabled when "option tcp-smart-connect" is set in a backend.
6706 It is not enabled by default because it makes network troubleshooting more
6707 complex.
6708
6709 It only makes sense to enable it with protocols where the client speaks first
6710 such as HTTP. In other situations, if there is no data to send in place of
6711 the ACK, a normal ACK is sent.
6712
6713 If this option has been enabled in a "defaults" section, it can be disabled
6714 in a specific instance by prepending the "no" keyword before it.
6715
6716 See also : "option tcp-smart-accept"
6717
Willy Tarreau9ea05a72009-06-14 12:07:01 +02006718
Willy Tarreaubf1f8162007-12-28 17:42:56 +01006719option tcpka
6720 Enable or disable the sending of TCP keepalive packets on both sides
6721 May be used in sections : defaults | frontend | listen | backend
6722 yes | yes | yes | yes
6723 Arguments : none
6724
6725 When there is a firewall or any session-aware component between a client and
6726 a server, and when the protocol involves very long sessions with long idle
6727 periods (eg: remote desktops), there is a risk that one of the intermediate
6728 components decides to expire a session which has remained idle for too long.
6729
6730 Enabling socket-level TCP keep-alives makes the system regularly send packets
6731 to the other end of the connection, leaving it active. The delay between
6732 keep-alive probes is controlled by the system only and depends both on the
6733 operating system and its tuning parameters.
6734
6735 It is important to understand that keep-alive packets are neither emitted nor
6736 received at the application level. It is only the network stacks which sees
6737 them. For this reason, even if one side of the proxy already uses keep-alives
6738 to maintain its connection alive, those keep-alive packets will not be
6739 forwarded to the other side of the proxy.
6740
6741 Please note that this has nothing to do with HTTP keep-alive.
6742
6743 Using option "tcpka" enables the emission of TCP keep-alive probes on both
6744 the client and server sides of a connection. Note that this is meaningful
6745 only in "defaults" or "listen" sections. If this option is used in a
6746 frontend, only the client side will get keep-alives, and if this option is
6747 used in a backend, only the server side will get keep-alives. For this
6748 reason, it is strongly recommended to explicitly use "option clitcpka" and
6749 "option srvtcpka" when the configuration is split between frontends and
6750 backends.
6751
6752 See also : "option clitcpka", "option srvtcpka"
6753
Willy Tarreau844e3c52008-01-11 16:28:18 +01006754
6755option tcplog
6756 Enable advanced logging of TCP connections with session state and timers
6757 May be used in sections : defaults | frontend | listen | backend
6758 yes | yes | yes | yes
6759 Arguments : none
6760
6761 By default, the log output format is very poor, as it only contains the
6762 source and destination addresses, and the instance name. By specifying
6763 "option tcplog", each log line turns into a much richer format including, but
6764 not limited to, the connection timers, the session status, the connections
6765 numbers, the frontend, backend and server name, and of course the source
6766 address and ports. This option is useful for pure TCP proxies in order to
6767 find which of the client or server disconnects or times out. For normal HTTP
6768 proxies, it's better to use "option httplog" which is even more complete.
6769
6770 This option may be set either in the frontend or the backend.
6771
Guillaume de Lafond29f45602017-03-31 19:52:15 +02006772 "option tcplog" overrides any previous "log-format" directive.
6773
Willy Tarreauc57f0e22009-05-10 13:12:33 +02006774 See also : "option httplog", and section 8 about logging.
Willy Tarreau844e3c52008-01-11 16:28:18 +01006775
6776
Willy Tarreau844e3c52008-01-11 16:28:18 +01006777option transparent
6778no option transparent
6779 Enable client-side transparent proxying
6780 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau4b1f8592008-12-23 23:13:55 +01006781 yes | no | yes | yes
Willy Tarreau844e3c52008-01-11 16:28:18 +01006782 Arguments : none
6783
6784 This option was introduced in order to provide layer 7 persistence to layer 3
6785 load balancers. The idea is to use the OS's ability to redirect an incoming
6786 connection for a remote address to a local process (here HAProxy), and let
6787 this process know what address was initially requested. When this option is
6788 used, sessions without cookies will be forwarded to the original destination
6789 IP address of the incoming request (which should match that of another
6790 equipment), while requests with cookies will still be forwarded to the
6791 appropriate server.
6792
6793 Note that contrary to a common belief, this option does NOT make HAProxy
6794 present the client's IP to the server when establishing the connection.
6795
Willy Tarreaua1146052011-03-01 09:51:54 +01006796 See also: the "usesrc" argument of the "source" keyword, and the
Willy Tarreaueabeafa2008-01-16 16:17:06 +01006797 "transparent" option of the "bind" keyword.
Willy Tarreau844e3c52008-01-11 16:28:18 +01006798
Willy Tarreaubf1f8162007-12-28 17:42:56 +01006799
Simon Horman98637e52014-06-20 12:30:16 +09006800external-check command <command>
6801 Executable to run when performing an external-check
6802 May be used in sections : defaults | frontend | listen | backend
6803 yes | no | yes | yes
6804
6805 Arguments :
6806 <command> is the external command to run
6807
Simon Horman98637e52014-06-20 12:30:16 +09006808 The arguments passed to the to the command are:
6809
Cyril Bonté777be862014-12-02 21:21:35 +01006810 <proxy_address> <proxy_port> <server_address> <server_port>
Simon Horman98637e52014-06-20 12:30:16 +09006811
Cyril Bonté777be862014-12-02 21:21:35 +01006812 The <proxy_address> and <proxy_port> are derived from the first listener
6813 that is either IPv4, IPv6 or a UNIX socket. In the case of a UNIX socket
6814 listener the proxy_address will be the path of the socket and the
6815 <proxy_port> will be the string "NOT_USED". In a backend section, it's not
6816 possible to determine a listener, and both <proxy_address> and <proxy_port>
6817 will have the string value "NOT_USED".
Simon Horman98637e52014-06-20 12:30:16 +09006818
Cyril Bonté72cda2a2014-12-27 22:28:39 +01006819 Some values are also provided through environment variables.
6820
6821 Environment variables :
6822 HAPROXY_PROXY_ADDR The first bind address if available (or empty if not
6823 applicable, for example in a "backend" section).
6824
6825 HAPROXY_PROXY_ID The backend id.
6826
6827 HAPROXY_PROXY_NAME The backend name.
6828
6829 HAPROXY_PROXY_PORT The first bind port if available (or empty if not
6830 applicable, for example in a "backend" section or
6831 for a UNIX socket).
6832
6833 HAPROXY_SERVER_ADDR The server address.
6834
6835 HAPROXY_SERVER_CURCONN The current number of connections on the server.
6836
6837 HAPROXY_SERVER_ID The server id.
6838
6839 HAPROXY_SERVER_MAXCONN The server max connections.
6840
6841 HAPROXY_SERVER_NAME The server name.
6842
6843 HAPROXY_SERVER_PORT The server port if available (or empty for a UNIX
6844 socket).
6845
6846 PATH The PATH environment variable used when executing
6847 the command may be set using "external-check path".
6848
Simon Horman98637e52014-06-20 12:30:16 +09006849 If the command executed and exits with a zero status then the check is
6850 considered to have passed, otherwise the check is considered to have
6851 failed.
6852
6853 Example :
6854 external-check command /bin/true
6855
6856 See also : "external-check", "option external-check", "external-check path"
6857
6858
6859external-check path <path>
6860 The value of the PATH environment variable used when running an external-check
6861 May be used in sections : defaults | frontend | listen | backend
6862 yes | no | yes | yes
6863
6864 Arguments :
6865 <path> is the path used when executing external command to run
6866
6867 The default path is "".
6868
6869 Example :
6870 external-check path "/usr/bin:/bin"
6871
6872 See also : "external-check", "option external-check",
6873 "external-check command"
6874
6875
Emeric Brun647caf12009-06-30 17:57:00 +02006876persist rdp-cookie
Hervé COMMOWICKa3eb39c2011-08-05 18:48:51 +02006877persist rdp-cookie(<name>)
Emeric Brun647caf12009-06-30 17:57:00 +02006878 Enable RDP cookie-based persistence
6879 May be used in sections : defaults | frontend | listen | backend
6880 yes | no | yes | yes
6881 Arguments :
6882 <name> is the optional name of the RDP cookie to check. If omitted, the
Willy Tarreau61e28f22010-05-16 22:31:05 +02006883 default cookie name "msts" will be used. There currently is no
6884 valid reason to change this name.
Emeric Brun647caf12009-06-30 17:57:00 +02006885
6886 This statement enables persistence based on an RDP cookie. The RDP cookie
6887 contains all information required to find the server in the list of known
6888 servers. So when this option is set in the backend, the request is analysed
6889 and if an RDP cookie is found, it is decoded. If it matches a known server
6890 which is still UP (or if "option persist" is set), then the connection is
6891 forwarded to this server.
6892
6893 Note that this only makes sense in a TCP backend, but for this to work, the
6894 frontend must have waited long enough to ensure that an RDP cookie is present
6895 in the request buffer. This is the same requirement as with the "rdp-cookie"
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01006896 load-balancing method. Thus it is highly recommended to put all statements in
Emeric Brun647caf12009-06-30 17:57:00 +02006897 a single "listen" section.
6898
Willy Tarreau61e28f22010-05-16 22:31:05 +02006899 Also, it is important to understand that the terminal server will emit this
6900 RDP cookie only if it is configured for "token redirection mode", which means
6901 that the "IP address redirection" option is disabled.
6902
Emeric Brun647caf12009-06-30 17:57:00 +02006903 Example :
6904 listen tse-farm
6905 bind :3389
6906 # wait up to 5s for an RDP cookie in the request
6907 tcp-request inspect-delay 5s
6908 tcp-request content accept if RDP_COOKIE
6909 # apply RDP cookie persistence
6910 persist rdp-cookie
6911 # if server is unknown, let's balance on the same cookie.
Cyril Bontédc4d9032012-04-08 21:57:39 +02006912 # alternatively, "balance leastconn" may be useful too.
Emeric Brun647caf12009-06-30 17:57:00 +02006913 balance rdp-cookie
6914 server srv1 1.1.1.1:3389
6915 server srv2 1.1.1.2:3389
6916
Simon Hormanab814e02011-06-24 14:50:20 +09006917 See also : "balance rdp-cookie", "tcp-request", the "req_rdp_cookie" ACL and
6918 the rdp_cookie pattern fetch function.
Emeric Brun647caf12009-06-30 17:57:00 +02006919
6920
Willy Tarreau3a7d2072009-03-05 23:48:25 +01006921rate-limit sessions <rate>
6922 Set a limit on the number of new sessions accepted per second on a frontend
6923 May be used in sections : defaults | frontend | listen | backend
6924 yes | yes | yes | no
6925 Arguments :
6926 <rate> The <rate> parameter is an integer designating the maximum number
6927 of new sessions per second to accept on the frontend.
6928
6929 When the frontend reaches the specified number of new sessions per second, it
6930 stops accepting new connections until the rate drops below the limit again.
6931 During this time, the pending sessions will be kept in the socket's backlog
6932 (in system buffers) and haproxy will not even be aware that sessions are
6933 pending. When applying very low limit on a highly loaded service, it may make
6934 sense to increase the socket's backlog using the "backlog" keyword.
6935
6936 This feature is particularly efficient at blocking connection-based attacks
6937 or service abuse on fragile servers. Since the session rate is measured every
6938 millisecond, it is extremely accurate. Also, the limit applies immediately,
6939 no delay is needed at all to detect the threshold.
6940
6941 Example : limit the connection rate on SMTP to 10 per second max
6942 listen smtp
6943 mode tcp
6944 bind :25
6945 rate-limit sessions 10
Panagiotis Panagiotopoulos7282d8e2016-02-11 16:37:15 +02006946 server smtp1 127.0.0.1:1025
Willy Tarreau3a7d2072009-03-05 23:48:25 +01006947
Willy Tarreaua17c2d92011-07-25 08:16:20 +02006948 Note : when the maximum rate is reached, the frontend's status is not changed
6949 but its sockets appear as "WAITING" in the statistics if the
6950 "socket-stats" option is enabled.
Willy Tarreau3a7d2072009-03-05 23:48:25 +01006951
6952 See also : the "backlog" keyword and the "fe_sess_rate" ACL criterion.
6953
6954
Willy Tarreau2e1dca82012-09-12 08:43:15 +02006955redirect location <loc> [code <code>] <option> [{if | unless} <condition>]
6956redirect prefix <pfx> [code <code>] <option> [{if | unless} <condition>]
6957redirect scheme <sch> [code <code>] <option> [{if | unless} <condition>]
Willy Tarreaub463dfb2008-06-07 23:08:56 +02006958 Return an HTTP redirection if/unless a condition is matched
6959 May be used in sections : defaults | frontend | listen | backend
6960 no | yes | yes | yes
6961
6962 If/unless the condition is matched, the HTTP request will lead to a redirect
Willy Tarreauf285f542010-01-03 20:03:03 +01006963 response. If no condition is specified, the redirect applies unconditionally.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02006964
Willy Tarreau0140f252008-11-19 21:07:09 +01006965 Arguments :
Willy Tarreau2e1dca82012-09-12 08:43:15 +02006966 <loc> With "redirect location", the exact value in <loc> is placed into
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01006967 the HTTP "Location" header. When used in an "http-request" rule,
6968 <loc> value follows the log-format rules and can include some
6969 dynamic values (see Custom Log Format in section 8.2.4).
Willy Tarreau2e1dca82012-09-12 08:43:15 +02006970
6971 <pfx> With "redirect prefix", the "Location" header is built from the
6972 concatenation of <pfx> and the complete URI path, including the
6973 query string, unless the "drop-query" option is specified (see
6974 below). As a special case, if <pfx> equals exactly "/", then
6975 nothing is inserted before the original URI. It allows one to
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01006976 redirect to the same URL (for instance, to insert a cookie). When
6977 used in an "http-request" rule, <pfx> value follows the log-format
6978 rules and can include some dynamic values (see Custom Log Format
6979 in section 8.2.4).
Willy Tarreau2e1dca82012-09-12 08:43:15 +02006980
6981 <sch> With "redirect scheme", then the "Location" header is built by
6982 concatenating <sch> with "://" then the first occurrence of the
6983 "Host" header, and then the URI path, including the query string
6984 unless the "drop-query" option is specified (see below). If no
6985 path is found or if the path is "*", then "/" is used instead. If
6986 no "Host" header is found, then an empty host component will be
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03006987 returned, which most recent browsers interpret as redirecting to
Willy Tarreau2e1dca82012-09-12 08:43:15 +02006988 the same host. This directive is mostly used to redirect HTTP to
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01006989 HTTPS. When used in an "http-request" rule, <sch> value follows
6990 the log-format rules and can include some dynamic values (see
6991 Custom Log Format in section 8.2.4).
Willy Tarreau0140f252008-11-19 21:07:09 +01006992
6993 <code> The code is optional. It indicates which type of HTTP redirection
Willy Tarreaub67fdc42013-03-29 19:28:11 +01006994 is desired. Only codes 301, 302, 303, 307 and 308 are supported,
6995 with 302 used by default if no code is specified. 301 means
6996 "Moved permanently", and a browser may cache the Location. 302
Baptiste Assmannea849c02015-08-03 11:42:50 +02006997 means "Moved temporarily" and means that the browser should not
Willy Tarreaub67fdc42013-03-29 19:28:11 +01006998 cache the redirection. 303 is equivalent to 302 except that the
6999 browser will fetch the location with a GET method. 307 is just
7000 like 302 but makes it clear that the same method must be reused.
7001 Likewise, 308 replaces 301 if the same method must be used.
Willy Tarreau0140f252008-11-19 21:07:09 +01007002
7003 <option> There are several options which can be specified to adjust the
7004 expected behaviour of a redirection :
7005
7006 - "drop-query"
7007 When this keyword is used in a prefix-based redirection, then the
7008 location will be set without any possible query-string, which is useful
7009 for directing users to a non-secure page for instance. It has no effect
7010 with a location-type redirect.
7011
Willy Tarreau81e3b4f2010-01-10 00:42:19 +01007012 - "append-slash"
7013 This keyword may be used in conjunction with "drop-query" to redirect
7014 users who use a URL not ending with a '/' to the same one with the '/'.
7015 It can be useful to ensure that search engines will only see one URL.
7016 For this, a return code 301 is preferred.
7017
Willy Tarreau0140f252008-11-19 21:07:09 +01007018 - "set-cookie NAME[=value]"
7019 A "Set-Cookie" header will be added with NAME (and optionally "=value")
7020 to the response. This is sometimes used to indicate that a user has
7021 been seen, for instance to protect against some types of DoS. No other
7022 cookie option is added, so the cookie will be a session cookie. Note
7023 that for a browser, a sole cookie name without an equal sign is
7024 different from a cookie with an equal sign.
7025
7026 - "clear-cookie NAME[=]"
7027 A "Set-Cookie" header will be added with NAME (and optionally "="), but
7028 with the "Max-Age" attribute set to zero. This will tell the browser to
7029 delete this cookie. It is useful for instance on logout pages. It is
7030 important to note that clearing the cookie "NAME" will not remove a
7031 cookie set with "NAME=value". You have to clear the cookie "NAME=" for
7032 that, because the browser makes the difference.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02007033
7034 Example: move the login URL only to HTTPS.
7035 acl clear dst_port 80
7036 acl secure dst_port 8080
7037 acl login_page url_beg /login
Willy Tarreau0140f252008-11-19 21:07:09 +01007038 acl logout url_beg /logout
Willy Tarreau79da4692008-11-19 20:03:04 +01007039 acl uid_given url_reg /login?userid=[^&]+
Willy Tarreau0140f252008-11-19 21:07:09 +01007040 acl cookie_set hdr_sub(cookie) SEEN=1
7041
7042 redirect prefix https://mysite.com set-cookie SEEN=1 if !cookie_set
Willy Tarreau79da4692008-11-19 20:03:04 +01007043 redirect prefix https://mysite.com if login_page !secure
7044 redirect prefix http://mysite.com drop-query if login_page !uid_given
7045 redirect location http://mysite.com/ if !login_page secure
Willy Tarreau0140f252008-11-19 21:07:09 +01007046 redirect location / clear-cookie USERID= if logout
Willy Tarreaub463dfb2008-06-07 23:08:56 +02007047
Willy Tarreau81e3b4f2010-01-10 00:42:19 +01007048 Example: send redirects for request for articles without a '/'.
7049 acl missing_slash path_reg ^/article/[^/]*$
7050 redirect code 301 prefix / drop-query append-slash if missing_slash
7051
Willy Tarreau2e1dca82012-09-12 08:43:15 +02007052 Example: redirect all HTTP traffic to HTTPS when SSL is handled by haproxy.
David BERARDe7153042012-11-03 00:11:31 +01007053 redirect scheme https if !{ ssl_fc }
Willy Tarreau2e1dca82012-09-12 08:43:15 +02007054
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01007055 Example: append 'www.' prefix in front of all hosts not having it
Coen Rosdorff596659b2016-04-11 11:33:49 +02007056 http-request redirect code 301 location \
7057 http://www.%[hdr(host)]%[capture.req.uri] \
7058 unless { hdr_beg(host) -i www }
Thierry FOURNIERd18cd0f2013-11-29 12:15:45 +01007059
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007060 See section 7 about ACL usage.
Willy Tarreaub463dfb2008-06-07 23:08:56 +02007061
7062
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01007063redisp (deprecated)
7064redispatch (deprecated)
7065 Enable or disable session redistribution in case of connection failure
7066 May be used in sections: defaults | frontend | listen | backend
7067 yes | no | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007068 Arguments : none
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01007069
7070 In HTTP mode, if a server designated by a cookie is down, clients may
7071 definitely stick to it because they cannot flush the cookie, so they will not
7072 be able to access the service anymore.
7073
7074 Specifying "redispatch" will allow the proxy to break their persistence and
7075 redistribute them to a working server.
7076
7077 It also allows to retry last connection to another server in case of multiple
7078 connection failures. Of course, it requires having "retries" set to a nonzero
7079 value.
Willy Tarreaud72758d2010-01-12 10:42:19 +01007080
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01007081 This form is deprecated, do not use it in any new configuration, use the new
7082 "option redispatch" instead.
7083
7084 See also : "option redispatch"
7085
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007086
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01007087reqadd <string> [{if | unless} <cond>]
Willy Tarreau303c0352008-01-17 19:01:39 +01007088 Add a header at the end of the HTTP request
7089 May be used in sections : defaults | frontend | listen | backend
7090 no | yes | yes | yes
7091 Arguments :
7092 <string> is the complete line to be added. Any space or known delimiter
7093 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007094 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01007095
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01007096 <cond> is an optional matching condition built from ACLs. It makes it
7097 possible to ignore this rule when other conditions are not met.
7098
Willy Tarreau303c0352008-01-17 19:01:39 +01007099 A new line consisting in <string> followed by a line feed will be added after
7100 the last header of an HTTP request.
7101
7102 Header transformations only apply to traffic which passes through HAProxy,
7103 and not to traffic generated by HAProxy, such as health-checks or error
7104 responses.
7105
Willy Tarreau8abd4cd2010-01-31 14:30:44 +01007106 Example : add "X-Proto: SSL" to requests coming via port 81
7107 acl is-ssl dst_port 81
7108 reqadd X-Proto:\ SSL if is-ssl
7109
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007110 See also: "rspadd", "http-request", section 6 about HTTP header manipulation,
7111 and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007112
7113
Willy Tarreau5321c422010-01-28 20:35:13 +01007114reqallow <search> [{if | unless} <cond>]
7115reqiallow <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007116 Definitely allow an HTTP request if a line matches a regular expression
7117 May be used in sections : defaults | frontend | listen | backend
7118 no | yes | yes | yes
7119 Arguments :
7120 <search> is the regular expression applied to HTTP headers and to the
7121 request line. This is an extended regular expression. Parenthesis
7122 grouping is supported and no preliminary backslash is required.
7123 Any space or known delimiter must be escaped using a backslash
7124 ('\'). The pattern applies to a full line at a time. The
7125 "reqallow" keyword strictly matches case while "reqiallow"
7126 ignores case.
7127
Willy Tarreau5321c422010-01-28 20:35:13 +01007128 <cond> is an optional matching condition built from ACLs. It makes it
7129 possible to ignore this rule when other conditions are not met.
7130
Willy Tarreau303c0352008-01-17 19:01:39 +01007131 A request containing any line which matches extended regular expression
7132 <search> will mark the request as allowed, even if any later test would
7133 result in a deny. The test applies both to the request line and to request
7134 headers. Keep in mind that URLs in request line are case-sensitive while
Willy Tarreaud72758d2010-01-12 10:42:19 +01007135 header names are not.
Willy Tarreau303c0352008-01-17 19:01:39 +01007136
7137 It is easier, faster and more powerful to use ACLs to write access policies.
7138 Reqdeny, reqallow and reqpass should be avoided in new designs.
7139
7140 Example :
7141 # allow www.* but refuse *.local
7142 reqiallow ^Host:\ www\.
7143 reqideny ^Host:\ .*\.local
7144
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007145 See also: "reqdeny", "block", "http-request", section 6 about HTTP header
7146 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007147
7148
Willy Tarreau5321c422010-01-28 20:35:13 +01007149reqdel <search> [{if | unless} <cond>]
7150reqidel <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007151 Delete all headers matching a regular expression in an HTTP request
7152 May be used in sections : defaults | frontend | listen | backend
7153 no | yes | yes | yes
7154 Arguments :
7155 <search> is the regular expression applied to HTTP headers and to the
7156 request line. This is an extended regular expression. Parenthesis
7157 grouping is supported and no preliminary backslash is required.
7158 Any space or known delimiter must be escaped using a backslash
7159 ('\'). The pattern applies to a full line at a time. The "reqdel"
7160 keyword strictly matches case while "reqidel" ignores case.
7161
Willy Tarreau5321c422010-01-28 20:35:13 +01007162 <cond> is an optional matching condition built from ACLs. It makes it
7163 possible to ignore this rule when other conditions are not met.
7164
Willy Tarreau303c0352008-01-17 19:01:39 +01007165 Any header line matching extended regular expression <search> in the request
7166 will be completely deleted. Most common use of this is to remove unwanted
7167 and/or dangerous headers or cookies from a request before passing it to the
7168 next servers.
7169
7170 Header transformations only apply to traffic which passes through HAProxy,
7171 and not to traffic generated by HAProxy, such as health-checks or error
7172 responses. Keep in mind that header names are not case-sensitive.
7173
7174 Example :
7175 # remove X-Forwarded-For header and SERVER cookie
7176 reqidel ^X-Forwarded-For:.*
7177 reqidel ^Cookie:.*SERVER=
7178
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007179 See also: "reqadd", "reqrep", "rspdel", "http-request", section 6 about
7180 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007181
7182
Willy Tarreau5321c422010-01-28 20:35:13 +01007183reqdeny <search> [{if | unless} <cond>]
7184reqideny <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007185 Deny an HTTP request if a line matches a regular expression
7186 May be used in sections : defaults | frontend | listen | backend
7187 no | yes | yes | yes
7188 Arguments :
7189 <search> is the regular expression applied to HTTP headers and to the
7190 request line. This is an extended regular expression. Parenthesis
7191 grouping is supported and no preliminary backslash is required.
7192 Any space or known delimiter must be escaped using a backslash
7193 ('\'). The pattern applies to a full line at a time. The
7194 "reqdeny" keyword strictly matches case while "reqideny" ignores
7195 case.
7196
Willy Tarreau5321c422010-01-28 20:35:13 +01007197 <cond> is an optional matching condition built from ACLs. It makes it
7198 possible to ignore this rule when other conditions are not met.
7199
Willy Tarreau303c0352008-01-17 19:01:39 +01007200 A request containing any line which matches extended regular expression
7201 <search> will mark the request as denied, even if any later test would
7202 result in an allow. The test applies both to the request line and to request
7203 headers. Keep in mind that URLs in request line are case-sensitive while
Willy Tarreaud72758d2010-01-12 10:42:19 +01007204 header names are not.
Willy Tarreau303c0352008-01-17 19:01:39 +01007205
Willy Tarreauced27012008-01-17 20:35:34 +01007206 A denied request will generate an "HTTP 403 forbidden" response once the
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01007207 complete request has been parsed. This is consistent with what is practiced
Willy Tarreaud72758d2010-01-12 10:42:19 +01007208 using ACLs.
Willy Tarreauced27012008-01-17 20:35:34 +01007209
Willy Tarreau303c0352008-01-17 19:01:39 +01007210 It is easier, faster and more powerful to use ACLs to write access policies.
7211 Reqdeny, reqallow and reqpass should be avoided in new designs.
7212
7213 Example :
7214 # refuse *.local, then allow www.*
7215 reqideny ^Host:\ .*\.local
7216 reqiallow ^Host:\ www\.
7217
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007218 See also: "reqallow", "rspdeny", "block", "http-request", section 6 about
7219 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007220
7221
Willy Tarreau5321c422010-01-28 20:35:13 +01007222reqpass <search> [{if | unless} <cond>]
7223reqipass <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007224 Ignore any HTTP request line matching a regular expression in next rules
7225 May be used in sections : defaults | frontend | listen | backend
7226 no | yes | yes | yes
7227 Arguments :
7228 <search> is the regular expression applied to HTTP headers and to the
7229 request line. This is an extended regular expression. Parenthesis
7230 grouping is supported and no preliminary backslash is required.
7231 Any space or known delimiter must be escaped using a backslash
7232 ('\'). The pattern applies to a full line at a time. The
7233 "reqpass" keyword strictly matches case while "reqipass" ignores
7234 case.
7235
Willy Tarreau5321c422010-01-28 20:35:13 +01007236 <cond> is an optional matching condition built from ACLs. It makes it
7237 possible to ignore this rule when other conditions are not met.
7238
Willy Tarreau303c0352008-01-17 19:01:39 +01007239 A request containing any line which matches extended regular expression
7240 <search> will skip next rules, without assigning any deny or allow verdict.
7241 The test applies both to the request line and to request headers. Keep in
7242 mind that URLs in request line are case-sensitive while header names are not.
7243
7244 It is easier, faster and more powerful to use ACLs to write access policies.
7245 Reqdeny, reqallow and reqpass should be avoided in new designs.
7246
7247 Example :
7248 # refuse *.local, then allow www.*, but ignore "www.private.local"
7249 reqipass ^Host:\ www.private\.local
7250 reqideny ^Host:\ .*\.local
7251 reqiallow ^Host:\ www\.
7252
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007253 See also: "reqallow", "reqdeny", "block", "http-request", section 6 about
7254 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007255
7256
Willy Tarreau5321c422010-01-28 20:35:13 +01007257reqrep <search> <string> [{if | unless} <cond>]
7258reqirep <search> <string> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007259 Replace a regular expression with a string in an HTTP request line
7260 May be used in sections : defaults | frontend | listen | backend
7261 no | yes | yes | yes
7262 Arguments :
7263 <search> is the regular expression applied to HTTP headers and to the
7264 request line. This is an extended regular expression. Parenthesis
7265 grouping is supported and no preliminary backslash is required.
7266 Any space or known delimiter must be escaped using a backslash
7267 ('\'). The pattern applies to a full line at a time. The "reqrep"
7268 keyword strictly matches case while "reqirep" ignores case.
7269
7270 <string> is the complete line to be added. Any space or known delimiter
7271 must be escaped using a backslash ('\'). References to matched
7272 pattern groups are possible using the common \N form, with N
7273 being a single digit between 0 and 9. Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007274 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01007275
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 Any line matching extended regular expression <search> in the request (both
7280 the request line and header lines) will be completely replaced with <string>.
7281 Most common use of this is to rewrite URLs or domain names in "Host" headers.
7282
7283 Header transformations only apply to traffic which passes through HAProxy,
7284 and not to traffic generated by HAProxy, such as health-checks or error
7285 responses. Note that for increased readability, it is suggested to add enough
7286 spaces between the request and the response. Keep in mind that URLs in
7287 request line are case-sensitive while header names are not.
7288
7289 Example :
7290 # replace "/static/" with "/" at the beginning of any request path.
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04007291 reqrep ^([^\ :]*)\ /static/(.*) \1\ /\2
Willy Tarreau303c0352008-01-17 19:01:39 +01007292 # replace "www.mydomain.com" with "www" in the host name.
7293 reqirep ^Host:\ www.mydomain.com Host:\ www
7294
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007295 See also: "reqadd", "reqdel", "rsprep", "tune.bufsize", "http-request",
7296 section 6 about HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007297
7298
Willy Tarreau5321c422010-01-28 20:35:13 +01007299reqtarpit <search> [{if | unless} <cond>]
7300reqitarpit <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007301 Tarpit an HTTP request containing a line matching a regular expression
7302 May be used in sections : defaults | frontend | listen | backend
7303 no | yes | yes | yes
7304 Arguments :
7305 <search> is the regular expression applied to HTTP headers and to the
7306 request line. This is an extended regular expression. Parenthesis
7307 grouping is supported and no preliminary backslash is required.
7308 Any space or known delimiter must be escaped using a backslash
7309 ('\'). The pattern applies to a full line at a time. The
7310 "reqtarpit" keyword strictly matches case while "reqitarpit"
7311 ignores case.
7312
Willy Tarreau5321c422010-01-28 20:35:13 +01007313 <cond> is an optional matching condition built from ACLs. It makes it
7314 possible to ignore this rule when other conditions are not met.
7315
Willy Tarreau303c0352008-01-17 19:01:39 +01007316 A request containing any line which matches extended regular expression
7317 <search> will be tarpitted, which means that it will connect to nowhere, will
Willy Tarreauced27012008-01-17 20:35:34 +01007318 be kept open for a pre-defined time, then will return an HTTP error 500 so
7319 that the attacker does not suspect it has been tarpitted. The status 500 will
7320 be reported in the logs, but the completion flags will indicate "PT". The
Willy Tarreau303c0352008-01-17 19:01:39 +01007321 delay is defined by "timeout tarpit", or "timeout connect" if the former is
7322 not set.
7323
7324 The goal of the tarpit is to slow down robots attacking servers with
7325 identifiable requests. Many robots limit their outgoing number of connections
7326 and stay connected waiting for a reply which can take several minutes to
7327 come. Depending on the environment and attack, it may be particularly
7328 efficient at reducing the load on the network and firewalls.
7329
Willy Tarreau5321c422010-01-28 20:35:13 +01007330 Examples :
Willy Tarreau303c0352008-01-17 19:01:39 +01007331 # ignore user-agents reporting any flavour of "Mozilla" or "MSIE", but
7332 # block all others.
7333 reqipass ^User-Agent:\.*(Mozilla|MSIE)
7334 reqitarpit ^User-Agent:
7335
Willy Tarreau5321c422010-01-28 20:35:13 +01007336 # block bad guys
7337 acl badguys src 10.1.0.3 172.16.13.20/28
7338 reqitarpit . if badguys
7339
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007340 See also: "reqallow", "reqdeny", "reqpass", "http-request", section 6
7341 about HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007342
7343
Willy Tarreaue5c5ce92008-06-20 17:27:19 +02007344retries <value>
7345 Set the number of retries to perform on a server after a connection failure
7346 May be used in sections: defaults | frontend | listen | backend
7347 yes | no | yes | yes
7348 Arguments :
7349 <value> is the number of times a connection attempt should be retried on
7350 a server when a connection either is refused or times out. The
7351 default value is 3.
7352
7353 It is important to understand that this value applies to the number of
7354 connection attempts, not full requests. When a connection has effectively
7355 been established to a server, there will be no more retry.
7356
7357 In order to avoid immediate reconnections to a server which is restarting,
Joseph Lynch726ab712015-05-11 23:25:34 -07007358 a turn-around timer of min("timeout connect", one second) is applied before
7359 a retry occurs.
Willy Tarreaue5c5ce92008-06-20 17:27:19 +02007360
7361 When "option redispatch" is set, the last retry may be performed on another
7362 server even if a cookie references a different server.
7363
7364 See also : "option redispatch"
7365
7366
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007367rspadd <string> [{if | unless} <cond>]
Willy Tarreau303c0352008-01-17 19:01:39 +01007368 Add a header at the end of the HTTP response
7369 May be used in sections : defaults | frontend | listen | backend
7370 no | yes | yes | yes
7371 Arguments :
7372 <string> is the complete line to be added. Any space or known delimiter
7373 must be escaped using a backslash ('\'). Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007374 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01007375
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007376 <cond> is an optional matching condition built from ACLs. It makes it
7377 possible to ignore this rule when other conditions are not met.
7378
Willy Tarreau303c0352008-01-17 19:01:39 +01007379 A new line consisting in <string> followed by a line feed will be added after
7380 the last header of an HTTP response.
7381
7382 Header transformations only apply to traffic which passes through HAProxy,
7383 and not to traffic generated by HAProxy, such as health-checks or error
7384 responses.
7385
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007386 See also: "rspdel" "reqadd", "http-response", section 6 about HTTP header
7387 manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007388
7389
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007390rspdel <search> [{if | unless} <cond>]
7391rspidel <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007392 Delete all headers matching a regular expression in an HTTP response
7393 May be used in sections : defaults | frontend | listen | backend
7394 no | yes | yes | yes
7395 Arguments :
7396 <search> is the regular expression applied to HTTP headers and to the
7397 response line. This is an extended regular expression, so
7398 parenthesis grouping is supported and no preliminary backslash
7399 is required. Any space or known delimiter must be escaped using
7400 a backslash ('\'). The pattern applies to a full line at a time.
7401 The "rspdel" keyword strictly matches case while "rspidel"
7402 ignores case.
7403
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007404 <cond> is an optional matching condition built from ACLs. It makes it
7405 possible to ignore this rule when other conditions are not met.
7406
Willy Tarreau303c0352008-01-17 19:01:39 +01007407 Any header line matching extended regular expression <search> in the response
7408 will be completely deleted. Most common use of this is to remove unwanted
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02007409 and/or sensitive headers or cookies from a response before passing it to the
Willy Tarreau303c0352008-01-17 19:01:39 +01007410 client.
7411
7412 Header transformations only apply to traffic which passes through HAProxy,
7413 and not to traffic generated by HAProxy, such as health-checks or error
7414 responses. Keep in mind that header names are not case-sensitive.
7415
7416 Example :
7417 # remove the Server header from responses
Willy Tarreau5e80e022013-05-25 08:31:25 +02007418 rspidel ^Server:.*
Willy Tarreau303c0352008-01-17 19:01:39 +01007419
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007420 See also: "rspadd", "rsprep", "reqdel", "http-response", section 6 about
7421 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007422
7423
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007424rspdeny <search> [{if | unless} <cond>]
7425rspideny <search> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007426 Block an HTTP response if a line matches a regular expression
7427 May be used in sections : defaults | frontend | listen | backend
7428 no | yes | yes | yes
7429 Arguments :
7430 <search> is the regular expression applied to HTTP headers and to the
7431 response line. This is an extended regular expression, so
7432 parenthesis grouping is supported and no preliminary backslash
7433 is required. Any space or known delimiter must be escaped using
7434 a backslash ('\'). The pattern applies to a full line at a time.
7435 The "rspdeny" keyword strictly matches case while "rspideny"
7436 ignores case.
7437
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007438 <cond> is an optional matching condition built from ACLs. It makes it
7439 possible to ignore this rule when other conditions are not met.
7440
Willy Tarreau303c0352008-01-17 19:01:39 +01007441 A response containing any line which matches extended regular expression
7442 <search> will mark the request as denied. The test applies both to the
7443 response line and to response headers. Keep in mind that header names are not
7444 case-sensitive.
7445
7446 Main use of this keyword is to prevent sensitive information leak and to
Willy Tarreauced27012008-01-17 20:35:34 +01007447 block the response before it reaches the client. If a response is denied, it
7448 will be replaced with an HTTP 502 error so that the client never retrieves
7449 any sensitive data.
Willy Tarreau303c0352008-01-17 19:01:39 +01007450
7451 It is easier, faster and more powerful to use ACLs to write access policies.
7452 Rspdeny should be avoided in new designs.
7453
7454 Example :
7455 # Ensure that no content type matching ms-word will leak
7456 rspideny ^Content-type:\.*/ms-word
7457
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007458 See also: "reqdeny", "acl", "block", "http-response", section 6 about
7459 HTTP header manipulation and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007460
7461
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007462rsprep <search> <string> [{if | unless} <cond>]
7463rspirep <search> <string> [{if | unless} <cond>] (ignore case)
Willy Tarreau303c0352008-01-17 19:01:39 +01007464 Replace a regular expression with a string in an HTTP response line
7465 May be used in sections : defaults | frontend | listen | backend
7466 no | yes | yes | yes
7467 Arguments :
7468 <search> is the regular expression applied to HTTP headers and to the
7469 response line. This is an extended regular expression, so
7470 parenthesis grouping is supported and no preliminary backslash
7471 is required. Any space or known delimiter must be escaped using
7472 a backslash ('\'). The pattern applies to a full line at a time.
7473 The "rsprep" keyword strictly matches case while "rspirep"
7474 ignores case.
7475
7476 <string> is the complete line to be added. Any space or known delimiter
7477 must be escaped using a backslash ('\'). References to matched
7478 pattern groups are possible using the common \N form, with N
7479 being a single digit between 0 and 9. Please refer to section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007480 6 about HTTP header manipulation for more information.
Willy Tarreau303c0352008-01-17 19:01:39 +01007481
Willy Tarreaufdb563c2010-01-31 15:43:27 +01007482 <cond> is an optional matching condition built from ACLs. It makes it
7483 possible to ignore this rule when other conditions are not met.
7484
Willy Tarreau303c0352008-01-17 19:01:39 +01007485 Any line matching extended regular expression <search> in the response (both
7486 the response line and header lines) will be completely replaced with
7487 <string>. Most common use of this is to rewrite Location headers.
7488
7489 Header transformations only apply to traffic which passes through HAProxy,
7490 and not to traffic generated by HAProxy, such as health-checks or error
7491 responses. Note that for increased readability, it is suggested to add enough
7492 spaces between the request and the response. Keep in mind that header names
7493 are not case-sensitive.
7494
7495 Example :
7496 # replace "Location: 127.0.0.1:8080" with "Location: www.mydomain.com"
7497 rspirep ^Location:\ 127.0.0.1:8080 Location:\ www.mydomain.com
7498
Ruoshan Huangeb5a3632015-12-08 21:00:23 +08007499 See also: "rspadd", "rspdel", "reqrep", "http-response", section 6 about
7500 HTTP header manipulation, and section 7 about ACLs.
Willy Tarreau303c0352008-01-17 19:01:39 +01007501
7502
David du Colombier486df472011-03-17 10:40:26 +01007503server <name> <address>[:[port]] [param*]
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007504 Declare a server in a backend
7505 May be used in sections : defaults | frontend | listen | backend
7506 no | no | yes | yes
7507 Arguments :
7508 <name> is the internal name assigned to this server. This name will
Cyril Bonté941a0c62012-10-15 19:44:24 +02007509 appear in logs and alerts. If "http-send-name-header" is
Mark Lamourinec2247f02012-01-04 13:02:01 -05007510 set, it will be added to the request header sent to the server.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007511
David du Colombier486df472011-03-17 10:40:26 +01007512 <address> is the IPv4 or IPv6 address of the server. Alternatively, a
7513 resolvable hostname is supported, but this name will be resolved
7514 during start-up. Address "0.0.0.0" or "*" has a special meaning.
7515 It indicates that the connection will be forwarded to the same IP
Willy Tarreaud669a4f2010-07-13 14:49:50 +02007516 address as the one from the client connection. This is useful in
7517 transparent proxy architectures where the client's connection is
7518 intercepted and haproxy must forward to the original destination
7519 address. This is more or less what the "transparent" keyword does
7520 except that with a server it's possible to limit concurrency and
Willy Tarreau24709282013-03-10 21:32:12 +01007521 to report statistics. Optionally, an address family prefix may be
7522 used before the address to force the family regardless of the
7523 address format, which can be useful to specify a path to a unix
7524 socket with no slash ('/'). Currently supported prefixes are :
7525 - 'ipv4@' -> address is always IPv4
7526 - 'ipv6@' -> address is always IPv6
7527 - 'unix@' -> address is a path to a local unix socket
Willy Tarreauccfccef2014-05-10 01:49:15 +02007528 - 'abns@' -> address is in abstract namespace (Linux only)
William Lallemandb2f07452015-05-12 14:27:13 +02007529 You may want to reference some environment variables in the
7530 address parameter, see section 2.3 about environment
Willy Tarreau6a031d12016-11-07 19:42:35 +01007531 variables. The "init-addr" setting can be used to modify the way
7532 IP addresses should be resolved upon startup.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007533
Willy Tarreaub6205fd2012-09-24 12:27:33 +02007534 <port> is an optional port specification. If set, all connections will
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007535 be sent to this port. If unset, the same port the client
7536 connected to will be used. The port may also be prefixed by a "+"
7537 or a "-". In this case, the server's port will be determined by
7538 adding this value to the client's port.
7539
7540 <param*> is a list of parameters for this server. The "server" keywords
7541 accepts an important number of options and has a complete section
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007542 dedicated to it. Please refer to section 5 for more details.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007543
7544 Examples :
7545 server first 10.1.1.1:1080 cookie first check inter 1000
7546 server second 10.1.1.2:1080 cookie second check inter 1000
Willy Tarreau24709282013-03-10 21:32:12 +01007547 server transp ipv4@
William Lallemandb2f07452015-05-12 14:27:13 +02007548 server backup "${SRV_BACKUP}:1080" backup
7549 server www1_dc1 "${LAN_DC1}.101:80"
7550 server www1_dc2 "${LAN_DC2}.101:80"
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007551
Willy Tarreau55dcaf62015-09-27 15:03:15 +02007552 Note: regarding Linux's abstract namespace sockets, HAProxy uses the whole
7553 sun_path length is used for the address length. Some other programs
7554 such as socat use the string length only by default. Pass the option
7555 ",unix-tightsocklen=0" to any abstract socket definition in socat to
7556 make it compatible with HAProxy's.
7557
Mark Lamourinec2247f02012-01-04 13:02:01 -05007558 See also: "default-server", "http-send-name-header" and section 5 about
7559 server options
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007560
Baptiste Assmann01c6cc32015-08-23 11:45:29 +02007561server-state-file-name [<file>]
7562 Set the server state file to read, load and apply to servers available in
7563 this backend. It only applies when the directive "load-server-state-from-file"
7564 is set to "local". When <file> is not provided or if this directive is not
7565 set, then backend name is used. If <file> starts with a slash '/', then it is
7566 considered as an absolute path. Otherwise, <file> is concatenated to the
7567 global directive "server-state-file-base".
7568
7569 Example: the minimal configuration below would make HAProxy look for the
7570 state server file '/etc/haproxy/states/bk':
7571
7572 global
7573 server-state-file-base /etc/haproxy/states
7574
7575 backend bk
7576 load-server-state-from-file
7577
7578 See also: "server-state-file-base", "load-server-state-from-file", and
7579 "show servers state"
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007580
Frédéric Lécaillecb4502e2017-04-20 13:36:25 +02007581server-template <prefix> <num | range> <fqdn>[:<port>] [params*]
7582 Set a template to initialize servers with shared parameters.
7583 The names of these servers are built from <prefix> and <num | range> parameters.
7584 May be used in sections : defaults | frontend | listen | backend
7585 no | no | yes | yes
7586
7587 Arguments:
7588 <prefix> A prefix for the server names to be built.
7589
7590 <num | range>
7591 If <num> is provided, this template initializes <num> servers
7592 with 1 up to <num> as server name suffixes. A range of numbers
7593 <num_low>-<num_high> may also be used to use <num_low> up to
7594 <num_high> as server name suffixes.
7595
7596 <fqdn> A FQDN for all the servers this template initializes.
7597
7598 <port> Same meaning as "server" <port> argument (see "server" keyword).
7599
7600 <params*>
7601 Remaining server parameters among all those supported by "server"
7602 keyword.
7603
7604 Examples:
7605 # Initializes 3 servers with srv1, srv2 and srv3 as names,
7606 # google.com as FQDN, and health-check enabled.
7607 server-template srv 1-3 google.com:80 check
7608
7609 # or
7610 server-template srv 3 google.com:80 check
7611
7612 # would be equivalent to:
7613 server srv1 google.com:80 check
7614 server srv2 google.com:80 check
7615 server srv3 google.com:80 check
7616
7617
7618
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007619source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | client | clientip } ]
Willy Tarreaubce70882009-09-07 11:51:47 +02007620source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | hdr_ip(<hdr>[,<occ>]) } ]
Willy Tarreaud53f96b2009-02-04 18:46:54 +01007621source <addr>[:<port>] [interface <name>]
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007622 Set the source address for outgoing connections
7623 May be used in sections : defaults | frontend | listen | backend
7624 yes | no | yes | yes
7625 Arguments :
7626 <addr> is the IPv4 address HAProxy will bind to before connecting to a
7627 server. This address is also used as a source for health checks.
Willy Tarreau24709282013-03-10 21:32:12 +01007628
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007629 The default value of 0.0.0.0 means that the system will select
Willy Tarreau24709282013-03-10 21:32:12 +01007630 the most appropriate address to reach its destination. Optionally
7631 an address family prefix may be used before the address to force
7632 the family regardless of the address format, which can be useful
7633 to specify a path to a unix socket with no slash ('/'). Currently
7634 supported prefixes are :
7635 - 'ipv4@' -> address is always IPv4
7636 - 'ipv6@' -> address is always IPv6
7637 - 'unix@' -> address is a path to a local unix socket
Willy Tarreauccfccef2014-05-10 01:49:15 +02007638 - 'abns@' -> address is in abstract namespace (Linux only)
Cyril Bonté307ee1e2015-09-28 23:16:06 +02007639 You may want to reference some environment variables in the
7640 address parameter, see section 2.3 about environment variables.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007641
7642 <port> is an optional port. It is normally not needed but may be useful
7643 in some very specific contexts. The default value of zero means
Willy Tarreauc6f4ce82009-06-10 11:09:37 +02007644 the system will select a free port. Note that port ranges are not
7645 supported in the backend. If you want to force port ranges, you
7646 have to specify them on each "server" line.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007647
7648 <addr2> is the IP address to present to the server when connections are
7649 forwarded in full transparent proxy mode. This is currently only
7650 supported on some patched Linux kernels. When this address is
7651 specified, clients connecting to the server will be presented
7652 with this address, while health checks will still use the address
7653 <addr>.
7654
7655 <port2> is the optional port to present to the server when connections
7656 are forwarded in full transparent proxy mode (see <addr2> above).
7657 The default value of zero means the system will select a free
7658 port.
7659
Willy Tarreaubce70882009-09-07 11:51:47 +02007660 <hdr> is the name of a HTTP header in which to fetch the IP to bind to.
7661 This is the name of a comma-separated header list which can
7662 contain multiple IP addresses. By default, the last occurrence is
7663 used. This is designed to work with the X-Forwarded-For header
Baptiste Assmannea3e73b2013-02-02 23:47:49 +01007664 and to automatically bind to the client's IP address as seen
Willy Tarreaubce70882009-09-07 11:51:47 +02007665 by previous proxy, typically Stunnel. In order to use another
7666 occurrence from the last one, please see the <occ> parameter
7667 below. When the header (or occurrence) is not found, no binding
7668 is performed so that the proxy's default IP address is used. Also
7669 keep in mind that the header name is case insensitive, as for any
7670 HTTP header.
7671
7672 <occ> is the occurrence number of a value to be used in a multi-value
7673 header. This is to be used in conjunction with "hdr_ip(<hdr>)",
Jamie Gloudonaaa21002012-08-25 00:18:33 -04007674 in order to specify which occurrence to use for the source IP
Willy Tarreaubce70882009-09-07 11:51:47 +02007675 address. Positive values indicate a position from the first
7676 occurrence, 1 being the first one. Negative values indicate
7677 positions relative to the last one, -1 being the last one. This
7678 is helpful for situations where an X-Forwarded-For header is set
7679 at the entry point of an infrastructure and must be used several
7680 proxy layers away. When this value is not specified, -1 is
7681 assumed. Passing a zero here disables the feature.
7682
Willy Tarreaud53f96b2009-02-04 18:46:54 +01007683 <name> is an optional interface name to which to bind to for outgoing
7684 traffic. On systems supporting this features (currently, only
7685 Linux), this allows one to bind all traffic to the server to
7686 this interface even if it is not the one the system would select
7687 based on routing tables. This should be used with extreme care.
7688 Note that using this option requires root privileges.
7689
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007690 The "source" keyword is useful in complex environments where a specific
7691 address only is allowed to connect to the servers. It may be needed when a
7692 private address must be used through a public gateway for instance, and it is
7693 known that the system cannot determine the adequate source address by itself.
7694
7695 An extension which is available on certain patched Linux kernels may be used
7696 through the "usesrc" optional keyword. It makes it possible to connect to the
7697 servers with an IP address which does not belong to the system itself. This
7698 is called "full transparent proxy mode". For this to work, the destination
7699 servers have to route their traffic back to this address through the machine
7700 running HAProxy, and IP forwarding must generally be enabled on this machine.
7701
7702 In this "full transparent proxy" mode, it is possible to force a specific IP
7703 address to be presented to the servers. This is not much used in fact. A more
7704 common use is to tell HAProxy to present the client's IP address. For this,
7705 there are two methods :
7706
7707 - present the client's IP and port addresses. This is the most transparent
7708 mode, but it can cause problems when IP connection tracking is enabled on
7709 the machine, because a same connection may be seen twice with different
7710 states. However, this solution presents the huge advantage of not
7711 limiting the system to the 64k outgoing address+port couples, because all
7712 of the client ranges may be used.
7713
7714 - present only the client's IP address and select a spare port. This
7715 solution is still quite elegant but slightly less transparent (downstream
7716 firewalls logs will not match upstream's). It also presents the downside
7717 of limiting the number of concurrent connections to the usual 64k ports.
7718 However, since the upstream and downstream ports are different, local IP
7719 connection tracking on the machine will not be upset by the reuse of the
7720 same session.
7721
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007722 This option sets the default source for all servers in the backend. It may
7723 also be specified in a "defaults" section. Finer source address specification
7724 is possible at the server level using the "source" server option. Refer to
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007725 section 5 for more information.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007726
Baptiste Assmann91bd3372015-07-17 21:59:42 +02007727 In order to work, "usesrc" requires root privileges.
7728
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007729 Examples :
7730 backend private
7731 # Connect to the servers using our 192.168.1.200 source address
7732 source 192.168.1.200
7733
7734 backend transparent_ssl1
7735 # Connect to the SSL farm from the client's source address
7736 source 192.168.1.200 usesrc clientip
7737
7738 backend transparent_ssl2
7739 # Connect to the SSL farm from the client's source address and port
7740 # not recommended if IP conntrack is present on the local machine.
7741 source 192.168.1.200 usesrc client
7742
7743 backend transparent_ssl3
7744 # Connect to the SSL farm from the client's source address. It
7745 # is more conntrack-friendly.
7746 source 192.168.1.200 usesrc clientip
7747
7748 backend transparent_smtp
7749 # Connect to the SMTP farm from the client's source address/port
7750 # with Tproxy version 4.
7751 source 0.0.0.0 usesrc clientip
7752
Willy Tarreaubce70882009-09-07 11:51:47 +02007753 backend transparent_http
7754 # Connect to the servers using the client's IP as seen by previous
7755 # proxy.
7756 source 0.0.0.0 usesrc hdr_ip(x-forwarded-for,-1)
7757
Willy Tarreauc57f0e22009-05-10 13:12:33 +02007758 See also : the "source" server option in section 5, the Tproxy patches for
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007759 the Linux kernel on www.balabit.com, the "bind" keyword.
7760
Krzysztof Piotr Oledzki25b501a2008-01-06 16:36:16 +01007761
Willy Tarreau844e3c52008-01-11 16:28:18 +01007762srvtimeout <timeout> (deprecated)
7763 Set the maximum inactivity time on the server side.
7764 May be used in sections : defaults | frontend | listen | backend
7765 yes | no | yes | yes
7766 Arguments :
7767 <timeout> is the timeout value specified in milliseconds by default, but
7768 can be in any other unit if the number is suffixed by the unit,
7769 as explained at the top of this document.
7770
7771 The inactivity timeout applies when the server is expected to acknowledge or
7772 send data. In HTTP mode, this timeout is particularly important to consider
7773 during the first phase of the server's response, when it has to send the
7774 headers, as it directly represents the server's processing time for the
7775 request. To find out what value to put there, it's often good to start with
7776 what would be considered as unacceptable response times, then check the logs
7777 to observe the response time distribution, and adjust the value accordingly.
7778
7779 The value is specified in milliseconds by default, but can be in any other
7780 unit if the number is suffixed by the unit, as specified at the top of this
7781 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
7782 recommended that the client timeout remains equal to the server timeout in
7783 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01007784 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01007785 packet losses by specifying timeouts that are slightly above multiples of 3
Willy Tarreaud72758d2010-01-12 10:42:19 +01007786 seconds (eg: 4 or 5 seconds minimum).
Willy Tarreau844e3c52008-01-11 16:28:18 +01007787
7788 This parameter is specific to backends, but can be specified once for all in
7789 "defaults" sections. This is in fact one of the easiest solutions not to
7790 forget about it. An unspecified timeout results in an infinite timeout, which
7791 is not recommended. Such a usage is accepted and works but reports a warning
7792 during startup because it may results in accumulation of expired sessions in
7793 the system if the system's timeouts are not configured either.
7794
7795 This parameter is provided for compatibility but is currently deprecated.
7796 Please use "timeout server" instead.
7797
Willy Tarreauce887fd2012-05-12 12:50:00 +02007798 See also : "timeout server", "timeout tunnel", "timeout client" and
7799 "clitimeout".
Willy Tarreau844e3c52008-01-11 16:28:18 +01007800
7801
Cyril Bonté66c327d2010-10-12 00:14:37 +02007802stats admin { if | unless } <cond>
7803 Enable statistics admin level if/unless a condition is matched
7804 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007805 no | yes | yes | yes
Cyril Bonté66c327d2010-10-12 00:14:37 +02007806
7807 This statement enables the statistics admin level if/unless a condition is
7808 matched.
7809
7810 The admin level allows to enable/disable servers from the web interface. By
7811 default, statistics page is read-only for security reasons.
7812
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01007813 Note : Consider not using this feature in multi-process mode (nbproc > 1)
7814 unless you know what you do : memory is not shared between the
7815 processes, which can result in random behaviours.
7816
Cyril Bonté23b39d92011-02-10 22:54:44 +01007817 Currently, the POST request is limited to the buffer size minus the reserved
7818 buffer space, which means that if the list of servers is too long, the
7819 request won't be processed. It is recommended to alter few servers at a
7820 time.
Cyril Bonté66c327d2010-10-12 00:14:37 +02007821
7822 Example :
7823 # statistics admin level only for localhost
7824 backend stats_localhost
7825 stats enable
7826 stats admin if LOCALHOST
7827
7828 Example :
7829 # statistics admin level always enabled because of the authentication
7830 backend stats_auth
7831 stats enable
7832 stats auth admin:AdMiN123
7833 stats admin if TRUE
7834
7835 Example :
7836 # statistics admin level depends on the authenticated user
7837 userlist stats-auth
7838 group admin users admin
7839 user admin insecure-password AdMiN123
7840 group readonly users haproxy
7841 user haproxy insecure-password haproxy
7842
7843 backend stats_auth
7844 stats enable
7845 acl AUTH http_auth(stats-auth)
7846 acl AUTH_ADMIN http_auth_group(stats-auth) admin
7847 stats http-request auth unless AUTH
7848 stats admin if AUTH_ADMIN
7849
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01007850 See also : "stats enable", "stats auth", "stats http-request", "nbproc",
7851 "bind-process", section 3.4 about userlists and section 7 about
7852 ACL usage.
Cyril Bonté66c327d2010-10-12 00:14:37 +02007853
7854
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007855stats auth <user>:<passwd>
7856 Enable statistics with authentication and grant access to an account
7857 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007858 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007859 Arguments :
7860 <user> is a user name to grant access to
7861
7862 <passwd> is the cleartext password associated to this user
7863
7864 This statement enables statistics with default settings, and restricts access
7865 to declared users only. It may be repeated as many times as necessary to
7866 allow as many users as desired. When a user tries to access the statistics
7867 without a valid account, a "401 Forbidden" response will be returned so that
7868 the browser asks the user to provide a valid user and password. The real
7869 which will be returned to the browser is configurable using "stats realm".
7870
7871 Since the authentication method is HTTP Basic Authentication, the passwords
7872 circulate in cleartext on the network. Thus, it was decided that the
7873 configuration file would also use cleartext passwords to remind the users
Willy Tarreau3c92c5f2011-08-28 09:45:47 +02007874 that those ones should not be sensitive and not shared with any other account.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007875
7876 It is also possible to reduce the scope of the proxies which appear in the
7877 report using "stats scope".
7878
7879 Though this statement alone is enough to enable statistics reporting, it is
7880 recommended to set all other settings in order to avoid relying on default
7881 unobvious parameters.
7882
7883 Example :
7884 # public access (limited to this backend only)
7885 backend public_www
7886 server srv1 192.168.0.1:80
7887 stats enable
7888 stats hide-version
7889 stats scope .
7890 stats uri /admin?stats
7891 stats realm Haproxy\ Statistics
7892 stats auth admin1:AdMiN123
7893 stats auth admin2:AdMiN321
7894
7895 # internal monitoring access (unlimited)
7896 backend private_monitoring
7897 stats enable
7898 stats uri /admin?stats
7899 stats refresh 5s
7900
7901 See also : "stats enable", "stats realm", "stats scope", "stats uri"
7902
7903
7904stats enable
7905 Enable statistics reporting with default settings
7906 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007907 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01007908 Arguments : none
7909
7910 This statement enables statistics reporting with default settings defined
7911 at build time. Unless stated otherwise, these settings are used :
7912 - stats uri : /haproxy?stats
7913 - stats realm : "HAProxy Statistics"
7914 - stats auth : no authentication
7915 - stats scope : no restriction
7916
7917 Though this statement alone is enough to enable statistics reporting, it is
7918 recommended to set all other settings in order to avoid relying on default
7919 unobvious parameters.
7920
7921 Example :
7922 # public access (limited to this backend only)
7923 backend public_www
7924 server srv1 192.168.0.1:80
7925 stats enable
7926 stats hide-version
7927 stats scope .
7928 stats uri /admin?stats
7929 stats realm Haproxy\ Statistics
7930 stats auth admin1:AdMiN123
7931 stats auth admin2:AdMiN321
7932
7933 # internal monitoring access (unlimited)
7934 backend private_monitoring
7935 stats enable
7936 stats uri /admin?stats
7937 stats refresh 5s
7938
7939 See also : "stats auth", "stats realm", "stats uri"
7940
7941
Willy Tarreaud63335a2010-02-26 12:56:52 +01007942stats hide-version
7943 Enable statistics and hide HAProxy version reporting
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02007944 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02007945 yes | yes | yes | yes
Willy Tarreaud63335a2010-02-26 12:56:52 +01007946 Arguments : none
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02007947
Willy Tarreaud63335a2010-02-26 12:56:52 +01007948 By default, the stats page reports some useful status information along with
7949 the statistics. Among them is HAProxy's version. However, it is generally
7950 considered dangerous to report precise version to anyone, as it can help them
7951 target known weaknesses with specific attacks. The "stats hide-version"
7952 statement removes the version from the statistics report. This is recommended
7953 for public sites or any site with a weak login/password.
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02007954
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +02007955 Though this statement alone is enough to enable statistics reporting, it is
7956 recommended to set all other settings in order to avoid relying on default
7957 unobvious parameters.
7958
Willy Tarreaud63335a2010-02-26 12:56:52 +01007959 Example :
7960 # public access (limited to this backend only)
7961 backend public_www
7962 server srv1 192.168.0.1:80
Krzysztof Piotr Oledzki48cb2ae2009-10-02 22:51:14 +02007963 stats enable
Willy Tarreaud63335a2010-02-26 12:56:52 +01007964 stats hide-version
7965 stats scope .
7966 stats uri /admin?stats
7967 stats realm Haproxy\ Statistics
7968 stats auth admin1:AdMiN123
7969 stats auth admin2:AdMiN321
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02007970
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02007971 # internal monitoring access (unlimited)
7972 backend private_monitoring
7973 stats enable
Willy Tarreaud63335a2010-02-26 12:56:52 +01007974 stats uri /admin?stats
7975 stats refresh 5s
Krzysztof Piotr Oledzki15514c22010-01-04 16:03:09 +01007976
Willy Tarreaud63335a2010-02-26 12:56:52 +01007977 See also : "stats auth", "stats enable", "stats realm", "stats uri"
Willy Tarreau1d45b7c2009-08-16 10:29:18 +02007978
Willy Tarreau983e01e2010-01-11 18:42:06 +01007979
Cyril Bonté2be1b3f2010-09-30 23:46:30 +02007980stats http-request { allow | deny | auth [realm <realm>] }
7981 [ { if | unless } <condition> ]
7982 Access control for statistics
7983
7984 May be used in sections: defaults | frontend | listen | backend
7985 no | no | yes | yes
7986
7987 As "http-request", these set of options allow to fine control access to
7988 statistics. Each option may be followed by if/unless and acl.
7989 First option with matched condition (or option without condition) is final.
7990 For "deny" a 403 error will be returned, for "allow" normal processing is
7991 performed, for "auth" a 401/407 error code is returned so the client
7992 should be asked to enter a username and password.
7993
7994 There is no fixed limit to the number of http-request statements per
7995 instance.
7996
7997 See also : "http-request", section 3.4 about userlists and section 7
7998 about ACL usage.
7999
8000
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008001stats realm <realm>
8002 Enable statistics and set authentication realm
8003 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008004 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008005 Arguments :
8006 <realm> is the name of the HTTP Basic Authentication realm reported to
8007 the browser. The browser uses it to display it in the pop-up
8008 inviting the user to enter a valid username and password.
8009
8010 The realm is read as a single word, so any spaces in it should be escaped
8011 using a backslash ('\').
8012
8013 This statement is useful only in conjunction with "stats auth" since it is
8014 only related to authentication.
8015
8016 Though this statement alone is enough to enable statistics reporting, it is
8017 recommended to set all other settings in order to avoid relying on default
8018 unobvious parameters.
8019
8020 Example :
8021 # public access (limited to this backend only)
8022 backend public_www
8023 server srv1 192.168.0.1:80
8024 stats enable
8025 stats hide-version
8026 stats scope .
8027 stats uri /admin?stats
8028 stats realm Haproxy\ Statistics
8029 stats auth admin1:AdMiN123
8030 stats auth admin2:AdMiN321
8031
8032 # internal monitoring access (unlimited)
8033 backend private_monitoring
8034 stats enable
8035 stats uri /admin?stats
8036 stats refresh 5s
8037
8038 See also : "stats auth", "stats enable", "stats uri"
8039
8040
8041stats refresh <delay>
8042 Enable statistics with automatic refresh
8043 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008044 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008045 Arguments :
8046 <delay> is the suggested refresh delay, specified in seconds, which will
8047 be returned to the browser consulting the report page. While the
8048 browser is free to apply any delay, it will generally respect it
8049 and refresh the page this every seconds. The refresh interval may
8050 be specified in any other non-default time unit, by suffixing the
8051 unit after the value, as explained at the top of this document.
8052
8053 This statement is useful on monitoring displays with a permanent page
8054 reporting the load balancer's activity. When set, the HTML report page will
8055 include a link "refresh"/"stop refresh" so that the user can select whether
8056 he wants automatic refresh of the page or not.
8057
8058 Though this statement alone is enough to enable statistics reporting, it is
8059 recommended to set all other settings in order to avoid relying on default
8060 unobvious parameters.
8061
8062 Example :
8063 # public access (limited to this backend only)
8064 backend public_www
8065 server srv1 192.168.0.1:80
8066 stats enable
8067 stats hide-version
8068 stats scope .
8069 stats uri /admin?stats
8070 stats realm Haproxy\ Statistics
8071 stats auth admin1:AdMiN123
8072 stats auth admin2:AdMiN321
8073
8074 # internal monitoring access (unlimited)
8075 backend private_monitoring
8076 stats enable
8077 stats uri /admin?stats
8078 stats refresh 5s
8079
8080 See also : "stats auth", "stats enable", "stats realm", "stats uri"
8081
8082
8083stats scope { <name> | "." }
8084 Enable statistics and limit access scope
8085 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008086 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008087 Arguments :
8088 <name> is the name of a listen, frontend or backend section to be
8089 reported. The special name "." (a single dot) designates the
8090 section in which the statement appears.
8091
8092 When this statement is specified, only the sections enumerated with this
8093 statement will appear in the report. All other ones will be hidden. This
8094 statement may appear as many times as needed if multiple sections need to be
8095 reported. Please note that the name checking is performed as simple string
8096 comparisons, and that it is never checked that a give section name really
8097 exists.
8098
8099 Though this statement alone is enough to enable statistics reporting, it is
8100 recommended to set all other settings in order to avoid relying on default
8101 unobvious parameters.
8102
8103 Example :
8104 # public access (limited to this backend only)
8105 backend public_www
8106 server srv1 192.168.0.1:80
8107 stats enable
8108 stats hide-version
8109 stats scope .
8110 stats uri /admin?stats
8111 stats realm Haproxy\ Statistics
8112 stats auth admin1:AdMiN123
8113 stats auth admin2:AdMiN321
8114
8115 # internal monitoring access (unlimited)
8116 backend private_monitoring
8117 stats enable
8118 stats uri /admin?stats
8119 stats refresh 5s
8120
8121 See also : "stats auth", "stats enable", "stats realm", "stats uri"
8122
Willy Tarreaud63335a2010-02-26 12:56:52 +01008123
Willy Tarreauc9705a12010-07-27 20:05:50 +02008124stats show-desc [ <desc> ]
Willy Tarreaud63335a2010-02-26 12:56:52 +01008125 Enable reporting of a description on the statistics page.
8126 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008127 yes | yes | yes | yes
Willy Tarreaud63335a2010-02-26 12:56:52 +01008128
Willy Tarreauc9705a12010-07-27 20:05:50 +02008129 <desc> is an optional description to be reported. If unspecified, the
Willy Tarreaud63335a2010-02-26 12:56:52 +01008130 description from global section is automatically used instead.
8131
8132 This statement is useful for users that offer shared services to their
8133 customers, where node or description should be different for each customer.
8134
8135 Though this statement alone is enough to enable statistics reporting, it is
8136 recommended to set all other settings in order to avoid relying on default
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04008137 unobvious parameters. By default description is not shown.
Willy Tarreaud63335a2010-02-26 12:56:52 +01008138
8139 Example :
8140 # internal monitoring access (unlimited)
8141 backend private_monitoring
8142 stats enable
8143 stats show-desc Master node for Europe, Asia, Africa
8144 stats uri /admin?stats
8145 stats refresh 5s
8146
8147 See also: "show-node", "stats enable", "stats uri" and "description" in
8148 global section.
8149
8150
8151stats show-legends
Willy Tarreaued2119c2014-04-24 22:10:39 +02008152 Enable reporting additional information on the statistics page
8153 May be used in sections : defaults | frontend | listen | backend
8154 yes | yes | yes | yes
8155 Arguments : none
8156
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03008157 Enable reporting additional information on the statistics page :
Willy Tarreaud63335a2010-02-26 12:56:52 +01008158 - cap: capabilities (proxy)
8159 - mode: one of tcp, http or health (proxy)
8160 - id: SNMP ID (proxy, socket, server)
8161 - IP (socket, server)
8162 - cookie (backend, server)
8163
8164 Though this statement alone is enough to enable statistics reporting, it is
8165 recommended to set all other settings in order to avoid relying on default
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04008166 unobvious parameters. Default behaviour is not to show this information.
Willy Tarreaud63335a2010-02-26 12:56:52 +01008167
8168 See also: "stats enable", "stats uri".
8169
8170
8171stats show-node [ <name> ]
8172 Enable reporting of a host name on the statistics page.
8173 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008174 yes | yes | yes | yes
Willy Tarreaud63335a2010-02-26 12:56:52 +01008175 Arguments:
8176 <name> is an optional name to be reported. If unspecified, the
8177 node name from global section is automatically used instead.
8178
8179 This statement is useful for users that offer shared services to their
8180 customers, where node or description might be different on a stats page
Dmitry Sivachenko7823de32012-05-16 14:00:26 +04008181 provided for each customer. Default behaviour is not to show host name.
Willy Tarreaud63335a2010-02-26 12:56:52 +01008182
8183 Though this statement alone is enough to enable statistics reporting, it is
8184 recommended to set all other settings in order to avoid relying on default
8185 unobvious parameters.
8186
8187 Example:
8188 # internal monitoring access (unlimited)
8189 backend private_monitoring
8190 stats enable
8191 stats show-node Europe-1
8192 stats uri /admin?stats
8193 stats refresh 5s
8194
8195 See also: "show-desc", "stats enable", "stats uri", and "node" in global
8196 section.
8197
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008198
8199stats uri <prefix>
8200 Enable statistics and define the URI prefix to access them
8201 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaued2119c2014-04-24 22:10:39 +02008202 yes | yes | yes | yes
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008203 Arguments :
8204 <prefix> is the prefix of any URI which will be redirected to stats. This
8205 prefix may contain a question mark ('?') to indicate part of a
8206 query string.
8207
8208 The statistics URI is intercepted on the relayed traffic, so it appears as a
8209 page within the normal application. It is strongly advised to ensure that the
8210 selected URI will never appear in the application, otherwise it will never be
8211 possible to reach it in the application.
8212
8213 The default URI compiled in haproxy is "/haproxy?stats", but this may be
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01008214 changed at build time, so it's better to always explicitly specify it here.
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008215 It is generally a good idea to include a question mark in the URI so that
8216 intermediate proxies refrain from caching the results. Also, since any string
8217 beginning with the prefix will be accepted as a stats request, the question
8218 mark helps ensuring that no valid URI will begin with the same words.
8219
8220 It is sometimes very convenient to use "/" as the URI prefix, and put that
8221 statement in a "listen" instance of its own. That makes it easy to dedicate
8222 an address or a port to statistics only.
8223
8224 Though this statement alone is enough to enable statistics reporting, it is
8225 recommended to set all other settings in order to avoid relying on default
8226 unobvious parameters.
8227
8228 Example :
8229 # public access (limited to this backend only)
8230 backend public_www
8231 server srv1 192.168.0.1:80
8232 stats enable
8233 stats hide-version
8234 stats scope .
8235 stats uri /admin?stats
8236 stats realm Haproxy\ Statistics
8237 stats auth admin1:AdMiN123
8238 stats auth admin2:AdMiN321
8239
8240 # internal monitoring access (unlimited)
8241 backend private_monitoring
8242 stats enable
8243 stats uri /admin?stats
8244 stats refresh 5s
8245
8246 See also : "stats auth", "stats enable", "stats realm"
8247
8248
Willy Tarreaud63335a2010-02-26 12:56:52 +01008249stick match <pattern> [table <table>] [{if | unless} <cond>]
8250 Define a request pattern matching condition to stick a user to a server
Willy Tarreaueabeafa2008-01-16 16:17:06 +01008251 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaud63335a2010-02-26 12:56:52 +01008252 no | no | yes | yes
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008253
8254 Arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02008255 <pattern> is a sample expression rule as described in section 7.3. It
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008256 describes what elements of the incoming request or connection
8257 will be analysed in the hope to find a matching entry in a
8258 stickiness table. This rule is mandatory.
8259
8260 <table> is an optional stickiness table name. If unspecified, the same
8261 backend's table is used. A stickiness table is declared using
8262 the "stick-table" statement.
8263
8264 <cond> is an optional matching condition. It makes it possible to match
8265 on a certain criterion only when other conditions are met (or
8266 not met). For instance, it could be used to match on a source IP
8267 address except when a request passes through a known proxy, in
8268 which case we'd match on a header containing that IP address.
8269
8270 Some protocols or applications require complex stickiness rules and cannot
8271 always simply rely on cookies nor hashing. The "stick match" statement
8272 describes a rule to extract the stickiness criterion from an incoming request
8273 or connection. See section 7 for a complete list of possible patterns and
8274 transformation rules.
8275
8276 The table has to be declared using the "stick-table" statement. It must be of
8277 a type compatible with the pattern. By default it is the one which is present
8278 in the same backend. It is possible to share a table with other backends by
8279 referencing it using the "table" keyword. If another table is referenced,
8280 the server's ID inside the backends are used. By default, all server IDs
8281 start at 1 in each backend, so the server ordering is enough. But in case of
8282 doubt, it is highly recommended to force server IDs using their "id" setting.
8283
8284 It is possible to restrict the conditions where a "stick match" statement
8285 will apply, using "if" or "unless" followed by a condition. See section 7 for
8286 ACL based conditions.
8287
8288 There is no limit on the number of "stick match" statements. The first that
8289 applies and matches will cause the request to be directed to the same server
8290 as was used for the request which created the entry. That way, multiple
8291 matches can be used as fallbacks.
8292
8293 The stick rules are checked after the persistence cookies, so they will not
8294 affect stickiness if a cookie has already been used to select a server. That
8295 way, it becomes very easy to insert cookies and match on IP addresses in
8296 order to maintain stickiness between HTTP and HTTPS.
8297
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008298 Note : Consider not using this feature in multi-process mode (nbproc > 1)
8299 unless you know what you do : memory is not shared between the
8300 processes, which can result in random behaviours.
8301
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008302 Example :
8303 # forward SMTP users to the same server they just used for POP in the
8304 # last 30 minutes
8305 backend pop
8306 mode tcp
8307 balance roundrobin
8308 stick store-request src
8309 stick-table type ip size 200k expire 30m
8310 server s1 192.168.1.1:110
8311 server s2 192.168.1.1:110
8312
8313 backend smtp
8314 mode tcp
8315 balance roundrobin
8316 stick match src table pop
8317 server s1 192.168.1.1:25
8318 server s2 192.168.1.1:25
8319
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008320 See also : "stick-table", "stick on", "nbproc", "bind-process" and section 7
Willy Tarreaube722a22014-06-13 16:31:59 +02008321 about ACLs and samples fetching.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008322
8323
8324stick on <pattern> [table <table>] [{if | unless} <condition>]
8325 Define a request pattern to associate a user to a server
8326 May be used in sections : defaults | frontend | listen | backend
8327 no | no | yes | yes
8328
8329 Note : This form is exactly equivalent to "stick match" followed by
8330 "stick store-request", all with the same arguments. Please refer
8331 to both keywords for details. It is only provided as a convenience
8332 for writing more maintainable configurations.
8333
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008334 Note : Consider not using this feature in multi-process mode (nbproc > 1)
8335 unless you know what you do : memory is not shared between the
8336 processes, which can result in random behaviours.
8337
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008338 Examples :
8339 # The following form ...
Willy Tarreauec579d82010-02-26 19:15:04 +01008340 stick on src table pop if !localhost
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008341
8342 # ...is strictly equivalent to this one :
8343 stick match src table pop if !localhost
8344 stick store-request src table pop if !localhost
8345
8346
8347 # Use cookie persistence for HTTP, and stick on source address for HTTPS as
8348 # well as HTTP without cookie. Share the same table between both accesses.
8349 backend http
8350 mode http
8351 balance roundrobin
8352 stick on src table https
8353 cookie SRV insert indirect nocache
8354 server s1 192.168.1.1:80 cookie s1
8355 server s2 192.168.1.1:80 cookie s2
8356
8357 backend https
8358 mode tcp
8359 balance roundrobin
8360 stick-table type ip size 200k expire 30m
8361 stick on src
8362 server s1 192.168.1.1:443
8363 server s2 192.168.1.1:443
8364
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008365 See also : "stick match", "stick store-request", "nbproc" and "bind-process".
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008366
8367
8368stick store-request <pattern> [table <table>] [{if | unless} <condition>]
8369 Define a request pattern used to create an entry in a stickiness table
8370 May be used in sections : defaults | frontend | listen | backend
8371 no | no | yes | yes
8372
8373 Arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02008374 <pattern> is a sample expression rule as described in section 7.3. It
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008375 describes what elements of the incoming request or connection
8376 will be analysed, extracted and stored in the table once a
8377 server is selected.
8378
8379 <table> is an optional stickiness table name. If unspecified, the same
8380 backend's table is used. A stickiness table is declared using
8381 the "stick-table" statement.
8382
8383 <cond> is an optional storage condition. It makes it possible to store
8384 certain criteria only when some conditions are met (or not met).
8385 For instance, it could be used to store the source IP address
8386 except when the request passes through a known proxy, in which
8387 case we'd store a converted form of a header containing that IP
8388 address.
8389
8390 Some protocols or applications require complex stickiness rules and cannot
8391 always simply rely on cookies nor hashing. The "stick store-request" statement
8392 describes a rule to decide what to extract from the request and when to do
8393 it, in order to store it into a stickiness table for further requests to
8394 match it using the "stick match" statement. Obviously the extracted part must
8395 make sense and have a chance to be matched in a further request. Storing a
8396 client's IP address for instance often makes sense. Storing an ID found in a
8397 URL parameter also makes sense. Storing a source port will almost never make
8398 any sense because it will be randomly matched. See section 7 for a complete
8399 list of possible patterns and transformation rules.
8400
8401 The table has to be declared using the "stick-table" statement. It must be of
8402 a type compatible with the pattern. By default it is the one which is present
8403 in the same backend. It is possible to share a table with other backends by
8404 referencing it using the "table" keyword. If another table is referenced,
8405 the server's ID inside the backends are used. By default, all server IDs
8406 start at 1 in each backend, so the server ordering is enough. But in case of
8407 doubt, it is highly recommended to force server IDs using their "id" setting.
8408
8409 It is possible to restrict the conditions where a "stick store-request"
8410 statement will apply, using "if" or "unless" followed by a condition. This
8411 condition will be evaluated while parsing the request, so any criteria can be
8412 used. See section 7 for ACL based conditions.
8413
8414 There is no limit on the number of "stick store-request" statements, but
8415 there is a limit of 8 simultaneous stores per request or response. This
8416 makes it possible to store up to 8 criteria, all extracted from either the
8417 request or the response, regardless of the number of rules. Only the 8 first
8418 ones which match will be kept. Using this, it is possible to feed multiple
8419 tables at once in the hope to increase the chance to recognize a user on
Willy Tarreau9667a802013-12-09 12:52:13 +01008420 another protocol or access method. Using multiple store-request rules with
8421 the same table is possible and may be used to find the best criterion to rely
8422 on, by arranging the rules by decreasing preference order. Only the first
8423 extracted criterion for a given table will be stored. All subsequent store-
8424 request rules referencing the same table will be skipped and their ACLs will
8425 not be evaluated.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008426
8427 The "store-request" rules are evaluated once the server connection has been
8428 established, so that the table will contain the real server that processed
8429 the request.
8430
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008431 Note : Consider not using this feature in multi-process mode (nbproc > 1)
8432 unless you know what you do : memory is not shared between the
8433 processes, which can result in random behaviours.
8434
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008435 Example :
8436 # forward SMTP users to the same server they just used for POP in the
8437 # last 30 minutes
8438 backend pop
8439 mode tcp
8440 balance roundrobin
8441 stick store-request src
8442 stick-table type ip size 200k expire 30m
8443 server s1 192.168.1.1:110
8444 server s2 192.168.1.1:110
8445
8446 backend smtp
8447 mode tcp
8448 balance roundrobin
8449 stick match src table pop
8450 server s1 192.168.1.1:25
8451 server s2 192.168.1.1:25
8452
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008453 See also : "stick-table", "stick on", "nbproc", "bind-process" and section 7
Willy Tarreaube722a22014-06-13 16:31:59 +02008454 about ACLs and sample fetching.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008455
8456
Emeric Brun7c6b82e2010-09-24 16:34:28 +02008457stick-table type {ip | integer | string [len <length>] | binary [len <length>]}
Emeric Brunf099e792010-09-27 12:05:28 +02008458 size <size> [expire <expire>] [nopurge] [peers <peersect>]
8459 [store <data_type>]*
Godbach64cef792013-12-04 16:08:22 +08008460 Configure the stickiness table for the current section
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008461 May be used in sections : defaults | frontend | listen | backend
Willy Tarreauc00cdc22010-06-06 16:48:26 +02008462 no | yes | yes | yes
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008463
8464 Arguments :
8465 ip a table declared with "type ip" will only store IPv4 addresses.
8466 This form is very compact (about 50 bytes per entry) and allows
8467 very fast entry lookup and stores with almost no overhead. This
8468 is mainly used to store client source IP addresses.
8469
David du Colombier9a6d3c92011-03-17 10:40:24 +01008470 ipv6 a table declared with "type ipv6" will only store IPv6 addresses.
8471 This form is very compact (about 60 bytes per entry) and allows
8472 very fast entry lookup and stores with almost no overhead. This
8473 is mainly used to store client source IP addresses.
8474
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008475 integer a table declared with "type integer" will store 32bit integers
8476 which can represent a client identifier found in a request for
8477 instance.
8478
8479 string a table declared with "type string" will store substrings of up
8480 to <len> characters. If the string provided by the pattern
8481 extractor is larger than <len>, it will be truncated before
8482 being stored. During matching, at most <len> characters will be
8483 compared between the string in the table and the extracted
8484 pattern. When not specified, the string is automatically limited
Emeric Brun7c6b82e2010-09-24 16:34:28 +02008485 to 32 characters.
8486
8487 binary a table declared with "type binary" will store binary blocks
8488 of <len> bytes. If the block provided by the pattern
8489 extractor is larger than <len>, it will be truncated before
Willy Tarreaube722a22014-06-13 16:31:59 +02008490 being stored. If the block provided by the sample expression
Emeric Brun7c6b82e2010-09-24 16:34:28 +02008491 is shorter than <len>, it will be padded by 0. When not
8492 specified, the block is automatically limited to 32 bytes.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008493
8494 <length> is the maximum number of characters that will be stored in a
Emeric Brun7c6b82e2010-09-24 16:34:28 +02008495 "string" type table (See type "string" above). Or the number
8496 of bytes of the block in "binary" type table. Be careful when
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008497 changing this parameter as memory usage will proportionally
8498 increase.
8499
8500 <size> is the maximum number of entries that can fit in the table. This
Cyril Bonté78caf842010-03-10 22:41:43 +01008501 value directly impacts memory usage. Count approximately
8502 50 bytes per entry, plus the size of a string if any. The size
8503 supports suffixes "k", "m", "g" for 2^10, 2^20 and 2^30 factors.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008504
8505 [nopurge] indicates that we refuse to purge older entries when the table
8506 is full. When not specified and the table is full when haproxy
8507 wants to store an entry in it, it will flush a few of the oldest
8508 entries in order to release some space for the new ones. This is
8509 most often the desired behaviour. In some specific cases, it
8510 be desirable to refuse new entries instead of purging the older
8511 ones. That may be the case when the amount of data to store is
8512 far above the hardware limits and we prefer not to offer access
8513 to new clients than to reject the ones already connected. When
8514 using this parameter, be sure to properly set the "expire"
8515 parameter (see below).
8516
Emeric Brunf099e792010-09-27 12:05:28 +02008517 <peersect> is the name of the peers section to use for replication. Entries
8518 which associate keys to server IDs are kept synchronized with
8519 the remote peers declared in this section. All entries are also
8520 automatically learned from the local peer (old process) during a
8521 soft restart.
8522
Willy Tarreau1abc6732015-05-01 19:21:02 +02008523 NOTE : each peers section may be referenced only by tables
8524 belonging to the same unique process.
Cyril Bonté02ff8ef2010-12-14 22:48:49 +01008525
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008526 <expire> defines the maximum duration of an entry in the table since it
8527 was last created, refreshed or matched. The expiration delay is
8528 defined using the standard time format, similarly as the various
8529 timeouts. The maximum duration is slightly above 24 days. See
Jarno Huuskonene0ee0be2017-07-04 10:35:12 +03008530 section 2.4 for more information. If this delay is not specified,
Cyril Bontédc4d9032012-04-08 21:57:39 +02008531 the session won't automatically expire, but older entries will
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008532 be removed once full. Be sure not to use the "nopurge" parameter
8533 if not expiration delay is specified.
8534
Willy Tarreau08d5f982010-06-06 13:34:54 +02008535 <data_type> is used to store additional information in the stick-table. This
8536 may be used by ACLs in order to control various criteria related
8537 to the activity of the client matching the stick-table. For each
8538 item specified here, the size of each entry will be inflated so
Willy Tarreauc9705a12010-07-27 20:05:50 +02008539 that the additional data can fit. Several data types may be
8540 stored with an entry. Multiple data types may be specified after
8541 the "store" keyword, as a comma-separated list. Alternatively,
8542 it is possible to repeat the "store" keyword followed by one or
8543 several data types. Except for the "server_id" type which is
8544 automatically detected and enabled, all data types must be
8545 explicitly declared to be stored. If an ACL references a data
8546 type which is not stored, the ACL will simply not match. Some
8547 data types require an argument which must be passed just after
8548 the type between parenthesis. See below for the supported data
8549 types and their arguments.
8550
8551 The data types that can be stored with an entry are the following :
8552 - server_id : this is an integer which holds the numeric ID of the server a
8553 request was assigned to. It is used by the "stick match", "stick store",
8554 and "stick on" rules. It is automatically enabled when referenced.
8555
8556 - gpc0 : first General Purpose Counter. It is a positive 32-bit integer
8557 integer which may be used for anything. Most of the time it will be used
8558 to put a special tag on some entries, for instance to note that a
8559 specific behaviour was detected and must be known for future matches.
8560
Willy Tarreauba2ffd12013-05-29 15:54:14 +02008561 - gpc0_rate(<period>) : increment rate of the first General Purpose Counter
8562 over a period. It is a positive 32-bit integer integer which may be used
8563 for anything. Just like <gpc0>, it counts events, but instead of keeping
8564 a cumulative count, it maintains the rate at which the counter is
8565 incremented. Most of the time it will be used to measure the frequency of
8566 occurrence of certain events (eg: requests to a specific URL).
8567
Willy Tarreauc9705a12010-07-27 20:05:50 +02008568 - conn_cnt : Connection Count. It is a positive 32-bit integer which counts
8569 the absolute number of connections received from clients which matched
8570 this entry. It does not mean the connections were accepted, just that
8571 they were received.
8572
8573 - conn_cur : Current Connections. It is a positive 32-bit integer which
8574 stores the concurrent connection counts for the entry. It is incremented
8575 once an incoming connection matches the entry, and decremented once the
8576 connection leaves. That way it is possible to know at any time the exact
8577 number of concurrent connections for an entry.
8578
8579 - conn_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8580 integer parameter <period> which indicates in milliseconds the length
8581 of the period over which the average is measured. It reports the average
8582 incoming connection rate over that period, in connections per period. The
8583 result is an integer which can be matched using ACLs.
8584
8585 - sess_cnt : Session Count. It is a positive 32-bit integer which counts
8586 the absolute number of sessions received from clients which matched this
8587 entry. A session is a connection that was accepted by the layer 4 rules.
8588
8589 - sess_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8590 integer parameter <period> which indicates in milliseconds the length
8591 of the period over which the average is measured. It reports the average
8592 incoming session rate over that period, in sessions per period. The
8593 result is an integer which can be matched using ACLs.
8594
8595 - http_req_cnt : HTTP request Count. It is a positive 32-bit integer which
8596 counts the absolute number of HTTP requests received from clients which
8597 matched this entry. It does not matter whether they are valid requests or
8598 not. Note that this is different from sessions when keep-alive is used on
8599 the client side.
8600
8601 - http_req_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8602 integer parameter <period> which indicates in milliseconds the length
8603 of the period over which the average is measured. It reports the average
8604 HTTP request rate over that period, in requests per period. The result is
8605 an integer which can be matched using ACLs. It does not matter whether
8606 they are valid requests or not. Note that this is different from sessions
8607 when keep-alive is used on the client side.
8608
8609 - http_err_cnt : HTTP Error Count. It is a positive 32-bit integer which
8610 counts the absolute number of HTTP requests errors induced by clients
8611 which matched this entry. Errors are counted on invalid and truncated
8612 requests, as well as on denied or tarpitted requests, and on failed
8613 authentications. If the server responds with 4xx, then the request is
8614 also counted as an error since it's an error triggered by the client
8615 (eg: vulnerability scan).
8616
8617 - http_err_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8618 integer parameter <period> which indicates in milliseconds the length
8619 of the period over which the average is measured. It reports the average
8620 HTTP request error rate over that period, in requests per period (see
8621 http_err_cnt above for what is accounted as an error). The result is an
8622 integer which can be matched using ACLs.
8623
8624 - bytes_in_cnt : client to server byte count. It is a positive 64-bit
8625 integer which counts the cumulated amount of bytes received from clients
8626 which matched this entry. Headers are included in the count. This may be
8627 used to limit abuse of upload features on photo or video servers.
8628
8629 - bytes_in_rate(<period>) : frequency counter (takes 12 bytes). It takes an
8630 integer parameter <period> which indicates in milliseconds the length
8631 of the period over which the average is measured. It reports the average
8632 incoming bytes rate over that period, in bytes per period. It may be used
8633 to detect users which upload too much and too fast. Warning: with large
8634 uploads, it is possible that the amount of uploaded data will be counted
8635 once upon termination, thus causing spikes in the average transfer speed
8636 instead of having a smooth one. This may partially be smoothed with
8637 "option contstats" though this is not perfect yet. Use of byte_in_cnt is
8638 recommended for better fairness.
8639
8640 - bytes_out_cnt : server to client byte count. It is a positive 64-bit
8641 integer which counts the cumulated amount of bytes sent to clients which
8642 matched this entry. Headers are included in the count. This may be used
8643 to limit abuse of bots sucking the whole site.
8644
8645 - bytes_out_rate(<period>) : frequency counter (takes 12 bytes). It takes
8646 an integer parameter <period> which indicates in milliseconds the length
8647 of the period over which the average is measured. It reports the average
8648 outgoing bytes rate over that period, in bytes per period. It may be used
8649 to detect users which download too much and too fast. Warning: with large
8650 transfers, it is possible that the amount of transferred data will be
8651 counted once upon termination, thus causing spikes in the average
8652 transfer speed instead of having a smooth one. This may partially be
8653 smoothed with "option contstats" though this is not perfect yet. Use of
8654 byte_out_cnt is recommended for better fairness.
Willy Tarreau08d5f982010-06-06 13:34:54 +02008655
Willy Tarreauc00cdc22010-06-06 16:48:26 +02008656 There is only one stick-table per proxy. At the moment of writing this doc,
8657 it does not seem useful to have multiple tables per proxy. If this happens
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008658 to be required, simply create a dummy backend with a stick-table in it and
8659 reference it.
8660
8661 It is important to understand that stickiness based on learning information
8662 has some limitations, including the fact that all learned associations are
Baptiste Assmann123ff042016-03-06 23:29:28 +01008663 lost upon restart unless peers are properly configured to transfer such
8664 information upon restart (recommended). In general it can be good as a
8665 complement but not always as an exclusive stickiness.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008666
Willy Tarreauc9705a12010-07-27 20:05:50 +02008667 Last, memory requirements may be important when storing many data types.
8668 Indeed, storing all indicators above at once in each entry requires 116 bytes
8669 per entry, or 116 MB for a 1-million entries table. This is definitely not
8670 something that can be ignored.
8671
8672 Example:
8673 # Keep track of counters of up to 1 million IP addresses over 5 minutes
8674 # and store a general purpose counter and the average connection rate
8675 # computed over a sliding window of 30 seconds.
8676 stick-table type ip size 1m expire 5m store gpc0,conn_rate(30s)
8677
Jarno Huuskonene0ee0be2017-07-04 10:35:12 +03008678 See also : "stick match", "stick on", "stick store-request", section 2.4
David du Colombiera13d1b92011-03-17 10:40:22 +01008679 about time format and section 7 about ACLs.
Willy Tarreaub937b7e2010-01-12 15:27:54 +01008680
8681
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008682stick store-response <pattern> [table <table>] [{if | unless} <condition>]
Baptiste Assmann2f2d2ec2016-03-06 23:27:24 +01008683 Define a response pattern used to create an entry in a stickiness table
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008684 May be used in sections : defaults | frontend | listen | backend
8685 no | no | yes | yes
8686
8687 Arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02008688 <pattern> is a sample expression rule as described in section 7.3. It
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008689 describes what elements of the response or connection will
8690 be analysed, extracted and stored in the table once a
8691 server is selected.
8692
8693 <table> is an optional stickiness table name. If unspecified, the same
8694 backend's table is used. A stickiness table is declared using
8695 the "stick-table" statement.
8696
8697 <cond> is an optional storage condition. It makes it possible to store
8698 certain criteria only when some conditions are met (or not met).
8699 For instance, it could be used to store the SSL session ID only
8700 when the response is a SSL server hello.
8701
8702 Some protocols or applications require complex stickiness rules and cannot
8703 always simply rely on cookies nor hashing. The "stick store-response"
8704 statement describes a rule to decide what to extract from the response and
8705 when to do it, in order to store it into a stickiness table for further
8706 requests to match it using the "stick match" statement. Obviously the
8707 extracted part must make sense and have a chance to be matched in a further
Cyril Bonté108cf6e2012-04-21 23:30:29 +02008708 request. Storing an ID found in a header of a response makes sense.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008709 See section 7 for a complete list of possible patterns and transformation
8710 rules.
8711
8712 The table has to be declared using the "stick-table" statement. It must be of
8713 a type compatible with the pattern. By default it is the one which is present
8714 in the same backend. It is possible to share a table with other backends by
8715 referencing it using the "table" keyword. If another table is referenced,
8716 the server's ID inside the backends are used. By default, all server IDs
8717 start at 1 in each backend, so the server ordering is enough. But in case of
8718 doubt, it is highly recommended to force server IDs using their "id" setting.
8719
8720 It is possible to restrict the conditions where a "stick store-response"
8721 statement will apply, using "if" or "unless" followed by a condition. This
8722 condition will be evaluated while parsing the response, so any criteria can
8723 be used. See section 7 for ACL based conditions.
8724
8725 There is no limit on the number of "stick store-response" statements, but
8726 there is a limit of 8 simultaneous stores per request or response. This
8727 makes it possible to store up to 8 criteria, all extracted from either the
8728 request or the response, regardless of the number of rules. Only the 8 first
8729 ones which match will be kept. Using this, it is possible to feed multiple
8730 tables at once in the hope to increase the chance to recognize a user on
Willy Tarreau9667a802013-12-09 12:52:13 +01008731 another protocol or access method. Using multiple store-response rules with
8732 the same table is possible and may be used to find the best criterion to rely
8733 on, by arranging the rules by decreasing preference order. Only the first
8734 extracted criterion for a given table will be stored. All subsequent store-
8735 response rules referencing the same table will be skipped and their ACLs will
8736 not be evaluated. However, even if a store-request rule references a table, a
8737 store-response rule may also use the same table. This means that each table
8738 may learn exactly one element from the request and one element from the
8739 response at once.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008740
8741 The table will contain the real server that processed the request.
8742
8743 Example :
8744 # Learn SSL session ID from both request and response and create affinity.
8745 backend https
8746 mode tcp
8747 balance roundrobin
Cyril Bontédc4d9032012-04-08 21:57:39 +02008748 # maximum SSL session ID length is 32 bytes.
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008749 stick-table type binary len 32 size 30k expire 30m
Cyril Bonté108cf6e2012-04-21 23:30:29 +02008750
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008751 acl clienthello req_ssl_hello_type 1
8752 acl serverhello rep_ssl_hello_type 2
8753
8754 # use tcp content accepts to detects ssl client and server hello.
8755 tcp-request inspect-delay 5s
8756 tcp-request content accept if clienthello
8757
8758 # no timeout on response inspect delay by default.
8759 tcp-response content accept if serverhello
Cyril Bonté108cf6e2012-04-21 23:30:29 +02008760
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008761 # SSL session ID (SSLID) may be present on a client or server hello.
8762 # Its length is coded on 1 byte at offset 43 and its value starts
8763 # at offset 44.
8764
8765 # Match and learn on request if client hello.
8766 stick on payload_lv(43,1) if clienthello
8767
8768 # Learn on response if server hello.
8769 stick store-response payload_lv(43,1) if serverhello
Cyril Bontédc4d9032012-04-08 21:57:39 +02008770
Emeric Brun6a1cefa2010-09-24 18:15:17 +02008771 server s1 192.168.1.1:443
8772 server s2 192.168.1.1:443
8773
8774 See also : "stick-table", "stick on", and section 7 about ACLs and pattern
8775 extraction.
8776
8777
Willy Tarreau938c7fe2014-04-25 14:21:39 +02008778tcp-check connect [params*]
8779 Opens a new connection
8780 May be used in sections: defaults | frontend | listen | backend
8781 no | no | yes | yes
8782
8783 When an application lies on more than a single TCP port or when HAProxy
8784 load-balance many services in a single backend, it makes sense to probe all
8785 the services individually before considering a server as operational.
8786
8787 When there are no TCP port configured on the server line neither server port
8788 directive, then the 'tcp-check connect port <port>' must be the first step
8789 of the sequence.
8790
8791 In a tcp-check ruleset a 'connect' is required, it is also mandatory to start
8792 the ruleset with a 'connect' rule. Purpose is to ensure admin know what they
8793 do.
8794
8795 Parameters :
8796 They are optional and can be used to describe how HAProxy should open and
8797 use the TCP connection.
8798
8799 port if not set, check port or server port is used.
8800 It tells HAProxy where to open the connection to.
8801 <port> must be a valid TCP port source integer, from 1 to 65535.
8802
8803 send-proxy send a PROXY protocol string
8804
8805 ssl opens a ciphered connection
8806
8807 Examples:
8808 # check HTTP and HTTPs services on a server.
8809 # first open port 80 thanks to server line port directive, then
8810 # tcp-check opens port 443, ciphered and run a request on it:
8811 option tcp-check
8812 tcp-check connect
8813 tcp-check send GET\ /\ HTTP/1.0\r\n
8814 tcp-check send Host:\ haproxy.1wt.eu\r\n
8815 tcp-check send \r\n
8816 tcp-check expect rstring (2..|3..)
8817 tcp-check connect port 443 ssl
8818 tcp-check send GET\ /\ HTTP/1.0\r\n
8819 tcp-check send Host:\ haproxy.1wt.eu\r\n
8820 tcp-check send \r\n
8821 tcp-check expect rstring (2..|3..)
8822 server www 10.0.0.1 check port 80
8823
8824 # check both POP and IMAP from a single server:
8825 option tcp-check
8826 tcp-check connect port 110
8827 tcp-check expect string +OK\ POP3\ ready
8828 tcp-check connect port 143
8829 tcp-check expect string *\ OK\ IMAP4\ ready
8830 server mail 10.0.0.1 check
8831
8832 See also : "option tcp-check", "tcp-check send", "tcp-check expect"
8833
8834
8835tcp-check expect [!] <match> <pattern>
8836 Specify data to be collected and analysed during a generic health check
8837 May be used in sections: defaults | frontend | listen | backend
8838 no | no | yes | yes
8839
8840 Arguments :
8841 <match> is a keyword indicating how to look for a specific pattern in the
8842 response. The keyword may be one of "string", "rstring" or
8843 binary.
8844 The keyword may be preceded by an exclamation mark ("!") to negate
8845 the match. Spaces are allowed between the exclamation mark and the
8846 keyword. See below for more details on the supported keywords.
8847
8848 <pattern> is the pattern to look for. It may be a string or a regular
8849 expression. If the pattern contains spaces, they must be escaped
8850 with the usual backslash ('\').
8851 If the match is set to binary, then the pattern must be passed as
8852 a serie of hexadecimal digits in an even number. Each sequence of
8853 two digits will represent a byte. The hexadecimal digits may be
8854 used upper or lower case.
8855
8856
8857 The available matches are intentionally similar to their http-check cousins :
8858
8859 string <string> : test the exact string matches in the response buffer.
8860 A health check response will be considered valid if the
8861 response's buffer contains this exact string. If the
8862 "string" keyword is prefixed with "!", then the response
8863 will be considered invalid if the body contains this
8864 string. This can be used to look for a mandatory pattern
8865 in a protocol response, or to detect a failure when a
8866 specific error appears in a protocol banner.
8867
8868 rstring <regex> : test a regular expression on the response buffer.
8869 A health check response will be considered valid if the
8870 response's buffer matches this expression. If the
8871 "rstring" keyword is prefixed with "!", then the response
8872 will be considered invalid if the body matches the
8873 expression.
8874
8875 binary <hexstring> : test the exact string in its hexadecimal form matches
8876 in the response buffer. A health check response will
8877 be considered valid if the response's buffer contains
8878 this exact hexadecimal string.
8879 Purpose is to match data on binary protocols.
8880
8881 It is important to note that the responses will be limited to a certain size
8882 defined by the global "tune.chksize" option, which defaults to 16384 bytes.
8883 Thus, too large responses may not contain the mandatory pattern when using
8884 "string", "rstring" or binary. If a large response is absolutely required, it
8885 is possible to change the default max size by setting the global variable.
8886 However, it is worth keeping in mind that parsing very large responses can
8887 waste some CPU cycles, especially when regular expressions are used, and that
8888 it is always better to focus the checks on smaller resources. Also, in its
8889 current state, the check will not find any string nor regex past a null
8890 character in the response. Similarly it is not possible to request matching
8891 the null character.
8892
8893 Examples :
8894 # perform a POP check
8895 option tcp-check
8896 tcp-check expect string +OK\ POP3\ ready
8897
8898 # perform an IMAP check
8899 option tcp-check
8900 tcp-check expect string *\ OK\ IMAP4\ ready
8901
8902 # look for the redis master server
8903 option tcp-check
8904 tcp-check send PING\r\n
Baptiste Assmanna3322992015-08-04 10:12:18 +02008905 tcp-check expect string +PONG
Willy Tarreau938c7fe2014-04-25 14:21:39 +02008906 tcp-check send info\ replication\r\n
8907 tcp-check expect string role:master
8908 tcp-check send QUIT\r\n
8909 tcp-check expect string +OK
8910
8911
8912 See also : "option tcp-check", "tcp-check connect", "tcp-check send",
8913 "tcp-check send-binary", "http-check expect", tune.chksize
8914
8915
8916tcp-check send <data>
8917 Specify a string to be sent as a question during a generic health check
8918 May be used in sections: defaults | frontend | listen | backend
8919 no | no | yes | yes
8920
8921 <data> : the data to be sent as a question during a generic health check
8922 session. For now, <data> must be a string.
8923
8924 Examples :
8925 # look for the redis master server
8926 option tcp-check
8927 tcp-check send info\ replication\r\n
8928 tcp-check expect string role:master
8929
8930 See also : "option tcp-check", "tcp-check connect", "tcp-check expect",
8931 "tcp-check send-binary", tune.chksize
8932
8933
8934tcp-check send-binary <hexastring>
8935 Specify an hexa digits string to be sent as a binary question during a raw
8936 tcp health check
8937 May be used in sections: defaults | frontend | listen | backend
8938 no | no | yes | yes
8939
8940 <data> : the data to be sent as a question during a generic health check
8941 session. For now, <data> must be a string.
8942 <hexastring> : test the exact string in its hexadecimal form matches in the
8943 response buffer. A health check response will be considered
8944 valid if the response's buffer contains this exact
8945 hexadecimal string.
8946 Purpose is to send binary data to ask on binary protocols.
8947
8948 Examples :
8949 # redis check in binary
8950 option tcp-check
8951 tcp-check send-binary 50494e470d0a # PING\r\n
8952 tcp-check expect binary 2b504F4e47 # +PONG
8953
8954
8955 See also : "option tcp-check", "tcp-check connect", "tcp-check expect",
8956 "tcp-check send", tune.chksize
8957
8958
Willy Tarreaue9656522010-08-17 15:40:09 +02008959tcp-request connection <action> [{if | unless} <condition>]
8960 Perform an action on an incoming connection depending on a layer 4 condition
Willy Tarreau1a687942010-05-23 22:40:30 +02008961 May be used in sections : defaults | frontend | listen | backend
8962 no | yes | yes | no
Willy Tarreaue9656522010-08-17 15:40:09 +02008963 Arguments :
Willy Tarreauc870bfd2015-09-28 18:47:38 +02008964 <action> defines the action to perform if the condition applies. See
8965 below.
Willy Tarreau1a687942010-05-23 22:40:30 +02008966
Willy Tarreaue9656522010-08-17 15:40:09 +02008967 <condition> is a standard layer4-only ACL-based condition (see section 7).
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008968
8969 Immediately after acceptance of a new incoming connection, it is possible to
8970 evaluate some conditions to decide whether this connection must be accepted
Willy Tarreaue9656522010-08-17 15:40:09 +02008971 or dropped or have its counters tracked. Those conditions cannot make use of
8972 any data contents because the connection has not been read from yet, and the
8973 buffers are not yet allocated. This is used to selectively and very quickly
8974 accept or drop connections from various sources with a very low overhead. If
8975 some contents need to be inspected in order to take the decision, the
8976 "tcp-request content" statements must be used instead.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008977
Willy Tarreaue9656522010-08-17 15:40:09 +02008978 The "tcp-request connection" rules are evaluated in their exact declaration
8979 order. If no rule matches or if there is no rule, the default action is to
8980 accept the incoming connection. There is no specific limit to the number of
8981 rules which may be inserted.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008982
Willy Tarreaua9083d02015-05-08 15:27:59 +02008983 Four types of actions are supported :
Willy Tarreaue9656522010-08-17 15:40:09 +02008984 - accept :
8985 accepts the connection if the condition is true (when used with "if")
8986 or false (when used with "unless"). The first such rule executed ends
8987 the rules evaluation.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02008988
Willy Tarreaue9656522010-08-17 15:40:09 +02008989 - reject :
8990 rejects the connection if the condition is true (when used with "if")
8991 or false (when used with "unless"). The first such rule executed ends
8992 the rules evaluation. Rejected connections do not even become a
8993 session, which is why they are accounted separately for in the stats,
8994 as "denied connections". They are not considered for the session
8995 rate-limit and are not logged either. The reason is that these rules
8996 should only be used to filter extremely high connection rates such as
8997 the ones encountered during a massive DDoS attack. Under these extreme
8998 conditions, the simple action of logging each event would make the
8999 system collapse and would considerably lower the filtering capacity. If
9000 logging is absolutely desired, then "tcp-request content" rules should
Willy Tarreau4f614292016-10-21 17:49:36 +02009001 be used instead, as "tcp-request session" rules will not log either.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009002
Willy Tarreau4f0d9192013-06-11 20:40:55 +02009003 - expect-proxy layer4 :
9004 configures the client-facing connection to receive a PROXY protocol
9005 header before any byte is read from the socket. This is equivalent to
9006 having the "accept-proxy" keyword on the "bind" line, except that using
9007 the TCP rule allows the PROXY protocol to be accepted only for certain
9008 IP address ranges using an ACL. This is convenient when multiple layers
9009 of load balancers are passed through by traffic coming from public
9010 hosts.
9011
Bertrand Jacquin90759682016-06-06 15:35:39 +01009012 - expect-netscaler-cip layer4 :
9013 configures the client-facing connection to receive a NetScaler Client
9014 IP insertion protocol header before any byte is read from the socket.
9015 This is equivalent to having the "accept-netscaler-cip" keyword on the
9016 "bind" line, except that using the TCP rule allows the PROXY protocol
9017 to be accepted only for certain IP address ranges using an ACL. This
9018 is convenient when multiple layers of load balancers are passed
9019 through by traffic coming from public hosts.
9020
Willy Tarreau18bf01e2014-06-13 16:18:52 +02009021 - capture <sample> len <length> :
9022 This only applies to "tcp-request content" rules. It captures sample
9023 expression <sample> from the request buffer, and converts it to a
9024 string of at most <len> characters. The resulting string is stored into
9025 the next request "capture" slot, so it will possibly appear next to
9026 some captured HTTP headers. It will then automatically appear in the
9027 logs, and it will be possible to extract it using sample fetch rules to
9028 feed it into headers or anything. The length should be limited given
9029 that this size will be allocated for each capture during the whole
Willy Tarreaua9083d02015-05-08 15:27:59 +02009030 session life. Please check section 7.3 (Fetching samples) and "capture
9031 request header" for more information.
Willy Tarreau18bf01e2014-06-13 16:18:52 +02009032
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009033 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] :
Willy Tarreaue9656522010-08-17 15:40:09 +02009034 enables tracking of sticky counters from current connection. These
Willy Tarreau09448f72014-06-25 18:12:15 +02009035 rules do not stop evaluation and do not change default action. 3 sets
Willy Tarreaue9656522010-08-17 15:40:09 +02009036 of counters may be simultaneously tracked by the same connection. The
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009037 first "track-sc0" rule executed enables tracking of the counters of the
9038 specified table as the first set. The first "track-sc1" rule executed
Willy Tarreaue9656522010-08-17 15:40:09 +02009039 enables tracking of the counters of the specified table as the second
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009040 set. The first "track-sc2" rule executed enables tracking of the
9041 counters of the specified table as the third set. It is a recommended
9042 practice to use the first set of counters for the per-frontend counters
9043 and the second set for the per-backend ones. But this is just a
9044 guideline, all may be used everywhere.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009045
Willy Tarreaue9656522010-08-17 15:40:09 +02009046 These actions take one or two arguments :
Willy Tarreaube722a22014-06-13 16:31:59 +02009047 <key> is mandatory, and is a sample expression rule as described
Willy Tarreau74ca5042013-06-11 23:12:07 +02009048 in section 7.3. It describes what elements of the incoming
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009049 request or connection will be analysed, extracted, combined,
9050 and used to select which table entry to update the counters.
9051 Note that "tcp-request connection" cannot use content-based
9052 fetches.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009053
Willy Tarreaue9656522010-08-17 15:40:09 +02009054 <table> is an optional table to be used instead of the default one,
9055 which is the stick-table declared in the current proxy. All
9056 the counters for the matches and updates for the key will
9057 then be performed in that table until the session ends.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009058
Willy Tarreaue9656522010-08-17 15:40:09 +02009059 Once a "track-sc*" rule is executed, the key is looked up in the table
9060 and if it is not found, an entry is allocated for it. Then a pointer to
9061 that entry is kept during all the session's life, and this entry's
9062 counters are updated as often as possible, every time the session's
9063 counters are updated, and also systematically when the session ends.
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009064 Counters are only updated for events that happen after the tracking has
9065 been started. For example, connection counters will not be updated when
9066 tracking layer 7 information, since the connection event happens before
9067 layer7 information is extracted.
9068
Willy Tarreaue9656522010-08-17 15:40:09 +02009069 If the entry tracks concurrent connection counters, one connection is
9070 counted for as long as the entry is tracked, and the entry will not
9071 expire during that time. Tracking counters also provides a performance
9072 advantage over just checking the keys, because only one table lookup is
9073 performed for all ACL checks that make use of it.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009074
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02009075 - sc-inc-gpc0(<sc-id>):
9076 The "sc-inc-gpc0" increments the GPC0 counter according to the sticky
9077 counter designated by <sc-id>. If an error occurs, this action silently
9078 fails and the actions evaluation continues.
9079
Thierry FOURNIER236657b2015-08-19 08:25:14 +02009080 - sc-set-gpt0(<sc-id>) <int>:
9081 This action sets the GPT0 tag according to the sticky counter designated
9082 by <sc-id> and the value of <int>. The expected result is a boolean. If
9083 an error occurs, this action silently fails and the actions evaluation
9084 continues.
9085
William Lallemand2e785f22016-05-25 01:48:42 +02009086 - set-src <expr> :
9087 Is used to set the source IP address to the value of specified
9088 expression. Useful if you want to mask source IP for privacy.
9089 If you want to provide an IP from a HTTP header use "http-request
9090 set-src"
9091
9092 <expr> Is a standard HAProxy expression formed by a sample-fetch
9093 followed by some converters.
9094
9095 Example:
9096
9097 tcp-request connection set-src src,ipmask(24)
9098
Willy Tarreau0c630532016-10-21 17:52:58 +02009099 When possible, set-src preserves the original source port as long as the
9100 address family allows it, otherwise the source port is set to 0.
William Lallemand2e785f22016-05-25 01:48:42 +02009101
William Lallemand44be6402016-05-25 01:51:35 +02009102 - set-src-port <expr> :
9103 Is used to set the source port address to the value of specified
9104 expression.
9105
9106 <expr> Is a standard HAProxy expression formed by a sample-fetch
9107 followed by some converters.
9108
9109 Example:
9110
9111 tcp-request connection set-src-port int(4000)
9112
Willy Tarreau0c630532016-10-21 17:52:58 +02009113 When possible, set-src-port preserves the original source address as long
9114 as the address family supports a port, otherwise it forces the source
9115 address to IPv4 "0.0.0.0" before rewriting the port.
William Lallemand44be6402016-05-25 01:51:35 +02009116
William Lallemand13e9b0c2016-05-25 02:34:07 +02009117 - set-dst <expr> :
9118 Is used to set the destination IP address to the value of specified
9119 expression. Useful if you want to mask IP for privacy in log.
9120 If you want to provide an IP from a HTTP header use "http-request
9121 set-dst". If you want to connect to the new address/port, use
9122 '0.0.0.0:0' as a server address in the backend.
9123
9124 <expr> Is a standard HAProxy expression formed by a sample-fetch
9125 followed by some converters.
9126
9127 Example:
9128
9129 tcp-request connection set-dst dst,ipmask(24)
9130 tcp-request connection set-dst ipv4(10.0.0.1)
9131
Willy Tarreau0c630532016-10-21 17:52:58 +02009132 When possible, set-dst preserves the original destination port as long as
9133 the address family allows it, otherwise the destination port is set to 0.
9134
William Lallemand13e9b0c2016-05-25 02:34:07 +02009135 - set-dst-port <expr> :
9136 Is used to set the destination port address to the value of specified
9137 expression. If you want to connect to the new address/port, use
9138 '0.0.0.0:0' as a server address in the backend.
9139
9140
9141 <expr> Is a standard HAProxy expression formed by a sample-fetch
9142 followed by some converters.
9143
9144 Example:
9145
9146 tcp-request connection set-dst-port int(4000)
9147
Willy Tarreau0c630532016-10-21 17:52:58 +02009148 When possible, set-dst-port preserves the original destination address as
9149 long as the address family supports a port, otherwise it forces the
9150 destination address to IPv4 "0.0.0.0" before rewriting the port.
9151
Willy Tarreau2d392c22015-08-24 01:43:45 +02009152 - "silent-drop" :
9153 This stops the evaluation of the rules and makes the client-facing
9154 connection suddenly disappear using a system-dependant way that tries
9155 to prevent the client from being notified. The effect it then that the
9156 client still sees an established connection while there's none on
9157 HAProxy. The purpose is to achieve a comparable effect to "tarpit"
9158 except that it doesn't use any local resource at all on the machine
9159 running HAProxy. It can resist much higher loads than "tarpit", and
9160 slow down stronger attackers. It is important to undestand the impact
9161 of using this mechanism. All stateful equipments placed between the
9162 client and HAProxy (firewalls, proxies, load balancers) will also keep
9163 the established connection for a long time and may suffer from this
9164 action. On modern Linux systems running with enough privileges, the
9165 TCP_REPAIR socket option is used to block the emission of a TCP
9166 reset. On other systems, the socket's TTL is reduced to 1 so that the
9167 TCP reset doesn't pass the first router, though it's still delivered to
9168 local networks. Do not use it unless you fully understand how it works.
9169
Willy Tarreaue9656522010-08-17 15:40:09 +02009170 Note that the "if/unless" condition is optional. If no condition is set on
9171 the action, it is simply performed unconditionally. That can be useful for
9172 "track-sc*" actions as well as for changing the default action to a reject.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009173
Willy Tarreaue9656522010-08-17 15:40:09 +02009174 Example: accept all connections from white-listed hosts, reject too fast
9175 connection without counting them, and track accepted connections.
9176 This results in connection rate being capped from abusive sources.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009177
Willy Tarreaue9656522010-08-17 15:40:09 +02009178 tcp-request connection accept if { src -f /etc/haproxy/whitelist.lst }
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009179 tcp-request connection reject if { src_conn_rate gt 10 }
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009180 tcp-request connection track-sc0 src
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009181
Willy Tarreaue9656522010-08-17 15:40:09 +02009182 Example: accept all connections from white-listed hosts, count all other
9183 connections and reject too fast ones. This results in abusive ones
9184 being blocked as long as they don't slow down.
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009185
Willy Tarreaue9656522010-08-17 15:40:09 +02009186 tcp-request connection accept if { src -f /etc/haproxy/whitelist.lst }
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009187 tcp-request connection track-sc0 src
9188 tcp-request connection reject if { sc0_conn_rate gt 10 }
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009189
Willy Tarreau4f0d9192013-06-11 20:40:55 +02009190 Example: enable the PROXY protocol for traffic coming from all known proxies.
9191
9192 tcp-request connection expect-proxy layer4 if { src -f proxies.lst }
9193
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009194 See section 7 about ACL usage.
9195
Willy Tarreau4f614292016-10-21 17:49:36 +02009196 See also : "tcp-request session", "tcp-request content", "stick-table"
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009197
9198
Willy Tarreaue9656522010-08-17 15:40:09 +02009199tcp-request content <action> [{if | unless} <condition>]
9200 Perform an action on a new session depending on a layer 4-7 condition
Willy Tarreau62644772008-07-16 18:36:06 +02009201 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaufb356202010-08-03 14:02:05 +02009202 no | yes | yes | yes
Willy Tarreaue9656522010-08-17 15:40:09 +02009203 Arguments :
Willy Tarreauc870bfd2015-09-28 18:47:38 +02009204 <action> defines the action to perform if the condition applies. See
9205 below.
Willy Tarreau62644772008-07-16 18:36:06 +02009206
Willy Tarreaue9656522010-08-17 15:40:09 +02009207 <condition> is a standard layer 4-7 ACL-based condition (see section 7).
Willy Tarreau62644772008-07-16 18:36:06 +02009208
Willy Tarreaue9656522010-08-17 15:40:09 +02009209 A request's contents can be analysed at an early stage of request processing
9210 called "TCP content inspection". During this stage, ACL-based rules are
9211 evaluated every time the request contents are updated, until either an
9212 "accept" or a "reject" rule matches, or the TCP request inspection delay
9213 expires with no matching rule.
Willy Tarreau62644772008-07-16 18:36:06 +02009214
Willy Tarreaue9656522010-08-17 15:40:09 +02009215 The first difference between these rules and "tcp-request connection" rules
9216 is that "tcp-request content" rules can make use of contents to take a
9217 decision. Most often, these decisions will consider a protocol recognition or
9218 validity. The second difference is that content-based rules can be used in
Willy Tarreauf3338342014-01-28 21:40:28 +01009219 both frontends and backends. In case of HTTP keep-alive with the client, all
9220 tcp-request content rules are evaluated again, so haproxy keeps a record of
9221 what sticky counters were assigned by a "tcp-request connection" versus a
9222 "tcp-request content" rule, and flushes all the content-related ones after
9223 processing an HTTP request, so that they may be evaluated again by the rules
9224 being evaluated again for the next request. This is of particular importance
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009225 when the rule tracks some L7 information or when it is conditioned by an
Willy Tarreauf3338342014-01-28 21:40:28 +01009226 L7-based ACL, since tracking may change between requests.
Willy Tarreau62644772008-07-16 18:36:06 +02009227
Willy Tarreaue9656522010-08-17 15:40:09 +02009228 Content-based rules are evaluated in their exact declaration order. If no
9229 rule matches or if there is no rule, the default action is to accept the
9230 contents. There is no specific limit to the number of rules which may be
9231 inserted.
Willy Tarreau62644772008-07-16 18:36:06 +02009232
Thierry FOURNIER236657b2015-08-19 08:25:14 +02009233 Several types of actions are supported :
Willy Tarreau18bf01e2014-06-13 16:18:52 +02009234 - accept : the request is accepted
9235 - reject : the request is rejected and the connection is closed
9236 - capture : the specified sample expression is captured
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009237 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>]
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02009238 - sc-inc-gpc0(<sc-id>)
Thierry Fournierb9125672016-03-29 19:34:37 +02009239 - sc-set-gpt0(<sc-id>) <int>
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009240 - set-var(<var-name>) <expr>
Christopher Faulet85d79c92016-11-09 16:54:56 +01009241 - unset-var(<var-name>)
Willy Tarreau2d392c22015-08-24 01:43:45 +02009242 - silent-drop
Willy Tarreau62644772008-07-16 18:36:06 +02009243
Willy Tarreaue9656522010-08-17 15:40:09 +02009244 They have the same meaning as their counter-parts in "tcp-request connection"
9245 so please refer to that section for a complete description.
Willy Tarreau62644772008-07-16 18:36:06 +02009246
Willy Tarreauf3338342014-01-28 21:40:28 +01009247 While there is nothing mandatory about it, it is recommended to use the
9248 track-sc0 in "tcp-request connection" rules, track-sc1 for "tcp-request
9249 content" rules in the frontend, and track-sc2 for "tcp-request content"
9250 rules in the backend, because that makes the configuration more readable
9251 and easier to troubleshoot, but this is just a guideline and all counters
9252 may be used everywhere.
Willy Tarreau62644772008-07-16 18:36:06 +02009253
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01009254 Note that the "if/unless" condition is optional. If no condition is set on
Willy Tarreaue9656522010-08-17 15:40:09 +02009255 the action, it is simply performed unconditionally. That can be useful for
9256 "track-sc*" actions as well as for changing the default action to a reject.
Willy Tarreau62644772008-07-16 18:36:06 +02009257
Willy Tarreaue9656522010-08-17 15:40:09 +02009258 It is perfectly possible to match layer 7 contents with "tcp-request content"
Willy Tarreauc0239e02012-04-16 14:42:55 +02009259 rules, since HTTP-specific ACL matches are able to preliminarily parse the
9260 contents of a buffer before extracting the required data. If the buffered
9261 contents do not parse as a valid HTTP message, then the ACL does not match.
9262 The parser which is involved there is exactly the same as for all other HTTP
Willy Tarreauf3338342014-01-28 21:40:28 +01009263 processing, so there is no risk of parsing something differently. In an HTTP
9264 backend connected to from an HTTP frontend, it is guaranteed that HTTP
9265 contents will always be immediately present when the rule is evaluated first.
Willy Tarreau62644772008-07-16 18:36:06 +02009266
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009267 Tracking layer7 information is also possible provided that the information
Willy Tarreau4d54c7c2014-09-16 15:48:15 +02009268 are present when the rule is processed. The rule processing engine is able to
9269 wait until the inspect delay expires when the data to be tracked is not yet
9270 available.
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009271
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009272 The "set-var" is used to set the content of a variable. The variable is
Willy Tarreau4f614292016-10-21 17:49:36 +02009273 declared inline. For "tcp-request session" rules, only session-level
9274 variables can be used, without any layer7 contents.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009275
Daniel Schneller0b547052016-03-21 20:46:57 +01009276 <var-name> The name of the variable starts with an indication about
9277 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +01009278 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +01009279 "sess" : the variable is shared with the whole session
9280 "txn" : the variable is shared with the transaction
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009281 (request and response)
Daniel Schneller0b547052016-03-21 20:46:57 +01009282 "req" : the variable is shared only during request
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009283 processing
Daniel Schneller0b547052016-03-21 20:46:57 +01009284 "res" : the variable is shared only during response
9285 processing
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009286 This prefix is followed by a name. The separator is a '.'.
Christopher Fauletb71557a2016-10-31 10:49:03 +01009287 The name may only contain characters 'a-z', 'A-Z', '0-9',
9288 '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009289
9290 <expr> Is a standard HAProxy expression formed by a sample-fetch
9291 followed by some converters.
9292
Christopher Faulet85d79c92016-11-09 16:54:56 +01009293 The "unset-var" is used to unset a variable. See above for details about
9294 <var-name>.
9295
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009296 Example:
9297
9298 tcp-request content set-var(sess.my_var) src
Christopher Faulet85d79c92016-11-09 16:54:56 +01009299 tcp-request content unset-var(sess.my_var2)
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009300
Willy Tarreau62644772008-07-16 18:36:06 +02009301 Example:
Willy Tarreaue9656522010-08-17 15:40:09 +02009302 # Accept HTTP requests containing a Host header saying "example.com"
9303 # and reject everything else.
9304 acl is_host_com hdr(Host) -i example.com
9305 tcp-request inspect-delay 30s
Willy Tarreauc0239e02012-04-16 14:42:55 +02009306 tcp-request content accept if is_host_com
Willy Tarreaue9656522010-08-17 15:40:09 +02009307 tcp-request content reject
9308
9309 Example:
Willy Tarreau62644772008-07-16 18:36:06 +02009310 # reject SMTP connection if client speaks first
9311 tcp-request inspect-delay 30s
9312 acl content_present req_len gt 0
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009313 tcp-request content reject if content_present
Willy Tarreau62644772008-07-16 18:36:06 +02009314
9315 # Forward HTTPS connection only if client speaks
9316 tcp-request inspect-delay 30s
9317 acl content_present req_len gt 0
Willy Tarreau68c03ab2010-08-06 15:08:45 +02009318 tcp-request content accept if content_present
Willy Tarreaue9656522010-08-17 15:40:09 +02009319 tcp-request content reject
9320
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009321 Example:
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03009322 # Track the last IP(stick-table type string) from X-Forwarded-For
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009323 tcp-request inspect-delay 10s
Willy Tarreau4d54c7c2014-09-16 15:48:15 +02009324 tcp-request content track-sc0 hdr(x-forwarded-for,-1)
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03009325 # Or track the last IP(stick-table type ip|ipv6) from X-Forwarded-For
9326 tcp-request content track-sc0 req.hdr_ip(x-forwarded-for,-1)
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009327
9328 Example:
9329 # track request counts per "base" (concatenation of Host+URL)
9330 tcp-request inspect-delay 10s
Willy Tarreau4d54c7c2014-09-16 15:48:15 +02009331 tcp-request content track-sc0 base table req-rate
Willy Tarreau5d5b5d82012-12-09 12:00:04 +01009332
Willy Tarreaue9656522010-08-17 15:40:09 +02009333 Example: track per-frontend and per-backend counters, block abusers at the
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03009334 frontend when the backend detects abuse(and marks gpc0).
Willy Tarreaue9656522010-08-17 15:40:09 +02009335
9336 frontend http
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009337 # Use General Purpose Couter 0 in SC0 as a global abuse counter
Willy Tarreaue9656522010-08-17 15:40:09 +02009338 # protecting all our sites
9339 stick-table type ip size 1m expire 5m store gpc0
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009340 tcp-request connection track-sc0 src
9341 tcp-request connection reject if { sc0_get_gpc0 gt 0 }
Willy Tarreaue9656522010-08-17 15:40:09 +02009342 ...
9343 use_backend http_dynamic if { path_end .php }
9344
9345 backend http_dynamic
9346 # if a source makes too fast requests to this dynamic site (tracked
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009347 # by SC1), block it globally in the frontend.
Willy Tarreaue9656522010-08-17 15:40:09 +02009348 stick-table type ip size 1m expire 5m store http_req_rate(10s)
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009349 acl click_too_fast sc1_http_req_rate gt 10
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03009350 acl mark_as_abuser sc0_inc_gpc0(http) gt 0
Willy Tarreaube4a3ef2013-06-17 15:04:07 +02009351 tcp-request content track-sc1 src
Willy Tarreaue9656522010-08-17 15:40:09 +02009352 tcp-request content reject if click_too_fast mark_as_abuser
Willy Tarreau62644772008-07-16 18:36:06 +02009353
Willy Tarreauc57f0e22009-05-10 13:12:33 +02009354 See section 7 about ACL usage.
Willy Tarreau62644772008-07-16 18:36:06 +02009355
Jarno Huuskonen95b012b2017-04-06 13:59:14 +03009356 See also : "tcp-request connection", "tcp-request session",
9357 "tcp-request inspect-delay", and "http-request".
Willy Tarreau62644772008-07-16 18:36:06 +02009358
9359
9360tcp-request inspect-delay <timeout>
9361 Set the maximum allowed time to wait for data during content inspection
9362 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaufb356202010-08-03 14:02:05 +02009363 no | yes | yes | yes
Willy Tarreau62644772008-07-16 18:36:06 +02009364 Arguments :
9365 <timeout> is the timeout value specified in milliseconds by default, but
9366 can be in any other unit if the number is suffixed by the unit,
9367 as explained at the top of this document.
9368
9369 People using haproxy primarily as a TCP relay are often worried about the
9370 risk of passing any type of protocol to a server without any analysis. In
9371 order to be able to analyze the request contents, we must first withhold
9372 the data then analyze them. This statement simply enables withholding of
9373 data for at most the specified amount of time.
9374
Willy Tarreaufb356202010-08-03 14:02:05 +02009375 TCP content inspection applies very early when a connection reaches a
9376 frontend, then very early when the connection is forwarded to a backend. This
9377 means that a connection may experience a first delay in the frontend and a
9378 second delay in the backend if both have tcp-request rules.
9379
Willy Tarreau62644772008-07-16 18:36:06 +02009380 Note that when performing content inspection, haproxy will evaluate the whole
9381 rules for every new chunk which gets in, taking into account the fact that
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +01009382 those data are partial. If no rule matches before the aforementioned delay,
Willy Tarreau62644772008-07-16 18:36:06 +02009383 a last check is performed upon expiration, this time considering that the
Willy Tarreaud869b242009-03-15 14:43:58 +01009384 contents are definitive. If no delay is set, haproxy will not wait at all
9385 and will immediately apply a verdict based on the available information.
9386 Obviously this is unlikely to be very useful and might even be racy, so such
9387 setups are not recommended.
Willy Tarreau62644772008-07-16 18:36:06 +02009388
9389 As soon as a rule matches, the request is released and continues as usual. If
9390 the timeout is reached and no rule matches, the default policy will be to let
9391 it pass through unaffected.
9392
9393 For most protocols, it is enough to set it to a few seconds, as most clients
9394 send the full request immediately upon connection. Add 3 or more seconds to
9395 cover TCP retransmits but that's all. For some protocols, it may make sense
Willy Tarreaud72758d2010-01-12 10:42:19 +01009396 to use large values, for instance to ensure that the client never talks
Willy Tarreau62644772008-07-16 18:36:06 +02009397 before the server (eg: SMTP), or to wait for a client to talk before passing
9398 data to the server (eg: SSL). Note that the client timeout must cover at
Willy Tarreaub824b002010-09-29 16:36:16 +02009399 least the inspection delay, otherwise it will expire first. If the client
9400 closes the connection or if the buffer is full, the delay immediately expires
9401 since the contents will not be able to change anymore.
Willy Tarreau62644772008-07-16 18:36:06 +02009402
Willy Tarreau55165fe2009-05-10 12:02:55 +02009403 See also : "tcp-request content accept", "tcp-request content reject",
Willy Tarreau62644772008-07-16 18:36:06 +02009404 "timeout client".
9405
9406
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009407tcp-response content <action> [{if | unless} <condition>]
9408 Perform an action on a session response depending on a layer 4-7 condition
9409 May be used in sections : defaults | frontend | listen | backend
9410 no | no | yes | yes
9411 Arguments :
Willy Tarreauc870bfd2015-09-28 18:47:38 +02009412 <action> defines the action to perform if the condition applies. See
9413 below.
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009414
9415 <condition> is a standard layer 4-7 ACL-based condition (see section 7).
9416
9417 Response contents can be analysed at an early stage of response processing
9418 called "TCP content inspection". During this stage, ACL-based rules are
9419 evaluated every time the response contents are updated, until either an
Willy Tarreaucc1e04b2013-09-11 23:20:29 +02009420 "accept", "close" or a "reject" rule matches, or a TCP response inspection
9421 delay is set and expires with no matching rule.
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009422
9423 Most often, these decisions will consider a protocol recognition or validity.
9424
9425 Content-based rules are evaluated in their exact declaration order. If no
9426 rule matches or if there is no rule, the default action is to accept the
9427 contents. There is no specific limit to the number of rules which may be
9428 inserted.
9429
Thierry FOURNIER236657b2015-08-19 08:25:14 +02009430 Several types of actions are supported :
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009431 - accept :
9432 accepts the response if the condition is true (when used with "if")
9433 or false (when used with "unless"). The first such rule executed ends
9434 the rules evaluation.
9435
Willy Tarreaucc1e04b2013-09-11 23:20:29 +02009436 - close :
9437 immediately closes the connection with the server if the condition is
9438 true (when used with "if"), or false (when used with "unless"). The
9439 first such rule executed ends the rules evaluation. The main purpose of
9440 this action is to force a connection to be finished between a client
9441 and a server after an exchange when the application protocol expects
9442 some long time outs to elapse first. The goal is to eliminate idle
Jarno Huuskonen0e82b922014-04-12 18:22:19 +03009443 connections which take significant resources on servers with certain
Willy Tarreaucc1e04b2013-09-11 23:20:29 +02009444 protocols.
9445
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009446 - reject :
9447 rejects the response if the condition is true (when used with "if")
9448 or false (when used with "unless"). The first such rule executed ends
Jamie Gloudonaaa21002012-08-25 00:18:33 -04009449 the rules evaluation. Rejected session are immediately closed.
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009450
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009451 - set-var(<var-name>) <expr>
9452 Sets a variable.
9453
Christopher Faulet85d79c92016-11-09 16:54:56 +01009454 - unset-var(<var-name>)
9455 Unsets a variable.
9456
Thierry FOURNIERe0627bd2015-08-04 08:20:33 +02009457 - sc-inc-gpc0(<sc-id>):
9458 This action increments the GPC0 counter according to the sticky
9459 counter designated by <sc-id>. If an error occurs, this action fails
9460 silently and the actions evaluation continues.
9461
Thierry FOURNIER236657b2015-08-19 08:25:14 +02009462 - sc-set-gpt0(<sc-id>) <int> :
9463 This action sets the GPT0 tag according to the sticky counter designated
9464 by <sc-id> and the value of <int>. The expected result is a boolean. If
9465 an error occurs, this action silently fails and the actions evaluation
9466 continues.
9467
Willy Tarreau2d392c22015-08-24 01:43:45 +02009468 - "silent-drop" :
9469 This stops the evaluation of the rules and makes the client-facing
9470 connection suddenly disappear using a system-dependant way that tries
9471 to prevent the client from being notified. The effect it then that the
9472 client still sees an established connection while there's none on
9473 HAProxy. The purpose is to achieve a comparable effect to "tarpit"
9474 except that it doesn't use any local resource at all on the machine
9475 running HAProxy. It can resist much higher loads than "tarpit", and
9476 slow down stronger attackers. It is important to undestand the impact
9477 of using this mechanism. All stateful equipments placed between the
9478 client and HAProxy (firewalls, proxies, load balancers) will also keep
9479 the established connection for a long time and may suffer from this
9480 action. On modern Linux systems running with enough privileges, the
9481 TCP_REPAIR socket option is used to block the emission of a TCP
9482 reset. On other systems, the socket's TTL is reduced to 1 so that the
9483 TCP reset doesn't pass the first router, though it's still delivered to
9484 local networks. Do not use it unless you fully understand how it works.
9485
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009486 Note that the "if/unless" condition is optional. If no condition is set on
9487 the action, it is simply performed unconditionally. That can be useful for
9488 for changing the default action to a reject.
9489
Jamie Gloudonaaa21002012-08-25 00:18:33 -04009490 It is perfectly possible to match layer 7 contents with "tcp-response
9491 content" rules, but then it is important to ensure that a full response has
9492 been buffered, otherwise no contents will match. In order to achieve this,
9493 the best solution involves detecting the HTTP protocol during the inspection
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009494 period.
9495
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009496 The "set-var" is used to set the content of a variable. The variable is
9497 declared inline.
9498
Daniel Schneller0b547052016-03-21 20:46:57 +01009499 <var-name> The name of the variable starts with an indication about
9500 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +01009501 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +01009502 "sess" : the variable is shared with the whole session
9503 "txn" : the variable is shared with the transaction
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009504 (request and response)
Daniel Schneller0b547052016-03-21 20:46:57 +01009505 "req" : the variable is shared only during request
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009506 processing
Daniel Schneller0b547052016-03-21 20:46:57 +01009507 "res" : the variable is shared only during response
9508 processing
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009509 This prefix is followed by a name. The separator is a '.'.
Christopher Fauletb71557a2016-10-31 10:49:03 +01009510 The name may only contain characters 'a-z', 'A-Z', '0-9',
9511 '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +02009512
9513 <expr> Is a standard HAProxy expression formed by a sample-fetch
9514 followed by some converters.
9515
9516 Example:
9517
9518 tcp-request content set-var(sess.my_var) src
9519
Christopher Faulet85d79c92016-11-09 16:54:56 +01009520 The "unset-var" is used to unset a variable. See above for details about
9521 <var-name>.
9522
9523 Example:
9524
9525 tcp-request content unset-var(sess.my_var)
9526
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009527 See section 7 about ACL usage.
9528
9529 See also : "tcp-request content", "tcp-response inspect-delay"
9530
9531
Willy Tarreau4f614292016-10-21 17:49:36 +02009532tcp-request session <action> [{if | unless} <condition>]
9533 Perform an action on a validated session depending on a layer 5 condition
9534 May be used in sections : defaults | frontend | listen | backend
9535 no | yes | yes | no
9536 Arguments :
9537 <action> defines the action to perform if the condition applies. See
9538 below.
9539
9540 <condition> is a standard layer5-only ACL-based condition (see section 7).
9541
9542 Once a session is validated, (ie. after all handshakes have been completed),
9543 it is possible to evaluate some conditions to decide whether this session
9544 must be accepted or dropped or have its counters tracked. Those conditions
9545 cannot make use of any data contents because no buffers are allocated yet and
9546 the processing cannot wait at this stage. The main use case it to copy some
9547 early information into variables (since variables are accessible in the
9548 session), or to keep track of some information collected after the handshake,
9549 such as SSL-level elements (SNI, ciphers, client cert's CN) or information
9550 from the PROXY protocol header (eg: track a source forwarded this way). The
9551 extracted information can thus be copied to a variable or tracked using
9552 "track-sc" rules. Of course it is also possible to decide to accept/reject as
9553 with other rulesets. Most operations performed here could also be performed
9554 in "tcp-request content" rules, except that in HTTP these rules are evaluated
9555 for each new request, and that might not always be acceptable. For example a
9556 rule might increment a counter on each evaluation. It would also be possible
9557 that a country is resolved by geolocation from the source IP address,
9558 assigned to a session-wide variable, then the source address rewritten from
9559 an HTTP header for all requests. If some contents need to be inspected in
9560 order to take the decision, the "tcp-request content" statements must be used
9561 instead.
9562
9563 The "tcp-request session" rules are evaluated in their exact declaration
9564 order. If no rule matches or if there is no rule, the default action is to
9565 accept the incoming session. There is no specific limit to the number of
9566 rules which may be inserted.
9567
9568 Several types of actions are supported :
9569 - accept : the request is accepted
9570 - reject : the request is rejected and the connection is closed
9571 - { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>]
9572 - sc-inc-gpc0(<sc-id>)
9573 - sc-set-gpt0(<sc-id>) <int>
9574 - set-var(<var-name>) <expr>
Christopher Faulet85d79c92016-11-09 16:54:56 +01009575 - unset-var(<var-name>)
Willy Tarreau4f614292016-10-21 17:49:36 +02009576 - silent-drop
9577
9578 These actions have the same meaning as their respective counter-parts in
9579 "tcp-request connection" and "tcp-request content", so please refer to these
9580 sections for a complete description.
9581
9582 Note that the "if/unless" condition is optional. If no condition is set on
9583 the action, it is simply performed unconditionally. That can be useful for
9584 "track-sc*" actions as well as for changing the default action to a reject.
9585
9586 Example: track the original source address by default, or the one advertised
9587 in the PROXY protocol header for connection coming from the local
9588 proxies. The first connection-level rule enables receipt of the
9589 PROXY protocol for these ones, the second rule tracks whatever
9590 address we decide to keep after optional decoding.
9591
9592 tcp-request connection expect-proxy layer4 if { src -f proxies.lst }
9593 tcp-request session track-sc0 src
9594
9595 Example: accept all sessions from white-listed hosts, reject too fast
9596 sessions without counting them, and track accepted sessions.
9597 This results in session rate being capped from abusive sources.
9598
9599 tcp-request session accept if { src -f /etc/haproxy/whitelist.lst }
9600 tcp-request session reject if { src_sess_rate gt 10 }
9601 tcp-request session track-sc0 src
9602
9603 Example: accept all sessions from white-listed hosts, count all other
9604 sessions and reject too fast ones. This results in abusive ones
9605 being blocked as long as they don't slow down.
9606
9607 tcp-request session accept if { src -f /etc/haproxy/whitelist.lst }
9608 tcp-request session track-sc0 src
9609 tcp-request session reject if { sc0_sess_rate gt 10 }
9610
9611 See section 7 about ACL usage.
9612
9613 See also : "tcp-request connection", "tcp-request content", "stick-table"
9614
9615
Emeric Brun0a3b67f2010-09-24 15:34:53 +02009616tcp-response inspect-delay <timeout>
9617 Set the maximum allowed time to wait for a response during content inspection
9618 May be used in sections : defaults | frontend | listen | backend
9619 no | no | yes | yes
9620 Arguments :
9621 <timeout> is the timeout value specified in milliseconds by default, but
9622 can be in any other unit if the number is suffixed by the unit,
9623 as explained at the top of this document.
9624
9625 See also : "tcp-response content", "tcp-request inspect-delay".
9626
9627
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009628timeout check <timeout>
9629 Set additional check timeout, but only after a connection has been already
9630 established.
9631
9632 May be used in sections: defaults | frontend | listen | backend
9633 yes | no | yes | yes
9634 Arguments:
9635 <timeout> is the timeout value specified in milliseconds by default, but
9636 can be in any other unit if the number is suffixed by the unit,
9637 as explained at the top of this document.
9638
9639 If set, haproxy uses min("timeout connect", "inter") as a connect timeout
9640 for check and "timeout check" as an additional read timeout. The "min" is
9641 used so that people running with *very* long "timeout connect" (eg. those
9642 who needed this due to the queue or tarpit) do not slow down their checks.
Willy Tarreaud7550a22010-02-10 05:10:19 +01009643 (Please also note that there is no valid reason to have such long connect
9644 timeouts, because "timeout queue" and "timeout tarpit" can always be used to
9645 avoid that).
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009646
9647 If "timeout check" is not set haproxy uses "inter" for complete check
9648 timeout (connect + read) exactly like all <1.3.15 version.
9649
9650 In most cases check request is much simpler and faster to handle than normal
9651 requests and people may want to kick out laggy servers so this timeout should
Willy Tarreau41a340d2008-01-22 12:25:31 +01009652 be smaller than "timeout server".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009653
9654 This parameter is specific to backends, but can be specified once for all in
9655 "defaults" sections. This is in fact one of the easiest solutions not to
9656 forget about it.
9657
Willy Tarreau41a340d2008-01-22 12:25:31 +01009658 See also: "timeout connect", "timeout queue", "timeout server",
9659 "timeout tarpit".
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009660
9661
Willy Tarreau0ba27502007-12-24 16:55:16 +01009662timeout client <timeout>
9663timeout clitimeout <timeout> (deprecated)
9664 Set the maximum inactivity time on the client side.
9665 May be used in sections : defaults | frontend | listen | backend
9666 yes | yes | yes | no
9667 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01009668 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01009669 can be in any other unit if the number is suffixed by the unit,
9670 as explained at the top of this document.
9671
9672 The inactivity timeout applies when the client is expected to acknowledge or
9673 send data. In HTTP mode, this timeout is particularly important to consider
9674 during the first phase, when the client sends the request, and during the
Baptiste Assmann2e1941e2016-03-06 23:24:12 +01009675 response while it is reading data sent by the server. That said, for the
9676 first phase, it is preferable to set the "timeout http-request" to better
9677 protect HAProxy from Slowloris like attacks. The value is specified in
9678 milliseconds by default, but can be in any other unit if the number is
Willy Tarreau0ba27502007-12-24 16:55:16 +01009679 suffixed by the unit, as specified at the top of this document. In TCP mode
9680 (and to a lesser extent, in HTTP mode), it is highly recommended that the
9681 client timeout remains equal to the server timeout in order to avoid complex
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01009682 situations to debug. It is a good practice to cover one or several TCP packet
Willy Tarreau0ba27502007-12-24 16:55:16 +01009683 losses by specifying timeouts that are slightly above multiples of 3 seconds
Willy Tarreauce887fd2012-05-12 12:50:00 +02009684 (eg: 4 or 5 seconds). If some long-lived sessions are mixed with short-lived
9685 sessions (eg: WebSocket and HTTP), it's worth considering "timeout tunnel",
Willy Tarreau05cdd962014-05-10 14:30:07 +02009686 which overrides "timeout client" and "timeout server" for tunnels, as well as
9687 "timeout client-fin" for half-closed connections.
Willy Tarreau0ba27502007-12-24 16:55:16 +01009688
9689 This parameter is specific to frontends, but can be specified once for all in
9690 "defaults" sections. This is in fact one of the easiest solutions not to
9691 forget about it. An unspecified timeout results in an infinite timeout, which
9692 is not recommended. Such a usage is accepted and works but reports a warning
9693 during startup because it may results in accumulation of expired sessions in
9694 the system if the system's timeouts are not configured either.
9695
9696 This parameter replaces the old, deprecated "clitimeout". It is recommended
9697 to use it to write new configurations. The form "timeout clitimeout" is
9698 provided only by backwards compatibility but its use is strongly discouraged.
9699
Baptiste Assmann2e1941e2016-03-06 23:24:12 +01009700 See also : "clitimeout", "timeout server", "timeout tunnel",
9701 "timeout http-request".
Willy Tarreau0ba27502007-12-24 16:55:16 +01009702
9703
Willy Tarreau05cdd962014-05-10 14:30:07 +02009704timeout client-fin <timeout>
9705 Set the inactivity timeout on the client side for half-closed connections.
9706 May be used in sections : defaults | frontend | listen | backend
9707 yes | yes | yes | no
9708 Arguments :
9709 <timeout> is the timeout value specified in milliseconds by default, but
9710 can be in any other unit if the number is suffixed by the unit,
9711 as explained at the top of this document.
9712
9713 The inactivity timeout applies when the client is expected to acknowledge or
9714 send data while one direction is already shut down. This timeout is different
9715 from "timeout client" in that it only applies to connections which are closed
9716 in one direction. This is particularly useful to avoid keeping connections in
9717 FIN_WAIT state for too long when clients do not disconnect cleanly. This
9718 problem is particularly common long connections such as RDP or WebSocket.
9719 Note that this timeout can override "timeout tunnel" when a connection shuts
9720 down in one direction.
9721
9722 This parameter is specific to frontends, but can be specified once for all in
9723 "defaults" sections. By default it is not set, so half-closed connections
9724 will use the other timeouts (timeout.client or timeout.tunnel).
9725
9726 See also : "timeout client", "timeout server-fin", and "timeout tunnel".
9727
9728
Willy Tarreau0ba27502007-12-24 16:55:16 +01009729timeout connect <timeout>
9730timeout contimeout <timeout> (deprecated)
9731 Set the maximum time to wait for a connection attempt to a server to succeed.
9732 May be used in sections : defaults | frontend | listen | backend
9733 yes | no | yes | yes
9734 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01009735 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau0ba27502007-12-24 16:55:16 +01009736 can be in any other unit if the number is suffixed by the unit,
9737 as explained at the top of this document.
9738
9739 If the server is located on the same LAN as haproxy, the connection should be
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01009740 immediate (less than a few milliseconds). Anyway, it is a good practice to
Willy Tarreaud72758d2010-01-12 10:42:19 +01009741 cover one or several TCP packet losses by specifying timeouts that are
Willy Tarreau0ba27502007-12-24 16:55:16 +01009742 slightly above multiples of 3 seconds (eg: 4 or 5 seconds). By default, the
Krzysztof Piotr Oledzki5259dfe2008-01-21 01:54:06 +01009743 connect timeout also presets both queue and tarpit timeouts to the same value
9744 if these have not been specified.
Willy Tarreau0ba27502007-12-24 16:55:16 +01009745
9746 This parameter is specific to backends, but can be specified once for all in
9747 "defaults" sections. This is in fact one of the easiest solutions not to
9748 forget about it. An unspecified timeout results in an infinite timeout, which
9749 is not recommended. Such a usage is accepted and works but reports a warning
9750 during startup because it may results in accumulation of failed sessions in
9751 the system if the system's timeouts are not configured either.
9752
9753 This parameter replaces the old, deprecated "contimeout". It is recommended
9754 to use it to write new configurations. The form "timeout contimeout" is
9755 provided only by backwards compatibility but its use is strongly discouraged.
9756
Willy Tarreau41a340d2008-01-22 12:25:31 +01009757 See also: "timeout check", "timeout queue", "timeout server", "contimeout",
9758 "timeout tarpit".
Willy Tarreau0ba27502007-12-24 16:55:16 +01009759
9760
Willy Tarreaub16a5742010-01-10 14:46:16 +01009761timeout http-keep-alive <timeout>
9762 Set the maximum allowed time to wait for a new HTTP request to appear
9763 May be used in sections : defaults | frontend | listen | backend
9764 yes | yes | yes | yes
9765 Arguments :
9766 <timeout> is the timeout value specified in milliseconds by default, but
9767 can be in any other unit if the number is suffixed by the unit,
9768 as explained at the top of this document.
9769
9770 By default, the time to wait for a new request in case of keep-alive is set
9771 by "timeout http-request". However this is not always convenient because some
9772 people want very short keep-alive timeouts in order to release connections
9773 faster, and others prefer to have larger ones but still have short timeouts
9774 once the request has started to present itself.
9775
9776 The "http-keep-alive" timeout covers these needs. It will define how long to
9777 wait for a new HTTP request to start coming after a response was sent. Once
9778 the first byte of request has been seen, the "http-request" timeout is used
9779 to wait for the complete request to come. Note that empty lines prior to a
9780 new request do not refresh the timeout and are not counted as a new request.
9781
9782 There is also another difference between the two timeouts : when a connection
9783 expires during timeout http-keep-alive, no error is returned, the connection
9784 just closes. If the connection expires in "http-request" while waiting for a
9785 connection to complete, a HTTP 408 error is returned.
9786
9787 In general it is optimal to set this value to a few tens to hundreds of
9788 milliseconds, to allow users to fetch all objects of a page at once but
9789 without waiting for further clicks. Also, if set to a very small value (eg:
9790 1 millisecond) it will probably only accept pipelined requests but not the
9791 non-pipelined ones. It may be a nice trade-off for very large sites running
Patrick Mézard2382ad62010-05-09 10:43:32 +02009792 with tens to hundreds of thousands of clients.
Willy Tarreaub16a5742010-01-10 14:46:16 +01009793
9794 If this parameter is not set, the "http-request" timeout applies, and if both
9795 are not set, "timeout client" still applies at the lower level. It should be
9796 set in the frontend to take effect, unless the frontend is in TCP mode, in
9797 which case the HTTP backend's timeout will be used.
9798
9799 See also : "timeout http-request", "timeout client".
9800
9801
Willy Tarreau036fae02008-01-06 13:24:40 +01009802timeout http-request <timeout>
9803 Set the maximum allowed time to wait for a complete HTTP request
9804 May be used in sections : defaults | frontend | listen | backend
Willy Tarreaucd7afc02009-07-12 10:03:17 +02009805 yes | yes | yes | yes
Willy Tarreau036fae02008-01-06 13:24:40 +01009806 Arguments :
Willy Tarreau844e3c52008-01-11 16:28:18 +01009807 <timeout> is the timeout value specified in milliseconds by default, but
Willy Tarreau036fae02008-01-06 13:24:40 +01009808 can be in any other unit if the number is suffixed by the unit,
9809 as explained at the top of this document.
9810
9811 In order to offer DoS protection, it may be required to lower the maximum
9812 accepted time to receive a complete HTTP request without affecting the client
9813 timeout. This helps protecting against established connections on which
9814 nothing is sent. The client timeout cannot offer a good protection against
9815 this abuse because it is an inactivity timeout, which means that if the
9816 attacker sends one character every now and then, the timeout will not
9817 trigger. With the HTTP request timeout, no matter what speed the client
Willy Tarreau2705a612014-05-23 17:38:34 +02009818 types, the request will be aborted if it does not complete in time. When the
9819 timeout expires, an HTTP 408 response is sent to the client to inform it
9820 about the problem, and the connection is closed. The logs will report
9821 termination codes "cR". Some recent browsers are having problems with this
9822 standard, well-documented behaviour, so it might be needed to hide the 408
Willy Tarreau0f228a02015-05-01 15:37:53 +02009823 code using "option http-ignore-probes" or "errorfile 408 /dev/null". See
9824 more details in the explanations of the "cR" termination code in section 8.5.
Willy Tarreau036fae02008-01-06 13:24:40 +01009825
Baptiste Assmanneccdf432015-10-28 13:49:01 +01009826 By default, this timeout only applies to the header part of the request,
9827 and not to any data. As soon as the empty line is received, this timeout is
9828 not used anymore. When combined with "option http-buffer-request", this
9829 timeout also applies to the body of the request..
9830 It is used again on keep-alive connections to wait for a second
Willy Tarreaub16a5742010-01-10 14:46:16 +01009831 request if "timeout http-keep-alive" is not set.
Willy Tarreau036fae02008-01-06 13:24:40 +01009832
9833 Generally it is enough to set it to a few seconds, as most clients send the
9834 full request immediately upon connection. Add 3 or more seconds to cover TCP
9835 retransmits but that's all. Setting it to very low values (eg: 50 ms) will
9836 generally work on local networks as long as there are no packet losses. This
9837 will prevent people from sending bare HTTP requests using telnet.
9838
9839 If this parameter is not set, the client timeout still applies between each
Willy Tarreaucd7afc02009-07-12 10:03:17 +02009840 chunk of the incoming request. It should be set in the frontend to take
9841 effect, unless the frontend is in TCP mode, in which case the HTTP backend's
9842 timeout will be used.
Willy Tarreau036fae02008-01-06 13:24:40 +01009843
Willy Tarreau0f228a02015-05-01 15:37:53 +02009844 See also : "errorfile", "http-ignore-probes", "timeout http-keep-alive", and
Baptiste Assmanneccdf432015-10-28 13:49:01 +01009845 "timeout client", "option http-buffer-request".
Willy Tarreau036fae02008-01-06 13:24:40 +01009846
Willy Tarreau844e3c52008-01-11 16:28:18 +01009847
9848timeout queue <timeout>
9849 Set the maximum time to wait in the queue for a connection slot to be free
9850 May be used in sections : defaults | frontend | listen | backend
9851 yes | no | yes | yes
9852 Arguments :
9853 <timeout> is the timeout value specified in milliseconds by default, but
9854 can be in any other unit if the number is suffixed by the unit,
9855 as explained at the top of this document.
9856
9857 When a server's maxconn is reached, connections are left pending in a queue
9858 which may be server-specific or global to the backend. In order not to wait
9859 indefinitely, a timeout is applied to requests pending in the queue. If the
9860 timeout is reached, it is considered that the request will almost never be
9861 served, so it is dropped and a 503 error is returned to the client.
9862
9863 The "timeout queue" statement allows to fix the maximum time for a request to
9864 be left pending in a queue. If unspecified, the same value as the backend's
9865 connection timeout ("timeout connect") is used, for backwards compatibility
9866 with older versions with no "timeout queue" parameter.
9867
9868 See also : "timeout connect", "contimeout".
9869
9870
9871timeout server <timeout>
9872timeout srvtimeout <timeout> (deprecated)
9873 Set the maximum inactivity time on the server side.
9874 May be used in sections : defaults | frontend | listen | backend
9875 yes | no | yes | yes
9876 Arguments :
9877 <timeout> is the timeout value specified in milliseconds by default, but
9878 can be in any other unit if the number is suffixed by the unit,
9879 as explained at the top of this document.
9880
9881 The inactivity timeout applies when the server is expected to acknowledge or
9882 send data. In HTTP mode, this timeout is particularly important to consider
9883 during the first phase of the server's response, when it has to send the
9884 headers, as it directly represents the server's processing time for the
9885 request. To find out what value to put there, it's often good to start with
9886 what would be considered as unacceptable response times, then check the logs
9887 to observe the response time distribution, and adjust the value accordingly.
9888
9889 The value is specified in milliseconds by default, but can be in any other
9890 unit if the number is suffixed by the unit, as specified at the top of this
9891 document. In TCP mode (and to a lesser extent, in HTTP mode), it is highly
9892 recommended that the client timeout remains equal to the server timeout in
9893 order to avoid complex situations to debug. Whatever the expected server
Willy Tarreaud2a4aa22008-01-31 15:28:22 +01009894 response times, it is a good practice to cover at least one or several TCP
Willy Tarreau844e3c52008-01-11 16:28:18 +01009895 packet losses by specifying timeouts that are slightly above multiples of 3
Willy Tarreauce887fd2012-05-12 12:50:00 +02009896 seconds (eg: 4 or 5 seconds minimum). If some long-lived sessions are mixed
9897 with short-lived sessions (eg: WebSocket and HTTP), it's worth considering
9898 "timeout tunnel", which overrides "timeout client" and "timeout server" for
9899 tunnels.
Willy Tarreau844e3c52008-01-11 16:28:18 +01009900
9901 This parameter is specific to backends, but can be specified once for all in
9902 "defaults" sections. This is in fact one of the easiest solutions not to
9903 forget about it. An unspecified timeout results in an infinite timeout, which
9904 is not recommended. Such a usage is accepted and works but reports a warning
9905 during startup because it may results in accumulation of expired sessions in
9906 the system if the system's timeouts are not configured either.
9907
9908 This parameter replaces the old, deprecated "srvtimeout". It is recommended
9909 to use it to write new configurations. The form "timeout srvtimeout" is
9910 provided only by backwards compatibility but its use is strongly discouraged.
9911
Willy Tarreauce887fd2012-05-12 12:50:00 +02009912 See also : "srvtimeout", "timeout client" and "timeout tunnel".
Willy Tarreau844e3c52008-01-11 16:28:18 +01009913
Willy Tarreau05cdd962014-05-10 14:30:07 +02009914
9915timeout server-fin <timeout>
9916 Set the inactivity timeout on the server side for half-closed connections.
9917 May be used in sections : defaults | frontend | listen | backend
9918 yes | no | yes | yes
9919 Arguments :
9920 <timeout> is the timeout value specified in milliseconds by default, but
9921 can be in any other unit if the number is suffixed by the unit,
9922 as explained at the top of this document.
9923
9924 The inactivity timeout applies when the server is expected to acknowledge or
9925 send data while one direction is already shut down. This timeout is different
9926 from "timeout server" in that it only applies to connections which are closed
9927 in one direction. This is particularly useful to avoid keeping connections in
9928 FIN_WAIT state for too long when a remote server does not disconnect cleanly.
9929 This problem is particularly common long connections such as RDP or WebSocket.
9930 Note that this timeout can override "timeout tunnel" when a connection shuts
9931 down in one direction. This setting was provided for completeness, but in most
9932 situations, it should not be needed.
9933
9934 This parameter is specific to backends, but can be specified once for all in
9935 "defaults" sections. By default it is not set, so half-closed connections
9936 will use the other timeouts (timeout.server or timeout.tunnel).
9937
9938 See also : "timeout client-fin", "timeout server", and "timeout tunnel".
9939
Willy Tarreau844e3c52008-01-11 16:28:18 +01009940
9941timeout tarpit <timeout>
Cyril Bonté78caf842010-03-10 22:41:43 +01009942 Set the duration for which tarpitted connections will be maintained
Willy Tarreau844e3c52008-01-11 16:28:18 +01009943 May be used in sections : defaults | frontend | listen | backend
9944 yes | yes | yes | yes
9945 Arguments :
9946 <timeout> is the tarpit duration specified in milliseconds by default, but
9947 can be in any other unit if the number is suffixed by the unit,
9948 as explained at the top of this document.
9949
Jarno Huuskonene5ae7022017-04-03 14:36:21 +03009950 When a connection is tarpitted using "http-request tarpit" or
9951 "reqtarpit", it is maintained open with no activity for a certain
9952 amount of time, then closed. "timeout tarpit" defines how long it will
9953 be maintained open.
Willy Tarreau844e3c52008-01-11 16:28:18 +01009954
9955 The value is specified in milliseconds by default, but can be in any other
9956 unit if the number is suffixed by the unit, as specified at the top of this
9957 document. If unspecified, the same value as the backend's connection timeout
9958 ("timeout connect") is used, for backwards compatibility with older versions
Cyril Bonté78caf842010-03-10 22:41:43 +01009959 with no "timeout tarpit" parameter.
Willy Tarreau844e3c52008-01-11 16:28:18 +01009960
9961 See also : "timeout connect", "contimeout".
9962
9963
Willy Tarreauce887fd2012-05-12 12:50:00 +02009964timeout tunnel <timeout>
9965 Set the maximum inactivity time on the client and server side for tunnels.
9966 May be used in sections : defaults | frontend | listen | backend
9967 yes | no | yes | yes
9968 Arguments :
9969 <timeout> is the timeout value specified in milliseconds by default, but
9970 can be in any other unit if the number is suffixed by the unit,
9971 as explained at the top of this document.
9972
Jamie Gloudonaaa21002012-08-25 00:18:33 -04009973 The tunnel timeout applies when a bidirectional connection is established
Willy Tarreauce887fd2012-05-12 12:50:00 +02009974 between a client and a server, and the connection remains inactive in both
9975 directions. This timeout supersedes both the client and server timeouts once
9976 the connection becomes a tunnel. In TCP, this timeout is used as soon as no
9977 analyser remains attached to either connection (eg: tcp content rules are
9978 accepted). In HTTP, this timeout is used when a connection is upgraded (eg:
9979 when switching to the WebSocket protocol, or forwarding a CONNECT request
9980 to a proxy), or after the first response when no keepalive/close option is
9981 specified.
9982
Willy Tarreau05cdd962014-05-10 14:30:07 +02009983 Since this timeout is usually used in conjunction with long-lived connections,
9984 it usually is a good idea to also set "timeout client-fin" to handle the
9985 situation where a client suddenly disappears from the net and does not
9986 acknowledge a close, or sends a shutdown and does not acknowledge pending
9987 data anymore. This can happen in lossy networks where firewalls are present,
9988 and is detected by the presence of large amounts of sessions in a FIN_WAIT
9989 state.
9990
Willy Tarreauce887fd2012-05-12 12:50:00 +02009991 The value is specified in milliseconds by default, but can be in any other
9992 unit if the number is suffixed by the unit, as specified at the top of this
9993 document. Whatever the expected normal idle time, it is a good practice to
9994 cover at least one or several TCP packet losses by specifying timeouts that
9995 are slightly above multiples of 3 seconds (eg: 4 or 5 seconds minimum).
9996
9997 This parameter is specific to backends, but can be specified once for all in
9998 "defaults" sections. This is in fact one of the easiest solutions not to
9999 forget about it.
10000
10001 Example :
10002 defaults http
10003 option http-server-close
10004 timeout connect 5s
10005 timeout client 30s
Willy Tarreau05cdd962014-05-10 14:30:07 +020010006 timeout client-fin 30s
Willy Tarreauce887fd2012-05-12 12:50:00 +020010007 timeout server 30s
10008 timeout tunnel 1h # timeout to use with WebSocket and CONNECT
10009
Willy Tarreau05cdd962014-05-10 14:30:07 +020010010 See also : "timeout client", "timeout client-fin", "timeout server".
Willy Tarreauce887fd2012-05-12 12:50:00 +020010011
10012
Willy Tarreau844e3c52008-01-11 16:28:18 +010010013transparent (deprecated)
10014 Enable client-side transparent proxying
10015 May be used in sections : defaults | frontend | listen | backend
Willy Tarreau4b1f8592008-12-23 23:13:55 +010010016 yes | no | yes | yes
Willy Tarreau844e3c52008-01-11 16:28:18 +010010017 Arguments : none
10018
10019 This keyword was introduced in order to provide layer 7 persistence to layer
10020 3 load balancers. The idea is to use the OS's ability to redirect an incoming
10021 connection for a remote address to a local process (here HAProxy), and let
10022 this process know what address was initially requested. When this option is
10023 used, sessions without cookies will be forwarded to the original destination
10024 IP address of the incoming request (which should match that of another
10025 equipment), while requests with cookies will still be forwarded to the
10026 appropriate server.
10027
10028 The "transparent" keyword is deprecated, use "option transparent" instead.
10029
10030 Note that contrary to a common belief, this option does NOT make HAProxy
10031 present the client's IP to the server when establishing the connection.
10032
Willy Tarreau844e3c52008-01-11 16:28:18 +010010033 See also: "option transparent"
10034
William Lallemanda73203e2012-03-12 12:48:57 +010010035unique-id-format <string>
10036 Generate a unique ID for each request.
10037 May be used in sections : defaults | frontend | listen | backend
10038 yes | yes | yes | no
10039 Arguments :
10040 <string> is a log-format string.
10041
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010042 This keyword creates a ID for each request using the custom log format. A
10043 unique ID is useful to trace a request passing through many components of
10044 a complex infrastructure. The newly created ID may also be logged using the
10045 %ID tag the log-format string.
William Lallemanda73203e2012-03-12 12:48:57 +010010046
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010047 The format should be composed from elements that are guaranteed to be
10048 unique when combined together. For instance, if multiple haproxy instances
10049 are involved, it might be important to include the node name. It is often
10050 needed to log the incoming connection's source and destination addresses
10051 and ports. Note that since multiple requests may be performed over the same
10052 connection, including a request counter may help differentiate them.
10053 Similarly, a timestamp may protect against a rollover of the counter.
10054 Logging the process ID will avoid collisions after a service restart.
William Lallemanda73203e2012-03-12 12:48:57 +010010055
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010056 It is recommended to use hexadecimal notation for many fields since it
10057 makes them more compact and saves space in logs.
William Lallemanda73203e2012-03-12 12:48:57 +010010058
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010059 Example:
William Lallemanda73203e2012-03-12 12:48:57 +010010060
Julien Vehentf21be322014-03-07 08:27:34 -050010061 unique-id-format %{+X}o\ %ci:%cp_%fi:%fp_%Ts_%rt:%pid
William Lallemanda73203e2012-03-12 12:48:57 +010010062
10063 will generate:
10064
10065 7F000001:8296_7F00001E:1F90_4F7B0A69_0003:790A
10066
10067 See also: "unique-id-header"
10068
10069unique-id-header <name>
10070 Add a unique ID header in the HTTP request.
10071 May be used in sections : defaults | frontend | listen | backend
10072 yes | yes | yes | no
10073 Arguments :
10074 <name> is the name of the header.
10075
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010076 Add a unique-id header in the HTTP request sent to the server, using the
10077 unique-id-format. It can't work if the unique-id-format doesn't exist.
William Lallemanda73203e2012-03-12 12:48:57 +010010078
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010079 Example:
William Lallemanda73203e2012-03-12 12:48:57 +010010080
Julien Vehentf21be322014-03-07 08:27:34 -050010081 unique-id-format %{+X}o\ %ci:%cp_%fi:%fp_%Ts_%rt:%pid
William Lallemanda73203e2012-03-12 12:48:57 +010010082 unique-id-header X-Unique-ID
10083
10084 will generate:
10085
10086 X-Unique-ID: 7F000001:8296_7F00001E:1F90_4F7B0A69_0003:790A
10087
10088 See also: "unique-id-format"
Willy Tarreau844e3c52008-01-11 16:28:18 +010010089
Willy Tarreauf51658d2014-04-23 01:21:56 +020010090use_backend <backend> [{if | unless} <condition>]
Willy Tarreau1d0dfb12009-07-07 15:10:31 +020010091 Switch to a specific backend if/unless an ACL-based condition is matched.
Willy Tarreau844e3c52008-01-11 16:28:18 +010010092 May be used in sections : defaults | frontend | listen | backend
10093 no | yes | yes | no
10094 Arguments :
Bertrand Jacquin702d44f2013-11-19 11:43:06 +010010095 <backend> is the name of a valid backend or "listen" section, or a
10096 "log-format" string resolving to a backend name.
Willy Tarreau844e3c52008-01-11 16:28:18 +010010097
Willy Tarreauf51658d2014-04-23 01:21:56 +020010098 <condition> is a condition composed of ACLs, as described in section 7. If
10099 it is omitted, the rule is unconditionally applied.
Willy Tarreau844e3c52008-01-11 16:28:18 +010010100
10101 When doing content-switching, connections arrive on a frontend and are then
10102 dispatched to various backends depending on a number of conditions. The
10103 relation between the conditions and the backends is described with the
Willy Tarreau1d0dfb12009-07-07 15:10:31 +020010104 "use_backend" keyword. While it is normally used with HTTP processing, it can
10105 also be used in pure TCP, either without content using stateless ACLs (eg:
10106 source address validation) or combined with a "tcp-request" rule to wait for
10107 some payload.
Willy Tarreau844e3c52008-01-11 16:28:18 +010010108
10109 There may be as many "use_backend" rules as desired. All of these rules are
10110 evaluated in their declaration order, and the first one which matches will
10111 assign the backend.
10112
10113 In the first form, the backend will be used if the condition is met. In the
10114 second form, the backend will be used if the condition is not met. If no
10115 condition is valid, the backend defined with "default_backend" will be used.
10116 If no default backend is defined, either the servers in the same section are
10117 used (in case of a "listen" section) or, in case of a frontend, no server is
10118 used and a 503 service unavailable response is returned.
10119
Willy Tarreau51aecc72009-07-12 09:47:04 +020010120 Note that it is possible to switch from a TCP frontend to an HTTP backend. In
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010010121 this case, either the frontend has already checked that the protocol is HTTP,
Willy Tarreau51aecc72009-07-12 09:47:04 +020010122 and backend processing will immediately follow, or the backend will wait for
10123 a complete HTTP request to get in. This feature is useful when a frontend
10124 must decode several protocols on a unique port, one of them being HTTP.
10125
Bertrand Jacquin702d44f2013-11-19 11:43:06 +010010126 When <backend> is a simple name, it is resolved at configuration time, and an
10127 error is reported if the specified backend does not exist. If <backend> is
10128 a log-format string instead, no check may be done at configuration time, so
10129 the backend name is resolved dynamically at run time. If the resulting
10130 backend name does not correspond to any valid backend, no other rule is
10131 evaluated, and the default_backend directive is applied instead. Note that
10132 when using dynamic backend names, it is highly recommended to use a prefix
10133 that no other backend uses in order to ensure that an unauthorized backend
10134 cannot be forced from the request.
10135
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010136 It is worth mentioning that "use_backend" rules with an explicit name are
Bertrand Jacquin702d44f2013-11-19 11:43:06 +010010137 used to detect the association between frontends and backends to compute the
10138 backend's "fullconn" setting. This cannot be done for dynamic names.
10139
10140 See also: "default_backend", "tcp-request", "fullconn", "log-format", and
10141 section 7 about ACLs.
Willy Tarreaud72758d2010-01-12 10:42:19 +010010142
Willy Tarreau036fae02008-01-06 13:24:40 +010010143
Willy Tarreau4a5cade2012-04-05 21:09:48 +020010144use-server <server> if <condition>
10145use-server <server> unless <condition>
10146 Only use a specific server if/unless an ACL-based condition is matched.
10147 May be used in sections : defaults | frontend | listen | backend
10148 no | no | yes | yes
10149 Arguments :
Cyril Bonté108cf6e2012-04-21 23:30:29 +020010150 <server> is the name of a valid server in the same backend section.
Willy Tarreau4a5cade2012-04-05 21:09:48 +020010151
10152 <condition> is a condition composed of ACLs, as described in section 7.
10153
10154 By default, connections which arrive to a backend are load-balanced across
10155 the available servers according to the configured algorithm, unless a
10156 persistence mechanism such as a cookie is used and found in the request.
10157
10158 Sometimes it is desirable to forward a particular request to a specific
10159 server without having to declare a dedicated backend for this server. This
10160 can be achieved using the "use-server" rules. These rules are evaluated after
10161 the "redirect" rules and before evaluating cookies, and they have precedence
10162 on them. There may be as many "use-server" rules as desired. All of these
10163 rules are evaluated in their declaration order, and the first one which
10164 matches will assign the server.
10165
10166 If a rule designates a server which is down, and "option persist" is not used
10167 and no force-persist rule was validated, it is ignored and evaluation goes on
10168 with the next rules until one matches.
10169
10170 In the first form, the server will be used if the condition is met. In the
10171 second form, the server will be used if the condition is not met. If no
10172 condition is valid, the processing continues and the server will be assigned
10173 according to other persistence mechanisms.
10174
10175 Note that even if a rule is matched, cookie processing is still performed but
10176 does not assign the server. This allows prefixed cookies to have their prefix
10177 stripped.
10178
10179 The "use-server" statement works both in HTTP and TCP mode. This makes it
10180 suitable for use with content-based inspection. For instance, a server could
10181 be selected in a farm according to the TLS SNI field. And if these servers
10182 have their weight set to zero, they will not be used for other traffic.
10183
10184 Example :
10185 # intercept incoming TLS requests based on the SNI field
10186 use-server www if { req_ssl_sni -i www.example.com }
10187 server www 192.168.0.1:443 weight 0
10188 use-server mail if { req_ssl_sni -i mail.example.com }
10189 server mail 192.168.0.1:587 weight 0
10190 use-server imap if { req_ssl_sni -i imap.example.com }
Lukas Tribus98a3e3f2017-03-26 12:55:35 +000010191 server imap 192.168.0.1:993 weight 0
Willy Tarreau4a5cade2012-04-05 21:09:48 +020010192 # all the rest is forwarded to this server
10193 server default 192.168.0.2:443 check
10194
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010195 See also: "use_backend", section 5 about server and section 7 about ACLs.
Willy Tarreau4a5cade2012-04-05 21:09:48 +020010196
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010197
101985. Bind and Server options
10199--------------------------
10200
10201The "bind", "server" and "default-server" keywords support a number of settings
10202depending on some build options and on the system HAProxy was built on. These
10203settings generally each consist in one word sometimes followed by a value,
10204written on the same line as the "bind" or "server" line. All these options are
10205described in this section.
10206
10207
102085.1. Bind options
10209-----------------
10210
10211The "bind" keyword supports a certain number of settings which are all passed
10212as arguments on the same line. The order in which those arguments appear makes
10213no importance, provided that they appear after the bind address. All of these
10214parameters are optional. Some of them consist in a single words (booleans),
10215while other ones expect a value after them. In this case, the value must be
10216provided immediately after the setting name.
10217
10218The currently supported settings are the following ones.
10219
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010010220accept-netscaler-cip <magic number>
10221 Enforces the use of the NetScaler Client IP insertion protocol over any
10222 connection accepted by any of the TCP sockets declared on the same line. The
10223 NetScaler Client IP insertion protocol dictates the layer 3/4 addresses of
10224 the incoming connection to be used everywhere an address is used, with the
10225 only exception of "tcp-request connection" rules which will only see the
10226 real connection address. Logs will reflect the addresses indicated in the
10227 protocol, unless it is violated, in which case the real address will still
10228 be used. This keyword combined with support from external components can be
10229 used as an efficient and reliable alternative to the X-Forwarded-For
Bertrand Jacquin90759682016-06-06 15:35:39 +010010230 mechanism which is not always reliable and not even always usable. See also
10231 "tcp-request connection expect-netscaler-cip" for a finer-grained setting of
10232 which client is allowed to use the protocol.
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010010233
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010234accept-proxy
10235 Enforces the use of the PROXY protocol over any connection accepted by any of
Willy Tarreau77992672014-06-14 11:06:17 +020010236 the sockets declared on the same line. Versions 1 and 2 of the PROXY protocol
10237 are supported and correctly detected. The PROXY protocol dictates the layer
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010238 3/4 addresses of the incoming connection to be used everywhere an address is
10239 used, with the only exception of "tcp-request connection" rules which will
10240 only see the real connection address. Logs will reflect the addresses
10241 indicated in the protocol, unless it is violated, in which case the real
10242 address will still be used. This keyword combined with support from external
10243 components can be used as an efficient and reliable alternative to the
10244 X-Forwarded-For mechanism which is not always reliable and not even always
Willy Tarreau4f0d9192013-06-11 20:40:55 +020010245 usable. See also "tcp-request connection expect-proxy" for a finer-grained
10246 setting of which client is allowed to use the protocol.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010247
Olivier Houchardc2aae742017-09-22 18:26:28 +020010248allow-0rtt
10249 Allow receiving early data when using TLS 1.3. This is disabled by default,
10250 due to security considerations.
10251
Willy Tarreauab861d32013-04-02 02:30:41 +020010252alpn <protocols>
10253 This enables the TLS ALPN extension and advertises the specified protocol
10254 list as supported on top of ALPN. The protocol list consists in a comma-
10255 delimited list of protocol names, for instance: "http/1.1,http/1.0" (without
10256 quotes). This requires that the SSL library is build with support for TLS
10257 extensions enabled (check with haproxy -vv). The ALPN extension replaces the
10258 initial NPN extension.
10259
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010260backlog <backlog>
10261 Sets the socket's backlog to this value. If unspecified, the frontend's
10262 backlog is used instead, which generally defaults to the maxconn value.
10263
Emmanuel Hocdete7f2b732017-01-09 16:15:54 +010010264curves <curves>
10265 This setting is only available when support for OpenSSL was built in. It sets
10266 the string describing the list of elliptic curves algorithms ("curve suite")
10267 that are negotiated during the SSL/TLS handshake with ECDHE. The format of the
10268 string is a colon-delimited list of curve name.
10269 Example: "X25519:P-256" (without quote)
10270 When "curves" is set, "ecdhe" parameter is ignored.
10271
Emeric Brun7fb34422012-09-28 15:26:15 +020010272ecdhe <named curve>
10273 This setting is only available when support for OpenSSL was built in. It sets
Emeric Brun6924ef82013-03-06 14:08:53 +010010274 the named curve (RFC 4492) used to generate ECDH ephemeral keys. By default,
10275 used named curve is prime256v1.
Emeric Brun7fb34422012-09-28 15:26:15 +020010276
Emeric Brunfd33a262012-10-11 16:28:27 +020010277ca-file <cafile>
Emeric Brun1a073b42012-09-28 17:07:34 +020010278 This setting is only available when support for OpenSSL was built in. It
10279 designates a PEM file from which to load CA certificates used to verify
10280 client's certificate.
10281
Emeric Brunb6dc9342012-09-28 17:55:37 +020010282ca-ignore-err [all|<errorID>,...]
10283 This setting is only available when support for OpenSSL was built in.
10284 Sets a comma separated list of errorIDs to ignore during verify at depth > 0.
10285 If set to 'all', all errors are ignored. SSL handshake is not aborted if an
10286 error is ignored.
10287
Christopher Faulet31af49d2015-06-09 17:29:50 +020010288ca-sign-file <cafile>
10289 This setting is only available when support for OpenSSL was built in. It
10290 designates a PEM file containing both the CA certificate and the CA private
10291 key used to create and sign server's certificates. This is a mandatory
10292 setting when the dynamic generation of certificates is enabled. See
10293 'generate-certificates' for details.
10294
Bertrand Jacquind4d0a232016-11-13 16:37:12 +000010295ca-sign-pass <passphrase>
Christopher Faulet31af49d2015-06-09 17:29:50 +020010296 This setting is only available when support for OpenSSL was built in. It is
10297 the CA private key passphrase. This setting is optional and used only when
10298 the dynamic generation of certificates is enabled. See
10299 'generate-certificates' for details.
10300
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010301ciphers <ciphers>
10302 This setting is only available when support for OpenSSL was built in. It sets
10303 the string describing the list of cipher algorithms ("cipher suite") that are
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010304 negotiated during the SSL/TLS handshake. The format of the string is defined
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010305 in "man 1 ciphers" from OpenSSL man pages, and can be for instance a string
10306 such as "AES:ALL:!aNULL:!eNULL:+RC4:@STRENGTH" (without quotes).
Daniel Schneller87e43022017-09-01 19:29:57 +020010307 Depending on the compatiblity and security requirements, the list of suitable
10308 ciphers depends on a variety of variables. For background information and
10309 recommendations see e. g. (https://wiki.mozilla.org/Security/Server_Side_TLS)
10310 and (https://mozilla.github.io/server-side-tls/ssl-config-generator/).
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010311
Emeric Brunfd33a262012-10-11 16:28:27 +020010312crl-file <crlfile>
Emeric Brun1a073b42012-09-28 17:07:34 +020010313 This setting is only available when support for OpenSSL was built in. It
10314 designates a PEM file from which to load certificate revocation list used
10315 to verify client's certificate.
10316
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010317crt <cert>
Alex Davies0fbf0162013-03-02 16:04:50 +000010318 This setting is only available when support for OpenSSL was built in. It
10319 designates a PEM file containing both the required certificates and any
10320 associated private keys. This file can be built by concatenating multiple
10321 PEM files into one (e.g. cat cert.pem key.pem > combined.pem). If your CA
10322 requires an intermediate certificate, this can also be concatenated into this
10323 file.
10324
10325 If the OpenSSL used supports Diffie-Hellman, parameters present in this file
10326 are loaded.
10327
10328 If a directory name is used instead of a PEM file, then all files found in
Cyril Bonté3180f7b2015-01-25 00:16:08 +010010329 that directory will be loaded in alphabetic order unless their name ends with
Janusz Dziemidowicz2c701b52015-03-07 23:03:59 +010010330 '.issuer', '.ocsp' or '.sctl' (reserved extensions). This directive may be
10331 specified multiple times in order to load certificates from multiple files or
10332 directories. The certificates will be presented to clients who provide a
10333 valid TLS Server Name Indication field matching one of their CN or alt
10334 subjects. Wildcards are supported, where a wildcard character '*' is used
10335 instead of the first hostname component (eg: *.example.org matches
10336 www.example.org but not www.sub.example.org).
Alex Davies0fbf0162013-03-02 16:04:50 +000010337
10338 If no SNI is provided by the client or if the SSL library does not support
10339 TLS extensions, or if the client provides an SNI hostname which does not
10340 match any certificate, then the first loaded certificate will be presented.
10341 This means that when loading certificates from a directory, it is highly
Cyril Bonté3180f7b2015-01-25 00:16:08 +010010342 recommended to load the default one first as a file or to ensure that it will
10343 always be the first one in the directory.
Alex Davies0fbf0162013-03-02 16:04:50 +000010344
Emeric Brune032bfa2012-09-28 13:01:45 +020010345 Note that the same cert may be loaded multiple times without side effects.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010346
Alex Davies0fbf0162013-03-02 16:04:50 +000010347 Some CAs (such as Godaddy) offer a drop down list of server types that do not
10348 include HAProxy when obtaining a certificate. If this happens be sure to
Godbach8bf60a12014-04-21 21:42:41 +080010349 choose a webserver that the CA believes requires an intermediate CA (for
Alex Davies0fbf0162013-03-02 16:04:50 +000010350 Godaddy, selection Apache Tomcat will get the correct bundle, but many
10351 others, e.g. nginx, result in a wrong bundle that will not work for some
10352 clients).
10353
Emeric Brun4147b2e2014-06-16 18:36:30 +020010354 For each PEM file, haproxy checks for the presence of file at the same path
10355 suffixed by ".ocsp". If such file is found, support for the TLS Certificate
10356 Status Request extension (also known as "OCSP stapling") is automatically
10357 enabled. The content of this file is optional. If not empty, it must contain
10358 a valid OCSP Response in DER format. In order to be valid an OCSP Response
10359 must comply with the following rules: it has to indicate a good status,
10360 it has to be a single response for the certificate of the PEM file, and it
10361 has to be valid at the moment of addition. If these rules are not respected
10362 the OCSP Response is ignored and a warning is emitted. In order to identify
10363 which certificate an OCSP Response applies to, the issuer's certificate is
10364 necessary. If the issuer's certificate is not found in the PEM file, it will
10365 be loaded from a file at the same path as the PEM file suffixed by ".issuer"
10366 if it exists otherwise it will fail with an error.
10367
Janusz Dziemidowicz2c701b52015-03-07 23:03:59 +010010368 For each PEM file, haproxy also checks for the presence of file at the same
10369 path suffixed by ".sctl". If such file is found, support for Certificate
10370 Transparency (RFC6962) TLS extension is enabled. The file must contain a
10371 valid Signed Certificate Timestamp List, as described in RFC. File is parsed
10372 to check basic syntax, but no signatures are verified.
10373
yanbzhu6c25e9e2016-01-05 12:52:02 -050010374 There are cases where it is desirable to support multiple key types, e.g. RSA
10375 and ECDSA in the cipher suites offered to the clients. This allows clients
10376 that support EC certificates to be able to use EC ciphers, while
10377 simultaneously supporting older, RSA only clients.
yanbzhud19630c2015-12-14 15:10:25 -050010378
10379 In order to provide this functionality, multiple PEM files, each with a
10380 different key type, are required. To associate these PEM files into a
10381 "cert bundle" that is recognized by haproxy, they must be named in the
10382 following way: All PEM files that are to be bundled must have the same base
10383 name, with a suffix indicating the key type. Currently, three suffixes are
10384 supported: rsa, dsa and ecdsa. For example, if www.example.com has two PEM
10385 files, an RSA file and an ECDSA file, they must be named: "example.pem.rsa"
10386 and "example.pem.ecdsa". The first part of the filename is arbitrary; only the
10387 suffix matters. To load this bundle into haproxy, specify the base name only:
10388
10389 Example : bind :8443 ssl crt example.pem
10390
yanbzhu6c25e9e2016-01-05 12:52:02 -050010391 Note that the suffix is not given to haproxy; this tells haproxy to look for
yanbzhud19630c2015-12-14 15:10:25 -050010392 a cert bundle.
10393
10394 Haproxy will load all PEM files in the bundle at the same time to try to
10395 support multiple key types. PEM files are combined based on Common Name
10396 (CN) and Subject Alternative Name (SAN) to support SNI lookups. This means
10397 that even if you give haproxy a cert bundle, if there are no shared CN/SAN
10398 entries in the certificates in that bundle, haproxy will not be able to
10399 provide multi-cert support.
10400
10401 Assuming bundle in the example above contained the following:
10402
10403 Filename | CN | SAN
10404 -------------------+-----------------+-------------------
10405 example.pem.rsa | www.example.com | rsa.example.com
yanbzhu6c25e9e2016-01-05 12:52:02 -050010406 -------------------+-----------------+-------------------
yanbzhud19630c2015-12-14 15:10:25 -050010407 example.pem.ecdsa | www.example.com | ecdsa.example.com
10408 -------------------+-----------------+-------------------
10409
10410 Users connecting with an SNI of "www.example.com" will be able
10411 to use both RSA and ECDSA cipher suites. Users connecting with an SNI of
10412 "rsa.example.com" will only be able to use RSA cipher suites, and users
10413 connecting with "ecdsa.example.com" will only be able to use ECDSA cipher
Emmanuel Hocdet84e417d2017-08-16 11:33:17 +020010414 suites. With BoringSSL and Openssl >= 1.1.1 multi-cert is natively supported,
10415 no need to bundle certificates. ECDSA certificate will be preferred if client
10416 support it.
yanbzhud19630c2015-12-14 15:10:25 -050010417
10418 If a directory name is given as the <cert> argument, haproxy will
10419 automatically search and load bundled files in that directory.
10420
10421 OSCP files (.ocsp) and issuer files (.issuer) are supported with multi-cert
10422 bundling. Each certificate can have its own .ocsp and .issuer file. At this
10423 time, sctl is not supported in multi-certificate bundling.
10424
Emeric Brunb6dc9342012-09-28 17:55:37 +020010425crt-ignore-err <errors>
Alex Davies0fbf0162013-03-02 16:04:50 +000010426 This setting is only available when support for OpenSSL was built in. Sets a
10427 comma separated list of errorIDs to ignore during verify at depth == 0. If
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010428 set to 'all', all errors are ignored. SSL handshake is not aborted if an error
Alex Davies0fbf0162013-03-02 16:04:50 +000010429 is ignored.
Emeric Brunb6dc9342012-09-28 17:55:37 +020010430
Emmanuel Hocdetfe616562013-01-22 15:31:15 +010010431crt-list <file>
10432 This setting is only available when support for OpenSSL was built in. It
Emmanuel Hocdet98263292016-12-29 18:26:15 +010010433 designates a list of PEM file with an optional ssl configuration and a SNI
10434 filter per certificate, with the following format for each line :
Emmanuel Hocdetfe616562013-01-22 15:31:15 +010010435
Emmanuel Hocdet98263292016-12-29 18:26:15 +010010436 <crtfile> [\[<sslbindconf> ...\]] [[!]<snifilter> ...]
10437
Emmanuel Hocdet174dfe52017-07-28 15:01:05 +020010438 sslbindconf support "npn", "alpn", "verify", "ca-file", "no-ca-names",
10439 crl-file", "ecdhe", "curves", "ciphers" configuration. With BoringSSL
Emmanuel Hocdet84e417d2017-08-16 11:33:17 +020010440 and Openssl >= 1.1.1 "ssl-min-ver" and "ssl-max-ver" are also supported.
Emmanuel Hocdet98263292016-12-29 18:26:15 +010010441 It override the configuration set in bind line for the certificate.
Emmanuel Hocdetfe616562013-01-22 15:31:15 +010010442
Emmanuel Hocdet7c41a1b2013-05-07 20:20:06 +020010443 Wildcards are supported in the SNI filter. Negative filter are also supported,
10444 only useful in combination with a wildcard filter to exclude a particular SNI.
10445 The certificates will be presented to clients who provide a valid TLS Server
10446 Name Indication field matching one of the SNI filters. If no SNI filter is
10447 specified, the CN and alt subjects are used. This directive may be specified
10448 multiple times. See the "crt" option for more information. The default
10449 certificate is still needed to meet OpenSSL expectations. If it is not used,
10450 the 'strict-sni' option may be used.
Emmanuel Hocdetfe616562013-01-22 15:31:15 +010010451
yanbzhu6c25e9e2016-01-05 12:52:02 -050010452 Multi-cert bundling (see "crt") is supported with crt-list, as long as only
Emmanuel Hocdetd294aea2016-05-13 11:14:06 +020010453 the base name is given in the crt-list. SNI filter will do the same work on
Emmanuel Hocdet84e417d2017-08-16 11:33:17 +020010454 all bundled certificates. With BoringSSL and Openssl >= 1.1.1 multi-cert is
10455 natively supported, avoid multi-cert bundling. RSA and ECDSA certificates can
10456 be declared in a row, and set different ssl and filter parameter.
yanbzhud19630c2015-12-14 15:10:25 -050010457
Emmanuel Hocdet98263292016-12-29 18:26:15 +010010458 crt-list file example:
10459 cert1.pem
Emmanuel Hocdet05942112017-02-20 16:11:50 +010010460 cert2.pem [alpn h2,http/1.1]
Emmanuel Hocdet98263292016-12-29 18:26:15 +010010461 certW.pem *.domain.tld !secure.domain.tld
Emmanuel Hocdet05942112017-02-20 16:11:50 +010010462 certS.pem [curves X25519:P-256 ciphers ECDHE-ECDSA-AES256-GCM-SHA384] secure.domain.tld
Emmanuel Hocdet98263292016-12-29 18:26:15 +010010463
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010464defer-accept
10465 Is an optional keyword which is supported only on certain Linux kernels. It
10466 states that a connection will only be accepted once some data arrive on it,
10467 or at worst after the first retransmit. This should be used only on protocols
10468 for which the client talks first (eg: HTTP). It can slightly improve
10469 performance by ensuring that most of the request is already available when
10470 the connection is accepted. On the other hand, it will not be able to detect
10471 connections which don't talk. It is important to note that this option is
10472 broken in all kernels up to 2.6.31, as the connection is never accepted until
10473 the client talks. This can cause issues with front firewalls which would see
10474 an established connection while the proxy will only see it in SYN_RECV. This
10475 option is only supported on TCPv4/TCPv6 sockets and ignored by other ones.
10476
William Lallemandf6975e92017-05-26 17:42:10 +020010477expose-fd listeners
10478 This option is only usable with the stats socket. It gives your stats socket
10479 the capability to pass listeners FD to another HAProxy process.
William Lallemande202b1e2017-06-01 17:38:56 +020010480 During a reload with the master-worker mode, the process is automatically
10481 reexecuted adding -x and one of the stats socket with this option.
William Lallemandf6975e92017-05-26 17:42:10 +020010482 See alors "-x" in the management guide.
10483
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010484force-sslv3
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010485 This option enforces use of SSLv3 only on SSL connections instantiated from
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010486 this listener. SSLv3 is generally less expensive than the TLS counterparts
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010487 for high connection rates. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010488 "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver".
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010489
10490force-tlsv10
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010491 This option enforces use of TLSv1.0 only on SSL connections instantiated from
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010492 this listener. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010493 "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver".
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010494
10495force-tlsv11
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010496 This option enforces use of TLSv1.1 only on SSL connections instantiated from
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010497 this listener. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010498 "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver".
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010499
10500force-tlsv12
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010501 This option enforces use of TLSv1.2 only on SSL connections instantiated from
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010502 this listener. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010503 "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver".
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010504
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020010505force-tlsv13
10506 This option enforces use of TLSv1.3 only on SSL connections instantiated from
10507 this listener. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010508 "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver".
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020010509
Christopher Faulet31af49d2015-06-09 17:29:50 +020010510generate-certificates
10511 This setting is only available when support for OpenSSL was built in. It
10512 enables the dynamic SSL certificates generation. A CA certificate and its
10513 private key are necessary (see 'ca-sign-file'). When HAProxy is configured as
10514 a transparent forward proxy, SSL requests generate errors because of a common
10515 name mismatch on the certificate presented to the client. With this option
10516 enabled, HAProxy will try to forge a certificate using the SNI hostname
10517 indicated by the client. This is done only if no certificate matches the SNI
10518 hostname (see 'crt-list'). If an error occurs, the default certificate is
10519 used, else the 'strict-sni' option is set.
10520 It can also be used when HAProxy is configured as a reverse proxy to ease the
10521 deployment of an architecture with many backends.
10522
10523 Creating a SSL certificate is an expensive operation, so a LRU cache is used
10524 to store forged certificates (see 'tune.ssl.ssl-ctx-cache-size'). It
10525 increases the HAProxy's memroy footprint to reduce latency when the same
10526 certificate is used many times.
10527
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010528gid <gid>
10529 Sets the group of the UNIX sockets to the designated system gid. It can also
10530 be set by default in the global section's "unix-bind" statement. Note that
10531 some platforms simply ignore this. This setting is equivalent to the "group"
10532 setting except that the group ID is used instead of its name. This setting is
10533 ignored by non UNIX sockets.
10534
10535group <group>
10536 Sets the group of the UNIX sockets to the designated system group. It can
10537 also be set by default in the global section's "unix-bind" statement. Note
10538 that some platforms simply ignore this. This setting is equivalent to the
10539 "gid" setting except that the group name is used instead of its gid. This
10540 setting is ignored by non UNIX sockets.
10541
10542id <id>
10543 Fixes the socket ID. By default, socket IDs are automatically assigned, but
10544 sometimes it is more convenient to fix them to ease monitoring. This value
10545 must be strictly positive and unique within the listener/frontend. This
10546 option can only be used when defining only a single socket.
10547
10548interface <interface>
Lukas Tribusfce2e962013-02-12 22:13:19 +010010549 Restricts the socket to a specific interface. When specified, only packets
10550 received from that particular interface are processed by the socket. This is
10551 currently only supported on Linux. The interface must be a primary system
10552 interface, not an aliased interface. It is also possible to bind multiple
10553 frontends to the same address if they are bound to different interfaces. Note
10554 that binding to a network interface requires root privileges. This parameter
10555 is only compatible with TCPv4/TCPv6 sockets.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010556
Willy Tarreauabb175f2012-09-24 12:43:26 +020010557level <level>
10558 This setting is used with the stats sockets only to restrict the nature of
10559 the commands that can be issued on the socket. It is ignored by other
10560 sockets. <level> can be one of :
10561 - "user" is the least privileged level ; only non-sensitive stats can be
10562 read, and no change is allowed. It would make sense on systems where it
10563 is not easy to restrict access to the socket.
10564 - "operator" is the default level and fits most common uses. All data can
10565 be read, and only non-sensitive changes are permitted (eg: clear max
10566 counters).
10567 - "admin" should be used with care, as everything is permitted (eg: clear
10568 all counters).
10569
Andjelko Iharosc4df59e2017-07-20 11:59:48 +020010570severity-output <format>
10571 This setting is used with the stats sockets only to configure severity
10572 level output prepended to informational feedback messages. Severity
10573 level of messages can range between 0 and 7, conforming to syslog
10574 rfc5424. Valid and successful socket commands requesting data
10575 (i.e. "show map", "get acl foo" etc.) will never have a severity level
10576 prepended. It is ignored by other sockets. <format> can be one of :
10577 - "none" (default) no severity level is prepended to feedback messages.
10578 - "number" severity level is prepended as a number.
10579 - "string" severity level is prepended as a string following the
10580 rfc5424 convention.
10581
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010582maxconn <maxconn>
10583 Limits the sockets to this number of concurrent connections. Extraneous
10584 connections will remain in the system's backlog until a connection is
10585 released. If unspecified, the limit will be the same as the frontend's
10586 maxconn. Note that in case of port ranges or multiple addresses, the same
10587 value will be applied to each socket. This setting enables different
10588 limitations on expensive sockets, for instance SSL entries which may easily
10589 eat all memory.
10590
10591mode <mode>
10592 Sets the octal mode used to define access permissions on the UNIX socket. It
10593 can also be set by default in the global section's "unix-bind" statement.
10594 Note that some platforms simply ignore this. This setting is ignored by non
10595 UNIX sockets.
10596
10597mss <maxseg>
10598 Sets the TCP Maximum Segment Size (MSS) value to be advertised on incoming
10599 connections. This can be used to force a lower MSS for certain specific
10600 ports, for instance for connections passing through a VPN. Note that this
10601 relies on a kernel feature which is theoretically supported under Linux but
10602 was buggy in all versions prior to 2.6.28. It may or may not work on other
10603 operating systems. It may also not change the advertised value but change the
10604 effective size of outgoing segments. The commonly advertised value for TCPv4
10605 over Ethernet networks is 1460 = 1500(MTU) - 40(IP+TCP). If this value is
10606 positive, it will be used as the advertised MSS. If it is negative, it will
10607 indicate by how much to reduce the incoming connection's advertised MSS for
10608 outgoing segments. This parameter is only compatible with TCP v4/v6 sockets.
10609
10610name <name>
10611 Sets an optional name for these sockets, which will be reported on the stats
10612 page.
10613
Willy Tarreaud72f0f32015-10-13 14:50:22 +020010614namespace <name>
10615 On Linux, it is possible to specify which network namespace a socket will
10616 belong to. This directive makes it possible to explicitly bind a listener to
10617 a namespace different from the default one. Please refer to your operating
10618 system's documentation to find more details about network namespaces.
10619
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010620nice <nice>
10621 Sets the 'niceness' of connections initiated from the socket. Value must be
10622 in the range -1024..1024 inclusive, and defaults to zero. Positive values
10623 means that such connections are more friendly to others and easily offer
10624 their place in the scheduler. On the opposite, negative values mean that
10625 connections want to run with a higher priority than others. The difference
10626 only happens under high loads when the system is close to saturation.
10627 Negative values are appropriate for low-latency or administration services,
10628 and high values are generally recommended for CPU intensive tasks such as SSL
10629 processing or bulk transfers which are less sensible to latency. For example,
10630 it may make sense to use a positive value for an SMTP socket and a negative
10631 one for an RDP socket.
10632
Emmanuel Hocdet174dfe52017-07-28 15:01:05 +020010633no-ca-names
10634 This setting is only available when support for OpenSSL was built in. It
10635 prevents from send CA names in server hello message when ca-file is used.
10636
Emeric Brun9b3009b2012-10-05 11:55:06 +020010637no-sslv3
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010638 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010639 disables support for SSLv3 on any sockets instantiated from the listener when
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010640 SSL is supported. Note that SSLv2 is forced disabled in the code and cannot
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010641 be enabled using any configuration option. This option is also available on
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010642 global statement "ssl-default-bind-options". Use "ssl-min-ver" and
10643 "ssl-max-ver" instead.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010644
Emeric Brun90ad8722012-10-02 14:00:59 +020010645no-tls-tickets
10646 This setting is only available when support for OpenSSL was built in. It
10647 disables the stateless session resumption (RFC 5077 TLS Ticket
10648 extension) and force to use stateful session resumption. Stateless
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010649 session resumption is more expensive in CPU usage. This option is also
10650 available on global statement "ssl-default-bind-options".
Emeric Brun90ad8722012-10-02 14:00:59 +020010651
Emeric Brun9b3009b2012-10-05 11:55:06 +020010652no-tlsv10
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010653 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010654 disables support for TLSv1.0 on any sockets instantiated from the listener
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010655 when SSL is supported. Note that SSLv2 is forced disabled in the code and
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010656 cannot be enabled using any configuration option. This option is also
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010657 available on global statement "ssl-default-bind-options". Use "ssl-min-ver"
10658 and "ssl-max-ver" instead.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010659
Emeric Brun9b3009b2012-10-05 11:55:06 +020010660no-tlsv11
Emeric Brunf5da4932012-09-28 19:42:54 +020010661 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010662 disables support for TLSv1.1 on any sockets instantiated from the listener
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010663 when SSL is supported. Note that SSLv2 is forced disabled in the code and
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010664 cannot be enabled using any configuration option. This option is also
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010665 available on global statement "ssl-default-bind-options". Use "ssl-min-ver"
10666 and "ssl-max-ver" instead.
Emeric Brunf5da4932012-09-28 19:42:54 +020010667
Emeric Brun9b3009b2012-10-05 11:55:06 +020010668no-tlsv12
Emeric Brunf5da4932012-09-28 19:42:54 +020010669 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010670 disables support for TLSv1.2 on any sockets instantiated from the listener
Emeric Brun2cb7ae52012-10-05 14:14:21 +020010671 when SSL is supported. Note that SSLv2 is forced disabled in the code and
Emeric Brun2c86cbf2014-10-30 15:56:50 +010010672 cannot be enabled using any configuration option. This option is also
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010673 available on global statement "ssl-default-bind-options". Use "ssl-min-ver"
10674 and "ssl-max-ver" instead.
Emeric Brunf5da4932012-09-28 19:42:54 +020010675
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020010676no-tlsv13
10677 This setting is only available when support for OpenSSL was built in. It
10678 disables support for TLSv1.3 on any sockets instantiated from the listener
10679 when SSL is supported. Note that SSLv2 is forced disabled in the code and
10680 cannot be enabled using any configuration option. This option is also
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010681 available on global statement "ssl-default-bind-options". Use "ssl-min-ver"
10682 and "ssl-max-ver" instead.
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020010683
Willy Tarreau6c9a3d52012-10-18 18:57:14 +020010684npn <protocols>
10685 This enables the NPN TLS extension and advertises the specified protocol list
10686 as supported on top of NPN. The protocol list consists in a comma-delimited
10687 list of protocol names, for instance: "http/1.1,http/1.0" (without quotes).
10688 This requires that the SSL library is build with support for TLS extensions
Willy Tarreauab861d32013-04-02 02:30:41 +020010689 enabled (check with haproxy -vv). Note that the NPN extension has been
10690 replaced with the ALPN extension (see the "alpn" keyword).
Willy Tarreau6c9a3d52012-10-18 18:57:14 +020010691
Lukas Tribus53ae85c2017-05-04 15:45:40 +000010692prefer-client-ciphers
10693 Use the client's preference when selecting the cipher suite, by default
10694 the server's preference is enforced. This option is also available on
10695 global statement "ssl-default-bind-options".
10696
Willy Tarreau6ae1ba62014-05-07 19:01:58 +020010697process [ all | odd | even | <number 1-64>[-<number 1-64>] ]
10698 This restricts the list of processes on which this listener is allowed to
10699 run. It does not enforce any process but eliminates those which do not match.
10700 If the frontend uses a "bind-process" setting, the intersection between the
10701 two is applied. If in the end the listener is not allowed to run on any
10702 remaining process, a warning is emitted, and the listener will either run on
10703 the first process of the listener if a single process was specified, or on
10704 all of its processes if multiple processes were specified. For the unlikely
Willy Tarreauae302532014-05-07 19:22:24 +020010705 case where several ranges are needed, this directive may be repeated. The
10706 main purpose of this directive is to be used with the stats sockets and have
10707 one different socket per process. The second purpose is to have multiple bind
10708 lines sharing the same IP:port but not the same process in a listener, so
10709 that the system can distribute the incoming connections into multiple queues
10710 and allow a smoother inter-process load balancing. Currently Linux 3.9 and
10711 above is known for supporting this. See also "bind-process" and "nbproc".
Willy Tarreau6ae1ba62014-05-07 19:01:58 +020010712
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010713ssl
10714 This setting is only available when support for OpenSSL was built in. It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010715 enables SSL deciphering on connections instantiated from this listener. A
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010716 certificate is necessary (see "crt" above). All contents in the buffers will
10717 appear in clear text, so that ACLs and HTTP processing will only have access
Emmanuel Hocdetbd695fe2017-05-15 15:53:41 +020010718 to deciphered contents. SSLv3 is disabled per default, use "ssl-min-ver SSLv3"
10719 to enable it.
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010720
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020010721ssl-max-ver [ SSLv3 | TLSv1.0 | TLSv1.1 | TLSv1.2 | TLSv1.3 ]
10722 This option enforces use of <version> or lower on SSL connections instantiated
10723 from this listener. This option is also available on global statement
10724 "ssl-default-bind-options". See also "ssl-min-ver".
10725
10726ssl-min-ver [ SSLv3 | TLSv1.0 | TLSv1.1 | TLSv1.2 | TLSv1.3 ]
10727 This option enforces use of <version> or upper on SSL connections instantiated
10728 from this listener. This option is also available on global statement
10729 "ssl-default-bind-options". See also "ssl-max-ver".
10730
Emmanuel Hocdet65623372013-01-24 17:17:15 +010010731strict-sni
10732 This setting is only available when support for OpenSSL was built in. The
10733 SSL/TLS negotiation is allow only if the client provided an SNI which match
10734 a certificate. The default certificate is not used.
10735 See the "crt" option for more information.
10736
Willy Tarreau2af207a2015-02-04 00:45:58 +010010737tcp-ut <delay>
Tim Düsterhus4896c442016-11-29 02:15:19 +010010738 Sets the TCP User Timeout for all incoming connections instantiated from this
Willy Tarreau2af207a2015-02-04 00:45:58 +010010739 listening socket. This option is available on Linux since version 2.6.37. It
10740 allows haproxy to configure a timeout for sockets which contain data not
Tim Düsterhus4896c442016-11-29 02:15:19 +010010741 receiving an acknowledgement for the configured delay. This is especially
Willy Tarreau2af207a2015-02-04 00:45:58 +010010742 useful on long-lived connections experiencing long idle periods such as
10743 remote terminals or database connection pools, where the client and server
10744 timeouts must remain high to allow a long period of idle, but where it is
10745 important to detect that the client has disappeared in order to release all
10746 resources associated with its connection (and the server's session). The
10747 argument is a delay expressed in milliseconds by default. This only works
10748 for regular TCP connections, and is ignored for other protocols.
10749
Willy Tarreau1c862c52012-10-05 16:21:00 +020010750tfo
Lukas Tribus0defb902013-02-13 23:35:39 +010010751 Is an optional keyword which is supported only on Linux kernels >= 3.7. It
Willy Tarreau1c862c52012-10-05 16:21:00 +020010752 enables TCP Fast Open on the listening socket, which means that clients which
10753 support this feature will be able to send a request and receive a response
10754 during the 3-way handshake starting from second connection, thus saving one
10755 round-trip after the first connection. This only makes sense with protocols
10756 that use high connection rates and where each round trip matters. This can
10757 possibly cause issues with many firewalls which do not accept data on SYN
10758 packets, so this option should only be enabled once well tested. This option
Lukas Tribus0999f762013-04-02 16:43:24 +020010759 is only supported on TCPv4/TCPv6 sockets and ignored by other ones. You may
10760 need to build HAProxy with USE_TFO=1 if your libc doesn't define
10761 TCP_FASTOPEN.
Willy Tarreau1c862c52012-10-05 16:21:00 +020010762
Nenad Merdanovic188ad3e2015-02-27 19:56:50 +010010763tls-ticket-keys <keyfile>
10764 Sets the TLS ticket keys file to load the keys from. The keys need to be 48
10765 bytes long, encoded with base64 (ex. openssl rand -base64 48). Number of keys
10766 is specified by the TLS_TICKETS_NO build option (default 3) and at least as
10767 many keys need to be present in the file. Last TLS_TICKETS_NO keys will be
10768 used for decryption and the penultimate one for encryption. This enables easy
10769 key rotation by just appending new key to the file and reloading the process.
10770 Keys must be periodically rotated (ex. every 12h) or Perfect Forward Secrecy
10771 is compromised. It is also a good idea to keep the keys off any permanent
10772 storage such as hard drives (hint: use tmpfs and don't swap those files).
10773 Lifetime hint can be changed using tune.ssl.timeout.
10774
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010775transparent
10776 Is an optional keyword which is supported only on certain Linux kernels. It
10777 indicates that the addresses will be bound even if they do not belong to the
10778 local machine, and that packets targeting any of these addresses will be
10779 intercepted just as if the addresses were locally configured. This normally
10780 requires that IP forwarding is enabled. Caution! do not use this with the
10781 default address '*', as it would redirect any traffic for the specified port.
10782 This keyword is available only when HAProxy is built with USE_LINUX_TPROXY=1.
10783 This parameter is only compatible with TCPv4 and TCPv6 sockets, depending on
10784 kernel version. Some distribution kernels include backports of the feature,
10785 so check for support with your vendor.
10786
Willy Tarreau77e3af92012-11-24 15:07:23 +010010787v4v6
10788 Is an optional keyword which is supported only on most recent systems
10789 including Linux kernels >= 2.4.21. It is used to bind a socket to both IPv4
10790 and IPv6 when it uses the default address. Doing so is sometimes necessary
10791 on systems which bind to IPv6 only by default. It has no effect on non-IPv6
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010792 sockets, and is overridden by the "v6only" option.
Willy Tarreau77e3af92012-11-24 15:07:23 +010010793
Willy Tarreau9b6700f2012-11-24 11:55:28 +010010794v6only
10795 Is an optional keyword which is supported only on most recent systems
10796 including Linux kernels >= 2.4.21. It is used to bind a socket to IPv6 only
10797 when it uses the default address. Doing so is sometimes preferred to doing it
Willy Tarreau77e3af92012-11-24 15:07:23 +010010798 system-wide as it is per-listener. It has no effect on non-IPv6 sockets and
10799 has precedence over the "v4v6" option.
Willy Tarreau9b6700f2012-11-24 11:55:28 +010010800
Willy Tarreaub6205fd2012-09-24 12:27:33 +020010801uid <uid>
10802 Sets the owner of the UNIX sockets to the designated system uid. It can also
10803 be set by default in the global section's "unix-bind" statement. Note that
10804 some platforms simply ignore this. This setting is equivalent to the "user"
10805 setting except that the user numeric ID is used instead of its name. This
10806 setting is ignored by non UNIX sockets.
10807
10808user <user>
10809 Sets the owner of the UNIX sockets to the designated system user. It can also
10810 be set by default in the global section's "unix-bind" statement. Note that
10811 some platforms simply ignore this. This setting is equivalent to the "uid"
10812 setting except that the user name is used instead of its uid. This setting is
10813 ignored by non UNIX sockets.
10814
Emeric Brun1a073b42012-09-28 17:07:34 +020010815verify [none|optional|required]
10816 This setting is only available when support for OpenSSL was built in. If set
10817 to 'none', client certificate is not requested. This is the default. In other
10818 cases, a client certificate is requested. If the client does not provide a
10819 certificate after the request and if 'verify' is set to 'required', then the
10820 handshake is aborted, while it would have succeeded if set to 'optional'. The
Emeric Brunfd33a262012-10-11 16:28:27 +020010821 certificate provided by the client is always verified using CAs from
10822 'ca-file' and optional CRLs from 'crl-file'. On verify failure the handshake
10823 is aborted, regardless of the 'verify' option, unless the error code exactly
10824 matches one of those listed with 'ca-ignore-err' or 'crt-ignore-err'.
Willy Tarreau4a5cade2012-04-05 21:09:48 +020010825
Willy Tarreaub6205fd2012-09-24 12:27:33 +0200108265.2. Server and default-server options
Cyril Bontéf0c60612010-02-06 14:44:47 +010010827------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +020010828
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +010010829The "server" and "default-server" keywords support a certain number of settings
10830which are all passed as arguments on the server line. The order in which those
10831arguments appear does not count, and they are all optional. Some of those
10832settings are single words (booleans) while others expect one or several values
10833after them. In this case, the values must immediately follow the setting name.
10834Except default-server, all those settings must be specified after the server's
10835address if they are used:
Willy Tarreau6a06a402007-07-15 20:15:28 +020010836
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010837 server <name> <address>[:port] [settings ...]
Krzysztof Piotr Oledzkic6df0662010-01-05 16:38:49 +010010838 default-server [settings ...]
Willy Tarreau6a06a402007-07-15 20:15:28 +020010839
Frédéric Lécailled2376272017-03-21 18:52:12 +010010840Note that all these settings are supported both by "server" and "default-server"
10841keywords, except "id" which is only supported by "server".
10842
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010843The currently supported settings are the following ones.
Willy Tarreau0ba27502007-12-24 16:55:16 +010010844
Willy Tarreauceb4ac92012-04-28 00:41:46 +020010845addr <ipv4|ipv6>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010846 Using the "addr" parameter, it becomes possible to use a different IP address
Baptiste Assmann13f83532016-03-06 23:14:36 +010010847 to send health-checks or to probe the agent-check. On some servers, it may be
10848 desirable to dedicate an IP address to specific component able to perform
10849 complex tests which are more suitable to health-checks than the application.
10850 This parameter is ignored if the "check" parameter is not set. See also the
10851 "port" parameter.
Willy Tarreau6a06a402007-07-15 20:15:28 +020010852
Simon Hormand60d6912013-11-25 10:46:36 +090010853agent-check
10854 Enable an auxiliary agent check which is run independently of a regular
Willy Tarreau81f5d942013-12-09 20:51:51 +010010855 health check. An agent health check is performed by making a TCP connection
10856 to the port set by the "agent-port" parameter and reading an ASCII string.
10857 The string is made of a series of words delimited by spaces, tabs or commas
10858 in any order, optionally terminated by '\r' and/or '\n', each consisting of :
Simon Hormand60d6912013-11-25 10:46:36 +090010859
Willy Tarreau81f5d942013-12-09 20:51:51 +010010860 - An ASCII representation of a positive integer percentage, e.g. "75%".
Simon Hormand60d6912013-11-25 10:46:36 +090010861 Values in this format will set the weight proportional to the initial
Willy Tarreauc5af3a62014-10-07 15:27:33 +020010862 weight of a server as configured when haproxy starts. Note that a zero
10863 weight is reported on the stats page as "DRAIN" since it has the same
10864 effect on the server (it's removed from the LB farm).
Simon Hormand60d6912013-11-25 10:46:36 +090010865
Nenad Merdanovic174dd372016-04-24 23:10:06 +020010866 - The string "maxconn:" followed by an integer (no space between). Values in
10867 this format will set the maxconn of a server. The maximum number of
10868 connections advertised needs to be multipled by the number of load balancers
10869 and different backends that use this health check to get the total number
10870 of connections the server might receive. Example: maxconn:30
10871
Willy Tarreau81f5d942013-12-09 20:51:51 +010010872 - The word "ready". This will turn the server's administrative state to the
10873 READY mode, thus cancelling any DRAIN or MAINT state
Simon Hormand60d6912013-11-25 10:46:36 +090010874
Willy Tarreau81f5d942013-12-09 20:51:51 +010010875 - The word "drain". This will turn the server's administrative state to the
10876 DRAIN mode, thus it will not accept any new connections other than those
10877 that are accepted via persistence.
Simon Hormand60d6912013-11-25 10:46:36 +090010878
Willy Tarreau81f5d942013-12-09 20:51:51 +010010879 - The word "maint". This will turn the server's administrative state to the
10880 MAINT mode, thus it will not accept any new connections at all, and health
10881 checks will be stopped.
Simon Hormand60d6912013-11-25 10:46:36 +090010882
Willy Tarreau81f5d942013-12-09 20:51:51 +010010883 - The words "down", "failed", or "stopped", optionally followed by a
10884 description string after a sharp ('#'). All of these mark the server's
10885 operating state as DOWN, but since the word itself is reported on the stats
10886 page, the difference allows an administrator to know if the situation was
10887 expected or not : the service may intentionally be stopped, may appear up
10888 but fail some validity tests, or may be seen as down (eg: missing process,
10889 or port not responding).
Simon Hormand60d6912013-11-25 10:46:36 +090010890
Willy Tarreau81f5d942013-12-09 20:51:51 +010010891 - The word "up" sets back the server's operating state as UP if health checks
10892 also report that the service is accessible.
Simon Hormand60d6912013-11-25 10:46:36 +090010893
Willy Tarreau81f5d942013-12-09 20:51:51 +010010894 Parameters which are not advertised by the agent are not changed. For
10895 example, an agent might be designed to monitor CPU usage and only report a
10896 relative weight and never interact with the operating status. Similarly, an
10897 agent could be designed as an end-user interface with 3 radio buttons
10898 allowing an administrator to change only the administrative state. However,
10899 it is important to consider that only the agent may revert its own actions,
10900 so if a server is set to DRAIN mode or to DOWN state using the agent, the
10901 agent must implement the other equivalent actions to bring the service into
10902 operations again.
Simon Hormand60d6912013-11-25 10:46:36 +090010903
Simon Horman2f1f9552013-11-25 10:46:37 +090010904 Failure to connect to the agent is not considered an error as connectivity
10905 is tested by the regular health check which is enabled by the "check"
Willy Tarreau81f5d942013-12-09 20:51:51 +010010906 parameter. Warning though, it is not a good idea to stop an agent after it
10907 reports "down", since only an agent reporting "up" will be able to turn the
10908 server up again. Note that the CLI on the Unix stats socket is also able to
Willy Tarreau989222a2016-01-15 10:26:26 +010010909 force an agent's result in order to work around a bogus agent if needed.
Simon Horman2f1f9552013-11-25 10:46:37 +090010910
Willy Tarreau81f5d942013-12-09 20:51:51 +010010911 Requires the "agent-port" parameter to be set. See also the "agent-inter"
Frédéric Lécailled2376272017-03-21 18:52:12 +010010912 and "no-agent-check" parameters.
Simon Hormand60d6912013-11-25 10:46:36 +090010913
James Brown55f9ff12015-10-21 18:19:05 -070010914agent-send <string>
10915 If this option is specified, haproxy will send the given string (verbatim)
10916 to the agent server upon connection. You could, for example, encode
10917 the backend name into this string, which would enable your agent to send
10918 different responses based on the backend. Make sure to include a '\n' if
10919 you want to terminate your request with a newline.
10920
Simon Hormand60d6912013-11-25 10:46:36 +090010921agent-inter <delay>
10922 The "agent-inter" parameter sets the interval between two agent checks
10923 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
10924
10925 Just as with every other time-based parameter, it may be entered in any
10926 other explicit unit among { us, ms, s, m, h, d }. The "agent-inter"
10927 parameter also serves as a timeout for agent checks "timeout check" is
10928 not set. In order to reduce "resonance" effects when multiple servers are
10929 hosted on the same hardware, the agent and health checks of all servers
10930 are started with a small time offset between them. It is also possible to
10931 add some random noise in the agent and health checks interval using the
10932 global "spread-checks" keyword. This makes sense for instance when a lot
10933 of backends use the same servers.
10934
10935 See also the "agent-check" and "agent-port" parameters.
10936
Misiek768d8602017-01-09 09:52:43 +010010937agent-addr <addr>
10938 The "agent-addr" parameter sets address for agent check.
10939
10940 You can offload agent-check to another target, so you can make single place
10941 managing status and weights of servers defined in haproxy in case you can't
10942 make self-aware and self-managing services. You can specify both IP or
10943 hostname, it will be resolved.
10944
Simon Hormand60d6912013-11-25 10:46:36 +090010945agent-port <port>
10946 The "agent-port" parameter sets the TCP port used for agent checks.
10947
10948 See also the "agent-check" and "agent-inter" parameters.
10949
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010950backup
10951 When "backup" is present on a server line, the server is only used in load
10952 balancing when all other non-backup servers are unavailable. Requests coming
10953 with a persistence cookie referencing the server will always be served
10954 though. By default, only the first operational backup server is used, unless
Frédéric Lécailled2376272017-03-21 18:52:12 +010010955 the "allbackups" option is set in the backend. See also the "no-backup" and
10956 "allbackups" options.
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010957
Emeric Brunef42d922012-10-11 16:11:36 +020010958ca-file <cafile>
10959 This setting is only available when support for OpenSSL was built in. It
10960 designates a PEM file from which to load CA certificates used to verify
10961 server's certificate.
10962
Willy Tarreauc57f0e22009-05-10 13:12:33 +020010963check
10964 This option enables health checks on the server. By default, a server is
Patrick Mézardb7aeec62012-01-22 16:01:22 +010010965 always considered available. If "check" is set, the server is available when
10966 accepting periodic TCP connections, to ensure that it is really able to serve
10967 requests. The default address and port to send the tests to are those of the
10968 server, and the default source is the same as the one defined in the
10969 backend. It is possible to change the address using the "addr" parameter, the
10970 port using the "port" parameter, the source address using the "source"
10971 address, and the interval and timers using the "inter", "rise" and "fall"
Simon Hormanafc47ee2013-11-25 10:46:35 +090010972 parameters. The request method is define in the backend using the "httpchk",
10973 "smtpchk", "mysql-check", "pgsql-check" and "ssl-hello-chk" options. Please
Frédéric Lécailled2376272017-03-21 18:52:12 +010010974 refer to those options and parameters for more information. See also
10975 "no-check" option.
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010010976
Willy Tarreau6c16adc2012-10-05 00:04:16 +020010977check-send-proxy
10978 This option forces emission of a PROXY protocol line with outgoing health
10979 checks, regardless of whether the server uses send-proxy or not for the
10980 normal traffic. By default, the PROXY protocol is enabled for health checks
10981 if it is already enabled for normal traffic and if no "port" nor "addr"
10982 directive is present. However, if such a directive is present, the
10983 "check-send-proxy" option needs to be used to force the use of the
10984 protocol. See also the "send-proxy" option for more information.
10985
Olivier Houchard9130a962017-10-17 17:33:43 +020010986check-sni
10987 This option allows you to specify the SNI to be used when doing health checks
10988 over SSL.
10989
Willy Tarreau763a95b2012-10-04 23:15:39 +020010990check-ssl
10991 This option forces encryption of all health checks over SSL, regardless of
10992 whether the server uses SSL or not for the normal traffic. This is generally
10993 used when an explicit "port" or "addr" directive is specified and SSL health
10994 checks are not inherited. It is important to understand that this option
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030010995 inserts an SSL transport layer below the checks, so that a simple TCP connect
Willy Tarreau763a95b2012-10-04 23:15:39 +020010996 check becomes an SSL connect, which replaces the old ssl-hello-chk. The most
10997 common use is to send HTTPS checks by combining "httpchk" with SSL checks.
10998 All SSL settings are common to health checks and traffic (eg: ciphers).
Frédéric Lécailled2376272017-03-21 18:52:12 +010010999 See the "ssl" option for more information and "no-check-ssl" to disable
11000 this option.
Willy Tarreau763a95b2012-10-04 23:15:39 +020011001
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011002ciphers <ciphers>
11003 This option sets the string describing the list of cipher algorithms that is
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030011004 is negotiated during the SSL/TLS handshake with the server. The format of the
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011005 string is defined in "man 1 ciphers". When SSL is used to communicate with
11006 servers on the local network, it is common to see a weaker set of algorithms
11007 than what is used over the internet. Doing so reduces CPU usage on both the
11008 server and haproxy while still keeping it compatible with deployed software.
11009 Some algorithms such as RC4-SHA1 are reasonably cheap. If no security at all
11010 is needed and just connectivity, using DES can be appropriate.
11011
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011012cookie <value>
11013 The "cookie" parameter sets the cookie value assigned to the server to
11014 <value>. This value will be checked in incoming requests, and the first
11015 operational server possessing the same value will be selected. In return, in
11016 cookie insertion or rewrite modes, this value will be assigned to the cookie
11017 sent to the client. There is nothing wrong in having several servers sharing
11018 the same cookie value, and it is in fact somewhat common between normal and
11019 backup servers. See also the "cookie" keyword in backend section.
11020
Emeric Brunef42d922012-10-11 16:11:36 +020011021crl-file <crlfile>
11022 This setting is only available when support for OpenSSL was built in. It
11023 designates a PEM file from which to load certificate revocation list used
11024 to verify server's certificate.
11025
Emeric Bruna7aa3092012-10-26 12:58:00 +020011026crt <cert>
11027 This setting is only available when support for OpenSSL was built in.
11028 It designates a PEM file from which to load both a certificate and the
11029 associated private key. This file can be built by concatenating both PEM
11030 files into one. This certificate will be sent if the server send a client
11031 certificate request.
11032
Willy Tarreau96839092010-03-29 10:02:24 +020011033disabled
11034 The "disabled" keyword starts the server in the "disabled" state. That means
11035 that it is marked down in maintenance mode, and no connection other than the
11036 ones allowed by persist mode will reach it. It is very well suited to setup
11037 new servers, because normal traffic will never reach them, while it is still
11038 possible to test the service by making use of the force-persist mechanism.
Frédéric Lécailled2376272017-03-21 18:52:12 +010011039 See also "enabled" setting.
Willy Tarreau96839092010-03-29 10:02:24 +020011040
Frédéric Lécailled2376272017-03-21 18:52:12 +010011041enabled
11042 This option may be used as 'server' setting to reset any 'disabled'
11043 setting which would have been inherited from 'default-server' directive as
11044 default value.
11045 It may also be used as 'default-server' setting to reset any previous
11046 'default-server' 'disabled' setting.
Willy Tarreau96839092010-03-29 10:02:24 +020011047
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011048error-limit <count>
Willy Tarreau983e01e2010-01-11 18:42:06 +010011049 If health observing is enabled, the "error-limit" parameter specifies the
11050 number of consecutive errors that triggers event selected by the "on-error"
11051 option. By default it is set to 10 consecutive errors.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010011052
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011053 See also the "check", "error-limit" and "on-error".
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010011054
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011055fall <count>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011056 The "fall" parameter states that a server will be considered as dead after
11057 <count> consecutive unsuccessful health checks. This value defaults to 3 if
11058 unspecified. See also the "check", "inter" and "rise" parameters.
11059
Emeric Brun8694b9a2012-10-05 14:39:07 +020011060force-sslv3
11061 This option enforces use of SSLv3 only when SSL is used to communicate with
11062 the server. SSLv3 is generally less expensive than the TLS counterparts for
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011063 high connection rates. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011064 "ssl-default-server-options". See also "ssl-min-ver" and ssl-max-ver".
Emeric Brun8694b9a2012-10-05 14:39:07 +020011065
11066force-tlsv10
11067 This option enforces use of TLSv1.0 only when SSL is used to communicate with
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011068 the server. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011069 "ssl-default-server-options". See also "ssl-min-ver" and ssl-max-ver".
Emeric Brun8694b9a2012-10-05 14:39:07 +020011070
11071force-tlsv11
11072 This option enforces use of TLSv1.1 only when SSL is used to communicate with
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011073 the server. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011074 "ssl-default-server-options". See also "ssl-min-ver" and ssl-max-ver".
Emeric Brun8694b9a2012-10-05 14:39:07 +020011075
11076force-tlsv12
11077 This option enforces use of TLSv1.2 only when SSL is used to communicate with
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011078 the server. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011079 "ssl-default-server-options". See also "ssl-min-ver" and ssl-max-ver".
Emeric Brun8694b9a2012-10-05 14:39:07 +020011080
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020011081force-tlsv13
11082 This option enforces use of TLSv1.3 only when SSL is used to communicate with
11083 the server. This option is also available on global statement
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011084 "ssl-default-server-options". See also "ssl-min-ver" and ssl-max-ver".
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020011085
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011086id <value>
Willy Tarreau53fb4ae2009-10-04 23:04:08 +020011087 Set a persistent ID for the server. This ID must be positive and unique for
11088 the proxy. An unused ID will automatically be assigned if unset. The first
11089 assigned value will be 1. This ID is currently only returned in statistics.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011090
Willy Tarreau6a031d12016-11-07 19:42:35 +010011091init-addr {last | libc | none | <ip>},[...]*
11092 Indicate in what order the server's address should be resolved upon startup
11093 if it uses an FQDN. Attempts are made to resolve the address by applying in
11094 turn each of the methods mentionned in the comma-delimited list. The first
11095 method which succeeds is used. If the end of the list is reached without
11096 finding a working method, an error is thrown. Method "last" suggests to pick
11097 the address which appears in the state file (see "server-state-file"). Method
11098 "libc" uses the libc's internal resolver (gethostbyname() or getaddrinfo()
11099 depending on the operating system and build options). Method "none"
11100 specifically indicates that the server should start without any valid IP
11101 address in a down state. It can be useful to ignore some DNS issues upon
11102 startup, waiting for the situation to get fixed later. Finally, an IP address
11103 (IPv4 or IPv6) may be provided. It can be the currently known address of the
11104 server (eg: filled by a configuration generator), or the address of a dummy
11105 server used to catch old sessions and present them with a decent error
11106 message for example. When the "first" load balancing algorithm is used, this
11107 IP address could point to a fake server used to trigger the creation of new
11108 instances on the fly. This option defaults to "last,libc" indicating that the
11109 previous address found in the state file (if any) is used first, otherwise
11110 the libc's resolver is used. This ensures continued compatibility with the
11111 historic behaviour.
11112
11113 Example:
11114 defaults
11115 # never fail on address resolution
11116 default-server init-addr last,libc,none
11117
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011118inter <delay>
11119fastinter <delay>
11120downinter <delay>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011121 The "inter" parameter sets the interval between two consecutive health checks
11122 to <delay> milliseconds. If left unspecified, the delay defaults to 2000 ms.
11123 It is also possible to use "fastinter" and "downinter" to optimize delays
11124 between checks depending on the server state :
11125
Pieter Baauw44fc9df2015-09-17 21:30:46 +020011126 Server state | Interval used
11127 ----------------------------------------+----------------------------------
11128 UP 100% (non-transitional) | "inter"
11129 ----------------------------------------+----------------------------------
11130 Transitionally UP (going down "fall"), | "fastinter" if set,
11131 Transitionally DOWN (going up "rise"), | "inter" otherwise.
11132 or yet unchecked. |
11133 ----------------------------------------+----------------------------------
11134 DOWN 100% (non-transitional) | "downinter" if set,
11135 | "inter" otherwise.
11136 ----------------------------------------+----------------------------------
Willy Tarreaud72758d2010-01-12 10:42:19 +010011137
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011138 Just as with every other time-based parameter, they can be entered in any
11139 other explicit unit among { us, ms, s, m, h, d }. The "inter" parameter also
11140 serves as a timeout for health checks sent to servers if "timeout check" is
11141 not set. In order to reduce "resonance" effects when multiple servers are
Simon Hormand60d6912013-11-25 10:46:36 +090011142 hosted on the same hardware, the agent and health checks of all servers
11143 are started with a small time offset between them. It is also possible to
11144 add some random noise in the agent and health checks interval using the
11145 global "spread-checks" keyword. This makes sense for instance when a lot
11146 of backends use the same servers.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011147
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011148maxconn <maxconn>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011149 The "maxconn" parameter specifies the maximal number of concurrent
11150 connections that will be sent to this server. If the number of incoming
11151 concurrent requests goes higher than this value, they will be queued, waiting
11152 for a connection to be released. This parameter is very important as it can
11153 save fragile servers from going down under extreme loads. If a "minconn"
11154 parameter is specified, the limit becomes dynamic. The default value is "0"
11155 which means unlimited. See also the "minconn" and "maxqueue" parameters, and
11156 the backend's "fullconn" keyword.
11157
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011158maxqueue <maxqueue>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011159 The "maxqueue" parameter specifies the maximal number of connections which
11160 will wait in the queue for this server. If this limit is reached, next
11161 requests will be redispatched to other servers instead of indefinitely
11162 waiting to be served. This will break persistence but may allow people to
11163 quickly re-log in when the server they try to connect to is dying. The
11164 default value is "0" which means the queue is unlimited. See also the
11165 "maxconn" and "minconn" parameters.
11166
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011167minconn <minconn>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011168 When the "minconn" parameter is set, the maxconn limit becomes a dynamic
11169 limit following the backend's load. The server will always accept at least
11170 <minconn> connections, never more than <maxconn>, and the limit will be on
11171 the ramp between both values when the backend has less than <fullconn>
11172 concurrent connections. This makes it possible to limit the load on the
11173 server during normal loads, but push it further for important loads without
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010011174 overloading the server during exceptional loads. See also the "maxconn"
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011175 and "maxqueue" parameters, as well as the "fullconn" backend keyword.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010011176
Willy Tarreaud72f0f32015-10-13 14:50:22 +020011177namespace <name>
11178 On Linux, it is possible to specify which network namespace a socket will
11179 belong to. This directive makes it possible to explicitly bind a server to
11180 a namespace different from the default one. Please refer to your operating
11181 system's documentation to find more details about network namespaces.
11182
Frédéric Lécailled2376272017-03-21 18:52:12 +010011183no-agent-check
11184 This option may be used as "server" setting to reset any "agent-check"
11185 setting which would have been inherited from "default-server" directive as
11186 default value.
11187 It may also be used as "default-server" setting to reset any previous
11188 "default-server" "agent-check" setting.
11189
11190no-backup
11191 This option may be used as "server" setting to reset any "backup"
11192 setting which would have been inherited from "default-server" directive as
11193 default value.
11194 It may also be used as "default-server" setting to reset any previous
11195 "default-server" "backup" setting.
11196
11197no-check
11198 This option may be used as "server" setting to reset any "check"
11199 setting which would have been inherited from "default-server" directive as
11200 default value.
11201 It may also be used as "default-server" setting to reset any previous
11202 "default-server" "check" setting.
11203
11204no-check-ssl
11205 This option may be used as "server" setting to reset any "check-ssl"
11206 setting which would have been inherited from "default-server" directive as
11207 default value.
11208 It may also be used as "default-server" setting to reset any previous
11209 "default-server" "check-ssl" setting.
11210
Frédéric Lécailled2376272017-03-21 18:52:12 +010011211no-send-proxy
11212 This option may be used as "server" setting to reset any "send-proxy"
11213 setting which would have been inherited from "default-server" directive as
11214 default value.
11215 It may also be used as "default-server" setting to reset any previous
11216 "default-server" "send-proxy" setting.
11217
11218no-send-proxy-v2
11219 This option may be used as "server" setting to reset any "send-proxy-v2"
11220 setting which would have been inherited from "default-server" directive as
11221 default value.
11222 It may also be used as "default-server" setting to reset any previous
11223 "default-server" "send-proxy-v2" setting.
11224
11225no-send-proxy-v2-ssl
11226 This option may be used as "server" setting to reset any "send-proxy-v2-ssl"
11227 setting which would have been inherited from "default-server" directive as
11228 default value.
11229 It may also be used as "default-server" setting to reset any previous
11230 "default-server" "send-proxy-v2-ssl" setting.
11231
11232no-send-proxy-v2-ssl-cn
11233 This option may be used as "server" setting to reset any "send-proxy-v2-ssl-cn"
11234 setting which would have been inherited from "default-server" directive as
11235 default value.
11236 It may also be used as "default-server" setting to reset any previous
11237 "default-server" "send-proxy-v2-ssl-cn" setting.
11238
11239no-ssl
11240 This option may be used as "server" setting to reset any "ssl"
11241 setting which would have been inherited from "default-server" directive as
11242 default value.
11243 It may also be used as "default-server" setting to reset any previous
11244 "default-server" "ssl" setting.
11245
Willy Tarreau2a3fb1c2015-02-05 16:47:07 +010011246no-ssl-reuse
11247 This option disables SSL session reuse when SSL is used to communicate with
11248 the server. It will force the server to perform a full handshake for every
11249 new connection. It's probably only useful for benchmarking, troubleshooting,
11250 and for paranoid users.
11251
Emeric Brun9b3009b2012-10-05 11:55:06 +020011252no-sslv3
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011253 This option disables support for SSLv3 when SSL is used to communicate with
11254 the server. Note that SSLv2 is disabled in the code and cannot be enabled
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011255 using any configuration option. Use "ssl-min-ver" and "ssl-max-ver" instead.
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011256
Emmanuel Hocdet6cb2d1e2017-03-30 14:43:31 +020011257 Supported in default-server: No
11258
Emeric Brunf9c5c472012-10-11 15:28:34 +020011259no-tls-tickets
11260 This setting is only available when support for OpenSSL was built in. It
11261 disables the stateless session resumption (RFC 5077 TLS Ticket
11262 extension) and force to use stateful session resumption. Stateless
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011263 session resumption is more expensive in CPU usage for servers. This option
11264 is also available on global statement "ssl-default-server-options".
Frédéric Lécailled2376272017-03-21 18:52:12 +010011265 See also "tls-tickets".
Emeric Brunf9c5c472012-10-11 15:28:34 +020011266
Emeric Brun9b3009b2012-10-05 11:55:06 +020011267no-tlsv10
Emeric Brun8694b9a2012-10-05 14:39:07 +020011268 This option disables support for TLSv1.0 when SSL is used to communicate with
Emeric Brunf5da4932012-09-28 19:42:54 +020011269 the server. Note that SSLv2 is disabled in the code and cannot be enabled
11270 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011271 often makes sense to disable it when communicating with local servers. This
11272 option is also available on global statement "ssl-default-server-options".
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011273 Use "ssl-min-ver" and "ssl-max-ver" instead.
Willy Tarreau763a95b2012-10-04 23:15:39 +020011274
Emmanuel Hocdet6cb2d1e2017-03-30 14:43:31 +020011275 Supported in default-server: No
11276
Emeric Brun9b3009b2012-10-05 11:55:06 +020011277no-tlsv11
Emeric Brun8694b9a2012-10-05 14:39:07 +020011278 This option disables support for TLSv1.1 when SSL is used to communicate with
Emeric Brunf5da4932012-09-28 19:42:54 +020011279 the server. Note that SSLv2 is disabled in the code and cannot be enabled
11280 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011281 often makes sense to disable it when communicating with local servers. This
11282 option is also available on global statement "ssl-default-server-options".
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011283 Use "ssl-min-ver" and "ssl-max-ver" instead.
Willy Tarreau763a95b2012-10-04 23:15:39 +020011284
Emmanuel Hocdet6cb2d1e2017-03-30 14:43:31 +020011285 Supported in default-server: No
11286
Emeric Brun9b3009b2012-10-05 11:55:06 +020011287no-tlsv12
Emeric Brun8694b9a2012-10-05 14:39:07 +020011288 This option disables support for TLSv1.2 when SSL is used to communicate with
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011289 the server. Note that SSLv2 is disabled in the code and cannot be enabled
11290 using any configuration option. TLSv1 is more expensive than SSLv3 so it
Emeric Brun2c86cbf2014-10-30 15:56:50 +010011291 often makes sense to disable it when communicating with local servers. This
11292 option is also available on global statement "ssl-default-server-options".
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011293 Use "ssl-min-ver" and "ssl-max-ver" instead.
Emmanuel Hocdet42fb9802017-03-30 19:29:39 +020011294
11295 Supported in default-server: No
11296
11297no-tlsv13
11298 This option disables support for TLSv1.3 when SSL is used to communicate with
11299 the server. Note that SSLv2 is disabled in the code and cannot be enabled
11300 using any configuration option. TLSv1 is more expensive than SSLv3 so it
11301 often makes sense to disable it when communicating with local servers. This
11302 option is also available on global statement "ssl-default-server-options".
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011303 Use "ssl-min-ver" and "ssl-max-ver" instead.
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011304
Emmanuel Hocdet6cb2d1e2017-03-30 14:43:31 +020011305 Supported in default-server: No
11306
Frédéric Lécailled2376272017-03-21 18:52:12 +010011307no-verifyhost
11308 This option may be used as "server" setting to reset any "verifyhost"
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" "verifyhost" setting.
Willy Tarreau763a95b2012-10-04 23:15:39 +020011313
Simon Hormanfa461682011-06-25 09:39:49 +090011314non-stick
11315 Never add connections allocated to this sever to a stick-table.
11316 This may be used in conjunction with backup to ensure that
11317 stick-table persistence is disabled for backup servers.
11318
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010011319observe <mode>
11320 This option enables health adjusting based on observing communication with
11321 the server. By default this functionality is disabled and enabling it also
11322 requires to enable health checks. There are two supported modes: "layer4" and
11323 "layer7". In layer4 mode, only successful/unsuccessful tcp connections are
11324 significant. In layer7, which is only allowed for http proxies, responses
11325 received from server are verified, like valid/wrong http code, unparsable
Willy Tarreau150d1462012-03-10 08:19:02 +010011326 headers, a timeout, etc. Valid status codes include 100 to 499, 501 and 505.
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010011327
11328 See also the "check", "on-error" and "error-limit".
11329
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011330on-error <mode>
Krzysztof Piotr Oledzki97f07b82009-12-15 22:31:24 +010011331 Select what should happen when enough consecutive errors are detected.
11332 Currently, four modes are available:
11333 - fastinter: force fastinter
11334 - fail-check: simulate a failed check, also forces fastinter (default)
11335 - sudden-death: simulate a pre-fatal failed health check, one more failed
11336 check will mark a server down, forces fastinter
11337 - mark-down: mark the server immediately down and force fastinter
11338
11339 See also the "check", "observe" and "error-limit".
11340
Simon Hormane0d1bfb2011-06-21 14:34:58 +090011341on-marked-down <action>
11342 Modify what occurs when a server is marked down.
11343 Currently one action is available:
Justin Karnegeseb2c24a2012-05-24 15:28:52 -070011344 - shutdown-sessions: Shutdown peer sessions. When this setting is enabled,
11345 all connections to the server are immediately terminated when the server
11346 goes down. It might be used if the health check detects more complex cases
11347 than a simple connection status, and long timeouts would cause the service
11348 to remain unresponsive for too long a time. For instance, a health check
11349 might detect that a database is stuck and that there's no chance to reuse
11350 existing connections anymore. Connections killed this way are logged with
11351 a 'D' termination code (for "Down").
Simon Hormane0d1bfb2011-06-21 14:34:58 +090011352
11353 Actions are disabled by default
11354
Justin Karnegeseb2c24a2012-05-24 15:28:52 -070011355on-marked-up <action>
11356 Modify what occurs when a server is marked up.
11357 Currently one action is available:
11358 - shutdown-backup-sessions: Shutdown sessions on all backup servers. This is
11359 done only if the server is not in backup state and if it is not disabled
11360 (it must have an effective weight > 0). This can be used sometimes to force
11361 an active server to take all the traffic back after recovery when dealing
11362 with long sessions (eg: LDAP, SQL, ...). Doing this can cause more trouble
11363 than it tries to solve (eg: incomplete transactions), so use this feature
11364 with extreme care. Sessions killed because a server comes up are logged
11365 with an 'U' termination code (for "Up").
11366
11367 Actions are disabled by default
11368
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011369port <port>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011370 Using the "port" parameter, it becomes possible to use a different port to
11371 send health-checks. On some servers, it may be desirable to dedicate a port
11372 to a specific component able to perform complex tests which are more suitable
11373 to health-checks than the application. It is common to run a simple script in
11374 inetd for instance. This parameter is ignored if the "check" parameter is not
11375 set. See also the "addr" parameter.
11376
11377redir <prefix>
11378 The "redir" parameter enables the redirection mode for all GET and HEAD
11379 requests addressing this server. This means that instead of having HAProxy
11380 forward the request to the server, it will send an "HTTP 302" response with
11381 the "Location" header composed of this prefix immediately followed by the
11382 requested URI beginning at the leading '/' of the path component. That means
11383 that no trailing slash should be used after <prefix>. All invalid requests
11384 will be rejected, and all non-GET or HEAD requests will be normally served by
11385 the server. Note that since the response is completely forged, no header
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010011386 mangling nor cookie insertion is possible in the response. However, cookies in
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011387 requests are still analysed, making this solution completely usable to direct
11388 users to a remote location in case of local disaster. Main use consists in
11389 increasing bandwidth for static servers by having the clients directly
11390 connect to them. Note: never use a relative location here, it would cause a
11391 loop between the client and HAProxy!
11392
11393 Example : server srv1 192.168.1.1:80 redir http://image1.mydomain.com check
11394
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011395rise <count>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011396 The "rise" parameter states that a server will be considered as operational
11397 after <count> consecutive successful health checks. This value defaults to 2
11398 if unspecified. See also the "check", "inter" and "fall" parameters.
11399
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011400resolve-prefer <family>
11401 When DNS resolution is enabled for a server and multiple IP addresses from
11402 different families are returned, HAProxy will prefer using an IP address
11403 from the family mentioned in the "resolve-prefer" parameter.
11404 Available families: "ipv4" and "ipv6"
11405
Baptiste Assmannc4aabae2015-08-04 22:43:06 +020011406 Default value: ipv6
11407
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011408 Example:
11409
11410 server s1 app1.domain.com:80 resolvers mydns resolve-prefer ipv6
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011411
Thierry Fournierac88cfe2016-02-17 22:05:30 +010011412resolve-net <network>[,<network[,...]]
11413 This options prioritize th choice of an ip address matching a network. This is
11414 useful with clouds to prefer a local ip. In some cases, a cloud high
Tim Düsterhus4896c442016-11-29 02:15:19 +010011415 availability service can be announced with many ip addresses on many
Thierry Fournierac88cfe2016-02-17 22:05:30 +010011416 differents datacenters. The latency between datacenter is not negligible, so
11417 this patch permitsto prefers a local datacenter. If none address matchs the
11418 configured network, another address is selected.
11419
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011420 Example:
11421
11422 server s1 app1.domain.com:80 resolvers mydns resolve-net 10.0.0.0/8
Thierry Fournierac88cfe2016-02-17 22:05:30 +010011423
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011424resolvers <id>
11425 Points to an existing "resolvers" section to resolve current server's
11426 hostname.
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011427 In order to be operational, DNS resolution requires that health check is
11428 enabled on the server. Actually, health checks triggers the DNS resolution.
11429 You must precise one 'resolvers' parameter on each server line where DNS
11430 resolution is required.
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011431
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011432 Example:
11433
11434 server s1 app1.domain.com:80 check resolvers mydns
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011435
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011436 See also section 5.3
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011437
Willy Tarreau5ab04ec2011-03-20 10:32:26 +010011438send-proxy
11439 The "send-proxy" parameter enforces use of the PROXY protocol over any
11440 connection established to this server. The PROXY protocol informs the other
11441 end about the layer 3/4 addresses of the incoming connection, so that it can
11442 know the client's address or the public address it accessed to, whatever the
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010011443 upper layer protocol. For connections accepted by an "accept-proxy" or
11444 "accept-netscaler-cip" listener, the advertised address will be used. Only
11445 TCPv4 and TCPv6 address families are supported. Other families such as
11446 Unix sockets, will report an UNKNOWN family. Servers using this option can
11447 fully be chained to another instance of haproxy listening with an
11448 "accept-proxy" setting. This setting must not be used if the server isn't
11449 aware of the protocol. When health checks are sent to the server, the PROXY
11450 protocol is automatically used when this option is set, unless there is an
11451 explicit "port" or "addr" directive, in which case an explicit
11452 "check-send-proxy" directive would also be needed to use the PROXY protocol.
Frédéric Lécailled2376272017-03-21 18:52:12 +010011453 See also the "no-send-proxy" option of this section and "accept-proxy" and
11454 "accept-netscaler-cip" option of the "bind" keyword.
Willy Tarreau5ab04ec2011-03-20 10:32:26 +010011455
David Safb76832014-05-08 23:42:08 -040011456send-proxy-v2
11457 The "send-proxy-v2" parameter enforces use of the PROXY protocol version 2
11458 over any connection established to this server. The PROXY protocol informs
11459 the other end about the layer 3/4 addresses of the incoming connection, so
11460 that it can know the client's address or the public address it accessed to,
Emmanuel Hocdet404d9782017-10-24 10:55:14 +020011461 whatever the upper layer protocol. It also send ALPN information if an alpn
11462 have been negotiated. This setting must not be used if the server isn't aware
11463 of this version of the protocol. See also the "no-send-proxy-v2" option of
11464 this section and send-proxy" option of the "bind" keyword.
David Safb76832014-05-08 23:42:08 -040011465
11466send-proxy-v2-ssl
11467 The "send-proxy-v2-ssl" parameter enforces use of the PROXY protocol version
11468 2 over any connection established to this server. The PROXY protocol informs
11469 the other end about the layer 3/4 addresses of the incoming connection, so
11470 that it can know the client's address or the public address it accessed to,
11471 whatever the upper layer protocol. In addition, the SSL information extension
11472 of the PROXY protocol is added to the PROXY protocol header. This setting
11473 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 +010011474 See also the "no-send-proxy-v2-ssl" option of this section and the
11475 "send-proxy-v2" option of the "bind" keyword.
David Safb76832014-05-08 23:42:08 -040011476
11477send-proxy-v2-ssl-cn
11478 The "send-proxy-v2-ssl" parameter enforces use of the PROXY protocol version
11479 2 over any connection established to this server. The PROXY protocol informs
11480 the other end about the layer 3/4 addresses of the incoming connection, so
11481 that it can know the client's address or the public address it accessed to,
11482 whatever the upper layer protocol. In addition, the SSL information extension
11483 of the PROXY protocol, along along with the Common Name from the subject of
11484 the client certificate (if any), is added to the PROXY protocol header. This
11485 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 +010011486 protocol. See also the "no-send-proxy-v2-ssl-cn" option of this section and the
11487 "send-proxy-v2" option of the "bind" keyword.
David Safb76832014-05-08 23:42:08 -040011488
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011489slowstart <start_time_in_ms>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011490 The "slowstart" parameter for a server accepts a value in milliseconds which
11491 indicates after how long a server which has just come back up will run at
11492 full speed. Just as with every other time-based parameter, it can be entered
11493 in any other explicit unit among { us, ms, s, m, h, d }. The speed grows
11494 linearly from 0 to 100% during this time. The limitation applies to two
11495 parameters :
11496
11497 - maxconn: the number of connections accepted by the server will grow from 1
11498 to 100% of the usual dynamic limit defined by (minconn,maxconn,fullconn).
11499
11500 - weight: when the backend uses a dynamic weighted algorithm, the weight
11501 grows linearly from 1 to 100%. In this case, the weight is updated at every
11502 health-check. For this reason, it is important that the "inter" parameter
11503 is smaller than the "slowstart", in order to maximize the number of steps.
11504
11505 The slowstart never applies when haproxy starts, otherwise it would cause
11506 trouble to running servers. It only applies when a server has been previously
11507 seen as failed.
11508
Willy Tarreau732eac42015-07-09 11:40:25 +020011509sni <expression>
11510 The "sni" parameter evaluates the sample fetch expression, converts it to a
11511 string and uses the result as the host name sent in the SNI TLS extension to
11512 the server. A typical use case is to send the SNI received from the client in
11513 a bridged HTTPS scenario, using the "ssl_fc_sni" sample fetch for the
Willy Tarreau2ab88672017-07-05 18:23:03 +020011514 expression, though alternatives such as req.hdr(host) can also make sense. If
11515 "verify required" is set (which is the recommended setting), the resulting
Willy Tarreauad92a9a2017-07-28 11:38:41 +020011516 name will also be matched against the server certificate's names. See the
11517 "verify" directive for more details.
Willy Tarreau732eac42015-07-09 11:40:25 +020011518
Willy Tarreauc6f4ce82009-06-10 11:09:37 +020011519source <addr>[:<pl>[-<ph>]] [usesrc { <addr2>[:<port2>] | client | clientip } ]
Willy Tarreaubce70882009-09-07 11:51:47 +020011520source <addr>[:<port>] [usesrc { <addr2>[:<port2>] | hdr_ip(<hdr>[,<occ>]) } ]
Willy Tarreauc6f4ce82009-06-10 11:09:37 +020011521source <addr>[:<pl>[-<ph>]] [interface <name>] ...
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011522 The "source" parameter sets the source address which will be used when
11523 connecting to the server. It follows the exact same parameters and principle
11524 as the backend "source" keyword, except that it only applies to the server
11525 referencing it. Please consult the "source" keyword for details.
11526
Willy Tarreauc6f4ce82009-06-10 11:09:37 +020011527 Additionally, the "source" statement on a server line allows one to specify a
11528 source port range by indicating the lower and higher bounds delimited by a
11529 dash ('-'). Some operating systems might require a valid IP address when a
11530 source port range is specified. It is permitted to have the same IP/range for
11531 several servers. Doing so makes it possible to bypass the maximum of 64k
11532 total concurrent connections. The limit will then reach 64k connections per
11533 server.
11534
Lukas Tribus7d56c6d2016-09-13 09:51:15 +000011535 Since Linux 4.2/libc 2.23 IP_BIND_ADDRESS_NO_PORT is set for connections
11536 specifying the source address without port(s).
11537
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011538ssl
Willy Tarreau44f65392013-06-25 07:56:20 +020011539 This option enables SSL ciphering on outgoing connections to the server. It
11540 is critical to verify server certificates using "verify" when using SSL to
11541 connect to servers, otherwise the communication is prone to trivial man in
11542 the-middle attacks rendering SSL useless. When this option is used, health
11543 checks are automatically sent in SSL too unless there is a "port" or an
11544 "addr" directive indicating the check should be sent to a different location.
Frédéric Lécailled2376272017-03-21 18:52:12 +010011545 See the "no-ssl" to disable "ssl" option and "check-ssl" option to force
11546 SSL health checks.
Willy Tarreau763a95b2012-10-04 23:15:39 +020011547
Emmanuel Hocdete1c722b2017-03-31 15:02:54 +020011548ssl-max-ver [ SSLv3 | TLSv1.0 | TLSv1.1 | TLSv1.2 | TLSv1.3 ]
11549 This option enforces use of <version> or lower when SSL is used to communicate
11550 with the server. This option is also available on global statement
11551 "ssl-default-server-options". See also "ssl-min-ver".
11552
11553ssl-min-ver [ SSLv3 | TLSv1.0 | TLSv1.1 | TLSv1.2 | TLSv1.3 ]
11554 This option enforces use of <version> or upper when SSL is used to communicate
11555 with the server. This option is also available on global statement
11556 "ssl-default-server-options". See also "ssl-max-ver".
11557
Frédéric Lécailled2376272017-03-21 18:52:12 +010011558ssl-reuse
11559 This option may be used as "server" setting to reset any "no-ssl-reuse"
11560 setting which would have been inherited from "default-server" directive as
11561 default value.
11562 It may also be used as "default-server" setting to reset any previous
11563 "default-server" "no-ssl-reuse" setting.
11564
11565stick
11566 This option may be used as "server" setting to reset any "non-stick"
11567 setting which would have been inherited from "default-server" directive as
11568 default value.
11569 It may also be used as "default-server" setting to reset any previous
11570 "default-server" "non-stick" setting.
Willy Tarreaua0ee1d02012-09-10 09:01:23 +020011571
Willy Tarreau163d4622015-10-13 16:16:41 +020011572tcp-ut <delay>
11573 Sets the TCP User Timeout for all outgoing connections to this server. This
11574 option is available on Linux since version 2.6.37. It allows haproxy to
11575 configure a timeout for sockets which contain data not receiving an
Tim Düsterhus4896c442016-11-29 02:15:19 +010011576 acknowledgement for the configured delay. This is especially useful on
Willy Tarreau163d4622015-10-13 16:16:41 +020011577 long-lived connections experiencing long idle periods such as remote
11578 terminals or database connection pools, where the client and server timeouts
11579 must remain high to allow a long period of idle, but where it is important to
11580 detect that the server has disappeared in order to release all resources
11581 associated with its connection (and the client's session). One typical use
11582 case is also to force dead server connections to die when health checks are
11583 too slow or during a soft reload since health checks are then disabled. The
11584 argument is a delay expressed in milliseconds by default. This only works for
11585 regular TCP connections, and is ignored for other protocols.
11586
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011587track [<proxy>/]<server>
Willy Tarreau32091232014-05-16 13:52:00 +020011588 This option enables ability to set the current state of the server by tracking
11589 another one. It is possible to track a server which itself tracks another
11590 server, provided that at the end of the chain, a server has health checks
11591 enabled. If <proxy> is omitted the current one is used. If disable-on-404 is
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011592 used, it has to be enabled on both proxies.
11593
Frédéric Lécailled2376272017-03-21 18:52:12 +010011594tls-tickets
11595 This option may be used as "server" setting to reset any "no-tls-tickets"
11596 setting which would have been inherited from "default-server" directive as
11597 default value.
11598 It may also be used as "default-server" setting to reset any previous
11599 "default-server" "no-tlsv-tickets" setting.
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011600
Emeric Brunef42d922012-10-11 16:11:36 +020011601verify [none|required]
11602 This setting is only available when support for OpenSSL was built in. If set
Emeric Brun850efd52014-01-29 12:24:34 +010011603 to 'none', server certificate is not verified. In the other case, The
Willy Tarreauad92a9a2017-07-28 11:38:41 +020011604 certificate provided by the server is verified using CAs from 'ca-file' and
11605 optional CRLs from 'crl-file' after having checked that the names provided in
11606 the certificate's subject and subjectAlternateNames attributs match either
11607 the name passed using the "sni" directive, or if not provided, the static
11608 host name passed using the "verifyhost" directive. When no name is found, the
11609 certificate's names are ignored. For this reason, without SNI it's important
11610 to use "verifyhost". On verification failure the handshake is aborted. It is
11611 critically important to verify server certificates when using SSL to connect
11612 to servers, otherwise the communication is prone to trivial man-in-the-middle
11613 attacks rendering SSL totally useless. Unless "ssl_server_verify" appears in
11614 the global section, "verify" is set to "required" by default.
Emeric Brunef42d922012-10-11 16:11:36 +020011615
Evan Broderbe554312013-06-27 00:05:25 -070011616verifyhost <hostname>
11617 This setting is only available when support for OpenSSL was built in, and
Willy Tarreauad92a9a2017-07-28 11:38:41 +020011618 only takes effect if 'verify required' is also specified. This directive sets
11619 a default static hostname to check the server's certificate against when no
11620 SNI was used to connect to the server. If SNI is not used, this is the only
11621 way to enable hostname verification. This static hostname, when set, will
11622 also be used for health checks (which cannot provide an SNI value). If none
11623 of the hostnames in the certificate match the specified hostname, the
11624 handshake is aborted. The hostnames in the server-provided certificate may
11625 include wildcards. See also "verify", "sni" and "no-verifyhost" options.
Evan Broderbe554312013-06-27 00:05:25 -070011626
Krzysztof Piotr Oledzkic53601c2010-01-06 10:50:42 +010011627weight <weight>
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011628 The "weight" parameter is used to adjust the server's weight relative to
11629 other servers. All servers will receive a load proportional to their weight
11630 relative to the sum of all weights, so the higher the weight, the higher the
Willy Tarreau6704d672009-06-15 10:56:05 +020011631 load. The default weight is 1, and the maximal value is 256. A value of 0
11632 means the server will not participate in load-balancing but will still accept
11633 persistent connections. If this parameter is used to distribute the load
11634 according to server's capacity, it is recommended to start with values which
11635 can both grow and shrink, for instance between 10 and 100 to leave enough
11636 room above and below for later adjustments.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011637
11638
Cyril Bonté46175dd2015-07-02 22:45:32 +0200116395.3. Server IP address resolution using DNS
11640-------------------------------------------
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011641
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011642HAProxy allows using a host name on the server line to retrieve its IP address
11643using name servers. By default, HAProxy resolves the name when parsing the
11644configuration file, at startup and cache the result for the process' life.
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011645This is not sufficient in some cases, such as in Amazon where a server's IP
11646can change after a reboot or an ELB Virtual IP can change based on current
11647workload.
11648This chapter describes how HAProxy can be configured to process server's name
11649resolution at run time.
11650Whether run time server name resolution has been enable or not, HAProxy will
11651carry on doing the first resolution when parsing the configuration.
11652
11653
Cyril Bonté46175dd2015-07-02 22:45:32 +0200116545.3.1. Global overview
11655----------------------
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011656
11657As we've seen in introduction, name resolution in HAProxy occurs at two
11658different steps of the process life:
11659
11660 1. when starting up, HAProxy parses the server line definition and matches a
11661 host name. It uses libc functions to get the host name resolved. This
11662 resolution relies on /etc/resolv.conf file.
11663
11664 2. at run time, when HAProxy gets prepared to run a health check on a server,
11665 it verifies if the current name resolution is still considered as valid.
11666 If not, it processes a new resolution, in parallel of the health check.
11667
11668A few other events can trigger a name resolution at run time:
11669 - when a server's health check ends up in a connection timeout: this may be
11670 because the server has a new IP address. So we need to trigger a name
11671 resolution to know this new IP.
11672
Olivier Houchardecfa18d2017-08-07 17:30:03 +020011673When using resolvers, the server name can either be a hostname, or s SRV label.
11674HAProxy considers anything that starts with an underscore a SRV label.
11675If a SRV label is specified, then the corresponding SRV records will be
11676retrieved from the DNS server, and the provided hostnames will be used. The
11677SRV label will be checked periodically, and if any server are added or removed,
11678haproxy will automatically do the same.
11679
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011680A few things important to notice:
11681 - all the name servers are queried in the mean time. HAProxy will process the
11682 first valid response.
11683
11684 - a resolution is considered as invalid (NX, timeout, refused), when all the
11685 servers return an error.
11686
11687
Cyril Bonté46175dd2015-07-02 22:45:32 +0200116885.3.2. The resolvers section
11689----------------------------
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011690
11691This section is dedicated to host information related to name resolution in
11692HAProxy.
11693There can be as many as resolvers section as needed. Each section can contain
11694many name servers.
11695
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011696When multiple name servers are configured in a resolvers section, then HAProxy
11697uses the first valid response. In case of invalid responses, only the last one
11698is treated. Purpose is to give the chance to a slow server to deliver a valid
11699answer after a fast faulty or outdated server.
11700
11701When each server returns a different error type, then only the last error is
11702used by HAProxy to decide what type of behavior to apply.
11703
11704Two types of behavior can be applied:
11705 1. stop DNS resolution
11706 2. replay the DNS query with a new query type
11707 In such case, the following types are applied in this exact order:
11708 1. ANY query type
11709 2. query type corresponding to family pointed by resolve-prefer
11710 server's parameter
11711 3. remaining family type
11712
11713HAProxy stops DNS resolution when the following errors occur:
11714 - invalid DNS response packet
11715 - wrong name in the query section of the response
11716 - NX domain
11717 - Query refused by server
11718 - CNAME not pointing to an IP address
11719
11720HAProxy tries a new query type when the following errors occur:
11721 - no Answer records in the response
11722 - DNS response truncated
11723 - Error in DNS response
11724 - No expected DNS records found in the response
11725 - name server timeout
11726
11727For example, with 2 name servers configured in a resolvers section:
11728 - first response is valid and is applied directly, second response is ignored
11729 - first response is invalid and second one is valid, then second response is
11730 applied;
11731 - first response is a NX domain and second one a truncated response, then
11732 HAProxy replays the query with a new type;
11733 - first response is truncated and second one is a NX Domain, then HAProxy
11734 stops resolution.
11735
Olivier Houcharda8c6db82017-07-06 18:46:47 +020011736As a DNS server may not answer all the IPs in one DNS request, haproxy keeps
11737a cache of previous answers, an answer will be considered obsolete after
11738"hold obsolete" seconds without the IP returned.
11739
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011740
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011741resolvers <resolvers id>
11742 Creates a new name server list labelled <resolvers id>
11743
11744A resolvers section accept the following parameters:
11745
Baptiste Assmann2af08fe2017-08-14 00:13:01 +020011746accepted_payload_size <nb>
11747 Defines the maxium payload size accepted by HAProxy and announced to all the
11748 naeservers configured in this resolvers section.
11749 <nb> is in bytes. If not set, HAProxy announces 512. (minimal value defined
11750 by RFC 6891)
11751
Baptiste Assmann9d8dbbc2017-08-18 23:35:08 +020011752 Note: to get bigger responses but still be sure that responses won't be
Baptiste Assmann2af08fe2017-08-14 00:13:01 +020011753 dropped on the wire, one can choose a value between 1280 and 1410.
11754
Baptiste Assmann9d8dbbc2017-08-18 23:35:08 +020011755 Note: the maximum allowed value is 8192.
11756
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011757nameserver <id> <ip>:<port>
11758 DNS server description:
11759 <id> : label of the server, should be unique
11760 <ip> : IP address of the server
11761 <port> : port where the DNS service actually runs
11762
11763hold <status> <period>
11764 Defines <period> during which the last name resolution should be kept based
11765 on last resolution <status>
Baptiste Assmann987e16d2016-11-02 22:23:31 +010011766 <status> : last name resolution status. Acceptable values are "nx",
Olivier Houcharda8c6db82017-07-06 18:46:47 +020011767 "other", "refused", "timeout", "valid", "obsolete".
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011768 <period> : interval between two successive name resolution when the last
11769 answer was in <status>. It follows the HAProxy time format.
11770 <period> is in milliseconds by default.
11771
Baptiste Assmann686408b2017-08-18 10:15:42 +020011772 Default value is 10s for "valid", 0s for "obsolete" and 30s for others.
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011773
11774 Note: since the name resolution is triggered by the health checks, a new
11775 resolution is triggered after <period> modulo the <inter> parameter of
11776 the healch check.
11777
Baptiste Assmann201c07f2017-05-22 15:17:15 +020011778resolution_pool_size <nb>
11779 Defines the number of resolutions available in the pool for this resolvers.
11780 If not defines, it defaults to 64. If your configuration requires more than
11781 <nb>, then HAProxy will return an error when parsing the configuration.
11782
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011783resolve_retries <nb>
11784 Defines the number <nb> of queries to send to resolve a server name before
11785 giving up.
11786 Default value: 3
11787
Baptiste Assmann62b75b42015-09-09 01:11:36 +020011788 A retry occurs on name server timeout or when the full sequence of DNS query
11789 type failover is over and we need to start up from the default ANY query
11790 type.
11791
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011792timeout <event> <time>
11793 Defines timeouts related to name resolution
11794 <event> : the event on which the <time> timeout period applies to.
11795 events available are:
11796 - retry: time between two DNS queries, when no response have
11797 been received.
11798 Default value: 1s
11799 <time> : time related to the event. It follows the HAProxy time format.
11800 <time> is expressed in milliseconds.
11801
Olivier Doucetaa1ea8a2016-08-05 17:15:20 +020011802 Example:
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011803
11804 resolvers mydns
11805 nameserver dns1 10.0.0.1:53
11806 nameserver dns2 10.0.0.2:53
11807 resolve_retries 3
11808 timeout retry 1s
Baptiste Assmann987e16d2016-11-02 22:23:31 +010011809 hold other 30s
11810 hold refused 30s
11811 hold nx 30s
11812 hold timeout 30s
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011813 hold valid 10s
Olivier Houcharda8c6db82017-07-06 18:46:47 +020011814 hold obsolete 30s
Baptiste Assmann1fa66662015-04-14 00:28:47 +020011815
11816
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200118176. HTTP header manipulation
11818---------------------------
11819
11820In HTTP mode, it is possible to rewrite, add or delete some of the request and
11821response headers based on regular expressions. It is also possible to block a
11822request or a response if a particular header matches a regular expression,
11823which is enough to stop most elementary protocol attacks, and to protect
Willy Tarreau70dffda2014-01-30 03:07:23 +010011824against information leak from the internal network.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011825
Willy Tarreau70dffda2014-01-30 03:07:23 +010011826If HAProxy encounters an "Informational Response" (status code 1xx), it is able
11827to process all rsp* rules which can allow, deny, rewrite or delete a header,
11828but it will refuse to add a header to any such messages as this is not
11829HTTP-compliant. The reason for still processing headers in such responses is to
11830stop and/or fix any possible information leak which may happen, for instance
11831because another downstream equipment would unconditionally add a header, or if
11832a server name appears there. When such messages are seen, normal processing
11833still occurs on the next non-informational messages.
Willy Tarreau816b9792009-09-15 21:25:21 +020011834
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011835This section covers common usage of the following keywords, described in detail
11836in section 4.2 :
11837
11838 - reqadd <string>
11839 - reqallow <search>
11840 - reqiallow <search>
11841 - reqdel <search>
11842 - reqidel <search>
11843 - reqdeny <search>
11844 - reqideny <search>
11845 - reqpass <search>
11846 - reqipass <search>
11847 - reqrep <search> <replace>
11848 - reqirep <search> <replace>
11849 - reqtarpit <search>
11850 - reqitarpit <search>
11851 - rspadd <string>
11852 - rspdel <search>
11853 - rspidel <search>
11854 - rspdeny <search>
11855 - rspideny <search>
11856 - rsprep <search> <replace>
11857 - rspirep <search> <replace>
11858
11859With all these keywords, the same conventions are used. The <search> parameter
11860is a POSIX extended regular expression (regex) which supports grouping through
11861parenthesis (without the backslash). Spaces and other delimiters must be
11862prefixed with a backslash ('\') to avoid confusion with a field delimiter.
11863Other characters may be prefixed with a backslash to change their meaning :
11864
11865 \t for a tab
11866 \r for a carriage return (CR)
11867 \n for a new line (LF)
11868 \ to mark a space and differentiate it from a delimiter
11869 \# to mark a sharp and differentiate it from a comment
11870 \\ to use a backslash in a regex
11871 \\\\ to use a backslash in the text (*2 for regex, *2 for haproxy)
11872 \xXX to write the ASCII hex code XX as in the C language
11873
11874The <replace> parameter contains the string to be used to replace the largest
11875portion of text matching the regex. It can make use of the special characters
11876above, and can reference a substring which is delimited by parenthesis in the
11877regex, by writing a backslash ('\') immediately followed by one digit from 0 to
118789 indicating the group position (0 designating the entire line). This practice
11879is very common to users of the "sed" program.
11880
11881The <string> parameter represents the string which will systematically be added
11882after the last header line. It can also use special character sequences above.
11883
11884Notes related to these keywords :
11885---------------------------------
11886 - these keywords are not always convenient to allow/deny based on header
11887 contents. It is strongly recommended to use ACLs with the "block" keyword
11888 instead, resulting in far more flexible and manageable rules.
11889
11890 - lines are always considered as a whole. It is not possible to reference
11891 a header name only or a value only. This is important because of the way
11892 headers are written (notably the number of spaces after the colon).
11893
11894 - the first line is always considered as a header, which makes it possible to
11895 rewrite or filter HTTP requests URIs or response codes, but in turn makes
11896 it harder to distinguish between headers and request line. The regex prefix
11897 ^[^\ \t]*[\ \t] matches any HTTP method followed by a space, and the prefix
11898 ^[^ \t:]*: matches any header name followed by a colon.
11899
11900 - for performances reasons, the number of characters added to a request or to
11901 a response is limited at build time to values between 1 and 4 kB. This
11902 should normally be far more than enough for most usages. If it is too short
11903 on occasional usages, it is possible to gain some space by removing some
11904 useless headers before adding new ones.
11905
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010011906 - keywords beginning with "reqi" and "rspi" are the same as their counterpart
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011907 without the 'i' letter except that they ignore case when matching patterns.
11908
11909 - when a request passes through a frontend then a backend, all req* rules
11910 from the frontend will be evaluated, then all req* rules from the backend
11911 will be evaluated. The reverse path is applied to responses.
11912
11913 - req* statements are applied after "block" statements, so that "block" is
11914 always the first one, but before "use_backend" in order to permit rewriting
Willy Tarreaud72758d2010-01-12 10:42:19 +010011915 before switching.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011916
11917
Willy Tarreau74ca5042013-06-11 23:12:07 +0200119187. Using ACLs and fetching samples
11919----------------------------------
11920
11921Haproxy is capable of extracting data from request or response streams, from
11922client or server information, from tables, environmental information etc...
11923The action of extracting such data is called fetching a sample. Once retrieved,
11924these samples may be used for various purposes such as a key to a stick-table,
11925but most common usages consist in matching them against predefined constant
11926data called patterns.
11927
11928
119297.1. ACL basics
11930---------------
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011931
11932The use of Access Control Lists (ACL) provides a flexible solution to perform
11933content switching and generally to take decisions based on content extracted
11934from the request, the response or any environmental status. The principle is
11935simple :
11936
Willy Tarreau74ca5042013-06-11 23:12:07 +020011937 - extract a data sample from a stream, table or the environment
Willy Tarreaue6b11e42013-11-26 19:02:32 +010011938 - optionally apply some format conversion to the extracted sample
Willy Tarreau74ca5042013-06-11 23:12:07 +020011939 - apply one or multiple pattern matching methods on this sample
11940 - perform actions only when a pattern matches the sample
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011941
Willy Tarreau74ca5042013-06-11 23:12:07 +020011942The actions generally consist in blocking a request, selecting a backend, or
11943adding a header.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011944
11945In order to define a test, the "acl" keyword is used. The syntax is :
11946
Willy Tarreau74ca5042013-06-11 23:12:07 +020011947 acl <aclname> <criterion> [flags] [operator] [<value>] ...
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011948
11949This creates a new ACL <aclname> or completes an existing one with new tests.
11950Those tests apply to the portion of request/response specified in <criterion>
11951and may be adjusted with optional flags [flags]. Some criteria also support
Willy Tarreaue6b11e42013-11-26 19:02:32 +010011952an operator which may be specified before the set of values. Optionally some
11953conversion operators may be applied to the sample, and they will be specified
11954as a comma-delimited list of keywords just after the first keyword. The values
11955are of the type supported by the criterion, and are separated by spaces.
Willy Tarreauc57f0e22009-05-10 13:12:33 +020011956
11957ACL names must be formed from upper and lower case letters, digits, '-' (dash),
11958'_' (underscore) , '.' (dot) and ':' (colon). ACL names are case-sensitive,
11959which means that "my_acl" and "My_Acl" are two different ACLs.
11960
11961There is no enforced limit to the number of ACLs. The unused ones do not affect
11962performance, they just consume a small amount of memory.
11963
Willy Tarreau74ca5042013-06-11 23:12:07 +020011964The criterion generally is the name of a sample fetch method, or one of its ACL
11965specific declinations. The default test method is implied by the output type of
11966this sample fetch method. The ACL declinations can describe alternate matching
Willy Tarreaue6b11e42013-11-26 19:02:32 +010011967methods of a same sample fetch method. The sample fetch methods are the only
11968ones supporting a conversion.
Willy Tarreau74ca5042013-06-11 23:12:07 +020011969
11970Sample fetch methods return data which can be of the following types :
11971 - boolean
11972 - integer (signed or unsigned)
11973 - IPv4 or IPv6 address
11974 - string
11975 - data block
11976
Willy Tarreaue6b11e42013-11-26 19:02:32 +010011977Converters transform any of these data into any of these. For example, some
11978converters might convert a string to a lower-case string while other ones
11979would turn a string to an IPv4 address, or apply a netmask to an IP address.
11980The resulting sample is of the type of the last converter applied to the list,
11981which defaults to the type of the sample fetch method.
11982
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020011983Each sample or converter returns data of a specific type, specified with its
11984keyword in this documentation. When an ACL is declared using a standard sample
11985fetch method, certain types automatically involved a default matching method
11986which are summarized in the table below :
11987
11988 +---------------------+-----------------+
11989 | Sample or converter | Default |
11990 | output type | matching method |
11991 +---------------------+-----------------+
11992 | boolean | bool |
11993 +---------------------+-----------------+
11994 | integer | int |
11995 +---------------------+-----------------+
11996 | ip | ip |
11997 +---------------------+-----------------+
11998 | string | str |
11999 +---------------------+-----------------+
12000 | binary | none, use "-m" |
12001 +---------------------+-----------------+
12002
12003Note that in order to match a binary samples, it is mandatory to specify a
12004matching method, see below.
12005
Willy Tarreau74ca5042013-06-11 23:12:07 +020012006The ACL engine can match these types against patterns of the following types :
12007 - boolean
12008 - integer or integer range
12009 - IP address / network
12010 - string (exact, substring, suffix, prefix, subdir, domain)
12011 - regular expression
12012 - hex block
12013
Willy Tarreauc57f0e22009-05-10 13:12:33 +020012014The following ACL flags are currently supported :
12015
Willy Tarreau2b5285d2010-05-09 23:45:24 +020012016 -i : ignore case during matching of all subsequent patterns.
12017 -f : load patterns from a file.
Willy Tarreau74ca5042013-06-11 23:12:07 +020012018 -m : use a specific pattern matching method
Thierry FOURNIERb7729c92014-02-11 16:24:41 +010012019 -n : forbid the DNS resolutions
Thierry FOURNIER9860c412014-01-29 14:23:29 +010012020 -M : load the file pointed by -f like a map file.
Thierry FOURNIER3534d882014-01-20 17:01:44 +010012021 -u : force the unique id of the ACL
Willy Tarreau6a06a402007-07-15 20:15:28 +020012022 -- : force end of flags. Useful when a string looks like one of the flags.
12023
Willy Tarreau74ca5042013-06-11 23:12:07 +020012024The "-f" flag is followed by the name of a file from which all lines will be
12025read as individual values. It is even possible to pass multiple "-f" arguments
12026if the patterns are to be loaded from multiple files. Empty lines as well as
12027lines beginning with a sharp ('#') will be ignored. All leading spaces and tabs
12028will be stripped. If it is absolutely necessary to insert a valid pattern
12029beginning with a sharp, just prefix it with a space so that it is not taken for
12030a comment. Depending on the data type and match method, haproxy may load the
12031lines into a binary tree, allowing very fast lookups. This is true for IPv4 and
12032exact string matching. In this case, duplicates will automatically be removed.
12033
Thierry FOURNIER9860c412014-01-29 14:23:29 +010012034The "-M" flag allows an ACL to use a map file. If this flag is set, the file is
12035parsed as two column file. The first column contains the patterns used by the
12036ACL, and the second column contain the samples. The sample can be used later by
12037a map. This can be useful in some rare cases where an ACL would just be used to
12038check for the existence of a pattern in a map before a mapping is applied.
12039
Thierry FOURNIER3534d882014-01-20 17:01:44 +010012040The "-u" flag forces the unique id of the ACL. This unique id is used with the
12041socket interface to identify ACL and dynamically change its values. Note that a
12042file is always identified by its name even if an id is set.
12043
Willy Tarreau74ca5042013-06-11 23:12:07 +020012044Also, note that the "-i" flag applies to subsequent entries and not to entries
12045loaded from files preceding it. For instance :
12046
12047 acl valid-ua hdr(user-agent) -f exact-ua.lst -i -f generic-ua.lst test
12048
12049In this example, each line of "exact-ua.lst" will be exactly matched against
12050the "user-agent" header of the request. Then each line of "generic-ua" will be
12051case-insensitively matched. Then the word "test" will be insensitively matched
12052as well.
12053
12054The "-m" flag is used to select a specific pattern matching method on the input
12055sample. All ACL-specific criteria imply a pattern matching method and generally
12056do not need this flag. However, this flag is useful with generic sample fetch
12057methods to describe how they're going to be matched against the patterns. This
12058is required for sample fetches which return data type for which there is no
12059obvious matching method (eg: string or binary). When "-m" is specified and
12060followed by a pattern matching method name, this method is used instead of the
12061default one for the criterion. This makes it possible to match contents in ways
12062that were not initially planned, or with sample fetch methods which return a
12063string. The matching method also affects the way the patterns are parsed.
12064
Thierry FOURNIERb7729c92014-02-11 16:24:41 +010012065The "-n" flag forbids the dns resolutions. It is used with the load of ip files.
12066By default, if the parser cannot parse ip address it considers that the parsed
12067string is maybe a domain name and try dns resolution. The flag "-n" disable this
12068resolution. It is useful for detecting malformed ip lists. Note that if the DNS
12069server is not reachable, the haproxy configuration parsing may last many minutes
12070waiting fir the timeout. During this time no error messages are displayed. The
12071flag "-n" disable this behavior. Note also that during the runtime, this
12072function is disabled for the dynamic acl modifications.
12073
Willy Tarreau74ca5042013-06-11 23:12:07 +020012074There are some restrictions however. Not all methods can be used with all
12075sample fetch methods. Also, if "-m" is used in conjunction with "-f", it must
12076be placed first. The pattern matching method must be one of the following :
Willy Tarreau5adeda12013-03-31 22:13:34 +020012077
12078 - "found" : only check if the requested sample could be found in the stream,
12079 but do not compare it against any pattern. It is recommended not
Willy Tarreau74ca5042013-06-11 23:12:07 +020012080 to pass any pattern to avoid confusion. This matching method is
12081 particularly useful to detect presence of certain contents such
12082 as headers, cookies, etc... even if they are empty and without
12083 comparing them to anything nor counting them.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012084
12085 - "bool" : check the value as a boolean. It can only be applied to fetches
12086 which return a boolean or integer value, and takes no pattern.
Willy Tarreau74ca5042013-06-11 23:12:07 +020012087 Value zero or false does not match, all other values do match.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012088
12089 - "int" : match the value as an integer. It can be used with integer and
Willy Tarreau74ca5042013-06-11 23:12:07 +020012090 boolean samples. Boolean false is integer 0, true is integer 1.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012091
12092 - "ip" : match the value as an IPv4 or IPv6 address. It is compatible
Willy Tarreau74ca5042013-06-11 23:12:07 +020012093 with IP address samples only, so it is implied and never needed.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012094
12095 - "bin" : match the contents against an hexadecimal string representing a
12096 binary sequence. This may be used with binary or string samples.
12097
12098 - "len" : match the sample's length as an integer. This may be used with
12099 binary or string samples.
12100
Willy Tarreau74ca5042013-06-11 23:12:07 +020012101 - "str" : exact match : match the contents against a string. This may be
12102 used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012103
Willy Tarreau74ca5042013-06-11 23:12:07 +020012104 - "sub" : substring match : check that the contents contain at least one of
12105 the provided string patterns. This may be used with binary or
12106 string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012107
Willy Tarreau74ca5042013-06-11 23:12:07 +020012108 - "reg" : regex match : match the contents against a list of regular
12109 expressions. This may be used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012110
Willy Tarreau74ca5042013-06-11 23:12:07 +020012111 - "beg" : prefix match : check that the contents begin like the provided
12112 string patterns. This may be used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012113
Willy Tarreau74ca5042013-06-11 23:12:07 +020012114 - "end" : suffix match : check that the contents end like the provided
12115 string patterns. This may be used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012116
Willy Tarreau74ca5042013-06-11 23:12:07 +020012117 - "dir" : subdir match : check that a slash-delimited portion of the
12118 contents exactly matches one of the provided string patterns.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012119 This may be used with binary or string samples.
12120
Willy Tarreau74ca5042013-06-11 23:12:07 +020012121 - "dom" : domain match : check that a dot-delimited portion of the contents
12122 exactly match one of the provided string patterns. This may be
12123 used with binary or string samples.
Willy Tarreau5adeda12013-03-31 22:13:34 +020012124
12125For example, to quickly detect the presence of cookie "JSESSIONID" in an HTTP
12126request, it is possible to do :
12127
12128 acl jsess_present cook(JSESSIONID) -m found
12129
12130In order to apply a regular expression on the 500 first bytes of data in the
12131buffer, one would use the following acl :
12132
12133 acl script_tag payload(0,500) -m reg -i <script>
12134
Willy Tarreaue6b11e42013-11-26 19:02:32 +010012135On systems where the regex library is much slower when using "-i", it is
12136possible to convert the sample to lowercase before matching, like this :
12137
12138 acl script_tag payload(0,500),lower -m reg <script>
12139
Willy Tarreau74ca5042013-06-11 23:12:07 +020012140All ACL-specific criteria imply a default matching method. Most often, these
12141criteria are composed by concatenating the name of the original sample fetch
12142method and the matching method. For example, "hdr_beg" applies the "beg" match
12143to samples retrieved using the "hdr" fetch method. Since all ACL-specific
12144criteria rely on a sample fetch method, it is always possible instead to use
12145the original sample fetch method and the explicit matching method using "-m".
Willy Tarreau2b5285d2010-05-09 23:45:24 +020012146
Willy Tarreau74ca5042013-06-11 23:12:07 +020012147If an alternate match is specified using "-m" on an ACL-specific criterion,
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030012148the matching method is simply applied to the underlying sample fetch method.
12149For example, all ACLs below are exact equivalent :
Willy Tarreau2b5285d2010-05-09 23:45:24 +020012150
Willy Tarreau74ca5042013-06-11 23:12:07 +020012151 acl short_form hdr_beg(host) www.
12152 acl alternate1 hdr_beg(host) -m beg www.
12153 acl alternate2 hdr_dom(host) -m beg www.
12154 acl alternate3 hdr(host) -m beg www.
Willy Tarreau2b5285d2010-05-09 23:45:24 +020012155
Willy Tarreau2b5285d2010-05-09 23:45:24 +020012156
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012157The table below summarizes the compatibility matrix between sample or converter
12158types and the pattern types to fetch against. It indicates for each compatible
12159combination the name of the matching method to be used, surrounded with angle
12160brackets ">" and "<" when the method is the default one and will work by
12161default without "-m".
Willy Tarreau0ba27502007-12-24 16:55:16 +010012162
Willy Tarreau74ca5042013-06-11 23:12:07 +020012163 +-------------------------------------------------+
12164 | Input sample type |
12165 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012166 | pattern type | boolean | integer | ip | string | binary |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012167 +----------------------+---------+---------+---------+---------+---------+
12168 | none (presence only) | found | found | found | found | found |
12169 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012170 | none (boolean value) |> bool <| bool | | bool | |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012171 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012172 | integer (value) | int |> int <| int | int | |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012173 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012174 | integer (length) | len | len | len | len | len |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012175 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012176 | IP address | | |> ip <| ip | ip |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012177 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIER2a06e392014-05-11 15:49:55 +020012178 | exact string | str | str | str |> str <| str |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012179 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012180 | prefix | beg | beg | beg | beg | beg |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012181 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012182 | suffix | end | end | end | end | end |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012183 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012184 | substring | sub | sub | sub | sub | sub |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012185 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012186 | subdir | dir | dir | dir | dir | dir |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012187 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012188 | domain | dom | dom | dom | dom | dom |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012189 +----------------------+---------+---------+---------+---------+---------+
Thierry FOURNIERe3ded592013-12-06 15:36:54 +010012190 | regex | reg | reg | reg | reg | reg |
Willy Tarreau74ca5042013-06-11 23:12:07 +020012191 +----------------------+---------+---------+---------+---------+---------+
12192 | hex block | | | | bin | bin |
12193 +----------------------+---------+---------+---------+---------+---------+
Willy Tarreau6a06a402007-07-15 20:15:28 +020012194
12195
Willy Tarreau74ca5042013-06-11 23:12:07 +0200121967.1.1. Matching booleans
12197------------------------
12198
12199In order to match a boolean, no value is needed and all values are ignored.
12200Boolean matching is used by default for all fetch methods of type "boolean".
12201When boolean matching is used, the fetched value is returned as-is, which means
12202that a boolean "true" will always match and a boolean "false" will never match.
12203
12204Boolean matching may also be enforced using "-m bool" on fetch methods which
12205return an integer value. Then, integer value 0 is converted to the boolean
12206"false" and all other values are converted to "true".
12207
Willy Tarreau6a06a402007-07-15 20:15:28 +020012208
Willy Tarreau74ca5042013-06-11 23:12:07 +0200122097.1.2. Matching integers
12210------------------------
12211
12212Integer matching applies by default to integer fetch methods. It can also be
12213enforced on boolean fetches using "-m int". In this case, "false" is converted
12214to the integer 0, and "true" is converted to the integer 1.
12215
12216Integer matching also supports integer ranges and operators. Note that integer
12217matching only applies to positive values. A range is a value expressed with a
12218lower and an upper bound separated with a colon, both of which may be omitted.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012219
12220For instance, "1024:65535" is a valid range to represent a range of
12221unprivileged ports, and "1024:" would also work. "0:1023" is a valid
12222representation of privileged ports, and ":1023" would also work.
12223
Willy Tarreau62644772008-07-16 18:36:06 +020012224As a special case, some ACL functions support decimal numbers which are in fact
12225two integers separated by a dot. This is used with some version checks for
12226instance. All integer properties apply to those decimal numbers, including
12227ranges and operators.
12228
Willy Tarreau6a06a402007-07-15 20:15:28 +020012229For an easier usage, comparison operators are also supported. Note that using
Willy Tarreau0ba27502007-12-24 16:55:16 +010012230operators with ranges does not make much sense and is strongly discouraged.
12231Similarly, it does not make much sense to perform order comparisons with a set
12232of values.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012233
Willy Tarreau0ba27502007-12-24 16:55:16 +010012234Available operators for integer matching are :
Willy Tarreau6a06a402007-07-15 20:15:28 +020012235
12236 eq : true if the tested value equals at least one value
12237 ge : true if the tested value is greater than or equal to at least one value
12238 gt : true if the tested value is greater than at least one value
12239 le : true if the tested value is less than or equal to at least one value
12240 lt : true if the tested value is less than at least one value
12241
Willy Tarreau0ba27502007-12-24 16:55:16 +010012242For instance, the following ACL matches any negative Content-Length header :
Willy Tarreau6a06a402007-07-15 20:15:28 +020012243
12244 acl negative-length hdr_val(content-length) lt 0
12245
Willy Tarreau62644772008-07-16 18:36:06 +020012246This one matches SSL versions between 3.0 and 3.1 (inclusive) :
12247
12248 acl sslv3 req_ssl_ver 3:3.1
12249
Willy Tarreau6a06a402007-07-15 20:15:28 +020012250
Willy Tarreau74ca5042013-06-11 23:12:07 +0200122517.1.3. Matching strings
12252-----------------------
12253
12254String matching applies to string or binary fetch methods, and exists in 6
12255different forms :
12256
12257 - exact match (-m str) : the extracted string must exactly match the
12258 patterns ;
12259
12260 - substring match (-m sub) : the patterns are looked up inside the
12261 extracted string, and the ACL matches if any of them is found inside ;
12262
12263 - prefix match (-m beg) : the patterns are compared with the beginning of
12264 the extracted string, and the ACL matches if any of them matches.
12265
12266 - suffix match (-m end) : the patterns are compared with the end of the
12267 extracted string, and the ACL matches if any of them matches.
12268
Baptiste Assmann33db6002016-03-06 23:32:10 +010012269 - subdir match (-m dir) : the patterns are looked up inside the extracted
Willy Tarreau74ca5042013-06-11 23:12:07 +020012270 string, delimited with slashes ("/"), and the ACL matches if any of them
12271 matches.
12272
12273 - domain match (-m dom) : the patterns are looked up inside the extracted
12274 string, delimited with dots ("."), and the ACL matches if any of them
12275 matches.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012276
12277String matching applies to verbatim strings as they are passed, with the
12278exception of the backslash ("\") which makes it possible to escape some
12279characters such as the space. If the "-i" flag is passed before the first
12280string, then the matching will be performed ignoring the case. In order
12281to match the string "-i", either set it second, or pass the "--" flag
Willy Tarreau0ba27502007-12-24 16:55:16 +010012282before the first string. Same applies of course to match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +020012283
12284
Willy Tarreau74ca5042013-06-11 23:12:07 +0200122857.1.4. Matching regular expressions (regexes)
12286---------------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +020012287
12288Just like with string matching, regex matching applies to verbatim strings as
12289they are passed, with the exception of the backslash ("\") which makes it
12290possible to escape some characters such as the space. If the "-i" flag is
12291passed before the first regex, then the matching will be performed ignoring
12292the case. In order to match the string "-i", either set it second, or pass
Willy Tarreau0ba27502007-12-24 16:55:16 +010012293the "--" flag before the first string. Same principle applies of course to
12294match the string "--".
Willy Tarreau6a06a402007-07-15 20:15:28 +020012295
12296
Willy Tarreau74ca5042013-06-11 23:12:07 +0200122977.1.5. Matching arbitrary data blocks
12298-------------------------------------
12299
12300It is possible to match some extracted samples against a binary block which may
12301not safely be represented as a string. For this, the patterns must be passed as
12302a series of hexadecimal digits in an even number, when the match method is set
12303to binary. Each sequence of two digits will represent a byte. The hexadecimal
12304digits may be used upper or lower case.
12305
12306Example :
12307 # match "Hello\n" in the input stream (\x48 \x65 \x6c \x6c \x6f \x0a)
12308 acl hello payload(0,6) -m bin 48656c6c6f0a
12309
12310
123117.1.6. Matching IPv4 and IPv6 addresses
12312---------------------------------------
Willy Tarreau6a06a402007-07-15 20:15:28 +020012313
12314IPv4 addresses values can be specified either as plain addresses or with a
12315netmask appended, in which case the IPv4 address matches whenever it is
12316within the network. Plain addresses may also be replaced with a resolvable
Willy Tarreaud2a4aa22008-01-31 15:28:22 +010012317host name, but this practice is generally discouraged as it makes it more
Willy Tarreau0ba27502007-12-24 16:55:16 +010012318difficult to read and debug configurations. If hostnames are used, you should
12319at least ensure that they are present in /etc/hosts so that the configuration
12320does not depend on any random DNS match at the moment the configuration is
12321parsed.
Willy Tarreau6a06a402007-07-15 20:15:28 +020012322
Daniel Schnellereba56342016-04-13 00:26:52 +020012323The dotted IPv4 address notation is supported in both regular as well as the
12324abbreviated form with all-0-octets omitted:
12325
12326 +------------------+------------------+------------------+
12327 | Example 1 | Example 2 | Example 3 |
12328 +------------------+------------------+------------------+
12329 | 192.168.0.1 | 10.0.0.12 | 127.0.0.1 |
12330 | 192.168.1 | 10.12 | 127.1 |
12331 | 192.168.0.1/22 | 10.0.0.12/8 | 127.0.0.1/8 |
12332 | 192.168.1/22 | 10.12/8 | 127.1/8 |
12333 +------------------+------------------+------------------+
12334
12335Notice that this is different from RFC 4632 CIDR address notation in which
12336192.168.42/24 would be equivalent to 192.168.42.0/24.
12337
Willy Tarreauceb4ac92012-04-28 00:41:46 +020012338IPv6 may be entered in their usual form, with or without a netmask appended.
12339Only bit counts are accepted for IPv6 netmasks. In order to avoid any risk of
12340trouble with randomly resolved IP addresses, host names are never allowed in
12341IPv6 patterns.
12342
12343HAProxy is also able to match IPv4 addresses with IPv6 addresses in the
12344following situations :
12345 - tested address is IPv4, pattern address is IPv4, the match applies
12346 in IPv4 using the supplied mask if any.
12347 - tested address is IPv6, pattern address is IPv6, the match applies
12348 in IPv6 using the supplied mask if any.
12349 - tested address is IPv6, pattern address is IPv4, the match applies in IPv4
12350 using the pattern's mask if the IPv6 address matches with 2002:IPV4::,
12351 ::IPV4 or ::ffff:IPV4, otherwise it fails.
12352 - tested address is IPv4, pattern address is IPv6, the IPv4 address is first
12353 converted to IPv6 by prefixing ::ffff: in front of it, then the match is
12354 applied in IPv6 using the supplied IPv6 mask.
12355
Willy Tarreau74ca5042013-06-11 23:12:07 +020012356
123577.2. Using ACLs to form conditions
12358----------------------------------
12359
12360Some actions are only performed upon a valid condition. A condition is a
12361combination of ACLs with operators. 3 operators are supported :
12362
12363 - AND (implicit)
12364 - OR (explicit with the "or" keyword or the "||" operator)
12365 - Negation with the exclamation mark ("!")
Willy Tarreau6a06a402007-07-15 20:15:28 +020012366
Willy Tarreau74ca5042013-06-11 23:12:07 +020012367A condition is formed as a disjunctive form:
Willy Tarreau6a06a402007-07-15 20:15:28 +020012368
Willy Tarreau74ca5042013-06-11 23:12:07 +020012369 [!]acl1 [!]acl2 ... [!]acln { or [!]acl1 [!]acl2 ... [!]acln } ...
Willy Tarreaubef91e72013-03-31 23:14:46 +020012370
Willy Tarreau74ca5042013-06-11 23:12:07 +020012371Such conditions are generally used after an "if" or "unless" statement,
12372indicating when the condition will trigger the action.
Willy Tarreaubef91e72013-03-31 23:14:46 +020012373
Willy Tarreau74ca5042013-06-11 23:12:07 +020012374For instance, to block HTTP requests to the "*" URL with methods other than
12375"OPTIONS", as well as POST requests without content-length, and GET or HEAD
12376requests with a content-length greater than 0, and finally every request which
12377is not either GET/HEAD/POST/OPTIONS !
12378
12379 acl missing_cl hdr_cnt(Content-length) eq 0
Jarno Huuskonen84c51ec2017-04-03 14:20:34 +030012380 http-request deny if HTTP_URL_STAR !METH_OPTIONS || METH_POST missing_cl
12381 http-request deny if METH_GET HTTP_CONTENT
12382 http-request deny unless METH_GET or METH_POST or METH_OPTIONS
Willy Tarreau74ca5042013-06-11 23:12:07 +020012383
12384To select a different backend for requests to static contents on the "www" site
12385and to every request on the "img", "video", "download" and "ftp" hosts :
12386
12387 acl url_static path_beg /static /images /img /css
12388 acl url_static path_end .gif .png .jpg .css .js
12389 acl host_www hdr_beg(host) -i www
12390 acl host_static hdr_beg(host) -i img. video. download. ftp.
12391
12392 # now use backend "static" for all static-only hosts, and for static urls
12393 # of host "www". Use backend "www" for the rest.
12394 use_backend static if host_static or host_www url_static
12395 use_backend www if host_www
12396
12397It is also possible to form rules using "anonymous ACLs". Those are unnamed ACL
12398expressions that are built on the fly without needing to be declared. They must
12399be enclosed between braces, with a space before and after each brace (because
12400the braces must be seen as independent words). Example :
12401
12402 The following rule :
12403
12404 acl missing_cl hdr_cnt(Content-length) eq 0
Jarno Huuskonen84c51ec2017-04-03 14:20:34 +030012405 http-request deny if METH_POST missing_cl
Willy Tarreau74ca5042013-06-11 23:12:07 +020012406
12407 Can also be written that way :
12408
Jarno Huuskonen84c51ec2017-04-03 14:20:34 +030012409 http-request deny if METH_POST { hdr_cnt(Content-length) eq 0 }
Willy Tarreau74ca5042013-06-11 23:12:07 +020012410
12411It is generally not recommended to use this construct because it's a lot easier
12412to leave errors in the configuration when written that way. However, for very
12413simple rules matching only one source IP address for instance, it can make more
12414sense to use them than to declare ACLs with random names. Another example of
12415good use is the following :
12416
12417 With named ACLs :
12418
12419 acl site_dead nbsrv(dynamic) lt 2
12420 acl site_dead nbsrv(static) lt 2
12421 monitor fail if site_dead
12422
12423 With anonymous ACLs :
12424
12425 monitor fail if { nbsrv(dynamic) lt 2 } || { nbsrv(static) lt 2 }
12426
Jarno Huuskonen84c51ec2017-04-03 14:20:34 +030012427See section 4.2 for detailed help on the "http-request deny" and "use_backend"
12428keywords.
Willy Tarreau74ca5042013-06-11 23:12:07 +020012429
12430
124317.3. Fetching samples
12432---------------------
12433
12434Historically, sample fetch methods were only used to retrieve data to match
12435against patterns using ACLs. With the arrival of stick-tables, a new class of
12436sample fetch methods was created, most often sharing the same syntax as their
12437ACL counterpart. These sample fetch methods are also known as "fetches". As
12438of now, ACLs and fetches have converged. All ACL fetch methods have been made
12439available as fetch methods, and ACLs may use any sample fetch method as well.
12440
12441This section details all available sample fetch methods and their output type.
12442Some sample fetch methods have deprecated aliases that are used to maintain
12443compatibility with existing configurations. They are then explicitly marked as
12444deprecated and should not be used in new setups.
12445
12446The ACL derivatives are also indicated when available, with their respective
12447matching methods. These ones all have a well defined default pattern matching
12448method, so it is never necessary (though allowed) to pass the "-m" option to
12449indicate how the sample will be matched using ACLs.
12450
12451As indicated in the sample type versus matching compatibility matrix above,
12452when using a generic sample fetch method in an ACL, the "-m" option is
12453mandatory unless the sample type is one of boolean, integer, IPv4 or IPv6. When
12454the same keyword exists as an ACL keyword and as a standard fetch method, the
12455ACL engine will automatically pick the ACL-only one by default.
12456
12457Some of these keywords support one or multiple mandatory arguments, and one or
12458multiple optional arguments. These arguments are strongly typed and are checked
12459when the configuration is parsed so that there is no risk of running with an
12460incorrect argument (eg: an unresolved backend name). Fetch function arguments
12461are passed between parenthesis and are delimited by commas. When an argument
12462is optional, it will be indicated below between square brackets ('[ ]'). When
12463all arguments are optional, the parenthesis may be omitted.
12464
12465Thus, the syntax of a standard sample fetch method is one of the following :
12466 - name
12467 - name(arg1)
12468 - name(arg1,arg2)
12469
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012470
124717.3.1. Converters
12472-----------------
12473
Willy Tarreaue6b11e42013-11-26 19:02:32 +010012474Sample fetch methods may be combined with transformations to be applied on top
12475of the fetched sample (also called "converters"). These combinations form what
12476is called "sample expressions" and the result is a "sample". Initially this
12477was only supported by "stick on" and "stick store-request" directives but this
12478has now be extended to all places where samples may be used (acls, log-format,
12479unique-id-format, add-header, ...).
12480
12481These transformations are enumerated as a series of specific keywords after the
12482sample fetch method. These keywords may equally be appended immediately after
12483the fetch keyword's argument, delimited by a comma. These keywords can also
12484support some arguments (eg: a netmask) which must be passed in parenthesis.
Willy Tarreau0ba27502007-12-24 16:55:16 +010012485
Willy Tarreau97707872015-01-27 15:12:13 +010012486A certain category of converters are bitwise and arithmetic operators which
12487support performing basic operations on integers. Some bitwise operations are
12488supported (and, or, xor, cpl) and some arithmetic operations are supported
12489(add, sub, mul, div, mod, neg). Some comparators are provided (odd, even, not,
12490bool) which make it possible to report a match without having to write an ACL.
12491
Willy Tarreau74ca5042013-06-11 23:12:07 +020012492The currently available list of transformation keywords include :
Willy Tarreau0ba27502007-12-24 16:55:16 +010012493
Ben Shillitof25e8e52016-12-02 14:25:37 +00001249451d.single(<prop>[,<prop>*])
12495 Returns values for the properties requested as a string, where values are
12496 separated by the delimiter specified with "51degrees-property-separator".
12497 The device is identified using the User-Agent header passed to the
12498 converter. The function can be passed up to five property names, and if a
12499 property name can't be found, the value "NoData" is returned.
12500
12501 Example :
12502 # Here the header "X-51D-DeviceTypeMobileTablet" is added to the request
12503 # containg values for the three properties requested by using the
12504 # User-Agent passed to the converter.
12505 frontend http-in
12506 bind *:8081
12507 default_backend servers
12508 http-request set-header X-51D-DeviceTypeMobileTablet \
12509 %[req.fhdr(User-Agent),51d.single(DeviceType,IsMobile,IsTablet)]
12510
Willy Tarreau97707872015-01-27 15:12:13 +010012511add(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012512 Adds <value> to the input value of type signed integer, and returns the
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012513 result as a signed integer. <value> can be a numeric value or a variable
Daniel Schneller0b547052016-03-21 20:46:57 +010012514 name. The name of the variable starts with an indication about its scope. The
12515 scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012516 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012517 "sess" : the variable is shared with the whole session
12518 "txn" : the variable is shared with the transaction (request and response)
12519 "req" : the variable is shared only during request processing
12520 "res" : the variable is shared only during response processing
12521 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012522 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012523
12524and(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012525 Performs a bitwise "AND" between <value> and the input value of type signed
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012526 integer, and returns the result as an signed integer. <value> can be a
Daniel Schneller0b547052016-03-21 20:46:57 +010012527 numeric value or a variable name. The name of the variable starts with an
12528 indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012529 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012530 "sess" : the variable is shared with the whole session
12531 "txn" : the variable is shared with the transaction (request and response)
12532 "req" : the variable is shared only during request processing
12533 "res" : the variable is shared only during response processing
12534 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012535 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012536
Holger Just1bfc24b2017-05-06 00:56:53 +020012537b64dec
12538 Converts (decodes) a base64 encoded input string to its binary
12539 representation. It performs the inverse operation of base64().
12540
Emeric Brun53d1a982014-04-30 18:21:37 +020012541base64
12542 Converts a binary input sample to a base64 string. It is used to log or
12543 transfer binary content in a way that can be reliably transferred (eg:
12544 an SSL ID can be copied in a header).
12545
Willy Tarreau97707872015-01-27 15:12:13 +010012546bool
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012547 Returns a boolean TRUE if the input value of type signed integer is
Willy Tarreau97707872015-01-27 15:12:13 +010012548 non-null, otherwise returns FALSE. Used in conjunction with and(), it can be
12549 used to report true/false for bit testing on input values (eg: verify the
12550 presence of a flag).
12551
Emeric Brun54c4ac82014-11-03 15:32:43 +010012552bytes(<offset>[,<length>])
12553 Extracts some bytes from an input binary sample. The result is a binary
12554 sample starting at an offset (in bytes) of the original sample and
Tim Düsterhus4896c442016-11-29 02:15:19 +010012555 optionally truncated at the given length.
Emeric Brun54c4ac82014-11-03 15:32:43 +010012556
Willy Tarreau97707872015-01-27 15:12:13 +010012557cpl
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012558 Takes the input value of type signed integer, applies a ones-complement
12559 (flips all bits) and returns the result as an signed integer.
Willy Tarreau97707872015-01-27 15:12:13 +010012560
Willy Tarreau80599772015-01-20 19:35:24 +010012561crc32([<avalanche>])
12562 Hashes a binary input sample into an unsigned 32-bit quantity using the CRC32
12563 hash function. Optionally, it is possible to apply a full avalanche hash
12564 function to the output if the optional <avalanche> argument equals 1. This
12565 converter uses the same functions as used by the various hash-based load
12566 balancing algorithms, so it will provide exactly the same results. It is
12567 provided for compatibility with other software which want a CRC32 to be
12568 computed on some input keys, so it follows the most common implementation as
12569 found in Ethernet, Gzip, PNG, etc... It is slower than the other algorithms
12570 but may provide a better or at least less predictable distribution. It must
12571 not be used for security purposes as a 32-bit hash is trivial to break. See
12572 also "djb2", "sdbm", "wt6" and the "hash-type" directive.
12573
David Carlier29b3ca32015-09-25 14:09:21 +010012574da-csv-conv(<prop>[,<prop>*])
David Carlier4542b102015-06-01 13:54:29 +020012575 Asks the DeviceAtlas converter to identify the User Agent string passed on
12576 input, and to emit a string made of the concatenation of the properties
12577 enumerated in argument, delimited by the separator defined by the global
12578 keyword "deviceatlas-property-separator", or by default the pipe character
David Carlier840b0242016-03-16 10:09:55 +000012579 ('|'). There's a limit of 12 different properties imposed by the haproxy
David Carlier4542b102015-06-01 13:54:29 +020012580 configuration language.
12581
12582 Example:
12583 frontend www
Cyril Bonté307ee1e2015-09-28 23:16:06 +020012584 bind *:8881
12585 default_backend servers
David Carlier840b0242016-03-16 10:09:55 +000012586 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 +020012587
Thierry FOURNIER9687c772015-05-07 15:46:29 +020012588debug
12589 This converter is used as debug tool. It dumps on screen the content and the
12590 type of the input sample. The sample is returned as is on its output. This
12591 converter only exists when haproxy was built with debugging enabled.
12592
Willy Tarreau97707872015-01-27 15:12:13 +010012593div(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012594 Divides the input value of type signed integer by <value>, and returns the
12595 result as an signed integer. If <value> is null, the largest unsigned
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012596 integer is returned (typically 2^63-1). <value> can be a numeric value or a
Daniel Schneller0b547052016-03-21 20:46:57 +010012597 variable name. The name of the variable starts with an indication about its
12598 scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012599 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012600 "sess" : the variable is shared with the whole session
12601 "txn" : the variable is shared with the transaction (request and response)
12602 "req" : the variable is shared only during request processing
12603 "res" : the variable is shared only during response processing
12604 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012605 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012606
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020012607djb2([<avalanche>])
12608 Hashes a binary input sample into an unsigned 32-bit quantity using the DJB2
12609 hash function. Optionally, it is possible to apply a full avalanche hash
12610 function to the output if the optional <avalanche> argument equals 1. This
12611 converter uses the same functions as used by the various hash-based load
12612 balancing algorithms, so it will provide exactly the same results. It is
12613 mostly intended for debugging, but can be used as a stick-table entry to
12614 collect rough statistics. It must not be used for security purposes as a
Willy Tarreau80599772015-01-20 19:35:24 +010012615 32-bit hash is trivial to break. See also "crc32", "sdbm", "wt6" and the
12616 "hash-type" directive.
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020012617
Willy Tarreau97707872015-01-27 15:12:13 +010012618even
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012619 Returns a boolean TRUE if the input value of type signed integer is even
Willy Tarreau97707872015-01-27 15:12:13 +010012620 otherwise returns FALSE. It is functionally equivalent to "not,and(1),bool".
12621
Emeric Brunf399b0d2014-11-03 17:07:03 +010012622field(<index>,<delimiters>)
12623 Extracts the substring at the given index considering given delimiters from
12624 an input string. Indexes start at 1 and delimiters are a string formatted
12625 list of chars.
12626
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012627hex
12628 Converts a binary input sample to an hex string containing two hex digits per
12629 input byte. It is used to log or transfer hex dumps of some binary input data
12630 in a way that can be reliably transferred (eg: an SSL ID can be copied in a
12631 header).
Thierry FOURNIER2f49d6d2014-03-12 15:01:52 +010012632
Dragan Dosen3f957b22017-10-24 09:27:34 +020012633hex2i
12634 Converts a hex string containing two hex digits per input byte to an
12635 integer. If the input value can not be converted, then zero is returned.
12636
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012637http_date([<offset>])
12638 Converts an integer supposed to contain a date since epoch to a string
12639 representing this date in a format suitable for use in HTTP header fields. If
12640 an offset value is specified, then it is a number of seconds that is added to
12641 the date before the conversion is operated. This is particularly useful to
12642 emit Date header fields, Expires values in responses when combined with a
12643 positive offset, or Last-Modified values when the offset is negative.
Willy Tarreau74ca5042013-06-11 23:12:07 +020012644
Willy Tarreaud9f316a2014-07-10 14:03:38 +020012645in_table(<table>)
12646 Uses the string representation of the input sample to perform a look up in
12647 the specified table. If the key is not found in the table, a boolean false
12648 is returned. Otherwise a boolean true is returned. This can be used to verify
12649 the presence of a certain key in a table tracking some elements (eg: whether
12650 or not a source IP address or an Authorization header was already seen).
12651
Willy Tarreauffcb2e42014-07-10 16:29:08 +020012652ipmask(<mask>)
12653 Apply a mask to an IPv4 address, and use the result for lookups and storage.
12654 This can be used to make all hosts within a certain mask to share the same
12655 table entries and as such use the same server. The mask can be passed in
12656 dotted form (eg: 255.255.255.0) or in CIDR form (eg: 24).
12657
Thierry FOURNIER317e1c42014-08-12 10:20:47 +020012658json([<input-code>])
12659 Escapes the input string and produces an ASCII ouput string ready to use as a
12660 JSON string. The converter tries to decode the input string according to the
Herve COMMOWICK8dfe8632016-08-05 12:01:20 +020012661 <input-code> parameter. It can be "ascii", "utf8", "utf8s", "utf8p" or
Thierry FOURNIER317e1c42014-08-12 10:20:47 +020012662 "utf8ps". The "ascii" decoder never fails. The "utf8" decoder detects 3 types
12663 of errors:
12664 - bad UTF-8 sequence (lone continuation byte, bad number of continuation
12665 bytes, ...)
12666 - invalid range (the decoded value is within a UTF-8 prohibited range),
12667 - code overlong (the value is encoded with more bytes than necessary).
12668
12669 The UTF-8 JSON encoding can produce a "too long value" error when the UTF-8
12670 character is greater than 0xffff because the JSON string escape specification
12671 only authorizes 4 hex digits for the value encoding. The UTF-8 decoder exists
12672 in 4 variants designated by a combination of two suffix letters : "p" for
12673 "permissive" and "s" for "silently ignore". The behaviors of the decoders
12674 are :
12675 - "ascii" : never fails ;
12676 - "utf8" : fails on any detected errors ;
12677 - "utf8s" : never fails, but removes characters corresponding to errors ;
12678 - "utf8p" : accepts and fixes the overlong errors, but fails on any other
12679 error ;
12680 - "utf8ps" : never fails, accepts and fixes the overlong errors, but removes
12681 characters corresponding to the other errors.
12682
12683 This converter is particularly useful for building properly escaped JSON for
12684 logging to servers which consume JSON-formated traffic logs.
12685
12686 Example:
Thierry FOURNIER317e1c42014-08-12 10:20:47 +020012687 capture request header Host len 15
Herve COMMOWICK8dfe8632016-08-05 12:01:20 +020012688 capture request header user-agent len 150
12689 log-format '{"ip":"%[src]","user-agent":"%[capture.req.hdr(1),json(utf8s)]"}'
Thierry FOURNIER317e1c42014-08-12 10:20:47 +020012690
12691 Input request from client 127.0.0.1:
12692 GET / HTTP/1.0
12693 User-Agent: Very "Ugly" UA 1/2
12694
12695 Output log:
12696 {"ip":"127.0.0.1","user-agent":"Very \"Ugly\" UA 1\/2"}
12697
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012698language(<value>[,<default>])
12699 Returns the value with the highest q-factor from a list as extracted from the
12700 "accept-language" header using "req.fhdr". Values with no q-factor have a
12701 q-factor of 1. Values with a q-factor of 0 are dropped. Only values which
12702 belong to the list of semi-colon delimited <values> will be considered. The
12703 argument <value> syntax is "lang[;lang[;lang[;...]]]". If no value matches the
12704 given list and a default value is provided, it is returned. Note that language
12705 names may have a variant after a dash ('-'). If this variant is present in the
12706 list, it will be matched, but if it is not, only the base language is checked.
12707 The match is case-sensitive, and the output string is always one of those
12708 provided in arguments. The ordering of arguments is meaningless, only the
12709 ordering of the values in the request counts, as the first value among
12710 multiple sharing the same q-factor is used.
Thierry FOURNIERad903512014-04-11 17:51:01 +020012711
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012712 Example :
Thierry FOURNIERad903512014-04-11 17:51:01 +020012713
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012714 # this configuration switches to the backend matching a
12715 # given language based on the request :
Thierry FOURNIERad903512014-04-11 17:51:01 +020012716
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012717 acl es req.fhdr(accept-language),language(es;fr;en) -m str es
12718 acl fr req.fhdr(accept-language),language(es;fr;en) -m str fr
12719 acl en req.fhdr(accept-language),language(es;fr;en) -m str en
12720 use_backend spanish if es
12721 use_backend french if fr
12722 use_backend english if en
12723 default_backend choose_your_language
Thierry FOURNIERad903512014-04-11 17:51:01 +020012724
Willy Tarreauffcb2e42014-07-10 16:29:08 +020012725lower
12726 Convert a string sample to lower case. This can only be placed after a string
12727 sample fetch function or after a transformation keyword returning a string
12728 type. The result is of type string.
12729
Willy Tarreau0dbfdba2014-07-10 16:37:47 +020012730ltime(<format>[,<offset>])
12731 Converts an integer supposed to contain a date since epoch to a string
12732 representing this date in local time using a format defined by the <format>
12733 string using strftime(3). The purpose is to allow any date format to be used
12734 in logs. An optional <offset> in seconds may be applied to the input date
12735 (positive or negative). See the strftime() man page for the format supported
12736 by your operating system. See also the utime converter.
12737
12738 Example :
12739
12740 # Emit two colons, one with the local time and another with ip:port
12741 # Eg: 20140710162350 127.0.0.1:57325
12742 log-format %[date,ltime(%Y%m%d%H%M%S)]\ %ci:%cp
12743
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012744map(<map_file>[,<default_value>])
12745map_<match_type>(<map_file>[,<default_value>])
12746map_<match_type>_<output_type>(<map_file>[,<default_value>])
12747 Search the input value from <map_file> using the <match_type> matching method,
12748 and return the associated value converted to the type <output_type>. If the
12749 input value cannot be found in the <map_file>, the converter returns the
12750 <default_value>. If the <default_value> is not set, the converter fails and
12751 acts as if no input value could be fetched. If the <match_type> is not set, it
12752 defaults to "str". Likewise, if the <output_type> is not set, it defaults to
12753 "str". For convenience, the "map" keyword is an alias for "map_str" and maps a
12754 string to another string.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012755
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012756 It is important to avoid overlapping between the keys : IP addresses and
12757 strings are stored in trees, so the first of the finest match will be used.
12758 Other keys are stored in lists, so the first matching occurrence will be used.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012759
Tim Düsterhus4896c442016-11-29 02:15:19 +010012760 The following array contains the list of all map functions available sorted by
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012761 input type, match type and output type.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012762
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012763 input type | match method | output type str | output type int | output type ip
12764 -----------+--------------+-----------------+-----------------+---------------
12765 str | str | map_str | map_str_int | map_str_ip
12766 -----------+--------------+-----------------+-----------------+---------------
Willy Tarreau787a4c02014-05-10 07:55:30 +020012767 str | beg | map_beg | map_beg_int | map_end_ip
12768 -----------+--------------+-----------------+-----------------+---------------
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012769 str | sub | map_sub | map_sub_int | map_sub_ip
12770 -----------+--------------+-----------------+-----------------+---------------
12771 str | dir | map_dir | map_dir_int | map_dir_ip
12772 -----------+--------------+-----------------+-----------------+---------------
12773 str | dom | map_dom | map_dom_int | map_dom_ip
12774 -----------+--------------+-----------------+-----------------+---------------
12775 str | end | map_end | map_end_int | map_end_ip
12776 -----------+--------------+-----------------+-----------------+---------------
Ruoshan Huang3c5e3742016-12-02 16:25:31 +080012777 str | reg | map_reg | map_reg_int | map_reg_ip
12778 -----------+--------------+-----------------+-----------------+---------------
12779 str | reg | map_regm | map_reg_int | map_reg_ip
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012780 -----------+--------------+-----------------+-----------------+---------------
12781 int | int | map_int | map_int_int | map_int_ip
12782 -----------+--------------+-----------------+-----------------+---------------
12783 ip | ip | map_ip | map_ip_int | map_ip_ip
12784 -----------+--------------+-----------------+-----------------+---------------
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012785
Thierry Fournier8feaa662016-02-10 22:55:20 +010012786 The special map called "map_regm" expect matching zone in the regular
12787 expression and modify the output replacing back reference (like "\1") by
12788 the corresponding match text.
12789
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012790 The file contains one key + value per line. Lines which start with '#' are
12791 ignored, just like empty lines. Leading tabs and spaces are stripped. The key
12792 is then the first "word" (series of non-space/tabs characters), and the value
12793 is what follows this series of space/tab till the end of the line excluding
12794 trailing spaces/tabs.
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010012795
Thierry FOURNIER060762e2014-04-23 13:29:15 +020012796 Example :
12797
12798 # this is a comment and is ignored
12799 2.22.246.0/23 United Kingdom \n
12800 <-><-----------><--><------------><---->
12801 | | | | `- trailing spaces ignored
12802 | | | `---------- value
12803 | | `-------------------- middle spaces ignored
12804 | `---------------------------- key
12805 `------------------------------------ leading spaces ignored
12806
Willy Tarreau97707872015-01-27 15:12:13 +010012807mod(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012808 Divides the input value of type signed integer by <value>, and returns the
12809 remainder as an signed integer. If <value> is null, then zero is returned.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012810 <value> can be a numeric value or a variable name. The name of the variable
Daniel Schneller0b547052016-03-21 20:46:57 +010012811 starts with an indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012812 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012813 "sess" : the variable is shared with the whole session
12814 "txn" : the variable is shared with the transaction (request and response)
12815 "req" : the variable is shared only during request processing
12816 "res" : the variable is shared only during response processing
12817 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012818 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012819
12820mul(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012821 Multiplies the input value of type signed integer by <value>, and returns
Thierry FOURNIER00c005c2015-07-08 01:10:21 +020012822 the product as an signed integer. In case of overflow, the largest possible
12823 value for the sign is returned so that the operation doesn't wrap around.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012824 <value> can be a numeric value or a variable name. The name of the variable
Daniel Schneller0b547052016-03-21 20:46:57 +010012825 starts with an indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012826 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012827 "sess" : the variable is shared with the whole session
12828 "txn" : the variable is shared with the transaction (request and response)
12829 "req" : the variable is shared only during request processing
12830 "res" : the variable is shared only during response processing
12831 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012832 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012833
Nenad Merdanovicb7e7c472017-03-12 21:56:55 +010012834nbsrv
12835 Takes an input value of type string, interprets it as a backend name and
12836 returns the number of usable servers in that backend. Can be used in places
12837 where we want to look up a backend from a dynamic name, like a result of a
12838 map lookup.
12839
Willy Tarreau97707872015-01-27 15:12:13 +010012840neg
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012841 Takes the input value of type signed integer, computes the opposite value,
12842 and returns the remainder as an signed integer. 0 is identity. This operator
12843 is provided for reversed subtracts : in order to subtract the input from a
12844 constant, simply perform a "neg,add(value)".
Willy Tarreau97707872015-01-27 15:12:13 +010012845
12846not
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012847 Returns a boolean FALSE if the input value of type signed integer is
Willy Tarreau97707872015-01-27 15:12:13 +010012848 non-null, otherwise returns TRUE. Used in conjunction with and(), it can be
12849 used to report true/false for bit testing on input values (eg: verify the
12850 absence of a flag).
12851
12852odd
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012853 Returns a boolean TRUE if the input value of type signed integer is odd
Willy Tarreau97707872015-01-27 15:12:13 +010012854 otherwise returns FALSE. It is functionally equivalent to "and(1),bool".
12855
12856or(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012857 Performs a bitwise "OR" between <value> and the input value of type signed
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012858 integer, and returns the result as an signed integer. <value> can be a
Daniel Schneller0b547052016-03-21 20:46:57 +010012859 numeric value or a variable name. The name of the variable starts with an
12860 indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012861 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012862 "sess" : the variable is shared with the whole session
12863 "txn" : the variable is shared with the transaction (request and response)
12864 "req" : the variable is shared only during request processing
12865 "res" : the variable is shared only during response processing
12866 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012867 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012868
Willy Tarreauc4dc3502015-01-23 20:39:28 +010012869regsub(<regex>,<subst>[,<flags>])
Willy Tarreau7eda8492015-01-20 19:47:06 +010012870 Applies a regex-based substitution to the input string. It does the same
12871 operation as the well-known "sed" utility with "s/<regex>/<subst>/". By
12872 default it will replace in the input string the first occurrence of the
12873 largest part matching the regular expression <regex> with the substitution
12874 string <subst>. It is possible to replace all occurrences instead by adding
12875 the flag "g" in the third argument <flags>. It is also possible to make the
12876 regex case insensitive by adding the flag "i" in <flags>. Since <flags> is a
12877 string, it is made up from the concatenation of all desired flags. Thus if
12878 both "i" and "g" are desired, using "gi" or "ig" will have the same effect.
12879 It is important to note that due to the current limitations of the
Baptiste Assmann66025d82016-03-06 23:36:48 +010012880 configuration parser, some characters such as closing parenthesis, closing
12881 square brackets or comma are not possible to use in the arguments. The first
12882 use of this converter is to replace certain characters or sequence of
12883 characters with other ones.
Willy Tarreau7eda8492015-01-20 19:47:06 +010012884
12885 Example :
12886
12887 # de-duplicate "/" in header "x-path".
12888 # input: x-path: /////a///b/c/xzxyz/
12889 # output: x-path: /a/b/c/xzxyz/
12890 http-request set-header x-path %[hdr(x-path),regsub(/+,/,g)]
12891
Thierry FOURNIER35ab2752015-05-28 13:22:03 +020012892capture-req(<id>)
12893 Capture the string entry in the request slot <id> and returns the entry as
12894 is. If the slot doesn't exist, the capture fails silently.
12895
12896 See also: "declare capture", "http-request capture",
Baptiste Assmann5ac425c2015-10-21 23:13:46 +020012897 "http-response capture", "capture.req.hdr" and
12898 "capture.res.hdr" (sample fetches).
Thierry FOURNIER35ab2752015-05-28 13:22:03 +020012899
12900capture-res(<id>)
12901 Capture the string entry in the response slot <id> and returns the entry as
12902 is. If the slot doesn't exist, the capture fails silently.
12903
12904 See also: "declare capture", "http-request capture",
Baptiste Assmann5ac425c2015-10-21 23:13:46 +020012905 "http-response capture", "capture.req.hdr" and
12906 "capture.res.hdr" (sample fetches).
Thierry FOURNIER35ab2752015-05-28 13:22:03 +020012907
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020012908sdbm([<avalanche>])
12909 Hashes a binary input sample into an unsigned 32-bit quantity using the SDBM
12910 hash function. Optionally, it is possible to apply a full avalanche hash
12911 function to the output if the optional <avalanche> argument equals 1. This
12912 converter uses the same functions as used by the various hash-based load
12913 balancing algorithms, so it will provide exactly the same results. It is
12914 mostly intended for debugging, but can be used as a stick-table entry to
12915 collect rough statistics. It must not be used for security purposes as a
Willy Tarreau80599772015-01-20 19:35:24 +010012916 32-bit hash is trivial to break. See also "crc32", "djb2", "wt6" and the
12917 "hash-type" directive.
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020012918
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020012919set-var(<var name>)
Daniel Schneller0b547052016-03-21 20:46:57 +010012920 Sets a variable with the input content and returns the content on the output as
12921 is. The variable keeps the value and the associated input type. The name of the
12922 variable starts with an indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012923 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012924 "sess" : the variable is shared with the whole session
12925 "txn" : the variable is shared with the transaction (request and
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020012926 response),
Daniel Schneller0b547052016-03-21 20:46:57 +010012927 "req" : the variable is shared only during request processing,
12928 "res" : the variable is shared only during response processing.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020012929 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012930 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020012931
Dragan Dosen6e5a9ca2017-10-24 09:18:23 +020012932sha1
12933 Converts a binary input sample to a SHA1 digest. The result is a binary
12934 sample with length of 20 bytes.
12935
Willy Tarreau97707872015-01-27 15:12:13 +010012936sub(<value>)
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020012937 Subtracts <value> from the input value of type signed integer, and returns
12938 the result as an signed integer. Note: in order to subtract the input from
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012939 a constant, simply perform a "neg,add(value)". <value> can be a numeric value
Daniel Schneller0b547052016-03-21 20:46:57 +010012940 or a variable name. The name of the variable starts with an indication about
12941 its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010012942 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010012943 "sess" : the variable is shared with the whole session
12944 "txn" : the variable is shared with the transaction (request and
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012945 response),
Daniel Schneller0b547052016-03-21 20:46:57 +010012946 "req" : the variable is shared only during request processing,
12947 "res" : the variable is shared only during response processing.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020012948 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010012949 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010012950
Willy Tarreaud9f316a2014-07-10 14:03:38 +020012951table_bytes_in_rate(<table>)
12952 Uses the string representation of the input sample to perform a look up in
12953 the specified table. If the key is not found in the table, integer value zero
12954 is returned. Otherwise the converter returns the average client-to-server
12955 bytes rate associated with the input sample in the designated table, measured
12956 in amount of bytes over the period configured in the table. See also the
12957 sc_bytes_in_rate sample fetch keyword.
12958
12959
12960table_bytes_out_rate(<table>)
12961 Uses the string representation of the input sample to perform a look up in
12962 the specified table. If the key is not found in the table, integer value zero
12963 is returned. Otherwise the converter returns the average server-to-client
12964 bytes rate associated with the input sample in the designated table, measured
12965 in amount of bytes over the period configured in the table. See also the
12966 sc_bytes_out_rate sample fetch keyword.
12967
12968table_conn_cnt(<table>)
12969 Uses the string representation of the input sample to perform a look up in
12970 the specified table. If the key is not found in the table, integer value zero
12971 is returned. Otherwise the converter returns the cumulated amount of incoming
12972 connections associated with the input sample in the designated table. See
12973 also the sc_conn_cnt sample fetch keyword.
12974
12975table_conn_cur(<table>)
12976 Uses the string representation of the input sample to perform a look up in
12977 the specified table. If the key is not found in the table, integer value zero
12978 is returned. Otherwise the converter returns the current amount of concurrent
12979 tracked connections associated with the input sample in the designated table.
12980 See also the sc_conn_cur sample fetch keyword.
12981
12982table_conn_rate(<table>)
12983 Uses the string representation of the input sample to perform a look up in
12984 the specified table. If the key is not found in the table, integer value zero
12985 is returned. Otherwise the converter returns the average incoming connection
12986 rate associated with the input sample in the designated table. See also the
12987 sc_conn_rate sample fetch keyword.
12988
Thierry FOURNIER236657b2015-08-19 08:25:14 +020012989table_gpt0(<table>)
12990 Uses the string representation of the input sample to perform a look up in
12991 the specified table. If the key is not found in the table, boolean value zero
12992 is returned. Otherwise the converter returns the current value of the first
12993 general purpose tag associated with the input sample in the designated table.
12994 See also the sc_get_gpt0 sample fetch keyword.
12995
Willy Tarreaud9f316a2014-07-10 14:03:38 +020012996table_gpc0(<table>)
12997 Uses the string representation of the input sample to perform a look up in
12998 the specified table. If the key is not found in the table, integer value zero
12999 is returned. Otherwise the converter returns the current value of the first
13000 general purpose counter associated with the input sample in the designated
13001 table. See also the sc_get_gpc0 sample fetch keyword.
13002
13003table_gpc0_rate(<table>)
13004 Uses the string representation of the input sample to perform a look up in
13005 the specified table. If the key is not found in the table, integer value zero
13006 is returned. Otherwise the converter returns the frequency which the gpc0
13007 counter was incremented over the configured period in the table, associated
13008 with the input sample in the designated table. See also the sc_get_gpc0_rate
13009 sample fetch keyword.
13010
13011table_http_err_cnt(<table>)
13012 Uses the string representation of the input sample to perform a look up in
13013 the specified table. If the key is not found in the table, integer value zero
13014 is returned. Otherwise the converter returns the cumulated amount of HTTP
13015 errors associated with the input sample in the designated table. See also the
13016 sc_http_err_cnt sample fetch keyword.
13017
13018table_http_err_rate(<table>)
13019 Uses the string representation of the input sample to perform a look up in
13020 the specified table. If the key is not found in the table, integer value zero
13021 is returned. Otherwise the average rate of HTTP errors associated with the
13022 input sample in the designated table, measured in amount of errors over the
13023 period configured in the table. See also the sc_http_err_rate sample fetch
13024 keyword.
13025
13026table_http_req_cnt(<table>)
13027 Uses the string representation of the input sample to perform a look up in
13028 the specified table. If the key is not found in the table, integer value zero
13029 is returned. Otherwise the converter returns the cumulated amount of HTTP
13030 requests associated with the input sample in the designated table. See also
13031 the sc_http_req_cnt sample fetch keyword.
13032
13033table_http_req_rate(<table>)
13034 Uses the string representation of the input sample to perform a look up in
13035 the specified table. If the key is not found in the table, integer value zero
13036 is returned. Otherwise the average rate of HTTP requests associated with the
13037 input sample in the designated table, measured in amount of requests over the
13038 period configured in the table. See also the sc_http_req_rate sample fetch
13039 keyword.
13040
13041table_kbytes_in(<table>)
13042 Uses the string representation of the input sample to perform a look up in
13043 the specified table. If the key is not found in the table, integer value zero
13044 is returned. Otherwise the converter returns the cumulated amount of client-
13045 to-server data associated with the input sample in the designated table,
13046 measured in kilobytes. The test is currently performed on 32-bit integers,
13047 which limits values to 4 terabytes. See also the sc_kbytes_in sample fetch
13048 keyword.
13049
13050table_kbytes_out(<table>)
13051 Uses the string representation of the input sample to perform a look up in
13052 the specified table. If the key is not found in the table, integer value zero
13053 is returned. Otherwise the converter returns the cumulated amount of server-
13054 to-client data associated with the input sample in the designated table,
13055 measured in kilobytes. The test is currently performed on 32-bit integers,
13056 which limits values to 4 terabytes. See also the sc_kbytes_out sample fetch
13057 keyword.
13058
13059table_server_id(<table>)
13060 Uses the string representation of the input sample to perform a look up in
13061 the specified table. If the key is not found in the table, integer value zero
13062 is returned. Otherwise the converter returns the server ID associated with
13063 the input sample in the designated table. A server ID is associated to a
13064 sample by a "stick" rule when a connection to a server succeeds. A server ID
13065 zero means that no server is associated with this key.
13066
13067table_sess_cnt(<table>)
13068 Uses the string representation of the input sample to perform a look up in
13069 the specified table. If the key is not found in the table, integer value zero
13070 is returned. Otherwise the converter returns the cumulated amount of incoming
13071 sessions associated with the input sample in the designated table. Note that
13072 a session here refers to an incoming connection being accepted by the
13073 "tcp-request connection" rulesets. See also the sc_sess_cnt sample fetch
13074 keyword.
13075
13076table_sess_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 session
13080 rate associated with the input sample in the designated table. Note that a
13081 session here refers to an incoming connection being accepted by the
13082 "tcp-request connection" rulesets. See also the sc_sess_rate sample fetch
13083 keyword.
13084
13085table_trackers(<table>)
13086 Uses the string representation of the input sample to perform a look up in
13087 the specified table. If the key is not found in the table, integer value zero
13088 is returned. Otherwise the converter returns the current amount of concurrent
13089 connections tracking the same key as the input sample in the designated
13090 table. It differs from table_conn_cur in that it does not rely on any stored
13091 information but on the table's reference count (the "use" value which is
13092 returned by "show table" on the CLI). This may sometimes be more suited for
13093 layer7 tracking. It can be used to tell a server how many concurrent
13094 connections there are from a given address for example. See also the
13095 sc_trackers sample fetch keyword.
13096
Willy Tarreauffcb2e42014-07-10 16:29:08 +020013097upper
13098 Convert a string sample to upper case. This can only be placed after a string
13099 sample fetch function or after a transformation keyword returning a string
13100 type. The result is of type string.
13101
Thierry FOURNIER82ff3c92015-05-07 15:46:20 +020013102url_dec
13103 Takes an url-encoded string provided as input and returns the decoded
13104 version as output. The input and the output are of type string.
13105
Christopher Faulet85d79c92016-11-09 16:54:56 +010013106unset-var(<var name>)
13107 Unsets a variable if the input content is defined. The name of the variable
13108 starts with an indication about its scope. The scopes allowed are:
13109 "proc" : the variable is shared with the whole process
13110 "sess" : the variable is shared with the whole session
13111 "txn" : the variable is shared with the transaction (request and
13112 response),
13113 "req" : the variable is shared only during request processing,
13114 "res" : the variable is shared only during response processing.
13115 This prefix is followed by a name. The separator is a '.'. The name may only
13116 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
13117
Willy Tarreau0dbfdba2014-07-10 16:37:47 +020013118utime(<format>[,<offset>])
13119 Converts an integer supposed to contain a date since epoch to a string
13120 representing this date in UTC time using a format defined by the <format>
13121 string using strftime(3). The purpose is to allow any date format to be used
13122 in logs. An optional <offset> in seconds may be applied to the input date
13123 (positive or negative). See the strftime() man page for the format supported
13124 by your operating system. See also the ltime converter.
13125
13126 Example :
13127
13128 # Emit two colons, one with the UTC time and another with ip:port
13129 # Eg: 20140710162350 127.0.0.1:57325
13130 log-format %[date,utime(%Y%m%d%H%M%S)]\ %ci:%cp
13131
Emeric Brunc9a0f6d2014-11-25 14:09:01 +010013132word(<index>,<delimiters>)
13133 Extracts the nth word considering given delimiters from an input string.
13134 Indexes start at 1 and delimiters are a string formatted list of chars.
13135
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020013136wt6([<avalanche>])
13137 Hashes a binary input sample into an unsigned 32-bit quantity using the WT6
13138 hash function. Optionally, it is possible to apply a full avalanche hash
13139 function to the output if the optional <avalanche> argument equals 1. This
13140 converter uses the same functions as used by the various hash-based load
13141 balancing algorithms, so it will provide exactly the same results. It is
13142 mostly intended for debugging, but can be used as a stick-table entry to
13143 collect rough statistics. It must not be used for security purposes as a
Willy Tarreau80599772015-01-20 19:35:24 +010013144 32-bit hash is trivial to break. See also "crc32", "djb2", "sdbm", and the
13145 "hash-type" directive.
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020013146
Willy Tarreau97707872015-01-27 15:12:13 +010013147xor(<value>)
13148 Performs a bitwise "XOR" (exclusive OR) between <value> and the input value
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020013149 of type signed integer, and returns the result as an signed integer.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020013150 <value> can be a numeric value or a variable name. The name of the variable
Daniel Schneller0b547052016-03-21 20:46:57 +010013151 starts with an indication about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010013152 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010013153 "sess" : the variable is shared with the whole session
13154 "txn" : the variable is shared with the transaction (request and
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020013155 response),
Daniel Schneller0b547052016-03-21 20:46:57 +010013156 "req" : the variable is shared only during request processing,
13157 "res" : the variable is shared only during response processing.
Thierry FOURNIER5d86fae2015-07-07 21:10:16 +020013158 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010013159 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Willy Tarreau97707872015-01-27 15:12:13 +010013160
Thierry FOURNIER01e09742016-12-26 11:46:11 +010013161xxh32([<seed>])
13162 Hashes a binary input sample into an unsigned 32-bit quantity using the 32-bit
13163 variant of the XXHash hash function. This hash supports a seed which defaults
13164 to zero but a different value maybe passed as the <seed> argument. This hash
13165 is known to be very good and very fast so it can be used to hash URLs and/or
13166 URL parameters for use as stick-table keys to collect statistics with a low
13167 collision rate, though care must be taken as the algorithm is not considered
13168 as cryptographically secure.
13169
13170xxh64([<seed>])
13171 Hashes a binary input sample into a signed 64-bit quantity using the 64-bit
13172 variant of the XXHash hash function. This hash supports a seed which defaults
13173 to zero but a different value maybe passed as the <seed> argument. This hash
13174 is known to be very good and very fast so it can be used to hash URLs and/or
13175 URL parameters for use as stick-table keys to collect statistics with a low
13176 collision rate, though care must be taken as the algorithm is not considered
13177 as cryptographically secure.
13178
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010013179
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200131807.3.2. Fetching samples from internal states
Willy Tarreau74ca5042013-06-11 23:12:07 +020013181--------------------------------------------
13182
13183A first set of sample fetch methods applies to internal information which does
13184not even relate to any client information. These ones are sometimes used with
13185"monitor-fail" directives to report an internal status to external watchers.
13186The sample fetch methods described in this section are usable anywhere.
13187
13188always_false : boolean
13189 Always returns the boolean "false" value. It may be used with ACLs as a
13190 temporary replacement for another one when adjusting configurations.
13191
13192always_true : boolean
13193 Always returns the boolean "true" value. It may be used with ACLs as a
13194 temporary replacement for another one when adjusting configurations.
13195
13196avg_queue([<backend>]) : integer
Willy Tarreaud63335a2010-02-26 12:56:52 +010013197 Returns the total number of queued connections of the designated backend
Willy Tarreau74ca5042013-06-11 23:12:07 +020013198 divided by the number of active servers. The current backend is used if no
13199 backend is specified. This is very similar to "queue" except that the size of
13200 the farm is considered, in order to give a more accurate measurement of the
13201 time it may take for a new connection to be processed. The main usage is with
13202 ACL to return a sorry page to new users when it becomes certain they will get
13203 a degraded service, or to pass to the backend servers in a header so that
13204 they decide to work in degraded mode or to disable some functions to speed up
13205 the processing a bit. Note that in the event there would not be any active
13206 server anymore, twice the number of queued connections would be considered as
13207 the measured value. This is a fair estimate, as we expect one server to get
13208 back soon anyway, but we still prefer to send new traffic to another backend
13209 if in better shape. See also the "queue", "be_conn", and "be_sess_rate"
13210 sample fetches.
Krzysztof Piotr Oledzki346f76d2010-01-12 21:59:30 +010013211
Willy Tarreau74ca5042013-06-11 23:12:07 +020013212be_conn([<backend>]) : integer
Willy Tarreaua36af912009-10-10 12:02:45 +020013213 Applies to the number of currently established connections on the backend,
13214 possibly including the connection being evaluated. If no backend name is
13215 specified, the current one is used. But it is also possible to check another
13216 backend. It can be used to use a specific farm when the nominal one is full.
13217 See also the "fe_conn", "queue" and "be_sess_rate" criteria.
Willy Tarreau6a06a402007-07-15 20:15:28 +020013218
Willy Tarreau74ca5042013-06-11 23:12:07 +020013219be_sess_rate([<backend>]) : integer
13220 Returns an integer value corresponding to the sessions creation rate on the
13221 backend, in number of new sessions per second. This is used with ACLs to
13222 switch to an alternate backend when an expensive or fragile one reaches too
13223 high a session rate, or to limit abuse of service (eg. prevent sucking of an
13224 online dictionary). It can also be useful to add this element to logs using a
13225 log-format directive.
Willy Tarreaud63335a2010-02-26 12:56:52 +010013226
13227 Example :
13228 # Redirect to an error page if the dictionary is requested too often
13229 backend dynamic
13230 mode http
13231 acl being_scanned be_sess_rate gt 100
13232 redirect location /denied.html if being_scanned
Willy Tarreau0ba27502007-12-24 16:55:16 +010013233
Thierry FOURNIERcc103292015-06-06 19:30:17 +020013234bin(<hexa>) : bin
13235 Returns a binary chain. The input is the hexadecimal representation
13236 of the string.
13237
13238bool(<bool>) : bool
13239 Returns a boolean value. <bool> can be 'true', 'false', '1' or '0'.
13240 'false' and '0' are the same. 'true' and '1' are the same.
13241
Willy Tarreau74ca5042013-06-11 23:12:07 +020013242connslots([<backend>]) : integer
13243 Returns an integer value corresponding to the number of connection slots
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030013244 still available in the backend, by totaling the maximum amount of
Willy Tarreau74ca5042013-06-11 23:12:07 +020013245 connections on all servers and the maximum queue size. This is probably only
13246 used with ACLs.
Tait Clarridge7896d522012-12-05 21:39:31 -050013247
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080013248 The basic idea here is to be able to measure the number of connection "slots"
Willy Tarreau55165fe2009-05-10 12:02:55 +020013249 still available (connection + queue), so that anything beyond that (intended
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080013250 usage; see "use_backend" keyword) can be redirected to a different backend.
13251
Willy Tarreau55165fe2009-05-10 12:02:55 +020013252 'connslots' = number of available server connection slots, + number of
13253 available server queue slots.
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080013254
Willy Tarreaua36af912009-10-10 12:02:45 +020013255 Note that while "fe_conn" may be used, "connslots" comes in especially
Willy Tarreau55165fe2009-05-10 12:02:55 +020013256 useful when you have a case of traffic going to one single ip, splitting into
Willy Tarreau74ca5042013-06-11 23:12:07 +020013257 multiple backends (perhaps using ACLs to do name-based load balancing) and
Willy Tarreau55165fe2009-05-10 12:02:55 +020013258 you want to be able to differentiate between different backends, and their
13259 available "connslots". Also, whereas "nbsrv" only measures servers that are
Willy Tarreau74ca5042013-06-11 23:12:07 +020013260 actually *down*, this fetch is more fine-grained and looks into the number of
Willy Tarreaua36af912009-10-10 12:02:45 +020013261 available connection slots as well. See also "queue" and "avg_queue".
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080013262
Willy Tarreau55165fe2009-05-10 12:02:55 +020013263 OTHER CAVEATS AND NOTES: at this point in time, the code does not take care
13264 of dynamic connections. Also, if any of the server maxconn, or maxqueue is 0,
Willy Tarreau74ca5042013-06-11 23:12:07 +020013265 then this fetch clearly does not make sense, in which case the value returned
Willy Tarreau55165fe2009-05-10 12:02:55 +020013266 will be -1.
Jeffrey 'jf' Lim5051d7b2008-09-04 01:03:03 +080013267
Willy Tarreau6236d3a2013-07-25 14:28:25 +020013268date([<offset>]) : integer
13269 Returns the current date as the epoch (number of seconds since 01/01/1970).
13270 If an offset value is specified, then it is a number of seconds that is added
13271 to the current date before returning the value. This is particularly useful
13272 to compute relative dates, as both positive and negative offsets are allowed.
Willy Tarreau276fae92013-07-25 14:36:01 +020013273 It is useful combined with the http_date converter.
13274
13275 Example :
13276
13277 # set an expires header to now+1 hour in every response
13278 http-response set-header Expires %[date(3600),http_date]
Willy Tarreau6236d3a2013-07-25 14:28:25 +020013279
Willy Tarreaud716f9b2017-10-13 11:03:15 +020013280distcc_body(<token>[,<occ>]) : binary
13281 Parses a distcc message and returns the body associated to occurrence #<occ>
13282 of the token <token>. Occurrences start at 1, and when unspecified, any may
13283 match though in practice only the first one is checked for now. This can be
13284 used to extract file names or arguments in files built using distcc through
13285 haproxy. Please refer to distcc's protocol documentation for the complete
13286 list of supported tokens.
13287
13288distcc_param(<token>[,<occ>]) : integer
13289 Parses a distcc message and returns the parameter associated to occurrence
13290 #<occ> of the token <token>. Occurrences start at 1, and when unspecified,
13291 any may match though in practice only the first one is checked for now. This
13292 can be used to extract certain information such as the protocol version, the
13293 file size or the argument in files built using distcc through haproxy.
13294 Another use case consists in waiting for the start of the preprocessed file
13295 contents before connecting to the server to avoid keeping idle connections.
13296 Please refer to distcc's protocol documentation for the complete list of
13297 supported tokens.
13298
13299 Example :
13300 # wait up to 20s for the pre-processed file to be uploaded
13301 tcp-request inspect-delay 20s
13302 tcp-request content accept if { distcc_param(DOTI) -m found }
13303 # send large files to the big farm
13304 use_backend big_farm if { distcc_param(DOTI) gt 1000000 }
13305
Willy Tarreau595ec542013-06-12 21:34:28 +020013306env(<name>) : string
13307 Returns a string containing the value of environment variable <name>. As a
13308 reminder, environment variables are per-process and are sampled when the
13309 process starts. This can be useful to pass some information to a next hop
13310 server, or with ACLs to take specific action when the process is started a
13311 certain way.
13312
13313 Examples :
13314 # Pass the Via header to next hop with the local hostname in it
13315 http-request add-header Via 1.1\ %[env(HOSTNAME)]
13316
13317 # reject cookie-less requests when the STOP environment variable is set
13318 http-request deny if !{ cook(SESSIONID) -m found } { env(STOP) -m found }
13319
Willy Tarreau74ca5042013-06-11 23:12:07 +020013320fe_conn([<frontend>]) : integer
13321 Returns the number of currently established connections on the frontend,
Willy Tarreaud63335a2010-02-26 12:56:52 +010013322 possibly including the connection being evaluated. If no frontend name is
13323 specified, the current one is used. But it is also possible to check another
Willy Tarreau74ca5042013-06-11 23:12:07 +020013324 frontend. It can be used to return a sorry page before hard-blocking, or to
13325 use a specific backend to drain new requests when the farm is considered
13326 full. This is mostly used with ACLs but can also be used to pass some
13327 statistics to servers in HTTP headers. See also the "dst_conn", "be_conn",
13328 "fe_sess_rate" fetches.
Willy Tarreaua36af912009-10-10 12:02:45 +020013329
Nenad Merdanovicad9a7e92016-10-03 04:57:37 +020013330fe_req_rate([<frontend>]) : integer
13331 Returns an integer value corresponding to the number of HTTP requests per
13332 second sent to a frontend. This number can differ from "fe_sess_rate" in
13333 situations where client-side keep-alive is enabled.
13334
Willy Tarreau74ca5042013-06-11 23:12:07 +020013335fe_sess_rate([<frontend>]) : integer
13336 Returns an integer value corresponding to the sessions creation rate on the
13337 frontend, in number of new sessions per second. This is used with ACLs to
13338 limit the incoming session rate to an acceptable range in order to prevent
13339 abuse of service at the earliest moment, for example when combined with other
13340 layer 4 ACLs in order to force the clients to wait a bit for the rate to go
13341 down below the limit. It can also be useful to add this element to logs using
13342 a log-format directive. See also the "rate-limit sessions" directive for use
13343 in frontends.
Willy Tarreau079ff0a2009-03-05 21:34:28 +010013344
13345 Example :
13346 # This frontend limits incoming mails to 10/s with a max of 100
13347 # concurrent connections. We accept any connection below 10/s, and
13348 # force excess clients to wait for 100 ms. Since clients are limited to
13349 # 100 max, there cannot be more than 10 incoming mails per second.
13350 frontend mail
13351 bind :25
13352 mode tcp
13353 maxconn 100
13354 acl too_fast fe_sess_rate ge 10
13355 tcp-request inspect-delay 100ms
13356 tcp-request content accept if ! too_fast
13357 tcp-request content accept if WAIT_END
Willy Tarreaud72758d2010-01-12 10:42:19 +010013358
Nenad Merdanovic807a6e72017-03-12 22:00:00 +010013359hostname : string
13360 Returns the system hostname.
13361
Thierry FOURNIER07ee64e2015-07-06 23:43:03 +020013362int(<integer>) : signed integer
13363 Returns a signed integer.
13364
Thierry FOURNIERcc103292015-06-06 19:30:17 +020013365ipv4(<ipv4>) : ipv4
13366 Returns an ipv4.
13367
13368ipv6(<ipv6>) : ipv6
13369 Returns an ipv6.
13370
13371meth(<method>) : method
13372 Returns a method.
13373
Willy Tarreau0f30d262014-11-24 16:02:05 +010013374nbproc : integer
13375 Returns an integer value corresponding to the number of processes that were
13376 started (it equals the global "nbproc" setting). This is useful for logging
13377 and debugging purposes.
13378
Willy Tarreau74ca5042013-06-11 23:12:07 +020013379nbsrv([<backend>]) : integer
13380 Returns an integer value corresponding to the number of usable servers of
13381 either the current backend or the named backend. This is mostly used with
13382 ACLs but can also be useful when added to logs. This is normally used to
Willy Tarreaud63335a2010-02-26 12:56:52 +010013383 switch to an alternate backend when the number of servers is too low to
13384 to handle some load. It is useful to report a failure when combined with
13385 "monitor fail".
Willy Tarreau079ff0a2009-03-05 21:34:28 +010013386
Willy Tarreau0f30d262014-11-24 16:02:05 +010013387proc : integer
13388 Returns an integer value corresponding to the position of the process calling
13389 the function, between 1 and global.nbproc. This is useful for logging and
13390 debugging purposes.
13391
Willy Tarreau74ca5042013-06-11 23:12:07 +020013392queue([<backend>]) : integer
Willy Tarreaud63335a2010-02-26 12:56:52 +010013393 Returns the total number of queued connections of the designated backend,
13394 including all the connections in server queues. If no backend name is
13395 specified, the current one is used, but it is also possible to check another
Willy Tarreau74ca5042013-06-11 23:12:07 +020013396 one. This is useful with ACLs or to pass statistics to backend servers. This
13397 can be used to take actions when queuing goes above a known level, generally
13398 indicating a surge of traffic or a massive slowdown on the servers. One
13399 possible action could be to reject new users but still accept old ones. See
13400 also the "avg_queue", "be_conn", and "be_sess_rate" fetches.
13401
Willy Tarreau84310e22014-02-14 11:59:04 +010013402rand([<range>]) : integer
13403 Returns a random integer value within a range of <range> possible values,
13404 starting at zero. If the range is not specified, it defaults to 2^32, which
13405 gives numbers between 0 and 4294967295. It can be useful to pass some values
13406 needed to take some routing decisions for example, or just for debugging
13407 purposes. This random must not be used for security purposes.
13408
Willy Tarreau74ca5042013-06-11 23:12:07 +020013409srv_conn([<backend>/]<server>) : integer
13410 Returns an integer value corresponding to the number of currently established
13411 connections on the designated server, possibly including the connection being
13412 evaluated. If <backend> is omitted, then the server is looked up in the
13413 current backend. It can be used to use a specific farm when one server is
13414 full, or to inform the server about our view of the number of active
13415 connections with it. See also the "fe_conn", "be_conn" and "queue" fetch
13416 methods.
13417
13418srv_is_up([<backend>/]<server>) : boolean
13419 Returns true when the designated server is UP, and false when it is either
13420 DOWN or in maintenance mode. If <backend> is omitted, then the server is
13421 looked up in the current backend. It is mainly used to take action based on
13422 an external status reported via a health check (eg: a geographical site's
13423 availability). Another possible use which is more of a hack consists in
13424 using dummy servers as boolean variables that can be enabled or disabled from
13425 the CLI, so that rules depending on those ACLs can be tweaked in realtime.
13426
Willy Tarreauff2b7af2017-10-13 11:46:26 +020013427srv_queue([<backend>/]<server>) : integer
13428 Returns an integer value corresponding to the number of connections currently
13429 pending in the designated server's queue. If <backend> is omitted, then the
13430 server is looked up in the current backend. It can sometimes be used together
13431 with the "use-server" directive to force to use a known faster server when it
13432 is not much loaded. See also the "srv_conn", "avg_queue" and "queue" sample
13433 fetch methods.
13434
Willy Tarreau74ca5042013-06-11 23:12:07 +020013435srv_sess_rate([<backend>/]<server>) : integer
13436 Returns an integer corresponding to the sessions creation rate on the
13437 designated server, in number of new sessions per second. If <backend> is
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030013438 omitted, then the server is looked up in the current backend. This is mostly
Willy Tarreau74ca5042013-06-11 23:12:07 +020013439 used with ACLs but can make sense with logs too. This is used to switch to an
13440 alternate backend when an expensive or fragile one reaches too high a session
13441 rate, or to limit abuse of service (eg. prevent latent requests from
13442 overloading servers).
13443
13444 Example :
13445 # Redirect to a separate back
13446 acl srv1_full srv_sess_rate(be1/srv1) gt 50
13447 acl srv2_full srv_sess_rate(be1/srv2) gt 50
13448 use_backend be2 if srv1_full or srv2_full
13449
Willy Tarreau0f30d262014-11-24 16:02:05 +010013450stopping : boolean
13451 Returns TRUE if the process calling the function is currently stopping. This
13452 can be useful for logging, or for relaxing certain checks or helping close
13453 certain connections upon graceful shutdown.
13454
Thierry FOURNIERcc103292015-06-06 19:30:17 +020013455str(<string>) : string
13456 Returns a string.
13457
Willy Tarreau74ca5042013-06-11 23:12:07 +020013458table_avl([<table>]) : integer
13459 Returns the total number of available entries in the current proxy's
13460 stick-table or in the designated stick-table. See also table_cnt.
13461
13462table_cnt([<table>]) : integer
13463 Returns the total number of entries currently in use in the current proxy's
13464 stick-table or in the designated stick-table. See also src_conn_cnt and
13465 table_avl for other entry counting methods.
13466
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013467var(<var-name>) : undefined
13468 Returns a variable with the stored type. If the variable is not set, the
Daniel Schneller0b547052016-03-21 20:46:57 +010013469 sample fetch fails. The name of the variable starts with an indication
13470 about its scope. The scopes allowed are:
Christopher Fauletff2613e2016-11-09 11:36:17 +010013471 "proc" : the variable is shared with the whole process
Daniel Schneller0b547052016-03-21 20:46:57 +010013472 "sess" : the variable is shared with the whole session
13473 "txn" : the variable is shared with the transaction (request and
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013474 response),
Daniel Schneller0b547052016-03-21 20:46:57 +010013475 "req" : the variable is shared only during request processing,
13476 "res" : the variable is shared only during response processing.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013477 This prefix is followed by a name. The separator is a '.'. The name may only
Christopher Fauletb71557a2016-10-31 10:49:03 +010013478 contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
Thierry FOURNIER4834bc72015-06-06 19:29:07 +020013479
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200134807.3.3. Fetching samples at Layer 4
Willy Tarreau74ca5042013-06-11 23:12:07 +020013481----------------------------------
13482
13483The layer 4 usually describes just the transport layer which in haproxy is
13484closest to the connection, where no content is yet made available. The fetch
13485methods described here are usable as low as the "tcp-request connection" rule
13486sets unless they require some future information. Those generally include
13487TCP/IP addresses and ports, as well as elements from stick-tables related to
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013488the incoming connection. For retrieving a value from a sticky counters, the
13489counter number can be explicitly set as 0, 1, or 2 using the pre-defined
13490"sc0_", "sc1_", or "sc2_" prefix, or it can be specified as the first integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013491argument when using the "sc_" prefix. An optional table may be specified with
13492the "sc*" form, in which case the currently tracked key will be looked up into
13493this alternate table instead of the table currently being tracked.
Willy Tarreau74ca5042013-06-11 23:12:07 +020013494
13495be_id : integer
13496 Returns an integer containing the current backend's id. It can be used in
13497 frontends with responses to check which backend processed the request.
13498
Marcin Deranekd2471c22016-12-12 14:08:05 +010013499be_name : string
13500 Returns a string containing the current backend's name. It can be used in
13501 frontends with responses to check which backend processed the request.
13502
Willy Tarreau74ca5042013-06-11 23:12:07 +020013503dst : ip
13504 This is the destination IPv4 address of the connection on the client side,
13505 which is the address the client connected to. It can be useful when running
13506 in transparent mode. It is of type IP and works on both IPv4 and IPv6 tables.
13507 On IPv6 tables, IPv4 address is mapped to its IPv6 equivalent, according to
13508 RFC 4291.
13509
13510dst_conn : integer
13511 Returns an integer value corresponding to the number of currently established
13512 connections on the same socket including the one being evaluated. It is
13513 normally used with ACLs but can as well be used to pass the information to
13514 servers in an HTTP header or in logs. It can be used to either return a sorry
13515 page before hard-blocking, or to use a specific backend to drain new requests
13516 when the socket is considered saturated. This offers the ability to assign
13517 different limits to different listening ports or addresses. See also the
13518 "fe_conn" and "be_conn" fetches.
Willy Tarreaud63335a2010-02-26 12:56:52 +010013519
Willy Tarreau16e01562016-08-09 16:46:18 +020013520dst_is_local : boolean
13521 Returns true if the destination address of the incoming connection is local
13522 to the system, or false if the address doesn't exist on the system, meaning
13523 that it was intercepted in transparent mode. It can be useful to apply
13524 certain rules by default to forwarded traffic and other rules to the traffic
13525 targetting the real address of the machine. For example the stats page could
13526 be delivered only on this address, or SSH access could be locally redirected.
13527 Please note that the check involves a few system calls, so it's better to do
13528 it only once per connection.
13529
Willy Tarreau74ca5042013-06-11 23:12:07 +020013530dst_port : integer
13531 Returns an integer value corresponding to the destination TCP port of the
13532 connection on the client side, which is the port the client connected to.
13533 This might be used when running in transparent mode, when assigning dynamic
13534 ports to some clients for a whole application session, to stick all users to
13535 a same server, or to pass the destination port information to a server using
13536 an HTTP header.
13537
Emeric Brun4f603012017-01-05 15:11:44 +010013538fc_rcvd_proxy : boolean
13539 Returns true if the client initiated the connection with a PROXY protocol
13540 header.
13541
Thierry Fournier / OZON.IO6310bef2016-07-24 20:16:50 +020013542fc_rtt(<unit>) : integer
13543 Returns the Round Trip Time (RTT) measured by the kernel for the client
13544 connection. <unit> is facultative, by default the unit is milliseconds. <unit>
13545 can be set to "ms" for milliseconds or "us" for microseconds. If the server
13546 connection is not established, if the connection is not TCP or if the
13547 operating system does not support TCP_INFO, for example Linux kernels before
13548 2.4, the sample fetch fails.
13549
13550fc_rttvar(<unit>) : integer
13551 Returns the Round Trip Time (RTT) variance measured by the kernel for the
13552 client connection. <unit> is facultative, by default the unit is milliseconds.
13553 <unit> can be set to "ms" for milliseconds or "us" for microseconds. If the
13554 server connection is not established, if the connection is not TCP or if the
13555 operating system does not support TCP_INFO, for example Linux kernels before
13556 2.4, the sample fetch fails.
13557
Joe Williams30fcd392016-08-10 07:06:44 -070013558fc_unacked(<unit>) : integer
13559 Returns the unacked counter measured by the kernel for the client connection.
13560 If the server connection is not established, if the connection is not TCP or
13561 if the operating system does not support TCP_INFO, for example Linux kernels
13562 before 2.4, the sample fetch fails.
13563
13564fc_sacked(<unit>) : integer
13565 Returns the sacked counter measured by the kernel for the client connection.
13566 If the server connection is not established, if the connection is not TCP or
13567 if the operating system does not support TCP_INFO, for example Linux kernels
13568 before 2.4, the sample fetch fails.
13569
13570fc_retrans(<unit>) : integer
13571 Returns the retransmits counter measured by the kernel for the client
13572 connection. If the server connection is not established, if the connection is
13573 not TCP or if the operating system does not support TCP_INFO, for example
13574 Linux kernels before 2.4, the sample fetch fails.
13575
13576fc_fackets(<unit>) : integer
13577 Returns the fack counter measured by the kernel for the client
13578 connection. If the server connection is not established, if the connection is
13579 not TCP or if the operating system does not support TCP_INFO, for example
13580 Linux kernels before 2.4, the sample fetch fails.
13581
13582fc_lost(<unit>) : integer
13583 Returns the lost counter measured by the kernel for the client
13584 connection. If the server connection is not established, if the connection is
13585 not TCP or if the operating system does not support TCP_INFO, for example
13586 Linux kernels before 2.4, the sample fetch fails.
13587
13588fc_reordering(<unit>) : integer
13589 Returns the reordering counter measured by the kernel for the client
13590 connection. If the server connection is not established, if the connection is
13591 not TCP or if the operating system does not support TCP_INFO, for example
13592 Linux kernels before 2.4, the sample fetch fails.
13593
Willy Tarreau74ca5042013-06-11 23:12:07 +020013594fe_id : integer
13595 Returns an integer containing the current frontend's id. It can be used in
Marcin Deranek6e413ed2016-12-13 12:40:01 +010013596 backends to check from which frontend it was called, or to stick all users
Willy Tarreau74ca5042013-06-11 23:12:07 +020013597 coming via a same frontend to the same server.
13598
Marcin Deranekd2471c22016-12-12 14:08:05 +010013599fe_name : string
13600 Returns a string containing the current frontend's name. It can be used in
13601 backends to check from which frontend it was called, or to stick all users
13602 coming via a same frontend to the same server.
13603
Cyril Bonté62ba8702014-04-22 23:52:25 +020013604sc_bytes_in_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013605sc0_bytes_in_rate([<table>]) : integer
13606sc1_bytes_in_rate([<table>]) : integer
13607sc2_bytes_in_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013608 Returns the average client-to-server bytes rate from the currently tracked
13609 counters, measured in amount of bytes over the period configured in the
13610 table. See also src_bytes_in_rate.
13611
Cyril Bonté62ba8702014-04-22 23:52:25 +020013612sc_bytes_out_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013613sc0_bytes_out_rate([<table>]) : integer
13614sc1_bytes_out_rate([<table>]) : integer
13615sc2_bytes_out_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013616 Returns the average server-to-client bytes rate from the currently tracked
13617 counters, measured in amount of bytes over the period configured in the
13618 table. See also src_bytes_out_rate.
13619
Cyril Bonté62ba8702014-04-22 23:52:25 +020013620sc_clr_gpc0(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013621sc0_clr_gpc0([<table>]) : integer
13622sc1_clr_gpc0([<table>]) : integer
13623sc2_clr_gpc0([<table>]) : integer
Willy Tarreauf73cd112011-08-13 01:45:16 +020013624 Clears the first General Purpose Counter associated to the currently tracked
13625 counters, and returns its previous value. Before the first invocation, the
Willy Tarreau869948b2013-01-04 14:14:57 +010013626 stored value is zero, so first invocation will always return zero. This is
13627 typically used as a second ACL in an expression in order to mark a connection
13628 when a first ACL was verified :
Willy Tarreauf73cd112011-08-13 01:45:16 +020013629
Jarno Huuskonen676f6222017-03-30 09:19:45 +030013630 Example:
Willy Tarreauf73cd112011-08-13 01:45:16 +020013631 # block if 5 consecutive requests continue to come faster than 10 sess
13632 # per second, and reset the counter as soon as the traffic slows down.
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020013633 acl abuse sc0_http_req_rate gt 10
13634 acl kill sc0_inc_gpc0 gt 5
13635 acl save sc0_clr_gpc0 ge 0
Willy Tarreauf73cd112011-08-13 01:45:16 +020013636 tcp-request connection accept if !abuse save
13637 tcp-request connection reject if abuse kill
13638
Cyril Bonté62ba8702014-04-22 23:52:25 +020013639sc_conn_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013640sc0_conn_cnt([<table>]) : integer
13641sc1_conn_cnt([<table>]) : integer
13642sc2_conn_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013643 Returns the cumulated number of incoming connections from currently tracked
13644 counters. See also src_conn_cnt.
13645
Cyril Bonté62ba8702014-04-22 23:52:25 +020013646sc_conn_cur(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013647sc0_conn_cur([<table>]) : integer
13648sc1_conn_cur([<table>]) : integer
13649sc2_conn_cur([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013650 Returns the current amount of concurrent connections tracking the same
13651 tracked counters. This number is automatically incremented when tracking
13652 begins and decremented when tracking stops. See also src_conn_cur.
13653
Cyril Bonté62ba8702014-04-22 23:52:25 +020013654sc_conn_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013655sc0_conn_rate([<table>]) : integer
13656sc1_conn_rate([<table>]) : integer
13657sc2_conn_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013658 Returns the average connection rate from the currently tracked counters,
13659 measured in amount of connections over the period configured in the table.
13660 See also src_conn_rate.
13661
Cyril Bonté62ba8702014-04-22 23:52:25 +020013662sc_get_gpc0(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013663sc0_get_gpc0([<table>]) : integer
13664sc1_get_gpc0([<table>]) : integer
13665sc2_get_gpc0([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013666 Returns the value of the first General Purpose Counter associated to the
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013667 currently tracked counters. See also src_get_gpc0 and sc/sc0/sc1/sc2_inc_gpc0.
Willy Tarreauba2ffd12013-05-29 15:54:14 +020013668
Thierry FOURNIER236657b2015-08-19 08:25:14 +020013669sc_get_gpt0(<ctr>[,<table>]) : integer
13670sc0_get_gpt0([<table>]) : integer
13671sc1_get_gpt0([<table>]) : integer
13672sc2_get_gpt0([<table>]) : integer
13673 Returns the value of the first General Purpose Tag associated to the
13674 currently tracked counters. See also src_get_gpt0.
13675
Cyril Bonté62ba8702014-04-22 23:52:25 +020013676sc_gpc0_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013677sc0_gpc0_rate([<table>]) : integer
13678sc1_gpc0_rate([<table>]) : integer
13679sc2_gpc0_rate([<table>]) : integer
Willy Tarreauba2ffd12013-05-29 15:54:14 +020013680 Returns the average increment rate of the first General Purpose Counter
13681 associated to the currently tracked counters. It reports the frequency
13682 which the gpc0 counter was incremented over the configured period. See also
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013683 src_gpc0_rate, sc/sc0/sc1/sc2_get_gpc0, and sc/sc0/sc1/sc2_inc_gpc0. Note
13684 that the "gpc0_rate" counter must be stored in the stick-table for a value to
13685 be returned, as "gpc0" only holds the event count.
Willy Tarreaue9656522010-08-17 15:40:09 +020013686
Cyril Bonté62ba8702014-04-22 23:52:25 +020013687sc_http_err_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013688sc0_http_err_cnt([<table>]) : integer
13689sc1_http_err_cnt([<table>]) : integer
13690sc2_http_err_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013691 Returns the cumulated number of HTTP errors from the currently tracked
13692 counters. This includes the both request errors and 4xx error responses.
13693 See also src_http_err_cnt.
13694
Cyril Bonté62ba8702014-04-22 23:52:25 +020013695sc_http_err_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013696sc0_http_err_rate([<table>]) : integer
13697sc1_http_err_rate([<table>]) : integer
13698sc2_http_err_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013699 Returns the average rate of HTTP errors from the currently tracked counters,
13700 measured in amount of errors over the period configured in the table. This
13701 includes the both request errors and 4xx error responses. See also
13702 src_http_err_rate.
13703
Cyril Bonté62ba8702014-04-22 23:52:25 +020013704sc_http_req_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013705sc0_http_req_cnt([<table>]) : integer
13706sc1_http_req_cnt([<table>]) : integer
13707sc2_http_req_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013708 Returns the cumulated number of HTTP requests from the currently tracked
13709 counters. This includes every started request, valid or not. See also
13710 src_http_req_cnt.
13711
Cyril Bonté62ba8702014-04-22 23:52:25 +020013712sc_http_req_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013713sc0_http_req_rate([<table>]) : integer
13714sc1_http_req_rate([<table>]) : integer
13715sc2_http_req_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013716 Returns the average rate of HTTP requests from the currently tracked
13717 counters, measured in amount of requests over the period configured in
13718 the table. This includes every started request, valid or not. See also
13719 src_http_req_rate.
13720
Cyril Bonté62ba8702014-04-22 23:52:25 +020013721sc_inc_gpc0(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013722sc0_inc_gpc0([<table>]) : integer
13723sc1_inc_gpc0([<table>]) : integer
13724sc2_inc_gpc0([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013725 Increments the first General Purpose Counter associated to the currently
Willy Tarreau869948b2013-01-04 14:14:57 +010013726 tracked counters, and returns its new value. Before the first invocation,
13727 the stored value is zero, so first invocation will increase it to 1 and will
13728 return 1. This is typically used as a second ACL in an expression in order
13729 to mark a connection when a first ACL was verified :
Willy Tarreaue9656522010-08-17 15:40:09 +020013730
Jarno Huuskonen676f6222017-03-30 09:19:45 +030013731 Example:
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020013732 acl abuse sc0_http_req_rate gt 10
13733 acl kill sc0_inc_gpc0 gt 0
Willy Tarreaue9656522010-08-17 15:40:09 +020013734 tcp-request connection reject if abuse kill
13735
Cyril Bonté62ba8702014-04-22 23:52:25 +020013736sc_kbytes_in(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013737sc0_kbytes_in([<table>]) : integer
13738sc1_kbytes_in([<table>]) : integer
13739sc2_kbytes_in([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020013740 Returns the total amount of client-to-server data from the currently tracked
13741 counters, measured in kilobytes. The test is currently performed on 32-bit
13742 integers, which limits values to 4 terabytes. See also src_kbytes_in.
Willy Tarreaue9656522010-08-17 15:40:09 +020013743
Cyril Bonté62ba8702014-04-22 23:52:25 +020013744sc_kbytes_out(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013745sc0_kbytes_out([<table>]) : integer
13746sc1_kbytes_out([<table>]) : integer
13747sc2_kbytes_out([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020013748 Returns the total amount of server-to-client data from the currently tracked
13749 counters, measured in kilobytes. The test is currently performed on 32-bit
13750 integers, which limits values to 4 terabytes. See also src_kbytes_out.
Willy Tarreaue9656522010-08-17 15:40:09 +020013751
Cyril Bonté62ba8702014-04-22 23:52:25 +020013752sc_sess_cnt(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013753sc0_sess_cnt([<table>]) : integer
13754sc1_sess_cnt([<table>]) : integer
13755sc2_sess_cnt([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013756 Returns the cumulated number of incoming connections that were transformed
13757 into sessions, which means that they were accepted by a "tcp-request
13758 connection" rule, from the currently tracked counters. A backend may count
13759 more sessions than connections because each connection could result in many
Jamie Gloudonaaa21002012-08-25 00:18:33 -040013760 backend sessions if some HTTP keep-alive is performed over the connection
Willy Tarreaue9656522010-08-17 15:40:09 +020013761 with the client. See also src_sess_cnt.
13762
Cyril Bonté62ba8702014-04-22 23:52:25 +020013763sc_sess_rate(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013764sc0_sess_rate([<table>]) : integer
13765sc1_sess_rate([<table>]) : integer
13766sc2_sess_rate([<table>]) : integer
Willy Tarreaue9656522010-08-17 15:40:09 +020013767 Returns the average session rate from the currently tracked counters,
13768 measured in amount of sessions over the period configured in the table. A
13769 session is a connection that got past the early "tcp-request connection"
13770 rules. A backend may count more sessions than connections because each
13771 connection could result in many backend sessions if some HTTP keep-alive is
Jamie Gloudonaaa21002012-08-25 00:18:33 -040013772 performed over the connection with the client. See also src_sess_rate.
Willy Tarreaue9656522010-08-17 15:40:09 +020013773
Cyril Bonté62ba8702014-04-22 23:52:25 +020013774sc_tracked(<ctr>[,<table>]) : boolean
Willy Tarreau0f791d42013-07-23 19:56:43 +020013775sc0_tracked([<table>]) : boolean
13776sc1_tracked([<table>]) : boolean
13777sc2_tracked([<table>]) : boolean
Willy Tarreau6f1615f2013-06-03 15:15:22 +020013778 Returns true if the designated session counter is currently being tracked by
13779 the current session. This can be useful when deciding whether or not we want
13780 to set some values in a header passed to the server.
13781
Cyril Bonté62ba8702014-04-22 23:52:25 +020013782sc_trackers(<ctr>[,<table>]) : integer
Willy Tarreau0f791d42013-07-23 19:56:43 +020013783sc0_trackers([<table>]) : integer
13784sc1_trackers([<table>]) : integer
13785sc2_trackers([<table>]) : integer
Willy Tarreau2406db42012-12-09 12:16:43 +010013786 Returns the current amount of concurrent connections tracking the same
13787 tracked counters. This number is automatically incremented when tracking
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020013788 begins and decremented when tracking stops. It differs from sc0_conn_cur in
Willy Tarreau2406db42012-12-09 12:16:43 +010013789 that it does not rely on any stored information but on the table's reference
13790 count (the "use" value which is returned by "show table" on the CLI). This
Willy Tarreau74ca5042013-06-11 23:12:07 +020013791 may sometimes be more suited for layer7 tracking. It can be used to tell a
13792 server how many concurrent connections there are from a given address for
13793 example.
Willy Tarreau2406db42012-12-09 12:16:43 +010013794
Willy Tarreau74ca5042013-06-11 23:12:07 +020013795so_id : integer
13796 Returns an integer containing the current listening socket's id. It is useful
13797 in frontends involving many "bind" lines, or to stick all users coming via a
13798 same socket to the same server.
Willy Tarreaud63335a2010-02-26 12:56:52 +010013799
Willy Tarreau74ca5042013-06-11 23:12:07 +020013800src : ip
13801 This is the source IPv4 address of the client of the session. It is of type
13802 IP and works on both IPv4 and IPv6 tables. On IPv6 tables, IPv4 addresses are
13803 mapped to their IPv6 equivalent, according to RFC 4291. Note that it is the
13804 TCP-level source address which is used, and not the address of a client
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010013805 behind a proxy. However if the "accept-proxy" or "accept-netscaler-cip" bind
13806 directive is used, it can be the address of a client behind another
13807 PROXY-protocol compatible component for all rule sets except
13808 "tcp-request connection" which sees the real address.
Willy Tarreaud63335a2010-02-26 12:56:52 +010013809
Thierry FOURNIERd5f624d2013-11-26 11:52:33 +010013810 Example:
13811 # add an HTTP header in requests with the originating address' country
13812 http-request set-header X-Country %[src,map_ip(geoip.lst)]
13813
Willy Tarreau74ca5042013-06-11 23:12:07 +020013814src_bytes_in_rate([<table>]) : integer
13815 Returns the average bytes rate from the incoming connection's source address
13816 in the current proxy's stick-table or in the designated stick-table, measured
13817 in amount of bytes over the period configured in the table. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013818 not found, zero is returned. See also sc/sc0/sc1/sc2_bytes_in_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013819
Willy Tarreau74ca5042013-06-11 23:12:07 +020013820src_bytes_out_rate([<table>]) : integer
13821 Returns the average bytes rate to the incoming connection's source address in
13822 the current proxy's stick-table or in the designated stick-table, measured in
Willy Tarreauc9705a12010-07-27 20:05:50 +020013823 amount of bytes over the period configured in the table. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013824 not found, zero is returned. See also sc/sc0/sc1/sc2_bytes_out_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013825
Willy Tarreau74ca5042013-06-11 23:12:07 +020013826src_clr_gpc0([<table>]) : integer
13827 Clears the first General Purpose Counter associated to the incoming
13828 connection's source address in the current proxy's stick-table or in the
13829 designated stick-table, and returns its previous value. If the address is not
13830 found, an entry is created and 0 is returned. This is typically used as a
13831 second ACL in an expression in order to mark a connection when a first ACL
13832 was verified :
Willy Tarreauf73cd112011-08-13 01:45:16 +020013833
Jarno Huuskonen676f6222017-03-30 09:19:45 +030013834 Example:
Willy Tarreauf73cd112011-08-13 01:45:16 +020013835 # block if 5 consecutive requests continue to come faster than 10 sess
13836 # per second, and reset the counter as soon as the traffic slows down.
13837 acl abuse src_http_req_rate gt 10
13838 acl kill src_inc_gpc0 gt 5
Willy Tarreau869948b2013-01-04 14:14:57 +010013839 acl save src_clr_gpc0 ge 0
Willy Tarreauf73cd112011-08-13 01:45:16 +020013840 tcp-request connection accept if !abuse save
13841 tcp-request connection reject if abuse kill
13842
Willy Tarreau74ca5042013-06-11 23:12:07 +020013843src_conn_cnt([<table>]) : integer
Willy Tarreauc9705a12010-07-27 20:05:50 +020013844 Returns the cumulated number of connections initiated from the current
Willy Tarreau74ca5042013-06-11 23:12:07 +020013845 incoming connection's source address in the current proxy's stick-table or in
Willy Tarreauc9705a12010-07-27 20:05:50 +020013846 the designated stick-table. If the address is not found, zero is returned.
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013847 See also sc/sc0/sc1/sc2_conn_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013848
Willy Tarreau74ca5042013-06-11 23:12:07 +020013849src_conn_cur([<table>]) : integer
Willy Tarreauc9705a12010-07-27 20:05:50 +020013850 Returns the current amount of concurrent connections initiated from the
Willy Tarreau74ca5042013-06-11 23:12:07 +020013851 current incoming connection's source address in the current proxy's
13852 stick-table or in the designated stick-table. If the address is not found,
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013853 zero is returned. See also sc/sc0/sc1/sc2_conn_cur.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013854
Willy Tarreau74ca5042013-06-11 23:12:07 +020013855src_conn_rate([<table>]) : integer
13856 Returns the average connection rate from the incoming connection's source
13857 address in the current proxy's stick-table or in the designated stick-table,
13858 measured in amount of connections over the period configured in the table. If
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013859 the address is not found, zero is returned. See also sc/sc0/sc1/sc2_conn_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013860
Willy Tarreau74ca5042013-06-11 23:12:07 +020013861src_get_gpc0([<table>]) : integer
Willy Tarreauc9705a12010-07-27 20:05:50 +020013862 Returns the value of the first General Purpose Counter associated to the
Willy Tarreau74ca5042013-06-11 23:12:07 +020013863 incoming connection's source address in the current proxy's stick-table or in
Willy Tarreauc9705a12010-07-27 20:05:50 +020013864 the designated stick-table. If the address is not found, zero is returned.
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013865 See also sc/sc0/sc1/sc2_get_gpc0 and src_inc_gpc0.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013866
Thierry FOURNIER236657b2015-08-19 08:25:14 +020013867src_get_gpt0([<table>]) : integer
13868 Returns the value of the first General Purpose Tag associated to the
13869 incoming connection's source address in the current proxy's stick-table or in
13870 the designated stick-table. If the address is not found, zero is returned.
13871 See also sc/sc0/sc1/sc2_get_gpt0.
13872
Willy Tarreau74ca5042013-06-11 23:12:07 +020013873src_gpc0_rate([<table>]) : integer
Willy Tarreauba2ffd12013-05-29 15:54:14 +020013874 Returns the average increment rate of the first General Purpose Counter
Willy Tarreau74ca5042013-06-11 23:12:07 +020013875 associated to the incoming connection's source address in the current proxy's
Willy Tarreauba2ffd12013-05-29 15:54:14 +020013876 stick-table or in the designated stick-table. It reports the frequency
13877 which the gpc0 counter was incremented over the configured period. See also
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013878 sc/sc0/sc1/sc2_gpc0_rate, src_get_gpc0, and sc/sc0/sc1/sc2_inc_gpc0. Note
13879 that the "gpc0_rate" counter must be stored in the stick-table for a value to
13880 be returned, as "gpc0" only holds the event count.
Willy Tarreauba2ffd12013-05-29 15:54:14 +020013881
Willy Tarreau74ca5042013-06-11 23:12:07 +020013882src_http_err_cnt([<table>]) : integer
13883 Returns the cumulated number of HTTP errors from the incoming connection's
13884 source address in the current proxy's stick-table or in the designated
Willy Tarreauc9705a12010-07-27 20:05:50 +020013885 stick-table. This includes the both request errors and 4xx error responses.
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013886 See also sc/sc0/sc1/sc2_http_err_cnt. If the address is not found, zero is
Willy Tarreau74ca5042013-06-11 23:12:07 +020013887 returned.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013888
Willy Tarreau74ca5042013-06-11 23:12:07 +020013889src_http_err_rate([<table>]) : integer
13890 Returns the average rate of HTTP errors from the incoming connection's source
13891 address in the current proxy's stick-table or in the designated stick-table,
13892 measured in amount of errors over the period configured in the table. This
13893 includes the both request errors and 4xx error responses. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013894 not found, zero is returned. See also sc/sc0/sc1/sc2_http_err_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013895
Willy Tarreau74ca5042013-06-11 23:12:07 +020013896src_http_req_cnt([<table>]) : integer
13897 Returns the cumulated number of HTTP requests from the incoming connection's
13898 source address in the current proxy's stick-table or in the designated stick-
13899 table. This includes every started request, valid or not. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013900 not found, zero is returned. See also sc/sc0/sc1/sc2_http_req_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013901
Willy Tarreau74ca5042013-06-11 23:12:07 +020013902src_http_req_rate([<table>]) : integer
13903 Returns the average rate of HTTP requests from the incoming connection's
13904 source address in the current proxy's stick-table or in the designated stick-
13905 table, measured in amount of requests over the period configured in the
Willy Tarreauc9705a12010-07-27 20:05:50 +020013906 table. This includes every started request, valid or not. If the address is
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013907 not found, zero is returned. See also sc/sc0/sc1/sc2_http_req_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013908
Willy Tarreau74ca5042013-06-11 23:12:07 +020013909src_inc_gpc0([<table>]) : integer
13910 Increments the first General Purpose Counter associated to the incoming
13911 connection's source address in the current proxy's stick-table or in the
13912 designated stick-table, and returns its new value. If the address is not
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020013913 found, an entry is created and 1 is returned. See also sc0/sc2/sc2_inc_gpc0.
Willy Tarreau74ca5042013-06-11 23:12:07 +020013914 This is typically used as a second ACL in an expression in order to mark a
13915 connection when a first ACL was verified :
Willy Tarreauc9705a12010-07-27 20:05:50 +020013916
Jarno Huuskonen676f6222017-03-30 09:19:45 +030013917 Example:
Willy Tarreauc9705a12010-07-27 20:05:50 +020013918 acl abuse src_http_req_rate gt 10
Willy Tarreau869948b2013-01-04 14:14:57 +010013919 acl kill src_inc_gpc0 gt 0
Willy Tarreaue9656522010-08-17 15:40:09 +020013920 tcp-request connection reject if abuse kill
Willy Tarreauc9705a12010-07-27 20:05:50 +020013921
Willy Tarreau16e01562016-08-09 16:46:18 +020013922src_is_local : boolean
13923 Returns true if the source address of the incoming connection is local to the
13924 system, or false if the address doesn't exist on the system, meaning that it
13925 comes from a remote machine. Note that UNIX addresses are considered local.
13926 It can be useful to apply certain access restrictions based on where the
13927 client comes from (eg: require auth or https for remote machines). Please
13928 note that the check involves a few system calls, so it's better to do it only
13929 once per connection.
13930
Willy Tarreau74ca5042013-06-11 23:12:07 +020013931src_kbytes_in([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020013932 Returns the total amount of data received from the incoming connection's
13933 source address in the current proxy's stick-table or in the designated
13934 stick-table, measured in kilobytes. If the address is not found, zero is
13935 returned. The test is currently performed on 32-bit integers, which limits
13936 values to 4 terabytes. See also sc/sc0/sc1/sc2_kbytes_in.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013937
Willy Tarreau74ca5042013-06-11 23:12:07 +020013938src_kbytes_out([<table>]) : integer
Willy Tarreaua01b9742014-07-10 15:29:24 +020013939 Returns the total amount of data sent to the incoming connection's source
13940 address in the current proxy's stick-table or in the designated stick-table,
13941 measured in kilobytes. If the address is not found, zero is returned. The
13942 test is currently performed on 32-bit integers, which limits values to 4
13943 terabytes. See also sc/sc0/sc1/sc2_kbytes_out.
Willy Tarreaua975b8f2010-06-05 19:13:27 +020013944
Willy Tarreau74ca5042013-06-11 23:12:07 +020013945src_port : integer
13946 Returns an integer value corresponding to the TCP source port of the
13947 connection on the client side, which is the port the client connected from.
13948 Usage of this function is very limited as modern protocols do not care much
13949 about source ports nowadays.
Willy Tarreau079ff0a2009-03-05 21:34:28 +010013950
Willy Tarreau74ca5042013-06-11 23:12:07 +020013951src_sess_cnt([<table>]) : integer
13952 Returns the cumulated number of connections initiated from the incoming
Willy Tarreauc9705a12010-07-27 20:05:50 +020013953 connection's source IPv4 address in the current proxy's stick-table or in the
13954 designated stick-table, that were transformed into sessions, which means that
13955 they were accepted by "tcp-request" rules. If the address is not found, zero
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013956 is returned. See also sc/sc0/sc1/sc2_sess_cnt.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013957
Willy Tarreau74ca5042013-06-11 23:12:07 +020013958src_sess_rate([<table>]) : integer
13959 Returns the average session rate from the incoming connection's source
13960 address in the current proxy's stick-table or in the designated stick-table,
13961 measured in amount of sessions over the period configured in the table. A
13962 session is a connection that went past the early "tcp-request" rules. If the
Willy Tarreau4d4149c2013-07-23 19:33:46 +020013963 address is not found, zero is returned. See also sc/sc0/sc1/sc2_sess_rate.
Willy Tarreauc9705a12010-07-27 20:05:50 +020013964
Willy Tarreau74ca5042013-06-11 23:12:07 +020013965src_updt_conn_cnt([<table>]) : integer
13966 Creates or updates the entry associated to the incoming connection's source
13967 address in the current proxy's stick-table or in the designated stick-table.
13968 This table must be configured to store the "conn_cnt" data type, otherwise
13969 the match will be ignored. The current count is incremented by one, and the
13970 expiration timer refreshed. The updated count is returned, so this match
13971 can't return zero. This was used to reject service abusers based on their
13972 source address. Note: it is recommended to use the more complete "track-sc*"
13973 actions in "tcp-request" rules instead.
Willy Tarreaua975b8f2010-06-05 19:13:27 +020013974
13975 Example :
13976 # This frontend limits incoming SSH connections to 3 per 10 second for
13977 # each source address, and rejects excess connections until a 10 second
13978 # silence is observed. At most 20 addresses are tracked.
13979 listen ssh
13980 bind :22
13981 mode tcp
13982 maxconn 100
Willy Tarreauc9705a12010-07-27 20:05:50 +020013983 stick-table type ip size 20 expire 10s store conn_cnt
Willy Tarreau74ca5042013-06-11 23:12:07 +020013984 tcp-request content reject if { src_updt_conn_cnt gt 3 }
Willy Tarreaua975b8f2010-06-05 19:13:27 +020013985 server local 127.0.0.1:22
13986
Willy Tarreau74ca5042013-06-11 23:12:07 +020013987srv_id : integer
13988 Returns an integer containing the server's id when processing the response.
13989 While it's almost only used with ACLs, it may be used for logging or
13990 debugging.
Hervé COMMOWICKdaa824e2011-08-05 12:09:44 +020013991
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200139927.3.4. Fetching samples at Layer 5
Willy Tarreau74ca5042013-06-11 23:12:07 +020013993----------------------------------
Willy Tarreau0b1cd942010-05-16 22:18:27 +020013994
Willy Tarreau74ca5042013-06-11 23:12:07 +020013995The layer 5 usually describes just the session layer which in haproxy is
13996closest to the session once all the connection handshakes are finished, but
13997when no content is yet made available. The fetch methods described here are
13998usable as low as the "tcp-request content" rule sets unless they require some
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030013999future information. Those generally include the results of SSL negotiations.
Willy Tarreauc735a072011-03-29 00:57:02 +020014000
Ben Shillitof25e8e52016-12-02 14:25:37 +00001400151d.all(<prop>[,<prop>*]) : string
14002 Returns values for the properties requested as a string, where values are
14003 separated by the delimiter specified with "51degrees-property-separator".
14004 The device is identified using all the important HTTP headers from the
14005 request. The function can be passed up to five property names, and if a
14006 property name can't be found, the value "NoData" is returned.
14007
14008 Example :
14009 # Here the header "X-51D-DeviceTypeMobileTablet" is added to the request
14010 # containing the three properties requested using all relevant headers from
14011 # the request.
14012 frontend http-in
14013 bind *:8081
14014 default_backend servers
14015 http-request set-header X-51D-DeviceTypeMobileTablet \
14016 %[51d.all(DeviceType,IsMobile,IsTablet)]
14017
Emeric Brun645ae792014-04-30 14:21:06 +020014018ssl_bc : boolean
14019 Returns true when the back connection was made via an SSL/TLS transport
14020 layer and is locally deciphered. This means the outgoing connection was made
14021 other a server with the "ssl" option.
14022
14023ssl_bc_alg_keysize : integer
14024 Returns the symmetric cipher key size supported in bits when the outgoing
14025 connection was made over an SSL/TLS transport layer.
14026
14027ssl_bc_cipher : string
14028 Returns the name of the used cipher when the outgoing connection was made
14029 over an SSL/TLS transport layer.
14030
14031ssl_bc_protocol : string
14032 Returns the name of the used protocol when the outgoing connection was made
14033 over an SSL/TLS transport layer.
14034
Emeric Brunb73a9b02014-04-30 18:49:19 +020014035ssl_bc_unique_id : binary
Emeric Brun645ae792014-04-30 14:21:06 +020014036 When the outgoing connection was made over an SSL/TLS transport layer,
Emeric Brunb73a9b02014-04-30 18:49:19 +020014037 returns the TLS unique ID as defined in RFC5929 section 3. The unique id
14038 can be encoded to base64 using the converter: "ssl_bc_unique_id,base64".
Emeric Brun645ae792014-04-30 14:21:06 +020014039
14040ssl_bc_session_id : binary
14041 Returns the SSL ID of the back connection when the outgoing connection was
14042 made over an SSL/TLS transport layer. It is useful to log if we want to know
14043 if session was reused or not.
14044
14045ssl_bc_use_keysize : integer
14046 Returns the symmetric cipher key size used in bits when the outgoing
14047 connection was made over an SSL/TLS transport layer.
14048
Willy Tarreau74ca5042013-06-11 23:12:07 +020014049ssl_c_ca_err : integer
14050 When the incoming connection was made over an SSL/TLS transport layer,
14051 returns the ID of the first error detected during verification of the client
14052 certificate at depth > 0, or 0 if no error was encountered during this
14053 verification process. Please refer to your SSL library's documentation to
14054 find the exhaustive list of error codes.
Willy Tarreauc735a072011-03-29 00:57:02 +020014055
Willy Tarreau74ca5042013-06-11 23:12:07 +020014056ssl_c_ca_err_depth : integer
14057 When the incoming connection was made over an SSL/TLS transport layer,
14058 returns the depth in the CA chain of the first error detected during the
14059 verification of the client certificate. If no error is encountered, 0 is
14060 returned.
Willy Tarreau0ba27502007-12-24 16:55:16 +010014061
Emeric Brun43e79582014-10-29 19:03:26 +010014062ssl_c_der : binary
14063 Returns the DER formatted certificate presented by the client when the
14064 incoming connection was made over an SSL/TLS transport layer. When used for
14065 an ACL, the value(s) to match against can be passed in hexadecimal form.
14066
Willy Tarreau74ca5042013-06-11 23:12:07 +020014067ssl_c_err : integer
14068 When the incoming connection was made over an SSL/TLS transport layer,
14069 returns the ID of the first error detected during verification at depth 0, or
14070 0 if no error was encountered during this verification process. Please refer
14071 to your SSL library's documentation to find the exhaustive list of error
14072 codes.
Willy Tarreau62644772008-07-16 18:36:06 +020014073
Willy Tarreau74ca5042013-06-11 23:12:07 +020014074ssl_c_i_dn([<entry>[,<occ>]]) : string
14075 When the incoming connection was made over an SSL/TLS transport layer,
14076 returns the full distinguished name of the issuer of the certificate
14077 presented by the client when no <entry> is specified, or the value of the
14078 first given entry found from the beginning of the DN. If a positive/negative
14079 occurrence number is specified as the optional second argument, it returns
14080 the value of the nth given entry value from the beginning/end of the DN.
14081 For instance, "ssl_c_i_dn(OU,2)" the second organization unit, and
14082 "ssl_c_i_dn(CN)" retrieves the common name.
Willy Tarreau62644772008-07-16 18:36:06 +020014083
Willy Tarreau74ca5042013-06-11 23:12:07 +020014084ssl_c_key_alg : string
14085 Returns the name of the algorithm used to generate the key of the certificate
14086 presented by the client when the incoming connection was made over an SSL/TLS
14087 transport layer.
Willy Tarreau62644772008-07-16 18:36:06 +020014088
Willy Tarreau74ca5042013-06-11 23:12:07 +020014089ssl_c_notafter : string
14090 Returns the end date presented by the client as a formatted string
14091 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
14092 transport layer.
Emeric Brunbede3d02009-06-30 17:54:00 +020014093
Willy Tarreau74ca5042013-06-11 23:12:07 +020014094ssl_c_notbefore : string
14095 Returns the start date presented by the client as a formatted string
14096 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
14097 transport layer.
Willy Tarreaub6672b52011-12-12 17:23:41 +010014098
Willy Tarreau74ca5042013-06-11 23:12:07 +020014099ssl_c_s_dn([<entry>[,<occ>]]) : string
14100 When the incoming connection was made over an SSL/TLS transport layer,
14101 returns the full distinguished name of the subject of the certificate
14102 presented by the client when no <entry> is specified, or the value of the
14103 first given entry found from the beginning of the DN. If a positive/negative
14104 occurrence number is specified as the optional second argument, it returns
14105 the value of the nth given entry value from the beginning/end of the DN.
14106 For instance, "ssl_c_s_dn(OU,2)" the second organization unit, and
14107 "ssl_c_s_dn(CN)" retrieves the common name.
Willy Tarreaub6672b52011-12-12 17:23:41 +010014108
Willy Tarreau74ca5042013-06-11 23:12:07 +020014109ssl_c_serial : binary
14110 Returns the serial of the certificate presented by the client when the
14111 incoming connection was made over an SSL/TLS transport layer. When used for
14112 an ACL, the value(s) to match against can be passed in hexadecimal form.
Emeric Brun2525b6b2012-10-18 15:59:43 +020014113
Willy Tarreau74ca5042013-06-11 23:12:07 +020014114ssl_c_sha1 : binary
14115 Returns the SHA-1 fingerprint of the certificate presented by the client when
14116 the incoming connection was made over an SSL/TLS transport layer. This can be
14117 used to stick a client to a server, or to pass this information to a server.
Willy Tarreau2d0caa32014-07-02 19:01:22 +020014118 Note that the output is binary, so if you want to pass that signature to the
14119 server, you need to encode it in hex or base64, such as in the example below:
14120
Jarno Huuskonen676f6222017-03-30 09:19:45 +030014121 Example:
Willy Tarreau2d0caa32014-07-02 19:01:22 +020014122 http-request set-header X-SSL-Client-SHA1 %[ssl_c_sha1,hex]
Emeric Brun2525b6b2012-10-18 15:59:43 +020014123
Willy Tarreau74ca5042013-06-11 23:12:07 +020014124ssl_c_sig_alg : string
14125 Returns the name of the algorithm used to sign the certificate presented by
14126 the client when the incoming connection was made over an SSL/TLS transport
14127 layer.
Emeric Brun87855892012-10-17 17:39:35 +020014128
Willy Tarreau74ca5042013-06-11 23:12:07 +020014129ssl_c_used : boolean
14130 Returns true if current SSL session uses a client certificate even if current
14131 connection uses SSL session resumption. See also "ssl_fc_has_crt".
Emeric Brun7f56e742012-10-19 18:15:40 +020014132
Willy Tarreau74ca5042013-06-11 23:12:07 +020014133ssl_c_verify : integer
14134 Returns the verify result error ID when the incoming connection was made over
14135 an SSL/TLS transport layer, otherwise zero if no error is encountered. Please
14136 refer to your SSL library's documentation for an exhaustive list of error
14137 codes.
Emeric Brunce5ad802012-10-22 14:11:22 +020014138
Willy Tarreau74ca5042013-06-11 23:12:07 +020014139ssl_c_version : integer
14140 Returns the version of the certificate presented by the client when the
14141 incoming connection was made over an SSL/TLS transport layer.
Emeric Brunce5ad802012-10-22 14:11:22 +020014142
Emeric Brun43e79582014-10-29 19:03:26 +010014143ssl_f_der : binary
14144 Returns the DER formatted certificate presented by the frontend when the
14145 incoming connection was made over an SSL/TLS transport layer. When used for
14146 an ACL, the value(s) to match against can be passed in hexadecimal form.
14147
Willy Tarreau74ca5042013-06-11 23:12:07 +020014148ssl_f_i_dn([<entry>[,<occ>]]) : string
14149 When the incoming connection was made over an SSL/TLS transport layer,
14150 returns the full distinguished name of the issuer of the certificate
14151 presented by the frontend when no <entry> is specified, or the value of the
14152 first given entry found from the beginning of the DN. If a positive/negative
Emeric Brun87855892012-10-17 17:39:35 +020014153 occurrence number is specified as the optional second argument, it returns
Willy Tarreau74ca5042013-06-11 23:12:07 +020014154 the value of the nth given entry value from the beginning/end of the DN.
14155 For instance, "ssl_f_i_dn(OU,2)" the second organization unit, and
14156 "ssl_f_i_dn(CN)" retrieves the common name.
Emeric Brun87855892012-10-17 17:39:35 +020014157
Willy Tarreau74ca5042013-06-11 23:12:07 +020014158ssl_f_key_alg : string
14159 Returns the name of the algorithm used to generate the key of the certificate
14160 presented by the frontend when the incoming connection was made over an
14161 SSL/TLS transport layer.
Emeric Brun7f56e742012-10-19 18:15:40 +020014162
Willy Tarreau74ca5042013-06-11 23:12:07 +020014163ssl_f_notafter : string
14164 Returns the end date presented by the frontend as a formatted string
14165 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
14166 transport layer.
Emeric Brun2525b6b2012-10-18 15:59:43 +020014167
Willy Tarreau74ca5042013-06-11 23:12:07 +020014168ssl_f_notbefore : string
14169 Returns the start date presented by the frontend as a formatted string
14170 YYMMDDhhmmss[Z] when the incoming connection was made over an SSL/TLS
14171 transport layer.
Emeric Brun87855892012-10-17 17:39:35 +020014172
Willy Tarreau74ca5042013-06-11 23:12:07 +020014173ssl_f_s_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 subject of the certificate
14176 presented by the frontend 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_f_s_dn(OU,2)" the second organization unit, and
14181 "ssl_f_s_dn(CN)" retrieves the common name.
Emeric Brunce5ad802012-10-22 14:11:22 +020014182
Willy Tarreau74ca5042013-06-11 23:12:07 +020014183ssl_f_serial : binary
14184 Returns the serial of the certificate presented by the frontend when the
14185 incoming connection was made over an SSL/TLS transport layer. When used for
14186 an ACL, the value(s) to match against can be passed in hexadecimal form.
Emeric Brun87855892012-10-17 17:39:35 +020014187
Emeric Brun55f4fa82014-04-30 17:11:25 +020014188ssl_f_sha1 : binary
14189 Returns the SHA-1 fingerprint of the certificate presented by the frontend
14190 when the incoming connection was made over an SSL/TLS transport layer. This
14191 can be used to know which certificate was chosen using SNI.
14192
Willy Tarreau74ca5042013-06-11 23:12:07 +020014193ssl_f_sig_alg : string
14194 Returns the name of the algorithm used to sign the certificate presented by
14195 the frontend when the incoming connection was made over an SSL/TLS transport
14196 layer.
Emeric Brun7f56e742012-10-19 18:15:40 +020014197
Willy Tarreau74ca5042013-06-11 23:12:07 +020014198ssl_f_version : integer
14199 Returns the version of the certificate presented by the frontend when the
14200 incoming connection was made over an SSL/TLS transport layer.
14201
14202ssl_fc : boolean
Emeric Brun2525b6b2012-10-18 15:59:43 +020014203 Returns true when the front connection was made via an SSL/TLS transport
14204 layer and is locally deciphered. This means it has matched a socket declared
14205 with a "bind" line having the "ssl" option.
14206
Willy Tarreau74ca5042013-06-11 23:12:07 +020014207 Example :
14208 # This passes "X-Proto: https" to servers when client connects over SSL
14209 listen http-https
14210 bind :80
14211 bind :443 ssl crt /etc/haproxy.pem
14212 http-request add-header X-Proto https if { ssl_fc }
14213
14214ssl_fc_alg_keysize : integer
14215 Returns the symmetric cipher key size supported in bits when the incoming
14216 connection was made over an SSL/TLS transport layer.
14217
14218ssl_fc_alpn : string
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030014219 This extracts the Application Layer Protocol Negotiation field from an
Willy Tarreau74ca5042013-06-11 23:12:07 +020014220 incoming connection made via a TLS transport layer and locally deciphered by
14221 haproxy. The result is a string containing the protocol name advertised by
14222 the client. The SSL library must have been built with support for TLS
14223 extensions enabled (check haproxy -vv). Note that the TLS ALPN extension is
14224 not advertised unless the "alpn" keyword on the "bind" line specifies a
14225 protocol list. Also, nothing forces the client to pick a protocol from this
14226 list, any other one may be requested. The TLS ALPN extension is meant to
14227 replace the TLS NPN extension. See also "ssl_fc_npn".
14228
Willy Tarreau74ca5042013-06-11 23:12:07 +020014229ssl_fc_cipher : string
14230 Returns the name of the used cipher when the incoming connection was made
14231 over an SSL/TLS transport layer.
Willy Tarreauab861d32013-04-02 02:30:41 +020014232
Thierry FOURNIER5bf77322017-02-25 12:45:22 +010014233ssl_fc_cipherlist_bin : binary
14234 Returns the binary form of the client hello cipher list. The maximum returned
14235 value length is according with the value of
Emmanuel Hocdetaaee7502017-03-07 18:34:58 +010014236 "tune.ssl.capture-cipherlist-size".
Thierry FOURNIER5bf77322017-02-25 12:45:22 +010014237
14238ssl_fc_cipherlist_hex : string
14239 Returns the binary form of the client hello cipher list encoded as
14240 hexadecimal. The maximum returned value length is according with the value of
Emmanuel Hocdetaaee7502017-03-07 18:34:58 +010014241 "tune.ssl.capture-cipherlist-size".
Thierry FOURNIER5bf77322017-02-25 12:45:22 +010014242
14243ssl_fc_cipherlist_str : string
14244 Returns the decoded text form of the client hello cipher list. The maximum
14245 number of ciphers returned is according with the value of
14246 "tune.ssl.capture-cipherlist-size". Note that this sample-fetch is only
Emmanuel Hocdetddcde192017-09-01 17:32:08 +020014247 avaible with OpenSSL >= 1.0.2. If the function is not enabled, this
14248 sample-fetch returns the hash like "ssl_fc_cipherlist_xxh".
Thierry FOURNIER5bf77322017-02-25 12:45:22 +010014249
14250ssl_fc_cipherlist_xxh : integer
14251 Returns a xxh64 of the cipher list. This hash can be return only is the value
14252 "tune.ssl.capture-cipherlist-size" is set greater than 0, however the hash
Emmanuel Hocdetaaee7502017-03-07 18:34:58 +010014253 take in account all the data of the cipher list.
Thierry FOURNIER5bf77322017-02-25 12:45:22 +010014254
Willy Tarreau74ca5042013-06-11 23:12:07 +020014255ssl_fc_has_crt : boolean
Emeric Brun2525b6b2012-10-18 15:59:43 +020014256 Returns true if a client certificate is present in an incoming connection over
14257 SSL/TLS transport layer. Useful if 'verify' statement is set to 'optional'.
Emeric Brun9143d372012-12-20 15:44:16 +010014258 Note: on SSL session resumption with Session ID or TLS ticket, client
14259 certificate is not present in the current connection but may be retrieved
14260 from the cache or the ticket. So prefer "ssl_c_used" if you want to check if
14261 current SSL session uses a client certificate.
Emeric Brun2525b6b2012-10-18 15:59:43 +020014262
Olivier Houchardccaa7de2017-10-02 11:51:03 +020014263ssl_fc_has_early : boolean
14264 Returns true if early data were sent, and the handshake didn't happen yet. As
14265 it has security implications, it is useful to be able to refuse those, or
14266 wait until the handshake happened.
14267
Willy Tarreau74ca5042013-06-11 23:12:07 +020014268ssl_fc_has_sni : boolean
14269 This checks for the presence of a Server Name Indication TLS extension (SNI)
Willy Tarreauf7bc57c2012-10-03 00:19:48 +020014270 in an incoming connection was made over an SSL/TLS transport layer. Returns
14271 true when the incoming connection presents a TLS SNI field. This requires
14272 that the SSL library is build with support for TLS extensions enabled (check
14273 haproxy -vv).
Willy Tarreau7875d092012-09-10 08:20:03 +020014274
Nenad Merdanovic1516fe32016-05-17 03:31:21 +020014275ssl_fc_is_resumed : boolean
Nenad Merdanovic26ea8222015-05-18 02:28:57 +020014276 Returns true if the SSL/TLS session has been resumed through the use of
14277 SSL session cache or TLS tickets.
14278
Willy Tarreau74ca5042013-06-11 23:12:07 +020014279ssl_fc_npn : string
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030014280 This extracts the Next Protocol Negotiation field from an incoming connection
Willy Tarreau74ca5042013-06-11 23:12:07 +020014281 made via a TLS transport layer and locally deciphered by haproxy. The result
14282 is a string containing the protocol name advertised by the client. The SSL
14283 library must have been built with support for TLS extensions enabled (check
14284 haproxy -vv). Note that the TLS NPN extension is not advertised unless the
14285 "npn" keyword on the "bind" line specifies a protocol list. Also, nothing
14286 forces the client to pick a protocol from this list, any other one may be
14287 requested. Please note that the TLS NPN extension was replaced with ALPN.
Willy Tarreaua33c6542012-10-15 13:19:06 +020014288
Willy Tarreau74ca5042013-06-11 23:12:07 +020014289ssl_fc_protocol : string
14290 Returns the name of the used protocol when the incoming connection was made
14291 over an SSL/TLS transport layer.
Willy Tarreau7875d092012-09-10 08:20:03 +020014292
Emeric Brunb73a9b02014-04-30 18:49:19 +020014293ssl_fc_unique_id : binary
David Sc1ad52e2014-04-08 18:48:47 -040014294 When the incoming connection was made over an SSL/TLS transport layer,
Emeric Brunb73a9b02014-04-30 18:49:19 +020014295 returns the TLS unique ID as defined in RFC5929 section 3. The unique id
14296 can be encoded to base64 using the converter: "ssl_bc_unique_id,base64".
David Sc1ad52e2014-04-08 18:48:47 -040014297
Willy Tarreau74ca5042013-06-11 23:12:07 +020014298ssl_fc_session_id : binary
14299 Returns the SSL ID of the front connection when the incoming connection was
14300 made over an SSL/TLS transport layer. It is useful to stick a given client to
14301 a server. It is important to note that some browsers refresh their session ID
14302 every few minutes.
Willy Tarreau7875d092012-09-10 08:20:03 +020014303
Willy Tarreau74ca5042013-06-11 23:12:07 +020014304ssl_fc_sni : string
14305 This extracts the Server Name Indication TLS extension (SNI) field from an
14306 incoming connection made via an SSL/TLS transport layer and locally
14307 deciphered by haproxy. The result (when present) typically is a string
14308 matching the HTTPS host name (253 chars or less). The SSL library must have
14309 been built with support for TLS extensions enabled (check haproxy -vv).
14310
14311 This fetch is different from "req_ssl_sni" above in that it applies to the
14312 connection being deciphered by haproxy and not to SSL contents being blindly
14313 forwarded. See also "ssl_fc_sni_end" and "ssl_fc_sni_reg" below. This
Cyril Bonté9c1eb1e2012-10-09 22:45:34 +020014314 requires that the SSL library is build with support for TLS extensions
14315 enabled (check haproxy -vv).
Willy Tarreau62644772008-07-16 18:36:06 +020014316
Willy Tarreau74ca5042013-06-11 23:12:07 +020014317 ACL derivatives :
Willy Tarreau74ca5042013-06-11 23:12:07 +020014318 ssl_fc_sni_end : suffix match
14319 ssl_fc_sni_reg : regex match
Emeric Brun589fcad2012-10-16 14:13:26 +020014320
Willy Tarreau74ca5042013-06-11 23:12:07 +020014321ssl_fc_use_keysize : integer
14322 Returns the symmetric cipher key size used in bits when the incoming
14323 connection was made over an SSL/TLS transport layer.
Willy Tarreaub6fb4202008-07-20 11:18:28 +020014324
Willy Tarreaub6fb4202008-07-20 11:18:28 +020014325
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200143267.3.5. Fetching samples from buffer contents (Layer 6)
Willy Tarreau74ca5042013-06-11 23:12:07 +020014327------------------------------------------------------
Willy Tarreaub6fb4202008-07-20 11:18:28 +020014328
Willy Tarreau74ca5042013-06-11 23:12:07 +020014329Fetching samples from buffer contents is a bit different from the previous
14330sample fetches above because the sampled data are ephemeral. These data can
14331only be used when they're available and will be lost when they're forwarded.
14332For this reason, samples fetched from buffer contents during a request cannot
14333be used in a response for example. Even while the data are being fetched, they
14334can change. Sometimes it is necessary to set some delays or combine multiple
14335sample fetch methods to ensure that the expected data are complete and usable,
14336for example through TCP request content inspection. Please see the "tcp-request
14337content" keyword for more detailed information on the subject.
Willy Tarreau62644772008-07-16 18:36:06 +020014338
Willy Tarreau74ca5042013-06-11 23:12:07 +020014339payload(<offset>,<length>) : binary (deprecated)
14340 This is an alias for "req.payload" when used in the context of a request (eg:
14341 "stick on", "stick match"), and for "res.payload" when used in the context of
14342 a response such as in "stick store response".
Willy Tarreau0ba27502007-12-24 16:55:16 +010014343
Willy Tarreau74ca5042013-06-11 23:12:07 +020014344payload_lv(<offset1>,<length>[,<offset2>]) : binary (deprecated)
14345 This is an alias for "req.payload_lv" when used in the context of a request
14346 (eg: "stick on", "stick match"), and for "res.payload_lv" when used in the
14347 context of a response such as in "stick store response".
Willy Tarreau0ba27502007-12-24 16:55:16 +010014348
Thierry FOURNIERd7d88812017-04-19 15:15:14 +020014349req.hdrs : string
14350 Returns the current request headers as string including the last empty line
14351 separating headers from the request body. The last empty line can be used to
14352 detect a truncated header block. This sample fetch is useful for some SPOE
14353 headers analyzers and for advanced logging.
14354
Thierry FOURNIER5617dce2017-04-09 05:38:19 +020014355req.hdrs_bin : binary
14356 Returns the current request headers contained in preparsed binary form. This
14357 is useful for offloading some processing with SPOE. Each string is described
14358 by a length followed by the number of bytes indicated in the length. The
14359 length is represented using the variable integer encoding detailed in the
14360 SPOE documentation. The end of the list is marked by a couple of empty header
14361 names and values (length of 0 for both).
14362
14363 *(<str:header-name><str:header-value>)<empty string><empty string>
14364
14365 int: refer to the SPOE documentation for the encoding
14366 str: <int:length><bytes>
14367
Willy Tarreau74ca5042013-06-11 23:12:07 +020014368req.len : integer
14369req_len : integer (deprecated)
14370 Returns an integer value corresponding to the number of bytes present in the
14371 request buffer. This is mostly used in ACL. It is important to understand
14372 that this test does not return false as long as the buffer is changing. This
14373 means that a check with equality to zero will almost always immediately match
14374 at the beginning of the session, while a test for more data will wait for
14375 that data to come in and return false only when haproxy is certain that no
14376 more data will come in. This test was designed to be used with TCP request
14377 content inspection.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014378
Willy Tarreau74ca5042013-06-11 23:12:07 +020014379req.payload(<offset>,<length>) : binary
14380 This extracts a binary block of <length> bytes and starting at byte <offset>
Willy Tarreau00f00842013-08-02 11:07:32 +020014381 in the request buffer. As a special case, if the <length> argument is zero,
14382 the the whole buffer from <offset> to the end is extracted. This can be used
14383 with ACLs in order to check for the presence of some content in a buffer at
14384 any location.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014385
Willy Tarreau74ca5042013-06-11 23:12:07 +020014386 ACL alternatives :
14387 payload(<offset>,<length>) : hex binary match
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014388
Willy Tarreau74ca5042013-06-11 23:12:07 +020014389req.payload_lv(<offset1>,<length>[,<offset2>]) : binary
14390 This extracts a binary block whose size is specified at <offset1> for <length>
14391 bytes, and which starts at <offset2> if specified or just after the length in
14392 the request buffer. The <offset2> parameter also supports relative offsets if
14393 prepended with a '+' or '-' sign.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014394
Willy Tarreau74ca5042013-06-11 23:12:07 +020014395 ACL alternatives :
14396 payload_lv(<offset1>,<length>[,<offset2>]) : hex binary match
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014397
Willy Tarreau74ca5042013-06-11 23:12:07 +020014398 Example : please consult the example from the "stick store-response" keyword.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014399
Willy Tarreau74ca5042013-06-11 23:12:07 +020014400req.proto_http : boolean
14401req_proto_http : boolean (deprecated)
14402 Returns true when data in the request buffer look like HTTP and correctly
14403 parses as such. It is the same parser as the common HTTP request parser which
14404 is used so there should be no surprises. The test does not match until the
14405 request is complete, failed or timed out. This test may be used to report the
14406 protocol in TCP logs, but the biggest use is to block TCP request analysis
14407 until a complete HTTP request is present in the buffer, for example to track
14408 a header.
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014409
Willy Tarreau74ca5042013-06-11 23:12:07 +020014410 Example:
14411 # track request counts per "base" (concatenation of Host+URL)
14412 tcp-request inspect-delay 10s
14413 tcp-request content reject if !HTTP
Willy Tarreaube4a3ef2013-06-17 15:04:07 +020014414 tcp-request content track-sc0 base table req-rate
Willy Tarreaua7ad50c2012-04-29 15:39:40 +020014415
Willy Tarreau74ca5042013-06-11 23:12:07 +020014416req.rdp_cookie([<name>]) : string
14417rdp_cookie([<name>]) : string (deprecated)
14418 When the request buffer looks like the RDP protocol, extracts the RDP cookie
14419 <name>, or any cookie if unspecified. The parser only checks for the first
14420 cookie, as illustrated in the RDP protocol specification. The cookie name is
14421 case insensitive. Generally the "MSTS" cookie name will be used, as it can
14422 contain the user name of the client connecting to the server if properly
14423 configured on the client. The "MSTSHASH" cookie is often used as well for
14424 session stickiness to servers.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014425
Willy Tarreau74ca5042013-06-11 23:12:07 +020014426 This differs from "balance rdp-cookie" in that any balancing algorithm may be
14427 used and thus the distribution of clients to backend servers is not linked to
14428 a hash of the RDP cookie. It is envisaged that using a balancing algorithm
14429 such as "balance roundrobin" or "balance leastconn" will lead to a more even
14430 distribution of clients to backend servers than the hash used by "balance
14431 rdp-cookie".
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014432
Willy Tarreau74ca5042013-06-11 23:12:07 +020014433 ACL derivatives :
14434 req_rdp_cookie([<name>]) : exact string match
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014435
Willy Tarreau74ca5042013-06-11 23:12:07 +020014436 Example :
14437 listen tse-farm
14438 bind 0.0.0.0:3389
14439 # wait up to 5s for an RDP cookie in the request
14440 tcp-request inspect-delay 5s
14441 tcp-request content accept if RDP_COOKIE
14442 # apply RDP cookie persistence
14443 persist rdp-cookie
14444 # Persist based on the mstshash cookie
14445 # This is only useful makes sense if
14446 # balance rdp-cookie is not used
14447 stick-table type string size 204800
14448 stick on req.rdp_cookie(mstshash)
14449 server srv1 1.1.1.1:3389
14450 server srv1 1.1.1.2:3389
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014451
Willy Tarreau74ca5042013-06-11 23:12:07 +020014452 See also : "balance rdp-cookie", "persist rdp-cookie", "tcp-request" and the
14453 "req_rdp_cookie" ACL.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014454
Willy Tarreau74ca5042013-06-11 23:12:07 +020014455req.rdp_cookie_cnt([name]) : integer
14456rdp_cookie_cnt([name]) : integer (deprecated)
14457 Tries to parse the request buffer as RDP protocol, then returns an integer
14458 corresponding to the number of RDP cookies found. If an optional cookie name
14459 is passed, only cookies matching this name are considered. This is mostly
14460 used in ACL.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014461
Willy Tarreau74ca5042013-06-11 23:12:07 +020014462 ACL derivatives :
14463 req_rdp_cookie_cnt([<name>]) : integer match
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014464
Nenad Merdanovic5fc7d7e2015-07-07 22:00:17 +020014465req.ssl_ec_ext : boolean
14466 Returns a boolean identifying if client sent the Supported Elliptic Curves
14467 Extension as defined in RFC4492, section 5.1. within the SSL ClientHello
Cyril Bonté307ee1e2015-09-28 23:16:06 +020014468 message. This can be used to present ECC compatible clients with EC
14469 certificate and to use RSA for all others, on the same IP address. Note that
14470 this only applies to raw contents found in the request buffer and not to
14471 contents deciphered via an SSL data layer, so this will not work with "bind"
14472 lines having the "ssl" option.
Nenad Merdanovic5fc7d7e2015-07-07 22:00:17 +020014473
Willy Tarreau74ca5042013-06-11 23:12:07 +020014474req.ssl_hello_type : integer
14475req_ssl_hello_type : integer (deprecated)
14476 Returns an integer value containing the type of the SSL hello message found
14477 in the request buffer if the buffer contains data that parse as a complete
14478 SSL (v3 or superior) client hello message. Note that this only applies to raw
14479 contents found in the request buffer and not to contents deciphered via an
14480 SSL data layer, so this will not work with "bind" lines having the "ssl"
14481 option. This is mostly used in ACL to detect presence of an SSL hello message
14482 that is supposed to contain an SSL session ID usable for stickiness.
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014483
Willy Tarreau74ca5042013-06-11 23:12:07 +020014484req.ssl_sni : string
14485req_ssl_sni : string (deprecated)
14486 Returns a string containing the value of the Server Name TLS extension sent
14487 by a client in a TLS stream passing through the request buffer if the buffer
14488 contains data that parse as a complete SSL (v3 or superior) client hello
14489 message. Note that this only applies to raw contents found in the request
14490 buffer and not to contents deciphered via an SSL data layer, so this will not
14491 work with "bind" lines having the "ssl" option. SNI normally contains the
14492 name of the host the client tries to connect to (for recent browsers). SNI is
14493 useful for allowing or denying access to certain hosts when SSL/TLS is used
14494 by the client. This test was designed to be used with TCP request content
14495 inspection. If content switching is needed, it is recommended to first wait
14496 for a complete client hello (type 1), like in the example below. See also
14497 "ssl_fc_sni".
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014498
Willy Tarreau74ca5042013-06-11 23:12:07 +020014499 ACL derivatives :
14500 req_ssl_sni : exact string match
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014501
Willy Tarreau74ca5042013-06-11 23:12:07 +020014502 Examples :
14503 # Wait for a client hello for at most 5 seconds
14504 tcp-request inspect-delay 5s
14505 tcp-request content accept if { req_ssl_hello_type 1 }
14506 use_backend bk_allow if { req_ssl_sni -f allowed_sites }
14507 default_backend bk_sorry_page
Willy Tarreau04aa6a92012-04-06 18:57:55 +020014508
Pradeep Jindalbb2acf52015-09-29 10:12:57 +053014509req.ssl_st_ext : integer
14510 Returns 0 if the client didn't send a SessionTicket TLS Extension (RFC5077)
14511 Returns 1 if the client sent SessionTicket TLS Extension
14512 Returns 2 if the client also sent non-zero length TLS SessionTicket
14513 Note that this only applies to raw contents found in the request buffer and
14514 not to contents deciphered via an SSL data layer, so this will not work with
14515 "bind" lines having the "ssl" option. This can for example be used to detect
14516 whether the client sent a SessionTicket or not and stick it accordingly, if
14517 no SessionTicket then stick on SessionID or don't stick as there's no server
14518 side state is there when SessionTickets are in use.
14519
Willy Tarreau74ca5042013-06-11 23:12:07 +020014520req.ssl_ver : integer
14521req_ssl_ver : integer (deprecated)
14522 Returns an integer value containing the version of the SSL/TLS protocol of a
14523 stream present in the request buffer. Both SSLv2 hello messages and SSLv3
14524 messages are supported. TLSv1 is announced as SSL version 3.1. The value is
14525 composed of the major version multiplied by 65536, added to the minor
14526 version. Note that this only applies to raw contents found in the request
14527 buffer and not to contents deciphered via an SSL data layer, so this will not
14528 work with "bind" lines having the "ssl" option. The ACL version of the test
14529 matches against a decimal notation in the form MAJOR.MINOR (eg: 3.1). This
14530 fetch is mostly used in ACL.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014531
Willy Tarreau74ca5042013-06-11 23:12:07 +020014532 ACL derivatives :
14533 req_ssl_ver : decimal match
Willy Tarreaud63335a2010-02-26 12:56:52 +010014534
Willy Tarreau47e8eba2013-09-11 23:28:46 +020014535res.len : integer
14536 Returns an integer value corresponding to the number of bytes present in the
14537 response buffer. This is mostly used in ACL. It is important to understand
14538 that this test does not return false as long as the buffer is changing. This
14539 means that a check with equality to zero will almost always immediately match
14540 at the beginning of the session, while a test for more data will wait for
14541 that data to come in and return false only when haproxy is certain that no
14542 more data will come in. This test was designed to be used with TCP response
14543 content inspection.
14544
Willy Tarreau74ca5042013-06-11 23:12:07 +020014545res.payload(<offset>,<length>) : binary
14546 This extracts a binary block of <length> bytes and starting at byte <offset>
Willy Tarreau00f00842013-08-02 11:07:32 +020014547 in the response buffer. As a special case, if the <length> argument is zero,
14548 the the whole buffer from <offset> to the end is extracted. This can be used
14549 with ACLs in order to check for the presence of some content in a buffer at
14550 any location.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014551
Willy Tarreau74ca5042013-06-11 23:12:07 +020014552res.payload_lv(<offset1>,<length>[,<offset2>]) : binary
14553 This extracts a binary block whose size is specified at <offset1> for <length>
14554 bytes, and which starts at <offset2> if specified or just after the length in
14555 the response buffer. The <offset2> parameter also supports relative offsets
14556 if prepended with a '+' or '-' sign.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014557
Willy Tarreau74ca5042013-06-11 23:12:07 +020014558 Example : please consult the example from the "stick store-response" keyword.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014559
Willy Tarreau971f7b62015-09-29 14:06:59 +020014560res.ssl_hello_type : integer
14561rep_ssl_hello_type : integer (deprecated)
14562 Returns an integer value containing the type of the SSL hello message found
14563 in the response buffer if the buffer contains data that parses as a complete
14564 SSL (v3 or superior) hello message. Note that this only applies to raw
14565 contents found in the response buffer and not to contents deciphered via an
14566 SSL data layer, so this will not work with "server" lines having the "ssl"
14567 option. This is mostly used in ACL to detect presence of an SSL hello message
14568 that is supposed to contain an SSL session ID usable for stickiness.
14569
Willy Tarreau74ca5042013-06-11 23:12:07 +020014570wait_end : boolean
14571 This fetch either returns true when the inspection period is over, or does
14572 not fetch. It is only used in ACLs, in conjunction with content analysis to
14573 avoid returning a wrong verdict early. It may also be used to delay some
14574 actions, such as a delayed reject for some special addresses. Since it either
14575 stops the rules evaluation or immediately returns true, it is recommended to
14576 use this acl as the last one in a rule. Please note that the default ACL
14577 "WAIT_END" is always usable without prior declaration. This test was designed
14578 to be used with TCP request content inspection.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014579
Willy Tarreau74ca5042013-06-11 23:12:07 +020014580 Examples :
14581 # delay every incoming request by 2 seconds
14582 tcp-request inspect-delay 2s
14583 tcp-request content accept if WAIT_END
Willy Tarreaud63335a2010-02-26 12:56:52 +010014584
Willy Tarreau74ca5042013-06-11 23:12:07 +020014585 # don't immediately tell bad guys they are rejected
14586 tcp-request inspect-delay 10s
14587 acl goodguys src 10.0.0.0/24
14588 acl badguys src 10.0.1.0/24
14589 tcp-request content accept if goodguys
14590 tcp-request content reject if badguys WAIT_END
14591 tcp-request content reject
14592
14593
Thierry FOURNIER060762e2014-04-23 13:29:15 +0200145947.3.6. Fetching HTTP samples (Layer 7)
Willy Tarreau74ca5042013-06-11 23:12:07 +020014595--------------------------------------
14596
14597It is possible to fetch samples from HTTP contents, requests and responses.
14598This application layer is also called layer 7. It is only possible to fetch the
14599data in this section when a full HTTP request or response has been parsed from
14600its respective request or response buffer. This is always the case with all
14601HTTP specific rules and for sections running with "mode http". When using TCP
14602content inspection, it may be necessary to support an inspection delay in order
14603to let the request or response come in first. These fetches may require a bit
14604more CPU resources than the layer 4 ones, but not much since the request and
14605response are indexed.
14606
14607base : string
14608 This returns the concatenation of the first Host header and the path part of
14609 the request, which starts at the first slash and ends before the question
14610 mark. It can be useful in virtual hosted environments to detect URL abuses as
14611 well as to improve shared caches efficiency. Using this with a limited size
14612 stick table also allows one to collect statistics about most commonly
14613 requested objects by host/path. With ACLs it can allow simple content
14614 switching rules involving the host and the path at the same time, such as
14615 "www.example.com/favicon.ico". See also "path" and "uri".
14616
14617 ACL derivatives :
14618 base : exact string match
14619 base_beg : prefix match
14620 base_dir : subdir match
14621 base_dom : domain match
14622 base_end : suffix match
14623 base_len : length match
14624 base_reg : regex match
14625 base_sub : substring match
14626
14627base32 : integer
14628 This returns a 32-bit hash of the value returned by the "base" fetch method
14629 above. This is useful to track per-URL activity on high traffic sites without
14630 having to store all URLs. Instead a shorter hash is stored, saving a lot of
Willy Tarreau23ec4ca2014-07-15 20:15:37 +020014631 memory. The output type is an unsigned integer. The hash function used is
14632 SDBM with full avalanche on the output. Technically, base32 is exactly equal
14633 to "base,sdbm(1)".
Willy Tarreau74ca5042013-06-11 23:12:07 +020014634
14635base32+src : binary
14636 This returns the concatenation of the base32 fetch above and the src fetch
14637 below. The resulting type is of type binary, with a size of 8 or 20 bytes
14638 depending on the source address family. This can be used to track per-IP,
14639 per-URL counters.
14640
William Lallemand65ad6e12014-01-31 15:08:02 +010014641capture.req.hdr(<idx>) : string
14642 This extracts the content of the header captured by the "capture request
14643 header", idx is the position of the capture keyword in the configuration.
14644 The first entry is an index of 0. See also: "capture request header".
14645
14646capture.req.method : string
14647 This extracts the METHOD of an HTTP request. It can be used in both request
14648 and response. Unlike "method", it can be used in both request and response
14649 because it's allocated.
14650
14651capture.req.uri : string
14652 This extracts the request's URI, which starts at the first slash and ends
14653 before the first space in the request (without the host part). Unlike "path"
14654 and "url", it can be used in both request and response because it's
14655 allocated.
14656
Willy Tarreau3c1b5ec2014-04-24 23:41:57 +020014657capture.req.ver : string
14658 This extracts the request's HTTP version and returns either "HTTP/1.0" or
14659 "HTTP/1.1". Unlike "req.ver", it can be used in both request, response, and
14660 logs because it relies on a persistent flag.
14661
William Lallemand65ad6e12014-01-31 15:08:02 +010014662capture.res.hdr(<idx>) : string
14663 This extracts the content of the header captured by the "capture response
14664 header", idx is the position of the capture keyword in the configuration.
14665 The first entry is an index of 0.
14666 See also: "capture response header"
14667
Willy Tarreau3c1b5ec2014-04-24 23:41:57 +020014668capture.res.ver : string
14669 This extracts the response's HTTP version and returns either "HTTP/1.0" or
14670 "HTTP/1.1". Unlike "res.ver", it can be used in logs because it relies on a
14671 persistent flag.
14672
Willy Tarreaua5910cc2015-05-02 00:46:08 +020014673req.body : binary
14674 This returns the HTTP request's available body as a block of data. It
14675 requires that the request body has been buffered made available using
14676 "option http-buffer-request". In case of chunked-encoded body, currently only
14677 the first chunk is analyzed.
14678
Thierry FOURNIER9826c772015-05-20 15:50:54 +020014679req.body_param([<name>) : string
14680 This fetch assumes that the body of the POST request is url-encoded. The user
14681 can check if the "content-type" contains the value
14682 "application/x-www-form-urlencoded". This extracts the first occurrence of the
14683 parameter <name> in the body, which ends before '&'. The parameter name is
14684 case-sensitive. If no name is given, any parameter will match, and the first
14685 one will be returned. The result is a string corresponding to the value of the
14686 parameter <name> as presented in the request body (no URL decoding is
14687 performed). Note that the ACL version of this fetch iterates over multiple
14688 parameters and will iteratively report all parameters values if no name is
14689 given.
14690
Willy Tarreaua5910cc2015-05-02 00:46:08 +020014691req.body_len : integer
14692 This returns the length of the HTTP request's available body in bytes. It may
14693 be lower than the advertised length if the body is larger than the buffer. It
14694 requires that the request body has been buffered made available using
14695 "option http-buffer-request".
14696
14697req.body_size : integer
14698 This returns the advertised length of the HTTP request's body in bytes. It
14699 will represent the advertised Content-Length header, or the size of the first
14700 chunk in case of chunked encoding. In order to parse the chunks, it requires
14701 that the request body has been buffered made available using
14702 "option http-buffer-request".
14703
Willy Tarreau74ca5042013-06-11 23:12:07 +020014704req.cook([<name>]) : string
14705cook([<name>]) : string (deprecated)
14706 This extracts the last occurrence of the cookie name <name> on a "Cookie"
14707 header line from the request, and returns its value as string. If no name is
14708 specified, the first cookie value is returned. When used with ACLs, all
14709 matching cookies are evaluated. Spaces around the name and the value are
14710 ignored as requested by the Cookie header specification (RFC6265). The cookie
14711 name is case-sensitive. Empty cookies are valid, so an empty cookie may very
14712 well return an empty value if it is present. Use the "found" match to detect
14713 presence. Use the res.cook() variant for response cookies sent by the server.
14714
14715 ACL derivatives :
14716 cook([<name>]) : exact string match
14717 cook_beg([<name>]) : prefix match
14718 cook_dir([<name>]) : subdir match
14719 cook_dom([<name>]) : domain match
14720 cook_end([<name>]) : suffix match
14721 cook_len([<name>]) : length match
14722 cook_reg([<name>]) : regex match
14723 cook_sub([<name>]) : substring match
Willy Tarreaud63335a2010-02-26 12:56:52 +010014724
Willy Tarreau74ca5042013-06-11 23:12:07 +020014725req.cook_cnt([<name>]) : integer
14726cook_cnt([<name>]) : integer (deprecated)
14727 Returns an integer value representing the number of occurrences of the cookie
14728 <name> in the request, or all cookies if <name> is not specified.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014729
Willy Tarreau74ca5042013-06-11 23:12:07 +020014730req.cook_val([<name>]) : integer
14731cook_val([<name>]) : integer (deprecated)
14732 This extracts the last occurrence of the cookie name <name> on a "Cookie"
14733 header line from the request, and converts its value to an integer which is
14734 returned. If no name is specified, the first cookie value is returned. When
14735 used in ACLs, all matching names are iterated over until a value matches.
Willy Tarreau0e698542011-09-16 08:32:32 +020014736
Willy Tarreau74ca5042013-06-11 23:12:07 +020014737cookie([<name>]) : string (deprecated)
14738 This extracts the last occurrence of the cookie name <name> on a "Cookie"
14739 header line from the request, or a "Set-Cookie" header from the response, and
14740 returns its value as a string. A typical use is to get multiple clients
14741 sharing a same profile use the same server. This can be similar to what
Willy Tarreau294d0f02015-08-10 19:40:12 +020014742 "appsession" did with the "request-learn" statement, but with support for
Willy Tarreau74ca5042013-06-11 23:12:07 +020014743 multi-peer synchronization and state keeping across restarts. If no name is
14744 specified, the first cookie value is returned. This fetch should not be used
14745 anymore and should be replaced by req.cook() or res.cook() instead as it
14746 ambiguously uses the direction based on the context where it is used.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014747
Willy Tarreau74ca5042013-06-11 23:12:07 +020014748hdr([<name>[,<occ>]]) : string
14749 This is equivalent to req.hdr() when used on requests, and to res.hdr() when
14750 used on responses. Please refer to these respective fetches for more details.
14751 In case of doubt about the fetch direction, please use the explicit ones.
14752 Note that contrary to the hdr() sample fetch method, the hdr_* ACL keywords
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030014753 unambiguously apply to the request headers.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014754
Willy Tarreau74ca5042013-06-11 23:12:07 +020014755req.fhdr(<name>[,<occ>]) : string
14756 This extracts the last occurrence of header <name> in an HTTP request. When
14757 used from an ACL, all occurrences are iterated over until a match is found.
14758 Optionally, a specific occurrence might be specified as a position number.
14759 Positive values indicate a position from the first occurrence, with 1 being
14760 the first one. Negative values indicate positions relative to the last one,
14761 with -1 being the last one. It differs from req.hdr() in that any commas
14762 present in the value are returned and are not used as delimiters. This is
14763 sometimes useful with headers such as User-Agent.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014764
Willy Tarreau74ca5042013-06-11 23:12:07 +020014765req.fhdr_cnt([<name>]) : integer
14766 Returns an integer value representing the number of occurrences of request
14767 header field name <name>, or the total number of header fields if <name> is
14768 not specified. Contrary to its req.hdr_cnt() cousin, this function returns
14769 the number of full line headers and does not stop on commas.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014770
Willy Tarreau74ca5042013-06-11 23:12:07 +020014771req.hdr([<name>[,<occ>]]) : string
14772 This extracts the last occurrence of header <name> in an HTTP request. When
14773 used from an ACL, all occurrences are iterated over until a match is found.
14774 Optionally, a specific occurrence might be specified as a position number.
14775 Positive values indicate a position from the first occurrence, with 1 being
14776 the first one. Negative values indicate positions relative to the last one,
14777 with -1 being the last one. A typical use is with the X-Forwarded-For header
14778 once converted to IP, associated with an IP stick-table. The function
14779 considers any comma as a delimiter for distinct values. If full-line headers
Lukas Tribus23953682017-04-28 13:24:30 +000014780 are desired instead, use req.fhdr(). Please carefully check RFC7231 to know
Willy Tarreau74ca5042013-06-11 23:12:07 +020014781 how certain headers are supposed to be parsed. Also, some of them are case
14782 insensitive (eg: Connection).
Willy Tarreaud63335a2010-02-26 12:56:52 +010014783
Willy Tarreau74ca5042013-06-11 23:12:07 +020014784 ACL derivatives :
14785 hdr([<name>[,<occ>]]) : exact string match
14786 hdr_beg([<name>[,<occ>]]) : prefix match
14787 hdr_dir([<name>[,<occ>]]) : subdir match
14788 hdr_dom([<name>[,<occ>]]) : domain match
14789 hdr_end([<name>[,<occ>]]) : suffix match
14790 hdr_len([<name>[,<occ>]]) : length match
14791 hdr_reg([<name>[,<occ>]]) : regex match
14792 hdr_sub([<name>[,<occ>]]) : substring match
14793
14794req.hdr_cnt([<name>]) : integer
14795hdr_cnt([<header>]) : integer (deprecated)
14796 Returns an integer value representing the number of occurrences of request
14797 header field name <name>, or the total number of header field values if
14798 <name> is not specified. It is important to remember that one header line may
14799 count as several headers if it has several values. The function considers any
14800 comma as a delimiter for distinct values. If full-line headers are desired
14801 instead, req.fhdr_cnt() should be used instead. With ACLs, it can be used to
14802 detect presence, absence or abuse of a specific header, as well as to block
14803 request smuggling attacks by rejecting requests which contain more than one
14804 of certain headers. See "req.hdr" for more information on header matching.
14805
14806req.hdr_ip([<name>[,<occ>]]) : ip
14807hdr_ip([<name>[,<occ>]]) : ip (deprecated)
14808 This extracts the last occurrence of header <name> in an HTTP request,
14809 converts it to an IPv4 or IPv6 address and returns this address. When used
14810 with ACLs, all occurrences are checked, and if <name> is omitted, every value
14811 of every header is checked. Optionally, a specific occurrence might be
14812 specified as a position number. Positive values indicate a position from the
14813 first occurrence, with 1 being the first one. Negative values indicate
14814 positions relative to the last one, with -1 being the last one. A typical use
14815 is with the X-Forwarded-For and X-Client-IP headers.
14816
14817req.hdr_val([<name>[,<occ>]]) : integer
14818hdr_val([<name>[,<occ>]]) : integer (deprecated)
14819 This extracts the last occurrence of header <name> in an HTTP request, and
14820 converts it to an integer value. When used with ACLs, all occurrences are
14821 checked, and if <name> is omitted, every value of every header is checked.
14822 Optionally, a specific occurrence might be specified as a position number.
14823 Positive values indicate a position from the first occurrence, with 1 being
14824 the first one. Negative values indicate positions relative to the last one,
14825 with -1 being the last one. A typical use is with the X-Forwarded-For header.
14826
14827http_auth(<userlist>) : boolean
14828 Returns a boolean indicating whether the authentication data received from
14829 the client match a username & password stored in the specified userlist. This
14830 fetch function is not really useful outside of ACLs. Currently only http
14831 basic auth is supported.
14832
Thierry FOURNIER9eec0a62014-01-22 18:38:02 +010014833http_auth_group(<userlist>) : string
14834 Returns a string corresponding to the user name found in the authentication
14835 data received from the client if both the user name and password are valid
14836 according to the specified userlist. The main purpose is to use it in ACLs
14837 where it is then checked whether the user belongs to any group within a list.
Willy Tarreau74ca5042013-06-11 23:12:07 +020014838 This fetch function is not really useful outside of ACLs. Currently only http
14839 basic auth is supported.
14840
14841 ACL derivatives :
Thierry FOURNIER9eec0a62014-01-22 18:38:02 +010014842 http_auth_group(<userlist>) : group ...
14843 Returns true when the user extracted from the request and whose password is
14844 valid according to the specified userlist belongs to at least one of the
14845 groups.
Willy Tarreau74ca5042013-06-11 23:12:07 +020014846
14847http_first_req : boolean
Willy Tarreau7f18e522010-10-22 20:04:13 +020014848 Returns true when the request being processed is the first one of the
14849 connection. This can be used to add or remove headers that may be missing
Willy Tarreau74ca5042013-06-11 23:12:07 +020014850 from some requests when a request is not the first one, or to help grouping
14851 requests in the logs.
Willy Tarreau7f18e522010-10-22 20:04:13 +020014852
Willy Tarreau74ca5042013-06-11 23:12:07 +020014853method : integer + string
14854 Returns an integer value corresponding to the method in the HTTP request. For
14855 example, "GET" equals 1 (check sources to establish the matching). Value 9
14856 means "other method" and may be converted to a string extracted from the
14857 stream. This should not be used directly as a sample, this is only meant to
14858 be used from ACLs, which transparently convert methods from patterns to these
14859 integer + string values. Some predefined ACL already check for most common
14860 methods.
Willy Tarreau6a06a402007-07-15 20:15:28 +020014861
Willy Tarreau74ca5042013-06-11 23:12:07 +020014862 ACL derivatives :
14863 method : case insensitive method match
Willy Tarreau6a06a402007-07-15 20:15:28 +020014864
Willy Tarreau74ca5042013-06-11 23:12:07 +020014865 Example :
14866 # only accept GET and HEAD requests
14867 acl valid_method method GET HEAD
14868 http-request deny if ! valid_method
Willy Tarreau6a06a402007-07-15 20:15:28 +020014869
Willy Tarreau74ca5042013-06-11 23:12:07 +020014870path : string
14871 This extracts the request's URL path, which starts at the first slash and
14872 ends before the question mark (without the host part). A typical use is with
14873 prefetch-capable caches, and with portals which need to aggregate multiple
14874 information from databases and keep them in caches. Note that with outgoing
14875 caches, it would be wiser to use "url" instead. With ACLs, it's typically
14876 used to match exact file names (eg: "/login.php"), or directory parts using
14877 the derivative forms. See also the "url" and "base" fetch methods.
Willy Tarreau6a06a402007-07-15 20:15:28 +020014878
Willy Tarreau74ca5042013-06-11 23:12:07 +020014879 ACL derivatives :
14880 path : exact string match
14881 path_beg : prefix match
14882 path_dir : subdir match
14883 path_dom : domain match
14884 path_end : suffix match
14885 path_len : length match
14886 path_reg : regex match
14887 path_sub : substring match
Willy Tarreau6a06a402007-07-15 20:15:28 +020014888
Willy Tarreau49ad95c2015-01-19 15:06:26 +010014889query : string
14890 This extracts the request's query string, which starts after the first
14891 question mark. If no question mark is present, this fetch returns nothing. If
14892 a question mark is present but nothing follows, it returns an empty string.
14893 This means it's possible to easily know whether a query string is present
Tim Düsterhus4896c442016-11-29 02:15:19 +010014894 using the "found" matching method. This fetch is the complement of "path"
Willy Tarreau49ad95c2015-01-19 15:06:26 +010014895 which stops before the question mark.
14896
Willy Tarreaueb27ec72015-02-20 13:55:29 +010014897req.hdr_names([<delim>]) : string
14898 This builds a string made from the concatenation of all header names as they
14899 appear in the request when the rule is evaluated. The default delimiter is
14900 the comma (',') but it may be overridden as an optional argument <delim>. In
14901 this case, only the first character of <delim> is considered.
14902
Willy Tarreau74ca5042013-06-11 23:12:07 +020014903req.ver : string
14904req_ver : string (deprecated)
14905 Returns the version string from the HTTP request, for example "1.1". This can
14906 be useful for logs, but is mostly there for ACL. Some predefined ACL already
14907 check for versions 1.0 and 1.1.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014908
Willy Tarreau74ca5042013-06-11 23:12:07 +020014909 ACL derivatives :
14910 req_ver : exact string match
Willy Tarreau0e698542011-09-16 08:32:32 +020014911
Willy Tarreau74ca5042013-06-11 23:12:07 +020014912res.comp : boolean
14913 Returns the boolean "true" value if the response has been compressed by
14914 HAProxy, otherwise returns boolean "false". This may be used to add
14915 information in the logs.
Willy Tarreau6a06a402007-07-15 20:15:28 +020014916
Willy Tarreau74ca5042013-06-11 23:12:07 +020014917res.comp_algo : string
14918 Returns a string containing the name of the algorithm used if the response
14919 was compressed by HAProxy, for example : "deflate". This may be used to add
14920 some information in the logs.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014921
Willy Tarreau74ca5042013-06-11 23:12:07 +020014922res.cook([<name>]) : string
14923scook([<name>]) : string (deprecated)
14924 This extracts the last occurrence of the cookie name <name> on a "Set-Cookie"
14925 header line from the response, and returns its value as string. If no name is
14926 specified, the first cookie value is returned.
Willy Tarreau0ce3aa02012-04-25 18:46:33 +020014927
Willy Tarreau74ca5042013-06-11 23:12:07 +020014928 ACL derivatives :
14929 scook([<name>] : exact string match
Willy Tarreau0ce3aa02012-04-25 18:46:33 +020014930
Willy Tarreau74ca5042013-06-11 23:12:07 +020014931res.cook_cnt([<name>]) : integer
14932scook_cnt([<name>]) : integer (deprecated)
14933 Returns an integer value representing the number of occurrences of the cookie
14934 <name> in the response, or all cookies if <name> is not specified. This is
14935 mostly useful when combined with ACLs to detect suspicious responses.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014936
Willy Tarreau74ca5042013-06-11 23:12:07 +020014937res.cook_val([<name>]) : integer
14938scook_val([<name>]) : integer (deprecated)
14939 This extracts the last occurrence of the cookie name <name> on a "Set-Cookie"
14940 header line from the response, and converts its value to an integer which is
14941 returned. If no name is specified, the first cookie value is returned.
Willy Tarreaud63335a2010-02-26 12:56:52 +010014942
Willy Tarreau74ca5042013-06-11 23:12:07 +020014943res.fhdr([<name>[,<occ>]]) : string
14944 This extracts the last occurrence of header <name> in an HTTP response, or of
14945 the last header if no <name> is specified. Optionally, a specific occurrence
14946 might be specified as a position number. Positive values indicate a position
14947 from the first occurrence, with 1 being the first one. Negative values
14948 indicate positions relative to the last one, with -1 being the last one. It
14949 differs from res.hdr() in that any commas present in the value are returned
14950 and are not used as delimiters. If this is not desired, the res.hdr() fetch
14951 should be used instead. This is sometimes useful with headers such as Date or
14952 Expires.
Willy Tarreau6a06a402007-07-15 20:15:28 +020014953
Willy Tarreau74ca5042013-06-11 23:12:07 +020014954res.fhdr_cnt([<name>]) : integer
14955 Returns an integer value representing the number of occurrences of response
14956 header field name <name>, or the total number of header fields if <name> is
14957 not specified. Contrary to its res.hdr_cnt() cousin, this function returns
14958 the number of full line headers and does not stop on commas. If this is not
14959 desired, the res.hdr_cnt() fetch should be used instead.
Willy Tarreau6a06a402007-07-15 20:15:28 +020014960
Willy Tarreau74ca5042013-06-11 23:12:07 +020014961res.hdr([<name>[,<occ>]]) : string
14962shdr([<name>[,<occ>]]) : string (deprecated)
14963 This extracts the last occurrence of header <name> in an HTTP response, or of
14964 the last header if no <name> is specified. Optionally, a specific occurrence
14965 might be specified as a position number. Positive values indicate a position
14966 from the first occurrence, with 1 being the first one. Negative values
14967 indicate positions relative to the last one, with -1 being the last one. This
14968 can be useful to learn some data into a stick-table. The function considers
14969 any comma as a delimiter for distinct values. If this is not desired, the
14970 res.fhdr() fetch should be used instead.
Willy Tarreau6a06a402007-07-15 20:15:28 +020014971
Willy Tarreau74ca5042013-06-11 23:12:07 +020014972 ACL derivatives :
14973 shdr([<name>[,<occ>]]) : exact string match
14974 shdr_beg([<name>[,<occ>]]) : prefix match
14975 shdr_dir([<name>[,<occ>]]) : subdir match
14976 shdr_dom([<name>[,<occ>]]) : domain match
14977 shdr_end([<name>[,<occ>]]) : suffix match
14978 shdr_len([<name>[,<occ>]]) : length match
14979 shdr_reg([<name>[,<occ>]]) : regex match
14980 shdr_sub([<name>[,<occ>]]) : substring match
14981
14982res.hdr_cnt([<name>]) : integer
14983shdr_cnt([<name>]) : integer (deprecated)
14984 Returns an integer value representing the number of occurrences of response
14985 header field name <name>, or the total number of header fields if <name> is
14986 not specified. The function considers any comma as a delimiter for distinct
14987 values. If this is not desired, the res.fhdr_cnt() fetch should be used
14988 instead.
Willy Tarreau6a06a402007-07-15 20:15:28 +020014989
Willy Tarreau74ca5042013-06-11 23:12:07 +020014990res.hdr_ip([<name>[,<occ>]]) : ip
14991shdr_ip([<name>[,<occ>]]) : ip (deprecated)
14992 This extracts the last occurrence of header <name> in an HTTP response,
14993 convert it to an IPv4 or IPv6 address and returns this address. Optionally, a
14994 specific occurrence might be specified as a position number. Positive values
14995 indicate a position from the first occurrence, with 1 being the first one.
14996 Negative values indicate positions relative to the last one, with -1 being
14997 the last one. This can be useful to learn some data into a stick table.
Willy Tarreau6a06a402007-07-15 20:15:28 +020014998
Willy Tarreaueb27ec72015-02-20 13:55:29 +010014999res.hdr_names([<delim>]) : string
15000 This builds a string made from the concatenation of all header names as they
15001 appear in the response when the rule is evaluated. The default delimiter is
15002 the comma (',') but it may be overridden as an optional argument <delim>. In
15003 this case, only the first character of <delim> is considered.
15004
Willy Tarreau74ca5042013-06-11 23:12:07 +020015005res.hdr_val([<name>[,<occ>]]) : integer
15006shdr_val([<name>[,<occ>]]) : integer (deprecated)
15007 This extracts the last occurrence of header <name> in an HTTP response, and
15008 converts it to an integer value. Optionally, a specific occurrence might be
15009 specified as a position number. Positive values indicate a position from the
15010 first occurrence, with 1 being the first one. Negative values indicate
15011 positions relative to the last one, with -1 being the last one. This can be
15012 useful to learn some data into a stick table.
Alexandre Cassen5eb1a902007-11-29 15:43:32 +010015013
Willy Tarreau74ca5042013-06-11 23:12:07 +020015014res.ver : string
15015resp_ver : string (deprecated)
15016 Returns the version string from the HTTP response, for example "1.1". This
15017 can be useful for logs, but is mostly there for ACL.
Willy Tarreau0e698542011-09-16 08:32:32 +020015018
Willy Tarreau74ca5042013-06-11 23:12:07 +020015019 ACL derivatives :
15020 resp_ver : exact string match
Alexandre Cassen5eb1a902007-11-29 15:43:32 +010015021
Willy Tarreau74ca5042013-06-11 23:12:07 +020015022set-cookie([<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 uses the corresponding value to match. This
Willy Tarreau294d0f02015-08-10 19:40:12 +020015025 can be comparable to what "appsession" did with default options, but with
Willy Tarreau74ca5042013-06-11 23:12:07 +020015026 support for multi-peer synchronization and state keeping across restarts.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +010015027
Willy Tarreau74ca5042013-06-11 23:12:07 +020015028 This fetch function is deprecated and has been superseded by the "res.cook"
15029 fetch. This keyword will disappear soon.
Krzysztof Piotr Oledzki6b35ce12010-02-01 23:35:44 +010015030
Willy Tarreau74ca5042013-06-11 23:12:07 +020015031status : integer
15032 Returns an integer containing the HTTP status code in the HTTP response, for
15033 example, 302. It is mostly used within ACLs and integer ranges, for example,
15034 to remove any Location header if the response is not a 3xx.
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015035
Thierry Fournier0e00dca2016-04-07 15:47:40 +020015036unique-id : string
15037 Returns the unique-id attached to the request. The directive
15038 "unique-id-format" must be set. If it is not set, the unique-id sample fetch
15039 fails. Note that the unique-id is usually used with HTTP requests, however this
15040 sample fetch can be used with other protocols. Obviously, if it is used with
15041 other protocols than HTTP, the unique-id-format directive must not contain
15042 HTTP parts. See: unique-id-format and unique-id-header
15043
Willy Tarreau74ca5042013-06-11 23:12:07 +020015044url : string
15045 This extracts the request's URL as presented in the request. A typical use is
15046 with prefetch-capable caches, and with portals which need to aggregate
15047 multiple information from databases and keep them in caches. With ACLs, using
15048 "path" is preferred over using "url", because clients may send a full URL as
15049 is normally done with proxies. The only real use is to match "*" which does
15050 not match in "path", and for which there is already a predefined ACL. See
15051 also "path" and "base".
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015052
Willy Tarreau74ca5042013-06-11 23:12:07 +020015053 ACL derivatives :
15054 url : exact string match
15055 url_beg : prefix match
15056 url_dir : subdir match
15057 url_dom : domain match
15058 url_end : suffix match
15059 url_len : length match
15060 url_reg : regex match
15061 url_sub : substring match
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015062
Willy Tarreau74ca5042013-06-11 23:12:07 +020015063url_ip : ip
15064 This extracts the IP address from the request's URL when the host part is
15065 presented as an IP address. Its use is very limited. For instance, a
15066 monitoring system might use this field as an alternative for the source IP in
15067 order to test what path a given source address would follow, or to force an
15068 entry in a table for a given source address. With ACLs it can be used to
15069 restrict access to certain systems through a proxy, for example when combined
15070 with option "http_proxy".
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015071
Willy Tarreau74ca5042013-06-11 23:12:07 +020015072url_port : integer
15073 This extracts the port part from the request's URL. Note that if the port is
15074 not specified in the request, port 80 is assumed. With ACLs it can be used to
15075 restrict access to certain systems through a proxy, for example when combined
15076 with option "http_proxy".
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015077
Willy Tarreau1ede1da2015-05-07 16:06:18 +020015078urlp([<name>[,<delim>]]) : string
15079url_param([<name>[,<delim>]]) : string
Willy Tarreau74ca5042013-06-11 23:12:07 +020015080 This extracts the first occurrence of the parameter <name> in the query
15081 string, which begins after either '?' or <delim>, and which ends before '&',
Willy Tarreau1ede1da2015-05-07 16:06:18 +020015082 ';' or <delim>. The parameter name is case-sensitive. If no name is given,
15083 any parameter will match, and the first one will be returned. The result is
15084 a string corresponding to the value of the parameter <name> as presented in
15085 the request (no URL decoding is performed). This can be used for session
Willy Tarreau74ca5042013-06-11 23:12:07 +020015086 stickiness based on a client ID, to extract an application cookie passed as a
15087 URL parameter, or in ACLs to apply some checks. Note that the ACL version of
Willy Tarreau1ede1da2015-05-07 16:06:18 +020015088 this fetch iterates over multiple parameters and will iteratively report all
15089 parameters values if no name is given
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015090
Willy Tarreau74ca5042013-06-11 23:12:07 +020015091 ACL derivatives :
15092 urlp(<name>[,<delim>]) : exact string match
15093 urlp_beg(<name>[,<delim>]) : prefix match
15094 urlp_dir(<name>[,<delim>]) : subdir match
15095 urlp_dom(<name>[,<delim>]) : domain match
15096 urlp_end(<name>[,<delim>]) : suffix match
15097 urlp_len(<name>[,<delim>]) : length match
15098 urlp_reg(<name>[,<delim>]) : regex match
15099 urlp_sub(<name>[,<delim>]) : substring match
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015100
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015101
Willy Tarreau74ca5042013-06-11 23:12:07 +020015102 Example :
15103 # match http://example.com/foo?PHPSESSIONID=some_id
15104 stick on urlp(PHPSESSIONID)
15105 # match http://example.com/foo;JSESSIONID=some_id
15106 stick on urlp(JSESSIONID,;)
Willy Tarreau25c1ebc2012-04-25 16:21:44 +020015107
Jarno Huuskonen676f6222017-03-30 09:19:45 +030015108urlp_val([<name>[,<delim>]]) : integer
Willy Tarreau74ca5042013-06-11 23:12:07 +020015109 See "urlp" above. This one extracts the URL parameter <name> in the request
15110 and converts it to an integer value. This can be used for session stickiness
15111 based on a user ID for example, or with ACLs to match a page number or price.
Willy Tarreaua9fddca2012-07-31 07:51:48 +020015112
Dragan Dosen0070cd52016-06-16 12:19:49 +020015113url32 : integer
15114 This returns a 32-bit hash of the value obtained by concatenating the first
15115 Host header and the whole URL including parameters (not only the path part of
15116 the request, as in the "base32" fetch above). This is useful to track per-URL
15117 activity. A shorter hash is stored, saving a lot of memory. The output type
15118 is an unsigned integer.
15119
15120url32+src : binary
15121 This returns the concatenation of the "url32" fetch and the "src" fetch. The
15122 resulting type is of type binary, with a size of 8 or 20 bytes depending on
15123 the source address family. This can be used to track per-IP, per-URL counters.
15124
Willy Tarreau198a7442008-01-17 12:05:32 +010015125
Willy Tarreau74ca5042013-06-11 23:12:07 +0200151267.4. Pre-defined ACLs
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015127---------------------
Willy Tarreauced27012008-01-17 20:35:34 +010015128
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015129Some predefined ACLs are hard-coded so that they do not have to be declared in
15130every frontend which needs them. They all have their names in upper case in
Patrick Mézard2382ad62010-05-09 10:43:32 +020015131order to avoid confusion. Their equivalence is provided below.
Willy Tarreauced27012008-01-17 20:35:34 +010015132
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015133ACL name Equivalent to Usage
15134---------------+-----------------------------+---------------------------------
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015135FALSE always_false never match
Willy Tarreau2492d5b2009-07-11 00:06:00 +020015136HTTP req_proto_http match if protocol is valid HTTP
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015137HTTP_1.0 req_ver 1.0 match HTTP version 1.0
15138HTTP_1.1 req_ver 1.1 match HTTP version 1.1
Willy Tarreaud63335a2010-02-26 12:56:52 +010015139HTTP_CONTENT hdr_val(content-length) gt 0 match an existing content-length
15140HTTP_URL_ABS url_reg ^[^/:]*:// match absolute URL with scheme
15141HTTP_URL_SLASH url_beg / match URL beginning with "/"
15142HTTP_URL_STAR url * match URL equal to "*"
15143LOCALHOST src 127.0.0.1/8 match connection from local host
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015144METH_CONNECT method CONNECT match HTTP CONNECT method
Daniel Schneller9ff96c72016-04-11 17:45:29 +020015145METH_DELETE method DELETE match HTTP DELETE method
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015146METH_GET method GET HEAD match HTTP GET or HEAD method
15147METH_HEAD method HEAD match HTTP HEAD method
15148METH_OPTIONS method OPTIONS match HTTP OPTIONS method
15149METH_POST method POST match HTTP POST method
Daniel Schneller9ff96c72016-04-11 17:45:29 +020015150METH_PUT method PUT match HTTP PUT method
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015151METH_TRACE method TRACE match HTTP TRACE method
Emeric Brunbede3d02009-06-30 17:54:00 +020015152RDP_COOKIE req_rdp_cookie_cnt gt 0 match presence of an RDP cookie
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015153REQ_CONTENT req_len gt 0 match data in the request buffer
Willy Tarreaud63335a2010-02-26 12:56:52 +010015154TRUE always_true always match
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015155WAIT_END wait_end wait for end of content analysis
15156---------------+-----------------------------+---------------------------------
Willy Tarreauced27012008-01-17 20:35:34 +010015157
Willy Tarreaub937b7e2010-01-12 15:27:54 +010015158
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200151598. Logging
15160----------
Willy Tarreau844e3c52008-01-11 16:28:18 +010015161
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015162One of HAProxy's strong points certainly lies is its precise logs. It probably
15163provides the finest level of information available for such a product, which is
15164very important for troubleshooting complex environments. Standard information
15165provided in logs include client ports, TCP/HTTP state timers, precise session
15166state at termination and precise termination cause, information about decisions
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010015167to direct traffic to a server, and of course the ability to capture arbitrary
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015168headers.
15169
15170In order to improve administrators reactivity, it offers a great transparency
15171about encountered problems, both internal and external, and it is possible to
15172send logs to different sources at the same time with different level filters :
15173
15174 - global process-level logs (system errors, start/stop, etc..)
15175 - per-instance system and internal errors (lack of resource, bugs, ...)
15176 - per-instance external troubles (servers up/down, max connections)
15177 - per-instance activity (client connections), either at the establishment or
15178 at the termination.
Jim Freeman9e8714b2015-05-26 09:16:34 -060015179 - per-request control of log-level, eg:
15180 http-request set-log-level silent if sensitive_request
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015181
15182The ability to distribute different levels of logs to different log servers
15183allow several production teams to interact and to fix their problems as soon
15184as possible. For example, the system team might monitor system-wide errors,
15185while the application team might be monitoring the up/down for their servers in
15186real time, and the security team might analyze the activity logs with one hour
15187delay.
15188
15189
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200151908.1. Log levels
15191---------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015192
Simon Hormandf791f52011-05-29 15:01:10 +090015193TCP and HTTP connections can be logged with information such as the date, time,
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015194source IP address, destination address, connection duration, response times,
Simon Hormandf791f52011-05-29 15:01:10 +090015195HTTP request, HTTP return code, number of bytes transmitted, conditions
15196in which the session ended, and even exchanged cookies values. For example
15197track a particular user's problems. All messages may be sent to up to two
15198syslog servers. Check the "log" keyword in section 4.2 for more information
15199about log facilities.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015200
15201
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200152028.2. Log formats
15203----------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015204
William Lallemand48940402012-01-30 16:47:22 +010015205HAProxy supports 5 log formats. Several fields are common between these formats
Simon Hormandf791f52011-05-29 15:01:10 +090015206and will be detailed in the following sections. A few of them may vary
15207slightly with the configuration, due to indicators specific to certain
15208options. The supported formats are as follows :
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015209
15210 - the default format, which is very basic and very rarely used. It only
15211 provides very basic information about the incoming connection at the moment
15212 it is accepted : source IP:port, destination IP:port, and frontend-name.
15213 This mode will eventually disappear so it will not be described to great
15214 extents.
15215
15216 - the TCP format, which is more advanced. This format is enabled when "option
15217 tcplog" is set on the frontend. HAProxy will then usually wait for the
15218 connection to terminate before logging. This format provides much richer
15219 information, such as timers, connection counts, queue size, etc... This
15220 format is recommended for pure TCP proxies.
15221
15222 - the HTTP format, which is the most advanced for HTTP proxying. This format
15223 is enabled when "option httplog" is set on the frontend. It provides the
15224 same information as the TCP format with some HTTP-specific fields such as
15225 the request, the status code, and captures of headers and cookies. This
15226 format is recommended for HTTP proxies.
15227
Emeric Brun3a058f32009-06-30 18:26:00 +020015228 - the CLF HTTP format, which is equivalent to the HTTP format, but with the
15229 fields arranged in the same order as the CLF format. In this mode, all
15230 timers, captures, flags, etc... appear one per field after the end of the
15231 common fields, in the same order they appear in the standard HTTP format.
15232
William Lallemand48940402012-01-30 16:47:22 +010015233 - the custom log format, allows you to make your own log line.
15234
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015235Next sections will go deeper into details for each of these formats. Format
15236specification will be performed on a "field" basis. Unless stated otherwise, a
15237field is a portion of text delimited by any number of spaces. Since syslog
15238servers are susceptible of inserting fields at the beginning of a line, it is
15239always assumed that the first field is the one containing the process name and
15240identifier.
15241
15242Note : Since log lines may be quite long, the log examples in sections below
15243 might be broken into multiple lines. The example log lines will be
15244 prefixed with 3 closing angle brackets ('>>>') and each time a log is
15245 broken into multiple lines, each non-final line will end with a
15246 backslash ('\') and the next line will start indented by two characters.
15247
15248
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200152498.2.1. Default log format
15250-------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015251
15252This format is used when no specific option is set. The log is emitted as soon
15253as the connection is accepted. One should note that this currently is the only
15254format which logs the request's destination IP and ports.
15255
15256 Example :
15257 listen www
15258 mode http
15259 log global
15260 server srv1 127.0.0.1:8000
15261
15262 >>> Feb 6 12:12:09 localhost \
15263 haproxy[14385]: Connect from 10.0.1.2:33312 to 10.0.3.31:8012 \
15264 (www/HTTP)
15265
15266 Field Format Extract from the example above
15267 1 process_name '[' pid ']:' haproxy[14385]:
15268 2 'Connect from' Connect from
15269 3 source_ip ':' source_port 10.0.1.2:33312
15270 4 'to' to
15271 5 destination_ip ':' destination_port 10.0.3.31:8012
15272 6 '(' frontend_name '/' mode ')' (www/HTTP)
15273
15274Detailed fields description :
15275 - "source_ip" is the IP address of the client which initiated the connection.
15276 - "source_port" is the TCP port of the client which initiated the connection.
15277 - "destination_ip" is the IP address the client connected to.
15278 - "destination_port" is the TCP port the client connected to.
15279 - "frontend_name" is the name of the frontend (or listener) which received
15280 and processed the connection.
15281 - "mode is the mode the frontend is operating (TCP or HTTP).
15282
Willy Tarreauceb24bc2010-11-09 12:46:41 +010015283In case of a UNIX socket, the source and destination addresses are marked as
15284"unix:" and the ports reflect the internal ID of the socket which accepted the
15285connection (the same ID as reported in the stats).
15286
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015287It is advised not to use this deprecated format for newer installations as it
15288will eventually disappear.
15289
15290
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200152918.2.2. TCP log format
15292---------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015293
15294The TCP format is used when "option tcplog" is specified in the frontend, and
15295is the recommended format for pure TCP proxies. It provides a lot of precious
15296information for troubleshooting. Since this format includes timers and byte
15297counts, the log is normally emitted at the end of the session. It can be
15298emitted earlier if "option logasap" is specified, which makes sense in most
15299environments with long sessions such as remote terminals. Sessions which match
15300the "monitor" rules are never logged. It is also possible not to emit logs for
15301sessions for which no data were exchanged between the client and the server, by
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020015302specifying "option dontlognull" in the frontend. Successful connections will
15303not be logged if "option dontlog-normal" is specified in the frontend. A few
15304fields may slightly vary depending on some configuration options, those are
15305marked with a star ('*') after the field name below.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015306
15307 Example :
15308 frontend fnt
15309 mode tcp
15310 option tcplog
15311 log global
15312 default_backend bck
15313
15314 backend bck
15315 server srv1 127.0.0.1:8000
15316
15317 >>> Feb 6 12:12:56 localhost \
15318 haproxy[14387]: 10.0.1.2:33313 [06/Feb/2009:12:12:51.443] fnt \
15319 bck/srv1 0/0/5007 212 -- 0/0/0/0/3 0/0
15320
15321 Field Format Extract from the example above
15322 1 process_name '[' pid ']:' haproxy[14387]:
15323 2 client_ip ':' client_port 10.0.1.2:33313
15324 3 '[' accept_date ']' [06/Feb/2009:12:12:51.443]
15325 4 frontend_name fnt
15326 5 backend_name '/' server_name bck/srv1
15327 6 Tw '/' Tc '/' Tt* 0/0/5007
15328 7 bytes_read* 212
15329 8 termination_state --
15330 9 actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 0/0/0/0/3
15331 10 srv_queue '/' backend_queue 0/0
15332
15333Detailed fields description :
15334 - "client_ip" is the IP address of the client which initiated the TCP
Willy Tarreauceb24bc2010-11-09 12:46:41 +010015335 connection to haproxy. If the connection was accepted on a UNIX socket
15336 instead, the IP address would be replaced with the word "unix". Note that
15337 when the connection is accepted on a socket configured with "accept-proxy"
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010015338 and the PROXY protocol is correctly used, or with a "accept-netscaler-cip"
15339 and the NetScaler Client IP insetion protocol is correctly used, then the
15340 logs will reflect the forwarded connection's information.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015341
15342 - "client_port" is the TCP port of the client which initiated the connection.
Willy Tarreauceb24bc2010-11-09 12:46:41 +010015343 If the connection was accepted on a UNIX socket instead, the port would be
15344 replaced with the ID of the accepting socket, which is also reported in the
15345 stats interface.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015346
15347 - "accept_date" is the exact date when the connection was received by haproxy
15348 (which might be very slightly different from the date observed on the
15349 network if there was some queuing in the system's backlog). This is usually
15350 the same date which may appear in any upstream firewall's log.
15351
15352 - "frontend_name" is the name of the frontend (or listener) which received
15353 and processed the connection.
15354
15355 - "backend_name" is the name of the backend (or listener) which was selected
15356 to manage the connection to the server. This will be the same as the
15357 frontend if no switching rule has been applied, which is common for TCP
15358 applications.
15359
15360 - "server_name" is the name of the last server to which the connection was
15361 sent, which might differ from the first one if there were connection errors
15362 and a redispatch occurred. Note that this server belongs to the backend
15363 which processed the request. If the connection was aborted before reaching
15364 a server, "<NOSRV>" is indicated instead of a server name.
15365
15366 - "Tw" is the total time in milliseconds spent waiting in the various queues.
15367 It can be "-1" if the connection was aborted before reaching the queue.
15368 See "Timers" below for more details.
15369
15370 - "Tc" is the total time in milliseconds spent waiting for the connection to
15371 establish to the final server, including retries. It can be "-1" if the
15372 connection was aborted before a connection could be established. See
15373 "Timers" below for more details.
15374
15375 - "Tt" is the total time in milliseconds elapsed between the accept and the
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030015376 last close. It covers all possible processing. There is one exception, if
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015377 "option logasap" was specified, then the time counting stops at the moment
15378 the log is emitted. In this case, a '+' sign is prepended before the value,
15379 indicating that the final one will be larger. See "Timers" below for more
15380 details.
15381
15382 - "bytes_read" is the total number of bytes transmitted from the server to
15383 the client when the log is emitted. If "option logasap" is specified, the
15384 this value will be prefixed with a '+' sign indicating that the final one
15385 may be larger. Please note that this value is a 64-bit counter, so log
15386 analysis tools must be able to handle it without overflowing.
15387
15388 - "termination_state" is the condition the session was in when the session
15389 ended. This indicates the session state, which side caused the end of
15390 session to happen, and for what reason (timeout, error, ...). The normal
15391 flags should be "--", indicating the session was closed by either end with
15392 no data remaining in buffers. See below "Session state at disconnection"
15393 for more details.
15394
15395 - "actconn" is the total number of concurrent connections on the process when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040015396 the session was logged. It is useful to detect when some per-process system
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015397 limits have been reached. For instance, if actconn is close to 512 when
15398 multiple connection errors occur, chances are high that the system limits
15399 the process to use a maximum of 1024 file descriptors and that all of them
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015400 are used. See section 3 "Global parameters" to find how to tune the system.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015401
15402 - "feconn" is the total number of concurrent connections on the frontend when
15403 the session was logged. It is useful to estimate the amount of resource
15404 required to sustain high loads, and to detect when the frontend's "maxconn"
15405 has been reached. Most often when this value increases by huge jumps, it is
15406 because there is congestion on the backend servers, but sometimes it can be
15407 caused by a denial of service attack.
15408
15409 - "beconn" is the total number of concurrent connections handled by the
15410 backend when the session was logged. It includes the total number of
15411 concurrent connections active on servers as well as the number of
15412 connections pending in queues. It is useful to estimate the amount of
15413 additional servers needed to support high loads for a given application.
15414 Most often when this value increases by huge jumps, it is because there is
15415 congestion on the backend servers, but sometimes it can be caused by a
15416 denial of service attack.
15417
15418 - "srv_conn" is the total number of concurrent connections still active on
15419 the server when the session was logged. It can never exceed the server's
15420 configured "maxconn" parameter. If this value is very often close or equal
15421 to the server's "maxconn", it means that traffic regulation is involved a
15422 lot, meaning that either the server's maxconn value is too low, or that
15423 there aren't enough servers to process the load with an optimal response
15424 time. When only one of the server's "srv_conn" is high, it usually means
15425 that this server has some trouble causing the connections to take longer to
15426 be processed than on other servers.
15427
15428 - "retries" is the number of connection retries experienced by this session
15429 when trying to connect to the server. It must normally be zero, unless a
15430 server is being stopped at the same moment the connection was attempted.
15431 Frequent retries generally indicate either a network problem between
15432 haproxy and the server, or a misconfigured system backlog on the server
15433 preventing new connections from being queued. This field may optionally be
15434 prefixed with a '+' sign, indicating that the session has experienced a
15435 redispatch after the maximal retry count has been reached on the initial
15436 server. In this case, the server name appearing in the log is the one the
15437 connection was redispatched to, and not the first one, though both may
15438 sometimes be the same in case of hashing for instance. So as a general rule
15439 of thumb, when a '+' is present in front of the retry count, this count
15440 should not be attributed to the logged server.
15441
15442 - "srv_queue" is the total number of requests which were processed before
15443 this one in the server queue. It is zero when the request has not gone
15444 through the server queue. It makes it possible to estimate the approximate
15445 server's response time by dividing the time spent in queue by the number of
15446 requests in the queue. It is worth noting that if a session experiences a
15447 redispatch and passes through two server queues, their positions will be
15448 cumulated. A request should not pass through both the server queue and the
15449 backend queue unless a redispatch occurs.
15450
15451 - "backend_queue" is the total number of requests which were processed before
15452 this one in the backend's global queue. It is zero when the request has not
15453 gone through the global queue. It makes it possible to estimate the average
15454 queue length, which easily translates into a number of missing servers when
15455 divided by a server's "maxconn" parameter. It is worth noting that if a
15456 session experiences a redispatch, it may pass twice in the backend's queue,
15457 and then both positions will be cumulated. A request should not pass
15458 through both the server queue and the backend queue unless a redispatch
15459 occurs.
15460
15461
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200154628.2.3. HTTP log format
15463----------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015464
15465The HTTP format is the most complete and the best suited for HTTP proxies. It
15466is enabled by when "option httplog" is specified in the frontend. It provides
15467the same level of information as the TCP format with additional features which
15468are specific to the HTTP protocol. Just like the TCP format, the log is usually
15469emitted at the end of the session, unless "option logasap" is specified, which
15470generally only makes sense for download sites. A session which matches the
15471"monitor" rules will never logged. It is also possible not to log sessions for
15472which no data were sent by the client by specifying "option dontlognull" in the
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020015473frontend. Successful connections will not be logged if "option dontlog-normal"
15474is specified in the frontend.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015475
15476Most fields are shared with the TCP log, some being different. A few fields may
15477slightly vary depending on some configuration options. Those ones are marked
15478with a star ('*') after the field name below.
15479
15480 Example :
15481 frontend http-in
15482 mode http
15483 option httplog
15484 log global
15485 default_backend bck
15486
15487 backend static
15488 server srv1 127.0.0.1:8000
15489
15490 >>> Feb 6 12:14:14 localhost \
15491 haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
15492 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 +010015493 {} "GET /index.html HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015494
15495 Field Format Extract from the example above
15496 1 process_name '[' pid ']:' haproxy[14389]:
15497 2 client_ip ':' client_port 10.0.1.2:33317
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015498 3 '[' request_date ']' [06/Feb/2009:12:14:14.655]
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015499 4 frontend_name http-in
15500 5 backend_name '/' server_name static/srv1
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015501 6 TR '/' Tw '/' Tc '/' Tr '/' Ta* 10/0/30/69/109
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015502 7 status_code 200
15503 8 bytes_read* 2750
15504 9 captured_request_cookie -
15505 10 captured_response_cookie -
15506 11 termination_state ----
15507 12 actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 1/1/1/1/0
15508 13 srv_queue '/' backend_queue 0/0
15509 14 '{' captured_request_headers* '}' {haproxy.1wt.eu}
15510 15 '{' captured_response_headers* '}' {}
15511 16 '"' http_request '"' "GET /index.html HTTP/1.1"
Willy Tarreaud72758d2010-01-12 10:42:19 +010015512
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015513Detailed fields description :
15514 - "client_ip" is the IP address of the client which initiated the TCP
Willy Tarreauceb24bc2010-11-09 12:46:41 +010015515 connection to haproxy. If the connection was accepted on a UNIX socket
15516 instead, the IP address would be replaced with the word "unix". Note that
15517 when the connection is accepted on a socket configured with "accept-proxy"
Bertrand Jacquin93b227d2016-06-04 15:11:10 +010015518 and the PROXY protocol is correctly used, or with a "accept-netscaler-cip"
15519 and the NetScaler Client IP insetion protocol is correctly used, then the
15520 logs will reflect the forwarded connection's information.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015521
15522 - "client_port" is the TCP port of the client which initiated the connection.
Willy Tarreauceb24bc2010-11-09 12:46:41 +010015523 If the connection was accepted on a UNIX socket instead, the port would be
15524 replaced with the ID of the accepting socket, which is also reported in the
15525 stats interface.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015526
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015527 - "request_date" is the exact date when the first byte of the HTTP request
15528 was received by haproxy (log field %tr).
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015529
15530 - "frontend_name" is the name of the frontend (or listener) which received
15531 and processed the connection.
15532
15533 - "backend_name" is the name of the backend (or listener) which was selected
15534 to manage the connection to the server. This will be the same as the
15535 frontend if no switching rule has been applied.
15536
15537 - "server_name" is the name of the last server to which the connection was
15538 sent, which might differ from the first one if there were connection errors
15539 and a redispatch occurred. Note that this server belongs to the backend
15540 which processed the request. If the request was aborted before reaching a
15541 server, "<NOSRV>" is indicated instead of a server name. If the request was
15542 intercepted by the stats subsystem, "<STATS>" is indicated instead.
15543
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015544 - "TR" is the total time in milliseconds spent waiting for a full HTTP
15545 request from the client (not counting body) after the first byte was
15546 received. It can be "-1" if the connection was aborted before a complete
15547 request could be received or the a bad request was received. It should
15548 always be very small because a request generally fits in one single packet.
15549 Large times here generally indicate network issues between the client and
15550 haproxy or requests being typed by hand. See "Timers" below for more details.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015551
15552 - "Tw" is the total time in milliseconds spent waiting in the various queues.
15553 It can be "-1" if the connection was aborted before reaching the queue.
15554 See "Timers" below for more details.
15555
15556 - "Tc" is the total time in milliseconds spent waiting for the connection to
15557 establish to the final server, including retries. It can be "-1" if the
15558 request was aborted before a connection could be established. See "Timers"
15559 below for more details.
15560
15561 - "Tr" is the total time in milliseconds spent waiting for the server to send
15562 a full HTTP response, not counting data. It can be "-1" if the request was
15563 aborted before a complete response could be received. It generally matches
15564 the server's processing time for the request, though it may be altered by
15565 the amount of data sent by the client to the server. Large times here on
15566 "GET" requests generally indicate an overloaded server. See "Timers" below
15567 for more details.
15568
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015569 - "Ta" is the time the request remained active in haproxy, which is the total
15570 time in milliseconds elapsed between the first byte of the request was
15571 received and the last byte of response was sent. It covers all possible
15572 processing except the handshake (see Th) and idle time (see Ti). There is
15573 one exception, if "option logasap" was specified, then the time counting
15574 stops at the moment the log is emitted. In this case, a '+' sign is
15575 prepended before the value, indicating that the final one will be larger.
15576 See "Timers" below for more details.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015577
15578 - "status_code" is the HTTP status code returned to the client. This status
15579 is generally set by the server, but it might also be set by haproxy when
15580 the server cannot be reached or when its response is blocked by haproxy.
15581
15582 - "bytes_read" is the total number of bytes transmitted to the client when
15583 the log is emitted. This does include HTTP headers. If "option logasap" is
15584 specified, the this value will be prefixed with a '+' sign indicating that
15585 the final one may be larger. Please note that this value is a 64-bit
15586 counter, so log analysis tools must be able to handle it without
15587 overflowing.
15588
15589 - "captured_request_cookie" is an optional "name=value" entry indicating that
15590 the client had this cookie in the request. The cookie name and its maximum
15591 length are defined by the "capture cookie" statement in the frontend
15592 configuration. The field is a single dash ('-') when the option is not
15593 set. Only one cookie may be captured, it is generally used to track session
15594 ID exchanges between a client and a server to detect session crossing
15595 between clients due to application bugs. For more details, please consult
15596 the section "Capturing HTTP headers and cookies" below.
15597
15598 - "captured_response_cookie" is an optional "name=value" entry indicating
15599 that the server has returned a cookie with its response. The cookie name
15600 and its maximum length are defined by the "capture cookie" statement in the
15601 frontend configuration. The field is a single dash ('-') when the option is
15602 not set. Only one cookie may be captured, it is generally used to track
15603 session ID exchanges between a client and a server to detect session
15604 crossing between clients due to application bugs. For more details, please
15605 consult the section "Capturing HTTP headers and cookies" below.
15606
15607 - "termination_state" is the condition the session was in when the session
15608 ended. This indicates the session state, which side caused the end of
15609 session to happen, for what reason (timeout, error, ...), just like in TCP
15610 logs, and information about persistence operations on cookies in the last
15611 two characters. The normal flags should begin with "--", indicating the
15612 session was closed by either end with no data remaining in buffers. See
15613 below "Session state at disconnection" for more details.
15614
15615 - "actconn" is the total number of concurrent connections on the process when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040015616 the session was logged. It is useful to detect when some per-process system
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015617 limits have been reached. For instance, if actconn is close to 512 or 1024
15618 when multiple connection errors occur, chances are high that the system
15619 limits the process to use a maximum of 1024 file descriptors and that all
Willy Tarreauc57f0e22009-05-10 13:12:33 +020015620 of them are used. See section 3 "Global parameters" to find how to tune the
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015621 system.
15622
15623 - "feconn" is the total number of concurrent connections on the frontend when
15624 the session was logged. It is useful to estimate the amount of resource
15625 required to sustain high loads, and to detect when the frontend's "maxconn"
15626 has been reached. Most often when this value increases by huge jumps, it is
15627 because there is congestion on the backend servers, but sometimes it can be
15628 caused by a denial of service attack.
15629
15630 - "beconn" is the total number of concurrent connections handled by the
15631 backend when the session was logged. It includes the total number of
15632 concurrent connections active on servers as well as the number of
15633 connections pending in queues. It is useful to estimate the amount of
15634 additional servers needed to support high loads for a given application.
15635 Most often when this value increases by huge jumps, it is because there is
15636 congestion on the backend servers, but sometimes it can be caused by a
15637 denial of service attack.
15638
15639 - "srv_conn" is the total number of concurrent connections still active on
15640 the server when the session was logged. It can never exceed the server's
15641 configured "maxconn" parameter. If this value is very often close or equal
15642 to the server's "maxconn", it means that traffic regulation is involved a
15643 lot, meaning that either the server's maxconn value is too low, or that
15644 there aren't enough servers to process the load with an optimal response
15645 time. When only one of the server's "srv_conn" is high, it usually means
15646 that this server has some trouble causing the requests to take longer to be
15647 processed than on other servers.
15648
15649 - "retries" is the number of connection retries experienced by this session
15650 when trying to connect to the server. It must normally be zero, unless a
15651 server is being stopped at the same moment the connection was attempted.
15652 Frequent retries generally indicate either a network problem between
15653 haproxy and the server, or a misconfigured system backlog on the server
15654 preventing new connections from being queued. This field may optionally be
15655 prefixed with a '+' sign, indicating that the session has experienced a
15656 redispatch after the maximal retry count has been reached on the initial
15657 server. In this case, the server name appearing in the log is the one the
15658 connection was redispatched to, and not the first one, though both may
15659 sometimes be the same in case of hashing for instance. So as a general rule
15660 of thumb, when a '+' is present in front of the retry count, this count
15661 should not be attributed to the logged server.
15662
15663 - "srv_queue" is the total number of requests which were processed before
15664 this one in the server queue. It is zero when the request has not gone
15665 through the server queue. It makes it possible to estimate the approximate
15666 server's response time by dividing the time spent in queue by the number of
15667 requests in the queue. It is worth noting that if a session experiences a
15668 redispatch and passes through two server queues, their positions will be
15669 cumulated. A request should not pass through both the server queue and the
15670 backend queue unless a redispatch occurs.
15671
15672 - "backend_queue" is the total number of requests which were processed before
15673 this one in the backend's global queue. It is zero when the request has not
15674 gone through the global queue. It makes it possible to estimate the average
15675 queue length, which easily translates into a number of missing servers when
15676 divided by a server's "maxconn" parameter. It is worth noting that if a
15677 session experiences a redispatch, it may pass twice in the backend's queue,
15678 and then both positions will be cumulated. A request should not pass
15679 through both the server queue and the backend queue unless a redispatch
15680 occurs.
15681
15682 - "captured_request_headers" is a list of headers captured in the request due
15683 to the presence of the "capture request header" statement in the frontend.
15684 Multiple headers can be captured, they will be delimited by a vertical bar
15685 ('|'). When no capture is enabled, the braces do not appear, causing a
15686 shift of remaining fields. It is important to note that this field may
15687 contain spaces, and that using it requires a smarter log parser than when
15688 it's not used. Please consult the section "Capturing HTTP headers and
15689 cookies" below for more details.
15690
15691 - "captured_response_headers" is a list of headers captured in the response
15692 due to the presence of the "capture response header" statement in the
15693 frontend. Multiple headers can be captured, they will be delimited by a
15694 vertical bar ('|'). When no capture is enabled, the braces do not appear,
15695 causing a shift of remaining fields. It is important to note that this
15696 field may contain spaces, and that using it requires a smarter log parser
15697 than when it's not used. Please consult the section "Capturing HTTP headers
15698 and cookies" below for more details.
15699
15700 - "http_request" is the complete HTTP request line, including the method,
15701 request and HTTP version string. Non-printable characters are encoded (see
15702 below the section "Non-printable characters"). This is always the last
15703 field, and it is always delimited by quotes and is the only one which can
15704 contain quotes. If new fields are added to the log format, they will be
15705 added before this field. This field might be truncated if the request is
15706 huge and does not fit in the standard syslog buffer (1024 characters). This
15707 is the reason why this field must always remain the last one.
15708
15709
Cyril Bontédc4d9032012-04-08 21:57:39 +0200157108.2.4. Custom log format
15711------------------------
William Lallemand48940402012-01-30 16:47:22 +010015712
Willy Tarreau2beef582012-12-20 17:22:52 +010015713The directive log-format allows you to customize the logs in http mode and tcp
William Lallemandbddd4fd2012-02-27 11:23:10 +010015714mode. It takes a string as argument.
William Lallemand48940402012-01-30 16:47:22 +010015715
15716HAproxy understands some log format variables. % precedes log format variables.
15717Variables can take arguments using braces ('{}'), and multiple arguments are
15718separated by commas within the braces. Flags may be added or removed by
15719prefixing them with a '+' or '-' sign.
15720
15721Special variable "%o" may be used to propagate its flags to all other
15722variables on the same format string. This is particularly handy with quoted
Dragan Dosen835b9212016-02-12 13:23:03 +010015723("Q") and escaped ("E") string formats.
William Lallemand48940402012-01-30 16:47:22 +010015724
Willy Tarreauc8368452012-12-21 00:09:23 +010015725If a variable is named between square brackets ('[' .. ']') then it is used
Willy Tarreaube722a22014-06-13 16:31:59 +020015726as a sample expression rule (see section 7.3). This it useful to add some
Willy Tarreauc8368452012-12-21 00:09:23 +010015727less common information such as the client's SSL certificate's DN, or to log
15728the key that would be used to store an entry into a stick table.
15729
William Lallemand48940402012-01-30 16:47:22 +010015730Note: spaces must be escaped. A space character is considered as a separator.
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030015731In order to emit a verbatim '%', it must be preceded by another '%' resulting
Willy Tarreau06d97f92013-12-02 17:45:48 +010015732in '%%'. HAProxy will automatically merge consecutive separators.
William Lallemand48940402012-01-30 16:47:22 +010015733
Dragan Dosen835b9212016-02-12 13:23:03 +010015734Note: when using the RFC5424 syslog message format, the characters '"',
15735'\' and ']' inside PARAM-VALUE should be escaped with '\' as prefix (see
15736https://tools.ietf.org/html/rfc5424#section-6.3.3 for more details). In
15737such cases, the use of the flag "E" should be considered.
15738
William Lallemand48940402012-01-30 16:47:22 +010015739Flags are :
15740 * Q: quote a string
Jamie Gloudonaaa21002012-08-25 00:18:33 -040015741 * X: hexadecimal representation (IPs, Ports, %Ts, %rt, %pid)
Dragan Dosen835b9212016-02-12 13:23:03 +010015742 * E: escape characters '"', '\' and ']' in a string with '\' as prefix
15743 (intended purpose is for the RFC5424 structured-data log formats)
William Lallemand48940402012-01-30 16:47:22 +010015744
15745 Example:
15746
15747 log-format %T\ %t\ Some\ Text
15748 log-format %{+Q}o\ %t\ %s\ %{-Q}r
15749
Dragan Dosen835b9212016-02-12 13:23:03 +010015750 log-format-sd %{+Q,+E}o\ [exampleSDID@1234\ header=%[capture.req.hdr(0)]]
15751
William Lallemand48940402012-01-30 16:47:22 +010015752At the moment, the default HTTP format is defined this way :
15753
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015754 log-format "%ci:%cp [%tr] %ft %b/%s %TR/%Tw/%Tc/%Tr/%Ta %ST %B %CC \
15755 %CS %tsc %ac/%fc/%bc/%sc/%rc %sq/%bq %hr %hs %{+Q}r"
William Lallemand48940402012-01-30 16:47:22 +010015756
William Lallemandbddd4fd2012-02-27 11:23:10 +010015757the default CLF format is defined this way :
William Lallemand48940402012-01-30 16:47:22 +010015758
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015759 log-format "%{+Q}o %{-Q}ci - - [%trg] %r %ST %B \"\" \"\" %cp \
15760 %ms %ft %b %s %TR %Tw %Tc %Tr %Ta %tsc %ac %fc \
15761 %bc %sc %rc %sq %bq %CC %CS %hrl %hsl"
William Lallemand48940402012-01-30 16:47:22 +010015762
William Lallemandbddd4fd2012-02-27 11:23:10 +010015763and the default TCP format is defined this way :
15764
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015765 log-format "%ci:%cp [%t] %ft %b/%s %Tw/%Tc/%Tt %B %ts \
15766 %ac/%fc/%bc/%sc/%rc %sq/%bq"
William Lallemandbddd4fd2012-02-27 11:23:10 +010015767
William Lallemand48940402012-01-30 16:47:22 +010015768Please refer to the table below for currently defined variables :
15769
William Lallemandbddd4fd2012-02-27 11:23:10 +010015770 +---+------+-----------------------------------------------+-------------+
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015771 | R | var | field name (8.2.2 and 8.2.3 for description) | type |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015772 +---+------+-----------------------------------------------+-------------+
15773 | | %o | special variable, apply flags on all next var | |
15774 +---+------+-----------------------------------------------+-------------+
Willy Tarreau2beef582012-12-20 17:22:52 +010015775 | | %B | bytes_read (from server to client) | numeric |
15776 | H | %CC | captured_request_cookie | string |
15777 | H | %CS | captured_response_cookie | string |
William Lallemand5f232402012-04-05 18:02:55 +020015778 | | %H | hostname | string |
Andrew Hayworth0ebc55f2015-04-27 21:37:03 +000015779 | H | %HM | HTTP method (ex: POST) | string |
15780 | H | %HP | HTTP request URI without query string (path) | string |
Andrew Hayworthe63ac872015-07-31 16:14:16 +000015781 | H | %HQ | HTTP request URI query string (ex: ?bar=baz) | string |
Andrew Hayworth0ebc55f2015-04-27 21:37:03 +000015782 | H | %HU | HTTP request URI (ex: /foo?bar=baz) | string |
15783 | H | %HV | HTTP version (ex: HTTP/1.0) | string |
William Lallemanda73203e2012-03-12 12:48:57 +010015784 | | %ID | unique-id | string |
Willy Tarreau4bf99632014-06-13 12:21:40 +020015785 | | %ST | status_code | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020015786 | | %T | gmt_date_time | date |
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015787 | | %Ta | Active time of the request (from TR to end) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015788 | | %Tc | Tc | numeric |
Willy Tarreau27b639d2016-05-17 17:55:27 +020015789 | | %Td | Td = Tt - (Tq + Tw + Tc + Tr) | numeric |
Yuxans Yao4e25b012012-10-19 10:36:09 +080015790 | | %Tl | local_date_time | date |
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015791 | | %Th | connection handshake time (SSL, PROXY proto) | numeric |
15792 | H | %Ti | idle time before the HTTP request | numeric |
15793 | H | %Tq | Th + Ti + TR | numeric |
15794 | H | %TR | time to receive the full request from 1st byte| numeric |
15795 | H | %Tr | Tr (response time) | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020015796 | | %Ts | timestamp | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015797 | | %Tt | Tt | numeric |
15798 | | %Tw | Tw | numeric |
Willy Tarreau2beef582012-12-20 17:22:52 +010015799 | | %U | bytes_uploaded (from client to server) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015800 | | %ac | actconn | numeric |
15801 | | %b | backend_name | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010015802 | | %bc | beconn (backend concurrent connections) | numeric |
15803 | | %bi | backend_source_ip (connecting address) | IP |
15804 | | %bp | backend_source_port (connecting address) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015805 | | %bq | backend_queue | numeric |
Willy Tarreau2beef582012-12-20 17:22:52 +010015806 | | %ci | client_ip (accepted address) | IP |
15807 | | %cp | client_port (accepted address) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015808 | | %f | frontend_name | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010015809 | | %fc | feconn (frontend concurrent connections) | numeric |
15810 | | %fi | frontend_ip (accepting address) | IP |
15811 | | %fp | frontend_port (accepting address) | numeric |
Willy Tarreau773d65f2012-10-12 14:56:11 +020015812 | | %ft | frontend_name_transport ('~' suffix for SSL) | string |
Willy Tarreau7346acb2014-08-28 15:03:15 +020015813 | | %lc | frontend_log_counter | numeric |
Willy Tarreaud9ed3d22014-06-13 12:23:06 +020015814 | | %hr | captured_request_headers default style | string |
15815 | | %hrl | captured_request_headers CLF style | string list |
15816 | | %hs | captured_response_headers default style | string |
15817 | | %hsl | captured_response_headers CLF style | string list |
Willy Tarreau812c88e2015-08-09 10:56:35 +020015818 | | %ms | accept date milliseconds (left-padded with 0) | numeric |
William Lallemand5f232402012-04-05 18:02:55 +020015819 | | %pid | PID | numeric |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015820 | H | %r | http_request | string |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015821 | | %rc | retries | numeric |
Willy Tarreau1f0da242014-01-25 11:01:50 +010015822 | | %rt | request_counter (HTTP req or TCP session) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015823 | | %s | server_name | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010015824 | | %sc | srv_conn (server concurrent connections) | numeric |
15825 | | %si | server_IP (target address) | IP |
15826 | | %sp | server_port (target address) | numeric |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015827 | | %sq | srv_queue | numeric |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015828 | S | %sslc| ssl_ciphers (ex: AES-SHA) | string |
15829 | S | %sslv| ssl_version (ex: TLSv1) | string |
Willy Tarreau2beef582012-12-20 17:22:52 +010015830 | | %t | date_time (with millisecond resolution) | date |
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015831 | H | %tr | date_time of HTTP request | date |
15832 | H | %trg | gmt_date_time of start of HTTP request | date |
15833 | H | %trl | locla_date_time of start of HTTP request | date |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015834 | | %ts | termination_state | string |
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015835 | H | %tsc | termination_state with cookie status | string |
William Lallemandbddd4fd2012-02-27 11:23:10 +010015836 +---+------+-----------------------------------------------+-------------+
William Lallemand48940402012-01-30 16:47:22 +010015837
Willy Tarreauffc3fcd2012-10-12 20:17:54 +020015838 R = Restrictions : H = mode http only ; S = SSL only
William Lallemand48940402012-01-30 16:47:22 +010015839
Willy Tarreau5f51e1a2012-12-03 18:40:10 +010015840
158418.2.5. Error log format
15842-----------------------
15843
15844When an incoming connection fails due to an SSL handshake or an invalid PROXY
15845protocol header, haproxy will log the event using a shorter, fixed line format.
15846By default, logs are emitted at the LOG_INFO level, unless the option
15847"log-separate-errors" is set in the backend, in which case the LOG_ERR level
15848will be used. Connections on which no data are exchanged (eg: probes) are not
15849logged if the "dontlognull" option is set.
15850
15851The format looks like this :
15852
15853 >>> Dec 3 18:27:14 localhost \
15854 haproxy[6103]: 127.0.0.1:56059 [03/Dec/2012:17:35:10.380] frt/f1: \
15855 Connection error during SSL handshake
15856
15857 Field Format Extract from the example above
15858 1 process_name '[' pid ']:' haproxy[6103]:
15859 2 client_ip ':' client_port 127.0.0.1:56059
15860 3 '[' accept_date ']' [03/Dec/2012:17:35:10.380]
15861 4 frontend_name "/" bind_name ":" frt/f1:
15862 5 message Connection error during SSL handshake
15863
15864These fields just provide minimal information to help debugging connection
15865failures.
15866
15867
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200158688.3. Advanced logging options
15869-----------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015870
15871Some advanced logging options are often looked for but are not easy to find out
15872just by looking at the various options. Here is an entry point for the few
15873options which can enable better logging. Please refer to the keywords reference
15874for more information about their usage.
15875
15876
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200158778.3.1. Disabling logging of external tests
15878------------------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015879
15880It is quite common to have some monitoring tools perform health checks on
15881haproxy. Sometimes it will be a layer 3 load-balancer such as LVS or any
15882commercial load-balancer, and sometimes it will simply be a more complete
15883monitoring system such as Nagios. When the tests are very frequent, users often
15884ask how to disable logging for those checks. There are three possibilities :
15885
15886 - if connections come from everywhere and are just TCP probes, it is often
15887 desired to simply disable logging of connections without data exchange, by
15888 setting "option dontlognull" in the frontend. It also disables logging of
15889 port scans, which may or may not be desired.
15890
15891 - if the connection come from a known source network, use "monitor-net" to
15892 declare this network as monitoring only. Any host in this network will then
15893 only be able to perform health checks, and their requests will not be
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030015894 logged. This is generally appropriate to designate a list of equipment
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015895 such as other load-balancers.
15896
15897 - if the tests are performed on a known URI, use "monitor-uri" to declare
15898 this URI as dedicated to monitoring. Any host sending this request will
15899 only get the result of a health-check, and the request will not be logged.
15900
15901
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200159028.3.2. Logging before waiting for the session to terminate
15903----------------------------------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015904
15905The problem with logging at end of connection is that you have no clue about
15906what is happening during very long sessions, such as remote terminal sessions
15907or large file downloads. This problem can be worked around by specifying
15908"option logasap" in the frontend. Haproxy will then log as soon as possible,
15909just before data transfer begins. This means that in case of TCP, it will still
15910log the connection status to the server, and in case of HTTP, it will log just
15911after processing the server headers. In this case, the number of bytes reported
15912is the number of header bytes sent to the client. In order to avoid confusion
15913with normal logs, the total time field and the number of bytes are prefixed
15914with a '+' sign which means that real numbers are certainly larger.
15915
15916
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200159178.3.3. Raising log level upon errors
15918------------------------------------
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020015919
15920Sometimes it is more convenient to separate normal traffic from errors logs,
15921for instance in order to ease error monitoring from log files. When the option
15922"log-separate-errors" is used, connections which experience errors, timeouts,
15923retries, redispatches or HTTP status codes 5xx will see their syslog level
15924raised from "info" to "err". This will help a syslog daemon store the log in
15925a separate file. It is very important to keep the errors in the normal traffic
15926file too, so that log ordering is not altered. You should also be careful if
15927you already have configured your syslog daemon to store all logs higher than
15928"notice" in an "admin" file, because the "err" level is higher than "notice".
15929
15930
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200159318.3.4. Disabling logging of successful connections
15932--------------------------------------------------
Willy Tarreauc9bd0cc2009-05-10 11:57:02 +020015933
15934Although this may sound strange at first, some large sites have to deal with
15935multiple thousands of logs per second and are experiencing difficulties keeping
15936them intact for a long time or detecting errors within them. If the option
15937"dontlog-normal" is set on the frontend, all normal connections will not be
15938logged. In this regard, a normal connection is defined as one without any
15939error, timeout, retry nor redispatch. In HTTP, the status code is checked too,
15940and a response with a status 5xx is not considered normal and will be logged
15941too. Of course, doing is is really discouraged as it will remove most of the
15942useful information from the logs. Do this only if you have no other
15943alternative.
15944
15945
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200159468.4. Timing events
15947------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015948
15949Timers provide a great help in troubleshooting network problems. All values are
15950reported in milliseconds (ms). These timers should be used in conjunction with
15951the session termination flags. In TCP mode with "option tcplog" set on the
15952frontend, 3 control points are reported under the form "Tw/Tc/Tt", and in HTTP
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015953mode, 5 control points are reported under the form "TR/Tw/Tc/Tr/Ta". In
15954addition, three other measures are provided, "Th", "Ti", and "Tq".
15955
Guillaume de Lafondf27cddc2016-12-23 17:32:43 +010015956Timings events in HTTP mode:
15957
15958 first request 2nd request
15959 |<-------------------------------->|<-------------- ...
15960 t tr t tr ...
15961 ---|----|----|----|----|----|----|----|----|--
15962 : Th Ti TR Tw Tc Tr Td : Ti ...
15963 :<---- Tq ---->: :
15964 :<-------------- Tt -------------->:
15965 :<--------- Ta --------->:
15966
15967Timings events in TCP mode:
15968
15969 TCP session
15970 |<----------------->|
15971 t t
15972 ---|----|----|----|----|---
15973 | Th Tw Tc Td |
15974 |<------ Tt ------->|
15975
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015976 - Th: total time to accept tcp connection and execute handshakes for low level
15977 protocols. Currently, these protocoles are proxy-protocol and SSL. This may
15978 only happen once during the whole connection's lifetime. A large time here
15979 may indicate that the client only pre-established the connection without
15980 speaking, that it is experiencing network issues preventing it from
15981 completing a handshake in a reasonable time (eg: MTU issues), or that an
15982 SSL handshake was very expensive to compute.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010015983
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020015984 - Ti: is the idle time before the HTTP request (HTTP mode only). This timer
15985 counts between the end of the handshakes and the first byte of the HTTP
15986 request. When dealing with a second request in keep-alive mode, it starts
15987 to count after the end of the transmission the previous response. Some
15988 browsers pre-establish connections to a server in order to reduce the
15989 latency of a future request, and keep them pending until they need it. This
15990 delay will be reported as the idle time. A value of -1 indicates that
15991 nothing was received on the connection.
15992
15993 - TR: total time to get the client request (HTTP mode only). It's the time
15994 elapsed between the first bytes received and the moment the proxy received
15995 the empty line marking the end of the HTTP headers. The value "-1"
15996 indicates that the end of headers has never been seen. This happens when
15997 the client closes prematurely or times out. This time is usually very short
15998 since most requests fit in a single packet. A large time may indicate a
15999 request typed by hand during a test.
16000
16001 - Tq: total time to get the client request from the accept date or since the
16002 emission of the last byte of the previous response (HTTP mode only). It's
16003 exactly equalt to Th + Ti + TR unless any of them is -1, in which case it
16004 returns -1 as well. This timer used to be very useful before the arrival of
16005 HTTP keep-alive and browsers' pre-connect feature. It's recommended to drop
16006 it in favor of TR nowadays, as the idle time adds a lot of noise to the
16007 reports.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016008
16009 - Tw: total time spent in the queues waiting for a connection slot. It
16010 accounts for backend queue as well as the server queues, and depends on the
16011 queue size, and the time needed for the server to complete previous
16012 requests. The value "-1" means that the request was killed before reaching
16013 the queue, which is generally what happens with invalid or denied requests.
16014
16015 - Tc: total time to establish the TCP connection to the server. It's the time
16016 elapsed between the moment the proxy sent the connection request, and the
16017 moment it was acknowledged by the server, or between the TCP SYN packet and
16018 the matching SYN/ACK packet in return. The value "-1" means that the
16019 connection never established.
16020
16021 - Tr: server response time (HTTP mode only). It's the time elapsed between
16022 the moment the TCP connection was established to the server and the moment
16023 the server sent its complete response headers. It purely shows its request
16024 processing time, without the network overhead due to the data transmission.
16025 It is worth noting that when the client has data to send to the server, for
16026 instance during a POST request, the time already runs, and this can distort
16027 apparent response time. For this reason, it's generally wise not to trust
16028 too much this field for POST requests initiated from clients behind an
16029 untrusted network. A value of "-1" here means that the last the response
16030 header (empty line) was never seen, most likely because the server timeout
16031 stroke before the server managed to process the request.
16032
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016033 - Ta: total active time for the HTTP request, between the moment the proxy
16034 received the first byte of the request header and the emission of the last
16035 byte of the response body. The exception is when the "logasap" option is
16036 specified. In this case, it only equals (TR+Tw+Tc+Tr), and is prefixed with
16037 a '+' sign. From this field, we can deduce "Td", the data transmission time,
16038 by subtracting other timers when valid :
16039
16040 Td = Ta - (TR + Tw + Tc + Tr)
16041
16042 Timers with "-1" values have to be excluded from this equation. Note that
16043 "Ta" can never be negative.
16044
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016045 - Tt: total session duration time, between the moment the proxy accepted it
16046 and the moment both ends were closed. The exception is when the "logasap"
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016047 option is specified. In this case, it only equals (Th+Ti+TR+Tw+Tc+Tr), and
16048 is prefixed with a '+' sign. From this field, we can deduce "Td", the data
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030016049 transmission time, by subtracting other timers when valid :
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016050
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016051 Td = Tt - (Th + Ti + TR + Tw + Tc + Tr)
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016052
16053 Timers with "-1" values have to be excluded from this equation. In TCP
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016054 mode, "Ti", "Tq" and "Tr" have to be excluded too. Note that "Tt" can never
16055 be negative and that for HTTP, Tt is simply equal to (Th+Ti+Ta).
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016056
16057These timers provide precious indications on trouble causes. Since the TCP
16058protocol defines retransmit delays of 3, 6, 12... seconds, we know for sure
16059that timers close to multiples of 3s are nearly always related to lost packets
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016060due to network problems (wires, negotiation, congestion). Moreover, if "Ta" or
16061"Tt" is close to a timeout value specified in the configuration, it often means
16062that a session has been aborted on timeout.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016063
16064Most common cases :
16065
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016066 - If "Th" or "Ti" are close to 3000, a packet has probably been lost between
16067 the client and the proxy. This is very rare on local networks but might
16068 happen when clients are on far remote networks and send large requests. It
16069 may happen that values larger than usual appear here without any network
16070 cause. Sometimes, during an attack or just after a resource starvation has
16071 ended, haproxy may accept thousands of connections in a few milliseconds.
16072 The time spent accepting these connections will inevitably slightly delay
16073 processing of other connections, and it can happen that request times in the
16074 order of a few tens of milliseconds are measured after a few thousands of
16075 new connections have been accepted at once. Using one of the keep-alive
16076 modes may display larger idle times since "Ti" measures the time spent
Patrick Mezard105faca2010-06-12 17:02:46 +020016077 waiting for additional requests.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016078
16079 - If "Tc" is close to 3000, a packet has probably been lost between the
16080 server and the proxy during the server connection phase. This value should
16081 always be very low, such as 1 ms on local networks and less than a few tens
16082 of ms on remote networks.
16083
Willy Tarreau55165fe2009-05-10 12:02:55 +020016084 - If "Tr" is nearly always lower than 3000 except some rare values which seem
16085 to be the average majored by 3000, there are probably some packets lost
16086 between the proxy and the server.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016087
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016088 - If "Ta" is large even for small byte counts, it generally is because
16089 neither the client nor the server decides to close the connection while
16090 haproxy is running in tunnel mode and both have agreed on a keep-alive
16091 connection mode. In order to solve this issue, it will be needed to specify
16092 one of the HTTP options to manipulate keep-alive or close options on either
16093 the frontend or the backend. Having the smallest possible 'Ta' or 'Tt' is
16094 important when connection regulation is used with the "maxconn" option on
16095 the servers, since no new connection will be sent to the server until
16096 another one is released.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016097
16098Other noticeable HTTP log cases ('xx' means any value to be ignored) :
16099
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016100 TR/Tw/Tc/Tr/+Ta The "option logasap" is present on the frontend and the log
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016101 was emitted before the data phase. All the timers are valid
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016102 except "Ta" which is shorter than reality.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016103
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016104 -1/xx/xx/xx/Ta The client was not able to send a complete request in time
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016105 or it aborted too early. Check the session termination flags
16106 then "timeout http-request" and "timeout client" settings.
16107
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016108 TR/-1/xx/xx/Ta It was not possible to process the request, maybe because
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016109 servers were out of order, because the request was invalid
16110 or forbidden by ACL rules. Check the session termination
16111 flags.
16112
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016113 TR/Tw/-1/xx/Ta The connection could not establish on the server. Either it
16114 actively refused it or it timed out after Ta-(TR+Tw) ms.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016115 Check the session termination flags, then check the
16116 "timeout connect" setting. Note that the tarpit action might
16117 return similar-looking patterns, with "Tw" equal to the time
16118 the client connection was maintained open.
16119
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016120 TR/Tw/Tc/-1/Ta The server has accepted the connection but did not return
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030016121 a complete response in time, or it closed its connection
Thierry FOURNIER / OZON.IO4cac3592016-07-28 17:19:45 +020016122 unexpectedly after Ta-(TR+Tw+Tc) ms. Check the session
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016123 termination flags, then check the "timeout server" setting.
16124
16125
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200161268.5. Session state at disconnection
16127-----------------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016128
16129TCP and HTTP logs provide a session termination indicator in the
16130"termination_state" field, just before the number of active connections. It is
161312-characters long in TCP mode, and is extended to 4 characters in HTTP mode,
16132each of which has a special meaning :
16133
16134 - On the first character, a code reporting the first event which caused the
16135 session to terminate :
16136
16137 C : the TCP session was unexpectedly aborted by the client.
16138
16139 S : the TCP session was unexpectedly aborted by the server, or the
16140 server explicitly refused it.
16141
16142 P : the session was prematurely aborted by the proxy, because of a
16143 connection limit enforcement, because a DENY filter was matched,
16144 because of a security check which detected and blocked a dangerous
16145 error in server response which might have caused information leak
Willy Tarreau570f2212013-06-10 16:42:09 +020016146 (eg: cacheable cookie).
16147
16148 L : the session was locally processed by haproxy and was not passed to
16149 a server. This is what happens for stats and redirects.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016150
16151 R : a resource on the proxy has been exhausted (memory, sockets, source
16152 ports, ...). Usually, this appears during the connection phase, and
16153 system logs should contain a copy of the precise error. If this
16154 happens, it must be considered as a very serious anomaly which
16155 should be fixed as soon as possible by any means.
16156
16157 I : an internal error was identified by the proxy during a self-check.
16158 This should NEVER happen, and you are encouraged to report any log
16159 containing this, because this would almost certainly be a bug. It
16160 would be wise to preventively restart the process after such an
16161 event too, in case it would be caused by memory corruption.
16162
Simon Horman752dc4a2011-06-21 14:34:59 +090016163 D : the session was killed by haproxy because the server was detected
16164 as down and was configured to kill all connections when going down.
16165
Justin Karnegeseb2c24a2012-05-24 15:28:52 -070016166 U : the session was killed by haproxy on this backup server because an
16167 active server was detected as up and was configured to kill all
16168 backup connections when going up.
16169
Willy Tarreaua2a64e92011-09-07 23:01:56 +020016170 K : the session was actively killed by an admin operating on haproxy.
16171
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016172 c : the client-side timeout expired while waiting for the client to
16173 send or receive data.
16174
16175 s : the server-side timeout expired while waiting for the server to
16176 send or receive data.
16177
16178 - : normal session completion, both the client and the server closed
16179 with nothing left in the buffers.
16180
16181 - on the second character, the TCP or HTTP session state when it was closed :
16182
Willy Tarreauf7b30a92010-12-06 22:59:17 +010016183 R : the proxy was waiting for a complete, valid REQUEST from the client
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016184 (HTTP mode only). Nothing was sent to any server.
16185
16186 Q : the proxy was waiting in the QUEUE for a connection slot. This can
16187 only happen when servers have a 'maxconn' parameter set. It can
16188 also happen in the global queue after a redispatch consecutive to
16189 a failed attempt to connect to a dying server. If no redispatch is
16190 reported, then no connection attempt was made to any server.
16191
16192 C : the proxy was waiting for the CONNECTION to establish on the
16193 server. The server might at most have noticed a connection attempt.
16194
16195 H : the proxy was waiting for complete, valid response HEADERS from the
16196 server (HTTP only).
16197
16198 D : the session was in the DATA phase.
16199
16200 L : the proxy was still transmitting LAST data to the client while the
16201 server had already finished. This one is very rare as it can only
16202 happen when the client dies while receiving the last packets.
16203
16204 T : the request was tarpitted. It has been held open with the client
16205 during the whole "timeout tarpit" duration or until the client
16206 closed, both of which will be reported in the "Tw" timer.
16207
16208 - : normal session completion after end of data transfer.
16209
16210 - the third character tells whether the persistence cookie was provided by
16211 the client (only in HTTP mode) :
16212
16213 N : the client provided NO cookie. This is usually the case for new
16214 visitors, so counting the number of occurrences of this flag in the
16215 logs generally indicate a valid trend for the site frequentation.
16216
16217 I : the client provided an INVALID cookie matching no known server.
16218 This might be caused by a recent configuration change, mixed
Cyril Bontéa8e7bbc2010-04-25 22:29:29 +020016219 cookies between HTTP/HTTPS sites, persistence conditionally
16220 ignored, or an attack.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016221
16222 D : the client provided a cookie designating a server which was DOWN,
16223 so either "option persist" was used and the client was sent to
16224 this server, or it was not set and the client was redispatched to
16225 another server.
16226
Willy Tarreau996a92c2010-10-13 19:30:47 +020016227 V : the client provided a VALID cookie, and was sent to the associated
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016228 server.
16229
Willy Tarreau996a92c2010-10-13 19:30:47 +020016230 E : the client provided a valid cookie, but with a last date which was
16231 older than what is allowed by the "maxidle" cookie parameter, so
16232 the cookie is consider EXPIRED and is ignored. The request will be
16233 redispatched just as if there was no cookie.
16234
16235 O : the client provided a valid cookie, but with a first date which was
16236 older than what is allowed by the "maxlife" cookie parameter, so
16237 the cookie is consider too OLD and is ignored. The request will be
16238 redispatched just as if there was no cookie.
16239
Willy Tarreauc89ccb62012-04-05 21:18:22 +020016240 U : a cookie was present but was not used to select the server because
16241 some other server selection mechanism was used instead (typically a
16242 "use-server" rule).
16243
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016244 - : does not apply (no cookie set in configuration).
16245
16246 - the last character reports what operations were performed on the persistence
16247 cookie returned by the server (only in HTTP mode) :
16248
16249 N : NO cookie was provided by the server, and none was inserted either.
16250
16251 I : no cookie was provided by the server, and the proxy INSERTED one.
16252 Note that in "cookie insert" mode, if the server provides a cookie,
16253 it will still be overwritten and reported as "I" here.
16254
Willy Tarreau996a92c2010-10-13 19:30:47 +020016255 U : the proxy UPDATED the last date in the cookie that was presented by
16256 the client. This can only happen in insert mode with "maxidle". It
Jarno Huuskonen0e82b922014-04-12 18:22:19 +030016257 happens every time there is activity at a different date than the
Willy Tarreau996a92c2010-10-13 19:30:47 +020016258 date indicated in the cookie. If any other change happens, such as
16259 a redispatch, then the cookie will be marked as inserted instead.
16260
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016261 P : a cookie was PROVIDED by the server and transmitted as-is.
16262
16263 R : the cookie provided by the server was REWRITTEN by the proxy, which
16264 happens in "cookie rewrite" or "cookie prefix" modes.
16265
16266 D : the cookie provided by the server was DELETED by the proxy.
16267
16268 - : does not apply (no cookie set in configuration).
16269
Willy Tarreau996a92c2010-10-13 19:30:47 +020016270The combination of the two first flags gives a lot of information about what
16271was happening when the session terminated, and why it did terminate. It can be
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016272helpful to detect server saturation, network troubles, local system resource
16273starvation, attacks, etc...
16274
16275The most common termination flags combinations are indicated below. They are
16276alphabetically sorted, with the lowercase set just after the upper case for
16277easier finding and understanding.
16278
16279 Flags Reason
16280
16281 -- Normal termination.
16282
16283 CC The client aborted before the connection could be established to the
16284 server. This can happen when haproxy tries to connect to a recently
16285 dead (or unchecked) server, and the client aborts while haproxy is
16286 waiting for the server to respond or for "timeout connect" to expire.
16287
16288 CD The client unexpectedly aborted during data transfer. This can be
16289 caused by a browser crash, by an intermediate equipment between the
16290 client and haproxy which decided to actively break the connection,
16291 by network routing issues between the client and haproxy, or by a
16292 keep-alive session between the server and the client terminated first
16293 by the client.
Willy Tarreaud72758d2010-01-12 10:42:19 +010016294
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016295 cD The client did not send nor acknowledge any data for as long as the
16296 "timeout client" delay. This is often caused by network failures on
Cyril Bontédc4d9032012-04-08 21:57:39 +020016297 the client side, or the client simply leaving the net uncleanly.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016298
16299 CH The client aborted while waiting for the server to start responding.
16300 It might be the server taking too long to respond or the client
16301 clicking the 'Stop' button too fast.
16302
16303 cH The "timeout client" stroke while waiting for client data during a
16304 POST request. This is sometimes caused by too large TCP MSS values
16305 for PPPoE networks which cannot transport full-sized packets. It can
16306 also happen when client timeout is smaller than server timeout and
16307 the server takes too long to respond.
16308
16309 CQ The client aborted while its session was queued, waiting for a server
16310 with enough empty slots to accept it. It might be that either all the
16311 servers were saturated or that the assigned server was taking too
16312 long a time to respond.
16313
16314 CR The client aborted before sending a full HTTP request. Most likely
16315 the request was typed by hand using a telnet client, and aborted
16316 too early. The HTTP status code is likely a 400 here. Sometimes this
16317 might also be caused by an IDS killing the connection between haproxy
Willy Tarreau0f228a02015-05-01 15:37:53 +020016318 and the client. "option http-ignore-probes" can be used to ignore
16319 connections without any data transfer.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016320
16321 cR The "timeout http-request" stroke before the client sent a full HTTP
16322 request. This is sometimes caused by too large TCP MSS values on the
16323 client side for PPPoE networks which cannot transport full-sized
16324 packets, or by clients sending requests by hand and not typing fast
16325 enough, or forgetting to enter the empty line at the end of the
Willy Tarreau2705a612014-05-23 17:38:34 +020016326 request. The HTTP status code is likely a 408 here. Note: recently,
Willy Tarreau0f228a02015-05-01 15:37:53 +020016327 some browsers started to implement a "pre-connect" feature consisting
16328 in speculatively connecting to some recently visited web sites just
16329 in case the user would like to visit them. This results in many
16330 connections being established to web sites, which end up in 408
16331 Request Timeout if the timeout strikes first, or 400 Bad Request when
16332 the browser decides to close them first. These ones pollute the log
16333 and feed the error counters. Some versions of some browsers have even
16334 been reported to display the error code. It is possible to work
16335 around the undesirable effects of this behaviour by adding "option
16336 http-ignore-probes" in the frontend, resulting in connections with
16337 zero data transfer to be totally ignored. This will definitely hide
16338 the errors of people experiencing connectivity issues though.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016339
16340 CT The client aborted while its session was tarpitted. It is important to
16341 check if this happens on valid requests, in order to be sure that no
Willy Tarreau55165fe2009-05-10 12:02:55 +020016342 wrong tarpit rules have been written. If a lot of them happen, it
16343 might make sense to lower the "timeout tarpit" value to something
16344 closer to the average reported "Tw" timer, in order not to consume
16345 resources for just a few attackers.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016346
Willy Tarreau570f2212013-06-10 16:42:09 +020016347 LR The request was intercepted and locally handled by haproxy. Generally
16348 it means that this was a redirect or a stats request.
16349
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010016350 SC The server or an equipment between it and haproxy explicitly refused
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016351 the TCP connection (the proxy received a TCP RST or an ICMP message
16352 in return). Under some circumstances, it can also be the network
16353 stack telling the proxy that the server is unreachable (eg: no route,
16354 or no ARP response on local network). When this happens in HTTP mode,
16355 the status code is likely a 502 or 503 here.
16356
16357 sC The "timeout connect" stroke before a connection to the server could
16358 complete. When this happens in HTTP mode, the status code is likely a
16359 503 or 504 here.
16360
16361 SD The connection to the server died with an error during the data
16362 transfer. This usually means that haproxy has received an RST from
16363 the server or an ICMP message from an intermediate equipment while
16364 exchanging data with the server. This can be caused by a server crash
16365 or by a network issue on an intermediate equipment.
16366
16367 sD The server did not send nor acknowledge any data for as long as the
16368 "timeout server" setting during the data phase. This is often caused
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010016369 by too short timeouts on L4 equipments before the server (firewalls,
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016370 load-balancers, ...), as well as keep-alive sessions maintained
16371 between the client and the server expiring first on haproxy.
16372
16373 SH The server aborted before sending its full HTTP response headers, or
16374 it crashed while processing the request. Since a server aborting at
16375 this moment is very rare, it would be wise to inspect its logs to
16376 control whether it crashed and why. The logged request may indicate a
16377 small set of faulty requests, demonstrating bugs in the application.
16378 Sometimes this might also be caused by an IDS killing the connection
16379 between haproxy and the server.
16380
16381 sH The "timeout server" stroke before the server could return its
16382 response headers. This is the most common anomaly, indicating too
16383 long transactions, probably caused by server or database saturation.
16384 The immediate workaround consists in increasing the "timeout server"
16385 setting, but it is important to keep in mind that the user experience
16386 will suffer from these long response times. The only long term
16387 solution is to fix the application.
16388
16389 sQ The session spent too much time in queue and has been expired. See
16390 the "timeout queue" and "timeout connect" settings to find out how to
16391 fix this if it happens too often. If it often happens massively in
16392 short periods, it may indicate general problems on the affected
16393 servers due to I/O or database congestion, or saturation caused by
16394 external attacks.
16395
16396 PC The proxy refused to establish a connection to the server because the
16397 process' socket limit has been reached while attempting to connect.
Cyril Bontédc4d9032012-04-08 21:57:39 +020016398 The global "maxconn" parameter may be increased in the configuration
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016399 so that it does not happen anymore. This status is very rare and
16400 might happen when the global "ulimit-n" parameter is forced by hand.
16401
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010016402 PD The proxy blocked an incorrectly formatted chunked encoded message in
16403 a request or a response, after the server has emitted its headers. In
16404 most cases, this will indicate an invalid message from the server to
Willy Tarreauf3a3e132013-08-31 08:16:26 +020016405 the client. Haproxy supports chunk sizes of up to 2GB - 1 (2147483647
16406 bytes). Any larger size will be considered as an error.
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010016407
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016408 PH The proxy blocked the server's response, because it was invalid,
16409 incomplete, dangerous (cache control), or matched a security filter.
16410 In any case, an HTTP 502 error is sent to the client. One possible
16411 cause for this error is an invalid syntax in an HTTP header name
Willy Tarreaued2fd2d2010-12-29 11:23:27 +010016412 containing unauthorized characters. It is also possible but quite
16413 rare, that the proxy blocked a chunked-encoding request from the
16414 client due to an invalid syntax, before the server responded. In this
16415 case, an HTTP 400 error is sent to the client and reported in the
16416 logs.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016417
16418 PR The proxy blocked the client's HTTP request, either because of an
16419 invalid HTTP syntax, in which case it returned an HTTP 400 error to
16420 the client, or because a deny filter matched, in which case it
16421 returned an HTTP 403 error.
16422
16423 PT The proxy blocked the client's request and has tarpitted its
16424 connection before returning it a 500 server error. Nothing was sent
16425 to the server. The connection was maintained open for as long as
16426 reported by the "Tw" timer field.
16427
16428 RC A local resource has been exhausted (memory, sockets, source ports)
16429 preventing the connection to the server from establishing. The error
16430 logs will tell precisely what was missing. This is very rare and can
16431 only be solved by proper system tuning.
16432
Willy Tarreau996a92c2010-10-13 19:30:47 +020016433The combination of the two last flags gives a lot of information about how
16434persistence was handled by the client, the server and by haproxy. This is very
16435important to troubleshoot disconnections, when users complain they have to
16436re-authenticate. The commonly encountered flags are :
16437
16438 -- Persistence cookie is not enabled.
16439
16440 NN No cookie was provided by the client, none was inserted in the
16441 response. For instance, this can be in insert mode with "postonly"
16442 set on a GET request.
16443
16444 II A cookie designating an invalid server was provided by the client,
16445 a valid one was inserted in the response. This typically happens when
Jamie Gloudonaaa21002012-08-25 00:18:33 -040016446 a "server" entry is removed from the configuration, since its cookie
Willy Tarreau996a92c2010-10-13 19:30:47 +020016447 value can be presented by a client when no other server knows it.
16448
16449 NI No cookie was provided by the client, one was inserted in the
16450 response. This typically happens for first requests from every user
16451 in "insert" mode, which makes it an easy way to count real users.
16452
16453 VN A cookie was provided by the client, none was inserted in the
16454 response. This happens for most responses for which the client has
16455 already got a cookie.
16456
16457 VU A cookie was provided by the client, with a last visit date which is
16458 not completely up-to-date, so an updated cookie was provided in
16459 response. This can also happen if there was no date at all, or if
16460 there was a date but the "maxidle" parameter was not set, so that the
16461 cookie can be switched to unlimited time.
16462
16463 EI A cookie was provided by the client, with a last visit date which is
16464 too old for the "maxidle" parameter, so the cookie was ignored and a
16465 new cookie was inserted in the response.
16466
16467 OI A cookie was provided by the client, with a first visit date which is
16468 too old for the "maxlife" parameter, so the cookie was ignored and a
16469 new cookie was inserted in the response.
16470
16471 DI The server designated by the cookie was down, a new server was
16472 selected and a new cookie was emitted in the response.
16473
16474 VI The server designated by the cookie was not marked dead but could not
16475 be reached. A redispatch happened and selected another one, which was
16476 then advertised in the response.
16477
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016478
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200164798.6. Non-printable characters
16480-----------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016481
16482In order not to cause trouble to log analysis tools or terminals during log
16483consulting, non-printable characters are not sent as-is into log files, but are
16484converted to the two-digits hexadecimal representation of their ASCII code,
16485prefixed by the character '#'. The only characters that can be logged without
16486being escaped are comprised between 32 and 126 (inclusive). Obviously, the
16487escape character '#' itself is also encoded to avoid any ambiguity ("#23"). It
16488is the same for the character '"' which becomes "#22", as well as '{', '|' and
16489'}' when logging headers.
16490
16491Note that the space character (' ') is not encoded in headers, which can cause
16492issues for tools relying on space count to locate fields. A typical header
16493containing spaces is "User-Agent".
16494
16495Last, it has been observed that some syslog daemons such as syslog-ng escape
16496the quote ('"') with a backslash ('\'). The reverse operation can safely be
16497performed since no quote may appear anywhere else in the logs.
16498
16499
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200165008.7. Capturing HTTP cookies
16501---------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016502
16503Cookie capture simplifies the tracking a complete user session. This can be
16504achieved using the "capture cookie" statement in the frontend. Please refer to
Willy Tarreauc57f0e22009-05-10 13:12:33 +020016505section 4.2 for more details. Only one cookie can be captured, and the same
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016506cookie will simultaneously be checked in the request ("Cookie:" header) and in
16507the response ("Set-Cookie:" header). The respective values will be reported in
16508the HTTP logs at the "captured_request_cookie" and "captured_response_cookie"
Willy Tarreauc57f0e22009-05-10 13:12:33 +020016509locations (see section 8.2.3 about HTTP log format). When either cookie is
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016510not seen, a dash ('-') replaces the value. This way, it's easy to detect when a
16511user switches to a new session for example, because the server will reassign it
16512a new cookie. It is also possible to detect if a server unexpectedly sets a
16513wrong cookie to a client, leading to session crossing.
16514
16515 Examples :
16516 # capture the first cookie whose name starts with "ASPSESSION"
16517 capture cookie ASPSESSION len 32
16518
16519 # capture the first cookie whose name is exactly "vgnvisitor"
16520 capture cookie vgnvisitor= len 32
16521
16522
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200165238.8. Capturing HTTP headers
16524---------------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016525
16526Header captures are useful to track unique request identifiers set by an upper
16527proxy, virtual host names, user-agents, POST content-length, referrers, etc. In
16528the response, one can search for information about the response length, how the
16529server asked the cache to behave, or an object location during a redirection.
16530
16531Header captures are performed using the "capture request header" and "capture
16532response header" statements in the frontend. Please consult their definition in
Willy Tarreauc57f0e22009-05-10 13:12:33 +020016533section 4.2 for more details.
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016534
16535It is possible to include both request headers and response headers at the same
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010016536time. Non-existent headers are logged as empty strings, and if one header
16537appears more than once, only its last occurrence will be logged. Request headers
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016538are grouped within braces '{' and '}' in the same order as they were declared,
16539and delimited with a vertical bar '|' without any space. Response headers
16540follow the same representation, but are displayed after a space following the
16541request headers block. These blocks are displayed just before the HTTP request
16542in the logs.
16543
Willy Tarreaud9ed3d22014-06-13 12:23:06 +020016544As a special case, it is possible to specify an HTTP header capture in a TCP
16545frontend. The purpose is to enable logging of headers which will be parsed in
16546an HTTP backend if the request is then switched to this HTTP backend.
16547
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016548 Example :
16549 # This instance chains to the outgoing proxy
16550 listen proxy-out
16551 mode http
16552 option httplog
16553 option logasap
16554 log global
16555 server cache1 192.168.1.1:3128
16556
16557 # log the name of the virtual server
16558 capture request header Host len 20
16559
16560 # log the amount of data uploaded during a POST
16561 capture request header Content-Length len 10
16562
16563 # log the beginning of the referrer
16564 capture request header Referer len 20
16565
16566 # server name (useful for outgoing proxies only)
16567 capture response header Server len 20
16568
16569 # logging the content-length is useful with "option logasap"
16570 capture response header Content-Length len 10
16571
16572 # log the expected cache behaviour on the response
16573 capture response header Cache-Control len 8
16574
16575 # the Via header will report the next proxy's name
16576 capture response header Via len 20
16577
16578 # log the URL location during a redirection
16579 capture response header Location len 20
16580
16581 >>> Aug 9 20:26:09 localhost \
16582 haproxy[2022]: 127.0.0.1:34014 [09/Aug/2004:20:26:09] proxy-out \
16583 proxy-out/cache1 0/0/0/162/+162 200 +350 - - ---- 0/0/0/0/0 0/0 \
16584 {fr.adserver.yahoo.co||http://fr.f416.mail.} {|864|private||} \
16585 "GET http://fr.adserver.yahoo.com/"
16586
16587 >>> Aug 9 20:30:46 localhost \
16588 haproxy[2022]: 127.0.0.1:34020 [09/Aug/2004:20:30:46] proxy-out \
16589 proxy-out/cache1 0/0/0/182/+182 200 +279 - - ---- 0/0/0/0/0 0/0 \
16590 {w.ods.org||} {Formilux/0.1.8|3495|||} \
Willy Tarreaud72758d2010-01-12 10:42:19 +010016591 "GET http://trafic.1wt.eu/ HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016592
16593 >>> Aug 9 20:30:46 localhost \
16594 haproxy[2022]: 127.0.0.1:34028 [09/Aug/2004:20:30:46] proxy-out \
16595 proxy-out/cache1 0/0/2/126/+128 301 +223 - - ---- 0/0/0/0/0 0/0 \
16596 {www.sytadin.equipement.gouv.fr||http://trafic.1wt.eu/} \
16597 {Apache|230|||http://www.sytadin.} \
Willy Tarreaud72758d2010-01-12 10:42:19 +010016598 "GET http://www.sytadin.equipement.gouv.fr/ HTTP/1.1"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016599
16600
Willy Tarreauc57f0e22009-05-10 13:12:33 +0200166018.9. Examples of logs
16602---------------------
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016603
16604These are real-world examples of logs accompanied with an explanation. Some of
16605them have been made up by hand. The syslog part has been removed for better
16606reading. Their sole purpose is to explain how to decipher them.
16607
16608 >>> haproxy[674]: 127.0.0.1:33318 [15/Oct/2003:08:31:57.130] px-http \
16609 px-http/srv1 6559/0/7/147/6723 200 243 - - ---- 5/3/3/1/0 0/0 \
16610 "HEAD / HTTP/1.0"
16611
16612 => long request (6.5s) entered by hand through 'telnet'. The server replied
16613 in 147 ms, and the session ended normally ('----')
16614
16615 >>> haproxy[674]: 127.0.0.1:33319 [15/Oct/2003:08:31:57.149] px-http \
16616 px-http/srv1 6559/1230/7/147/6870 200 243 - - ---- 324/239/239/99/0 \
16617 0/9 "HEAD / HTTP/1.0"
16618
16619 => Idem, but the request was queued in the global queue behind 9 other
16620 requests, and waited there for 1230 ms.
16621
16622 >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.654] px-http \
16623 px-http/srv1 9/0/7/14/+30 200 +243 - - ---- 3/3/3/1/0 0/0 \
16624 "GET /image.iso HTTP/1.0"
16625
16626 => request for a long data transfer. The "logasap" option was specified, so
Krzysztof Piotr Oledzkif8645332009-12-13 21:55:50 +010016627 the log was produced just before transferring data. The server replied in
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016628 14 ms, 243 bytes of headers were sent to the client, and total time from
16629 accept to first data byte is 30 ms.
16630
16631 >>> haproxy[674]: 127.0.0.1:33320 [15/Oct/2003:08:32:17.925] px-http \
16632 px-http/srv1 9/0/7/14/30 502 243 - - PH-- 3/2/2/0/0 0/0 \
16633 "GET /cgi-bin/bug.cgi? HTTP/1.0"
16634
16635 => the proxy blocked a server response either because of an "rspdeny" or
16636 "rspideny" filter, or because the response was improperly formatted and
Willy Tarreau3c92c5f2011-08-28 09:45:47 +020016637 not HTTP-compliant, or because it blocked sensitive information which
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016638 risked being cached. In this case, the response is replaced with a "502
16639 bad gateway". The flags ("PH--") tell us that it was haproxy who decided
16640 to return the 502 and not the server.
16641
16642 >>> haproxy[18113]: 127.0.0.1:34548 [15/Oct/2003:15:18:55.798] px-http \
Willy Tarreaud72758d2010-01-12 10:42:19 +010016643 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 +010016644
16645 => the client never completed its request and aborted itself ("C---") after
16646 8.5s, while the proxy was waiting for the request headers ("-R--").
16647 Nothing was sent to any server.
16648
16649 >>> haproxy[18113]: 127.0.0.1:34549 [15/Oct/2003:15:19:06.103] px-http \
16650 px-http/<NOSRV> -1/-1/-1/-1/50001 408 0 - - cR-- 2/2/2/0/0 0/0 ""
16651
16652 => The client never completed its request, which was aborted by the
16653 time-out ("c---") after 50s, while the proxy was waiting for the request
16654 headers ("-R--"). Nothing was sent to any server, but the proxy could
16655 send a 408 return code to the client.
16656
16657 >>> haproxy[18989]: 127.0.0.1:34550 [15/Oct/2003:15:24:28.312] px-tcp \
16658 px-tcp/srv1 0/0/5007 0 cD 0/0/0/0/0 0/0
16659
16660 => This log was produced with "option tcplog". The client timed out after
16661 5 seconds ("c----").
16662
16663 >>> haproxy[18989]: 10.0.0.1:34552 [15/Oct/2003:15:26:31.462] px-http \
16664 px-http/srv1 3183/-1/-1/-1/11215 503 0 - - SC-- 205/202/202/115/3 \
Willy Tarreaud72758d2010-01-12 10:42:19 +010016665 0/0 "HEAD / HTTP/1.0"
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016666
16667 => The request took 3s to complete (probably a network problem), and the
Willy Tarreauc57f0e22009-05-10 13:12:33 +020016668 connection to the server failed ('SC--') after 4 attempts of 2 seconds
Willy Tarreaucc6c8912009-02-22 10:53:55 +010016669 (config says 'retries 3'), and no redispatch (otherwise we would have
16670 seen "/+3"). Status code 503 was returned to the client. There were 115
16671 connections on this server, 202 connections on this proxy, and 205 on
16672 the global process. It is possible that the server refused the
16673 connection because of too many already established.
Willy Tarreau844e3c52008-01-11 16:28:18 +010016674
Willy Tarreau52b2d222011-09-07 23:48:48 +020016675
Christopher Fauletc3fe5332016-04-07 15:30:10 +0200166769. Supported filters
16677--------------------
16678
16679Here are listed officially supported filters with the list of parameters they
16680accept. Depending on compile options, some of these filters might be
16681unavailable. The list of available filters is reported in haproxy -vv.
16682
16683See also : "filter"
16684
166859.1. Trace
16686----------
16687
Christopher Faulet31bfe1f2016-12-09 17:42:38 +010016688filter trace [name <name>] [random-parsing] [random-forwarding] [hexdump]
Christopher Fauletc3fe5332016-04-07 15:30:10 +020016689
16690 Arguments:
16691 <name> is an arbitrary name that will be reported in
16692 messages. If no name is provided, "TRACE" is used.
16693
16694 <random-parsing> enables the random parsing of data exchanged between
16695 the client and the server. By default, this filter
16696 parses all available data. With this parameter, it
16697 only parses a random amount of the available data.
16698
16699 <random-forwarding> enables the random forwading of parsed data. By
16700 default, this filter forwards all previously parsed
16701 data. With this parameter, it only forwards a random
16702 amount of the parsed data.
16703
Christopher Faulet31bfe1f2016-12-09 17:42:38 +010016704 <hexump> dumps all forwarded data to the server and the client.
16705
Christopher Fauletc3fe5332016-04-07 15:30:10 +020016706This filter can be used as a base to develop new filters. It defines all
16707callbacks and print a message on the standard error stream (stderr) with useful
16708information for all of them. It may be useful to debug the activity of other
16709filters or, quite simply, HAProxy's activity.
16710
16711Using <random-parsing> and/or <random-forwarding> parameters is a good way to
16712tests the behavior of a filter that parses data exchanged between a client and
16713a server by adding some latencies in the processing.
16714
16715
167169.2. HTTP compression
16717---------------------
16718
16719filter compression
16720
16721The HTTP compression has been moved in a filter in HAProxy 1.7. "compression"
16722keyword must still be used to enable and configure the HTTP compression. And
16723when no other filter is used, it is enough. But it is mandatory to explicitly
16724use a filter line to enable the HTTP compression when two or more filters are
16725used for the same listener/frontend/backend. This is important to know the
16726filters evaluation order.
16727
16728See also : "compression"
16729
16730
Christopher Fauletf7e4e7e2016-10-27 22:29:49 +0200167319.3. Stream Processing Offload Engine (SPOE)
16732--------------------------------------------
16733
16734filter spoe [engine <name>] config <file>
16735
16736 Arguments :
16737
16738 <name> is the engine name that will be used to find the right scope in
16739 the configuration file. If not provided, all the file will be
16740 parsed.
16741
16742 <file> is the path of the engine configuration file. This file can
16743 contain configuration of several engines. In this case, each
16744 part must be placed in its own scope.
16745
16746The Stream Processing Offload Engine (SPOE) is a filter communicating with
16747external components. It allows the offload of some specifics processing on the
16748streams in tierce applications. These external components and information
16749exchanged with them are configured in dedicated files, for the main part. It
16750also requires dedicated backends, defined in HAProxy configuration.
16751
16752SPOE communicates with external components using an in-house binary protocol,
16753the Stream Processing Offload Protocol (SPOP).
16754
Tim Düsterhus4896c442016-11-29 02:15:19 +010016755For all information about the SPOE configuration and the SPOP specification, see
Christopher Fauletf7e4e7e2016-10-27 22:29:49 +020016756"doc/SPOE.txt".
16757
16758Important note:
16759 The SPOE filter is highly experimental for now and was not heavily
16760 tested. It is really not production ready. So use it carefully.
16761
Willy Tarreau0ba27502007-12-24 16:55:16 +010016762/*
16763 * Local variables:
16764 * fill-column: 79
16765 * End:
16766 */